Разработка и Конфигурация · 10 мин
Как отобразить картинку в форме 1С
Как вывести картинку в форме 1С: реквизит с типом Картинка, поле картинки, программная загрузка из файла и хранилища значений, частые ошибки и проверки.
Отображение изображений в формах 1С — типовая задача: фото товара в карточке номенклатуры, логотип в отчёте, скан документа в справочнике. Платформа поддерживает несколько способов вывода картинки, и выбор зависит от того, где хранится изображение: в реквизите объекта, в общей картинке конфигурации, во временном хранилище или в файле на диске.
Основной механизм — элемент формы «Поле картинки», связанный с реквизитом формы или объекта типа «Картинка» либо «Строка» (адрес во временном хранилище). Ниже разобраны оба подхода на управляемых формах, приведён рабочий код и способы проверки результата.
Какие способы показа картинки существуют в 1С
В управляемых формах изображение выводится через элемент «Поле картинки». Разница между вариантами — в источнике данных:
- Реквизит типа «Картинка» — изображение хранится непосредственно в объекте или реквизите формы. Подходит для небольших картинок, загружаемых на время сеанса.
- Реквизит типа «Строка» с адресом временного хранилища — самый распространённый вариант для управляемых форм. Двоичные данные помещаются во временное хранилище, а поле картинки получает адрес.
- Общая картинка конфигурации — статичное изображение из состава конфигурации, например логотип. Выводится установкой свойства «Картинка» у поля напрямую.
- Хранилище значения в реквизите объекта — картинка сохраняется в базе данных постоянно и при открытии формы извлекается и помещается во временное хранилище.
Для постоянного хранения (фото товара, скан договора) используют «Хранилище значения» в реквизите справочника. Для временного показа без сохранения в базу достаточно реквизита формы.
Сравнение вариантов
Просто и наглядно, но данные живут только в форме; при записи объекта картинка не сохранится в базе.
Стандарт для управляемых форм; требует программного помещения данных через ПоместитьВоВременноеХранилище.
Картинка сохраняется в базе постоянно; нужно извлекать данные при открытии и класть обратно при записи.
Как добавить поле картинки на форму
Откройте форму объекта в конфигураторе. В правой панели реквизитов добавьте новый реквизит формы, например АдресКартинки типа «Строка», либо КартинкаТовара типа «Картинка». Если изображение хранится в реквизите самого объекта (например, реквизит справочника «ФайлКартинки» типа «Хранилище значения»), отдельный реквизит формы всё равно понадобится для адреса.
Перетащите реквизит из панели в дерево элементов формы. Платформа обычно сама создаёт «Поле картинки», но проверьте свойство «Вид» — оно должно быть «Поле картинки». При необходимости настройте свойства: «Размер картинки» (пропорционально, растянуть, авторазмер), «Гиперссылка» и обработчики событий «Нажатие» для выбора файла.
- 1Добавьте реквизит формы типа Строка (АдресКартинки) или Картинка
- 2Перетащите реквизит в дерево элементов формы
- 3Убедитесь, что вид элемента — Поле картинки
- 4Настройте Размер картинки и при необходимости обработчик Нажатие
- 5Заполните реквизит программно при создании формы или по команде
Как загрузить картинку из файла программно
На клиенте файл выбирается через диалог, затем данные помещаются во временное хранилище. Адрес присваивается реквизиту, связанному с полем картинки:
&НаКлиенте
Процедура ВыбратьКартинку(Команда)
НачатьПомещениеФайла(
Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект),
, , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт
Если Результат Тогда
АдресКартинки = Адрес;
КонецЕсли;
КонецПроцедуры
Если картинка лежит на сервере по известному пути, можно обойтись без диалога — создать объект «Картинка» из файла и поместить её двоичные данные в хранилище на сервере:
&НаСервере
Процедура ЗагрузитьКартинкуССервера(ПутьКФайлу)
Картинка = Новый Картинка(ПутьКФайлу);
ДвоичныеДанные = Картинка.ПолучитьДвоичныеДанные();
АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
КонецПроцедуры
Второй параметр ПоместитьВоВременноеХранилище — уникальный идентификатор формы — важен: он привязывает данные к времени жизни формы, иначе хранилище очистится раньше и картинка пропадёт.
Как показать картинку, хранящуюся в базе данных
Типовой сценарий: в справочнике есть реквизит «ДанныеКартинки» типа «Хранилище значения». При открытии формы данные извлекаются и помещаются во временное хранилище, при записи — сохраняются обратно:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ХранимыеДанные = Объект.ДанныеКартинки.Получить();
Если ХранимыеДанные <> Неопределено Тогда
АдресКартинки = ПоместитьВоВременноеХранилище(ХранимыеДанные, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ЭтоАдресВременногоХранилища(АдресКартинки) Тогда
ТекущийОбъект.ДанныеКартинки = Новый ХранилищеЗначения(
ПолучитьИзВременногоХранилища(АдресКартинки));
КонецЕсли;
КонецПроцедуры
Проверка ЭтоАдресВременногоХранилища защищает от ошибки, когда реквизит пуст или содержит не адрес, а что-то другое. Без неё при записи формы с незаполненной картинкой можно получить исключение.
Учитывайте объём: хранение большого количества крупных изображений прямо в таблицах справочников увеличивает размер базы и замедляет выборки. Для массового хранения файлов в типовых конфигурациях используется механизм присоединенных файлов (БСП), где данные могут выноситься в тома на диске.
Как вывести картинку из конфигурации или по команде
Если изображение статично (логотип, пиктограмма), добавьте «Общую картинку» в ветви «Общие» дерева конфигурации и загрузите в неё файл. Затем в форме у поля картинки в свойстве «Картинка» выберите эту общую картинку — реквизит данных для такого поля не нужен.
Программно общую картинку можно получить через библиотеку картинок: БиблиотекаКартинок.ИмяКартинки — такие значения, например, назначаются кнопкам команд и декорациям. Для поля картинки, связанного с реквизитом типа «Картинка», достаточно присвоить реквизиту значение Новый Картинка(ПутьКФайлу) или общую картинку.
Если картинка нужна только как оформление (логотип в шапке формы), используйте элемент «Декорация» с видом «Картинка» и общей картинкой — это не требует ни реквизитов, ни кода и не нагружает данные формы.
Как проверить результат и исправить типичные ошибки
После настройки откройте форму в режиме предприятия и проверьте три признака: картинка отображается сразу при открытии, не пропадает после обновления формы и сохраняется после записи и повторного открытия (если предполагается хранение в базе).
Как проверить результат
Картинка видна сразу после открытия формы
Поле пустое — адрес не заполнен или хранилище очищено
Картинка остаётся на месте
Картинка пропала — данные не сохранены в реквизит объекта
Изображение вписано в поле без искажений
Картинка обрезана или растянута — неверное свойство РазмерКартинки
Отдельная частая проблема — неподдерживаемый формат. Объект «Картинка» работает с распространёнными растровыми форматами (PNG, JPEG, BMP, GIF); экзотические форматы могут не открыться. При сомнениях конвертируйте файл заранее.
Частые вопросы
Можно ли показать картинку без добавления реквизита формы?
Да, если это статичное изображение: используйте элемент «Декорация» с видом «Картинка» и укажите общую картинку конфигурации в свойствах. Для динамических данных реквизит обязателен — полю картинки нужен источник данных.
Почему поле картинки пустое, хотя адрес хранилища заполнен?
Чаще всего данные помещены во временное хранилище без привязки к УникальныйИдентификатор формы и уже удалены, либо в реквизит записаны сами двоичные данные вместо строки-адреса. Проверьте тип реквизита и параметры вызова ПоместитьВоВременноеХранилище.
Как дать пользователю возможность менять картинку кликом по ней?
Установите у поля картинки свойство «Гиперссылка» и создайте обработчик события «Нажатие», в котором вызовите НачатьПомещениеФайла с диалогом выбора. После успешного помещения обновите реквизит с адресом.
Как ограничить размер загружаемых изображений?
Платформа сама размер не ограничивает. Проверяйте размер двоичных данных после помещения файла (метод Размер у двоичных данных) и при превышении порога отклоняйте загрузку с сообщением пользователю. Дополнительно можно уменьшать изображения внешними средствами перед загрузкой.
Работает ли этот подход в обычных формах?
В обычных формах используется тот же элемент «Поле картинки», но реквизит обычно имеет тип «Картинка», а временное хранилище применяется реже — данные можно присвоить напрямую через Новый Картинка. Механика с адресами хранилища характерна именно для управляемых форм.
Как вывести картинку в табличной части или списке?
Для динамических списков и таблиц картинка выводится через колонку с видом «Поле картинки», связанную с полем данных, содержащим картинку или адрес хранилища. Для списка справочника проще использовать свойство «КартинкаСтроки» динамического списка, если нужна одна стандартная пиктограмма.
Что важно запомнить
Картинка в форме 1С выводится элементом «Поле картинки», связанным с реквизитом типа «Картинка» или со строкой-адресом временного хранилища. Помещайте данные с привязкой к УникальныйИдентификатор формы, сохраняйте изображение в реквизит типа «Хранилище значения» при записи и проверяйте ЭтоАдресВременногоХранилища перед сохранением. Для статичных изображений используйте декорацию с общей картинкой.