Хранилищезначения конструктор не найден

Обновлено: 28.03.2024

"Пишу конфу для учета сотовых в СЦ,столкнулся с проблемой вывода картинки изделия на форме справочника воспользовался синтаксис помошником и взял код

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл с фотографией";
Диалог.ПолноеИмяФайла = """";
Диалог.ПредварительныйПросмотр = Истина;
Диалог.Фильтр =
"Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpg;*.tif;*.jpg;*.jpg;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpg;*.tif;*.jpg;*.jpg;*.ico;*.wmf;*.emf|"
+ "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|"
+ "Формат JPEG (*.jpg;*.jpg)|*.jpg;*.jpg|"
+ "Формат TIFF (*.tif)|*.tif|"
+ "Формат GIF (*.jpg)|*.jpg|"
+ "Формат PNG (*.jpg)|*.jpg|"
+ "Формат icon (*.ico)|*.ico|"
+ "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|"; // картинки

Если Диалог.Выбрать() Тогда
ВыбранноеФото = Новый Картинка(Диалог.ПолноеИмяФайла,Ложь);
ЭлементыФормы.ПолеИзображения.Картинка = ВыбранноеФото;
Иначе
Отказ = Истина;
Возврат;
КонецЕсли;

Картинка отображается но после записи не сохраняется,может кто подскажет что делать?"

Не знаю как в 8.2, а в 8.1 было 2 варианта:
1. Двинуть картинку в папку на сервер и дать её уникальное имя. Путь сохранить в справочнике и выводить использую эти данные.
2. Через ПолучитьДвоичныеДанные и ХранилищеЗначения сохранить в реквизит справочника. Для вывода использовать обратную процедуру

А если этих картинок будет много то как быть?Возможен такой вариант как в семерке,сейчас точно не помню как пишется но что-то вроде так(каталогИБ\*.jpg\+код+)!

Вопрос не ясен.
Картинку вы уже выбрали. Проблема была в том, что она не сохраняется. Как сохранить - я написал. А что вы пытались сказать - не ясно.

Допустим,я выбираю из справочника уже сохраненную модель телефона а в ПолеКартинка появится не та картинка что я сохранил, как конфа будет выбирать именно эту картинку? ведь при сохранении справочника сохраняется код,наименование и родитель!

> Допустим,я выбираю из справочника уже сохраненную модель телефона а в ПолеКартинка появится не та картинка что я сохранил, как конфа будет выбирать именно эту картинку?
По пути из реквизита или из реквизита восстановив из Хранилища
> ведь при сохранении справочника сохраняется код,наименование и родитель!
А реквизиты по вашему не сохраняются.

"ерем РаботаСФайлами;
Процедура ОсновноеИзображениеНажатие(Элемент)
// Вставить содержимое обработчика.
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл с фотографией";
Диалог.ПолноеИмяФайла = """";
Диалог.ПредварительныйПросмотр = Истина;
Диалог.Фильтр =
"Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpg;*.tif;*.jpg;*.jpg;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpg;*.tif;*.jpg;*.jpg;*.ico;*.wmf;*.emf|"
+ "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|"
+ "Формат JPEG (*.jpg;*.jpg)|*.jpg;*.jpg|"
+ "Формат TIFF (*.tif)|*.tif|"
+ "Формат GIF (*.jpg)|*.jpg|"
+ "Формат PNG (*.jpg)|*.jpg|"
+ "Формат icon (*.ico)|*.ico|"
+ "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|"; // картинки

Если Диалог.Выбрать() Тогда
ВыбранноеФото = Новый Картинка(Диалог.ПолноеИмяФайла,Ложь);
ЭлементыФормы.ОсновноеИзображение.Картинка = ВыбранноеФото;
Иначе
Отказ = Истина;
Возврат;
КонецЕсли;



Хранилище = Новый ХранилищеЗначения(ОсновноеИзображение);

// сохранение значения типа ХранилищеЗначения в базе данных
НовНоменклатура = Справочники.Модель.СоздатьЭлемент();
НовНоменклатура.Наименование = "Диван """"Маргарита""""";
// реквизит Изображение имеет тип ХранилищеЗначения
НовНоменклатура.ОсновноеИзображение = ОсновноеИзображение;
НовНоменклатура.Записать();
// выгрузка значения типа ДвоичныеДанные из хранилища значений в файл
ИмяФайла = "C:\Мои документы\Картинка2.bmp";
НовНоменклатура.ОсновноеИзображение.Получить().Записать(ИмяФайла);

КонецПроцедуры


Как из всего это вызвать картинку в поле изображения я не знаю или делаю что-то не то подскажите уже задолбало"

": Значение не является значением объектного типа (Изображение)
Картинка = РегистрСведенийМенеджерЗаписи.Изображение.Получить();
Как это понять?"

Работаю с форматированным документом на форме обработке. Для сохранения изменений в нем, прочитала, что надо использовать реквизит с типом "Хранилище значений". Но я такого типа - не нахожу.

Я правильно понял задачу: в базе есть нечто, записанное в виде "ХранилищеЗначения", нужно создать обработку, которая может редактировать это нечто и сохранять изменения в базе?

Есть обработка, на форме которой надо вводить текст. После переоткрытия обработки, если были изменения в тексте, то они должны сохраняться. Для этих целей, использую реквизит с типом "ФорматированныйДокумент". Чтобы изменения в этом реквизите сохранялись, надо использовать реквизит с типом "ХранилищеЗначений", который я обнаружить не могу. Поэтому написала на форум, с просьбой помочь.

Как уже написал Lexey_, обработки ничего в базе не хранят. Определись где именно в базе будет храниться этот текст. Создай на форме реквизит типа ФорматированныйДокумент. При создании/открытии формы считывай в этот реквизит содержимое ХранилищяЗначения из базы. При закрытии формы (или командой) записывай реквизит формы в ХранилищеЗначения базы. Как считать и записать ты сама указала в .

Ну сделай форму и напиши где-нить в ПриСозданииНаСервере МоеХЗ = Новый ХранилищеЗначений; То, что он недоступен в данных формы, означает лишь, что если, скажем, у тебя есть реквизит формы, скажем, типа ДанныеФормыСтруктура, в котором, скажем, лежит объект обработки, у которой, скажем, есть реквизит типа ХЗ, то ты не сможешь сделать так:

упс, а про конструктор-то я прогнал, он в тонком клиенте не работает. но из реквизита объекта можно достать. ну ок, я так, буквоедствую

Из всего, что здесь написали, я поняла, что на форме обработки (даже встроенной в конфигурацию, а у меня она именно встроенная), нельзя создать реквизит с типом "ХранилищеЗначения". Тогда возникают вопросы: 1. Как мне сохранять изменения, введенные пользователем на форме обработки в реквизите "ФорматированныйДокумент"? 2. Может быть, создать новую константу, с типом "ХранилищеЗначения", куда будут записываться изменения и считываться?

Реквизит _формы_ в принципе нельзя сделать типа ХЗ. Только произвольный, куда можно пихнуть ХЗ. Реквизит _обработки_ тоже нельзя сделать типа ХЗ. А смысл, если обработка не хранит данные в базе? Если изменения в форматированном доке нужно для каждого пользователя отдельно сохранять, удобно использовать ХранилищеОбщихНастроек.

ты прочитала ? 1. преобразуешь свой форматированный документ в двоичные данные сперва. У тебя обработка, 2. хранить данные она не может, тебе нужно использовать тогда спецхранилище - можно справочник, можно регистр сведений с реквизитом или измерением типа ХЗ. 3. Записываешь эти двоичные данные в 2.

+ Исправила процедуру, ошибку перестал выдавать, но сохранение отредактированного текста не происходит:

а если у тебя будут разные форматированные доки или будет меняться в зависимости от условий они, тогда твоя константа не подойдет

Документ будет один и тот же, только будет меняться текст рассылки, который я и пытаюсь сохранять в ХЗ, но пока безуспешно.

а какую логику рассылки ты хочешь реализовать? я что-то подумал, что документ может меняться от условий)

Есть обработка по рассылке табелей, на форме которой задаются условия (месяц и прочее), а также текст, который получатели табелей увидят в письме при получении табеля. Так вот этот текст письма ежемесячно меняется, поэтому надо чтобы пользователи сами редактировали текст.

Этот текст письма, я и запихнула на форму в реквизит "ФорматированныйДокумент" - тип ФорматированныйДокумент.

Нет, это обработка формирует табеля в формате pdf в определенном каталоге, а затем рассылает их руководителям подразделений.

Неважно, что формируем и в каком формате. Речь идет о тексте, который получают вместе с письмом (например: "Уважаемый руководитель, добрый день!"). Именно этот текст письма, я и запихнула на форму обработки в реквизит "ФорматированныйДокумент" - тип ФорматированныйДокумент, чтобы была возможность написать вместо "Уважаемый руководитель, добрый ДЕНЬ!" - "Уважаемый руководитель, добрый ВЕЧЕР!". И если потом повторно открыть обработку, то будет сохранено последнее редактирование, т.е. будет на форме обработки "Уважаемый руководитель, добрый ВЕЧЕР!"

В пользовательском режиме наберите любой текст на форме обработки, затем закройте и снова откройте обработку. Текст сохранился?

Работа с реквизитом типа ХранилищеЗначения имеет определенные ограничения. Как известно такой реквизит нельзя отобразить на управляемой форме ни в основной конфигурации, ни в расширении. Тренер предлагает воспользоваться базовым приемом разработки через временное хранилище.

Вопрос

Здравствуйте! В расширении создал справочник в новом справочнике добавил реквизит с типом ХранилищеЗначений. Платформа почему-то не видит этот реквизит. Если меняю тип данных, к примеру, на Число, то реквизит становиться видимым. В расширении на форме нельзя использовать реквизиты с типом данных ХранилищеЗначений?

Ответ

Добрый день! Вы имеете в виду, что реквизит с типом ХранилищеЗначения не отображается на форме? Тогда это правильно, аналогичное поведение будет и в основной конфигурации без использования расширения. Платформа в конструкторе формы показывает, что такой реквизит нельзя отобразить на форме:

ХранилищеЗначения

Дело в том, что в таком реквизите могут храниться данные огромного размера, а управляемая форма существует и на сервере, и на клиенте. Данные большого размера из соображений производительности нет смысла передавать при клиент-серверном взаимодействии. Поэтому нужно искать обходные пути. Например, можно воспользоваться временным хранилищем. Такой прием используется при отображении на форме картинки, хранящейся в базе.

Комментарий слушателя

Система выдает ошибку, что реквизит не найден.

Ответ

Обратите внимание, что в управляемой форме реквизит Объект имеет тип ДанныеФормыСтруктура, а не СправочникОбъект. Поэтому в нем не будет вложенного реквизита с типом ХранилищеЗначения. Именно об этом сообщает платформа:

ХранилищеЗначения

Значит, чтобы добраться до хранилища значения, нужно получить настоящий объект от такого “урезанного” типа данных:

Тип Хранилище значения может быть назначен реквизиту справочника, документа, ресурсу регистра сведений и т.д.

Восьмерка поддерживает сжатие данных, помещаемых в хранилище:

Если это были ДвоичныеДанные, то их можно восстановить из хранилища значения методом Получить и записать в файл методом Записать().

Чтобы очистить поле типа Хранилище значения, нужно присвоить ему Неопределено:
Код 1C v 8.х

Если в Хранилище значений содержались какие-то ссылки, то они не будут контролироваться при контроле ссылочной целостности (операция Удаление помеченных объектов или метод НайтиПоСсылкам).

К сожалению, 1С не содержит встроенных методов для проверки того, заполнено хранилище или нет.
Такой вариант не работает:
Код 1C v 8.х

Работает только такой вариант:
Код 1C v 8.х

Но он требует затрат времени на извлечение данных из хранилища.
Поэтому, если это критично, нужно заводить еще один флаг, который указывает, содержит ли хранилище значение.

Распечатать

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени PostgreSQL: установка, настройка, обслуживание 11
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц Посмотреть все результаты поиска похожих

Еще в этой же категории

Работа с изображениями (картинками) в интерфейсе Такси 12
Рассмотрим алгоритм работы с файлами и картинками в новом интерфейсе 1С:Предприятие 8.3 "Такси". Во-первых, почему я решил написать эту статью: Новая концепция 1С - отказ от модальных окон, следовательно все методы и объекты, которые порождали о Загрузка картинок в базу 1С (сохранение в хранилище значений) 8
В теме форма: v8: Получение данных из ХралищаЗначений Bell в управляемом интерфейсе пробует сохранить выбранные картинки в базу 1С, но возникли сложности с сохранением в хранилище значений. как пример Bell приложил CF файл с мини конфигурацией, Как очистить ХранилищеЗначение в Управляемой форме 1
НаСервере Процедура УдалитьДанныеХЗНаСервере() ЭлементСправочника = РеквизитФормыВЗначение("Объект"); ЭлементСправочника.ХранилищеЗначения = Новый ХранилищеЗначения(Неопределено); ЭлементСправочника.Записать(); ЗначениеВРеквизитФормы(ЭлементСправо Посмотреть все в категории Работа с Хранилищем Значений

Тип Хранилище значения может быть назначен реквизиту справочника, документа, ресурсу регистра сведений и т.д.

Восьмерка поддерживает сжатие данных, помещаемых в хранилище:

Если это были ДвоичныеДанные, то их можно восстановить из хранилища значения методом Получить и записать в файл методом Записать().

Чтобы очистить поле типа Хранилище значения, нужно присвоить ему Неопределено:
Код 1C v 8.х

Если в Хранилище значений содержались какие-то ссылки, то они не будут контролироваться при контроле ссылочной целостности (операция Удаление помеченных объектов или метод НайтиПоСсылкам).

К сожалению, 1С не содержит встроенных методов для проверки того, заполнено хранилище или нет.
Такой вариант не работает:
Код 1C v 8.х

Работает только такой вариант:
Код 1C v 8.х

Но он требует затрат времени на извлечение данных из хранилища.
Поэтому, если это критично, нужно заводить еще один флаг, который указывает, содержит ли хранилище значение.

Распечатать

Похожие FAQ

Еще в этой же категории

Работа с изображениями (картинками) в интерфейсе Такси 12
Рассмотрим алгоритм работы с файлами и картинками в новом интерфейсе 1С:Предприятие 8.3 "Такси". Во-первых, почему я решил написать эту статью: Новая концепция 1С - отказ от модальных окон, следовательно все методы и объекты, которые порождали о Загрузка картинок в базу 1С (сохранение в хранилище значений) 8
В теме форма: v8: Получение данных из ХралищаЗначений Bell в управляемом интерфейсе пробует сохранить выбранные картинки в базу 1С, но возникли сложности с сохранением в хранилище значений. как пример Bell приложил CF файл с мини конфигурацией, Выбрать файл и записать в реквизит типа Хранилище значений 2
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = " Выберите файл" ; Диалог.ПолноеИмяФайла = " " ; Фильтр = " DOC (*.doc)|*.doc|DOCX (*.docx)|*.docx" ; Диалог.Фильтр = Фильтр; //Диалог.МножественныйВыбор Как очистить значение, имеющее тип «Хранилище значения»? 1
РеквизитХранилище = Неопределено; Сохранить файл на диске полученный из реквизита типа хранилище значения 1
// Параметры // Хранилище – ХранилищеЗначения, которое содержит объект типа // ДвоичныеДанные с файлом для записи на диск. // ИмяФайла – Строка, содержащая полное имя файла. // ТолькоЧтение – Булево, признак установки Посмотреть все в категории Работа с Хранилищем Значений

Читайте также: