Не отображается загруженное изображение на форме справочника
Создаю элемент справочника. При открытии формы, жму на кнопку загрузить логотип. Выбираю файл, он появляется на форме.
Жму записать, закрыть. Но при открытии, на форме нет изображения. Хотя было. Я не понимаю в чем не точность и в чем не дочет. Подскажите пожалуйста.
//
&НаКлиенте
Процедура ЗагрузитьЛоготип(Команда)
ИмяФайла = «»;
ПутьФайла = «»;
ВыбранноеИмяФайла = «»;
Если ПоместитьФайл(ПутьФайла, ИмяФайла, ВыбранноеИмяФайла) = Истина Тогда
//
Ф = Новый Файл(ВыбранноеИмяФайла);
НаименованиеФайлаЛоготипа = Ф.ИмяБезРасширения;
Логотип = ПутьФайла;
УстановитьКартинку();
КонецЕсли;
КонецПроцедуры
//
&НаСервере
Процедура УстановитьКартинку()
Объект.Наименование = НаименованиеФайлаЛоготипа;
Записать();
ОбъектСправочникФайлы = Объект.Ссылка.ПолучитьОбъект();
ОбъектСправочникФайлы.Файл = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Логотип));
Логотип = ПоместитьВоВременноеХранилище(ОбъектСправочникФайлы.Файл.Получить());
КонецПроцедуры
//
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Логотип = ПолучитьНавигационнуюСсылку(Объект.Ссылка, «Файл»);
Элементы.Логотип.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецЕсли;
КонецПроцедуры
//
вот например, что при открытии идет на форму, когда отображается изображение
вот то что уже не отображается при открытии, все в порядке, но почему то у новых элементов, ничего не выводится на форме при открытии, что может быть?
Решение задач по управляемым формам – тема № 14:
Как реализовать отображение картинок на форме и хранение их в базе
Работа с графическими изображениями повышает наглядность и удобство работы с программой. Поэтому в платформе «1С:Предприятие» реализована работа с изображениями.
Для удобства пользователей в базе можно хранить изображения различных объектов. Это могут быть фотографии товаров, сканы документов, копии документов физических лиц и так далее. Также сохраненные изображения можно отображать на формах документов, справочников и других объектов.
Кроме того, в современных типовых конфигурациях фирмы «1С» есть возможность выбора места хранения прикрепленных изображений – в самой информационной базе или в отдельном каталоге на жестком диске. Это связано с тем, что графические изображения могут занимать достаточно много места, следовательно, размер информационной базы может сильно увеличиться.
Однако приемы работы с изображениями не меняются в зависимости от способа хранения этих изображений. Далее рассмотрим пример задачи, который может встретиться на экзамене:
Необходимо обеспечить возможность прикреплять изображение к элементу справочника Номенклатура. Изображения следует хранить в информационной базе. Прикрепленное изображение номенклатуры должно отображаться на форме элемента.
На форме элемента справочника «Номенклатура» разместить кнопку «Загрузить картинку». При нажатии на эту кнопку пользователь выбирает файл на диске, который будет прикреплен к карточке номенклатуры:
Рисунок 1 – Отображение картинки на форме номенклатуры
Как организовать хранение изображений в базе
Для хранения произвольных данных в платформе «1С:Предприятие» предназначен специальный тип ХранилищеЗначений. Этот тип позволяет хранить в информационной базе любые двоичные данные – изображения, электронные таблицы, PDF-файлы и так далее.
Важно, что поля такого типа хранятся непосредственно в информационной базе. Значит, они будут сохранены в файле с расширением dt при создании выгрузки базы, а также в резервной копии, созданной средствами СУБД. Дополнительное резервное копирование файлов с изображениями не потребуется.
Для решения поставленной задачи организуем хранение прикрепленных изображений непосредственно в справочнике Номенклатура. Для этого создадим в справочнике реквизит Изображение (тип – ХранилищеЗначения):
Рисунок 2 – Реквизит справочника «Номенклатура» для хранение картинки
Как отобразить изображение на форме
Реквизит с типом ХранилищеЗначения нельзя отобразить на управляемой форме, поэтому воспользуемся временным хранилищем для размещения двоичных данных картинки:
Рисунок 3 – Использование временного хранилища для отображения картинки на форме
Двоичные данные изображения поместим во временное хранилище. Адрес этого временного хранилища сохраним в строковом реквизите на форме. Добавим на форму поле с видом Поле картинки. В свойстве Путь к данным этого элемента управления укажем строковый реквизит, где хранится адрес временного хранилища. При таких настройках платформа сможет отобразить на форме изображение, расположенное во временном хранилище.
Последовательно произведем описанные выше действия.
Как настроить форму для отображения на ней картинки
Создадим на форме элемента справочника Номенклатура реквизит АдресКартинки с типом Строка:
Рисунок 4 – Создание реквизита формы «Адрес картинки»
Перенесем созданный реквизит на форму:
Рисунок 5 – Создание элемента формы «Адрес картинки»
Для поля АдресКартинки установим свойство Вид в значение «Поле картинки»:
Рисунок 6 – Установка значения свойства Вид для поля «АдресКартинки»
Создадим команду формы ЗагрузитьКартинку:
Рисунок 7 – Команда формы «Загрузить картинку»
Перенесем команду на форму:
Рисунок 8 – Размещение команды «Загрузить картинку» на форме
Реализуем обработчик команды. При нажатии на кнопку «Загрузить картинку» отобразим диалог выбора файла с картинкой. Выбранное пользователем изображение поместим во временное хранилище.
В свойствах конфигурации режим модальности не используется:
Рисунок 9 – Свойство конфигурации «Режим использования модальности»
Поэтому для помещения файла во временное хранилище используется метод глобального контекста НачатьПомещениеФайла. Процедура ЗагрузитьКартинку будет иметь следующий код:
После того, как выбранный пользователем файл будет помещен во временное хранилище, система вызывает процедуру ЗагрузитьКартинкуЗавершение, указанную в описании оповещения. В ней реквизиту формы АдресКартинки присваивается адрес временного хранилища, куда была помещена картинка.
Поскольку при выполнении рассмотренного программного кода не изменяются значения реквизитов объекта, при закрытии формы система не спросит, следует ли сохранить выполненные изменения. Чтобы не потерять отображающуюся на форме, но еще не записанную в базу картинку, признак модифицированности формы установим в значение Истина.
Важно, что при вызове процедуры НачатьПомещениеФайла обязательно требуется указать уникальный идентификатор управляемой формы. Таким образом временное хранилище будет связано с формой, то есть будет существовать до тех пор, пока существует сама форма.
Если не указать идентификатор формы, временное хранилище будет уничтожено при следующем серверном вызове. Такой вариант не подходит, поскольку по условию задачи далее нужно будет записать данные картинки в реквизит справочника.
В пользовательском режиме откроем форму элемента справочника «Номенклатура». Нажмем кнопку Загрузить картинку, выберем файл с изображением с диска, после чего картинка отобразится на форме:
Рисунок 10 – Загрузка изображения с диска
Модифицированность формы отображается при помощи символа (*) в заголовке формы.
Обратите внимание – сейчас картинка отображается на форме, но в информационной базе она еще не сохранена. Дело в том, что в базе изображение хранится в реквизите справочника «Номенклатура». Поскольку элемент справочника еще не записан, в базе данных этого изображения еще нет. Оно располагается только во временном хранилище. При записи элемента справочника необходимо данные из временного хранилища сохранить в реквизит справочника.
Как сохранить изображение в базу
Ранее была реализована загрузка изображения из файла во временное хранилище, а также отображение картинки на форме. Теперь обеспечим хранение изображения в информационной базе. Для этого необходимо данные из временного хранилища перенести в реквизит Изображение справочника «Номенклатура».
Поскольку работа с временным хранилищем доступна только на Сервере, создадим в модуле формы элемента справочника Номенклатура обработчик события ПередЗаписьюНаСервере:
Если в реквизите формы АдресКартинки содержится адрес временного хранилища, записываем в реквизит Изображение данные картинки, находящиеся во временном хранилище.
При открытии формы нужно отображать сохраненную в базе картинку на форме. Для этого в модуле формы элемента справочника Номенклатура реализуем обработчик события ПриСозданииНаСервере. Код обработчика будет выглядеть следующим образом:
При помощи метода глобального контекста ПолучитьНавигационнуюСсылку получаем навигационную ссылку на реквизит Изображение текущей позиции номенклатуры. Полученную ссылку присваиваем реквизиту формы АдресКартинки. Это позволит платформе отобразить на форме в поле картинки изображение номенклатуры.
Таким образом, поставленная задача решена. Реализовано хранение изображения в информационной базе, а также его отображение на форме.
v8: Не отображается картинка.
|