К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как вывести на форме поле картинки в 1С

Как вывести поле картинки на форме в 1С: добавление реквизита, настройка вида поля, привязка к данным, отображение фото сотрудников и товаров.

Поле картинки на форме нужно, чтобы пользователь видел фотографию товара, сотрудника, подписанный скан документа или логотип прямо в интерфейсе, не открывая отдельные файлы. В управляемых формах 1С это реализуется через реквизит формы или реквизит объекта с типом «Картинка», «ХранилищеЗначения» (с двоичными данными) или строкой с навигационной ссылкой на файл. Выбор способа зависит от того, где физически хранится изображение: в базе, в присоединённых файлах или во временном хранилище.

Типичная ошибка новичков — добавить на форму элемент «Поле картинки», но не связать его с данными: в итоге поле отображается пустым, и непонятно, где искать проблему. Статья разбирает полный цикл: от создания реквизита до вывода изображения из присоединённых файлов, с проверкой результата и разбором частых сбоев. Инструкции ориентированы на управляемые формы (тонкий клиент), для обычных форм логика аналогична, но настройки элементов отличаются.

Откуда берётся картинка: выбор источника данных

Прежде чем добавлять элемент на форму, определите, откуда поле будет получать изображение. В 1С есть три рабочих источника, и от выбора зависит тип реквизита и код загрузки.

Первый вариант — реквизит объекта типа «ХранилищеЗначения», в который помещены двоичные данные картинки. Подходит, когда изображение одно и жёстко привязано к объекту, например фото сотрудника в справочнике. Второй вариант — присоединённые файлы через подсистему «Работа с файлами» из Библиотеки стандартных подсистем: стандартный способ для товаров, документов и любых объектов с несколькими изображениями. Третий — картинка из библиотеки картинок конфигурации, если нужен статичный значок, а не пользовательское фото.

Сравнение источников изображения

ХранилищеЗначения в реквизите

Простая реализация, одно изображение на объект. Ограничение: рост размера таблицы и нельзя хранить несколько файлов.

Присоединённые файлы (БСП)

Стандартный механизм, много файлов на объект, превью и версии. Требуется подсистема «Работа с файлами» в конфигурации.

Библиотека картинок

Только статичные значки конфигурации. Не подходит для пользовательских фотографий.

Добавление реквизита и элемента формы в конфигураторе

Откройте форму объекта в конфигураторе. Если картинка хранится в реквизите объекта (например, «Фото» типа «ХранилищеЗначения»), перетащите этот реквизит из панели реквизитов в дерево элементов формы. Если изображение формируется динамически, создайте реквизит формы: в окне реквизитов нажмите «Добавить», задайте имя, например «АдресКартинки», и тип «Строка» неограниченной длины — в нём будет адрес двоичных данных во временном хранилище.

После переноса реквизита на форму выделите созданный элемент и откройте палитру свойств. Ключевое свойство — «Вид»: для строкового реквизита с адресом установите «Поле картинки». Если реквизит имеет тип «Картинка», вид обычно подставляется автоматически. Дополнительно настройте «РазмерКартинки» (пропорционально, растянуть, реальный размер) и при необходимости «КартинкаЗначений» для подстановки заглушки, когда данных нет.

Порядок добавления поля картинки
  1. 1
    Откройте форму в конфигураторе и добавьте реквизит формы (строка для адреса) или используйте реквизит объекта
  2. 2
    Перетащите реквизит в дерево элементов формы в нужное место
  3. 3
    В палитре свойств установите Вид = Поле картинки
  4. 4
    Настройте РазмерКартинки и ширину/высоту элемента
  5. 5
    Напишите код заполнения реквизита в ПриСозданииНаСервере или ПриОткрытии
  6. 6
    Сохраните конфигурацию и проверьте отображение в режиме Предприятие

Вывод изображения из присоединённых файлов

Самый частый прикладной сценарий — показать фото товара или скан документа, хранящиеся в присоединённых файлах. Здесь реквизит формы должен быть строкой, в которую помещается навигационная ссылка на двоичные данные файла во временном хранилище.

Логика такая: найти присоединённый файл объекта, получить его данные с помощью функции БСП РаботаСФайлами.ДанныеФайла, взять из результата свойство «СсылкаНаДвоичныеДанныеФайла» и присвоить его строковому реквизиту формы. Вызывать это нужно при создании формы на сервере и после изменения объекта, чтобы картинка обновлялась.

// В модуле формы

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ПоказатьФото();

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

&НаСервере

Процедура ПоказатьФото()

МассивФайлов = Новый Массив;

РаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(Объект.Ссылка, МассивФайлов);

Если МассивФайлов.Количество() > 0 Тогда

ДанныеФайла = РаботаСФайлами.ДанныеФайла(МассивФайлов[0], УникальныйИдентификатор);

АдресКартинки = ДанныеФайла.СсылкаНаДвоичныеДанныеФайла;

КонецЕсли;

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

Вывод картинки из ХранилищаЗначения

Если изображение лежит в реквизите объекта типа «ХранилищеЗначения», напрямую привязать его к полю картинки на управляемой форме нельзя — поле не умеет самостоятельно извлекать данные из хранилища. Нужен промежуточный шаг: на сервере получить данные, поместить их во временное хранилище и присвоить адрес строковому реквизиту.

Пример кода: ДвоичныеДанные = Объект.Фото.Получить();, затем АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);. Передача уникального идентификатора формы вторым параметром критична — она привязывает хранилище к времени жизни формы, и адрес не «протухнет» при серверных вызовах.

bsl
ДвоичныеДанные = Объект.Фото.Получить();
Если ДвоичныеДанные <> Неопределено Тогда
    АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
КонецЕсли;

Динамическая загрузка и обновление картинки

Часто требуется, чтобы пользователь мог загрузить или заменить изображение прямо с формы. Для этого добавьте команду «Загрузить» и используйте диалог выбора файла с помещением файла во временное хранилище на клиенте, а затем передачу адреса на сервер для сохранения в реквизит или присоединённые файлы.

Обратите внимание на контекст выполнения: НачатьПомещениеФайла работает на клиенте, а запись в базу — на сервере. После сохранения обязательно повторно получите адрес картинки и присвойте реквизиту формы, иначе отображаемое изображение не обновится до переоткрытия формы.

Проверка результата и типичные ошибки

После настройки откройте форму в режиме «Предприятие» и проверьте: картинка отображается при открытии, обновляется после записи объекта, не сбрасывается после серверных вызовов, при отсутствии данных показывается заглушка или пустое поле без ошибок.

Если поле пустое, идите по цепочке: убедитесь, что реквизит заполнен (выведите его значение в сообщение), что вид элемента — именно «Поле картинки», а не «Поле надписи», и что адрес получен с привязкой к УникальныйИдентификатор формы. Ошибка «неверный формат данных» обычно означает, что в строковый реквизит попали сами двоичные данные, а не адрес хранилища.

Контрольные точки

Как проверить результат

Отображение при открытии
Норма

Картинка видна сразу после открытия формы

Тревожный признак

Поле пустое, хотя файл у объекта есть — проверяйте код заполнения

После записи объекта
Норма

Изображение остаётся или обновляется

Тревожный признак

Картинка пропадает — адрес хранилища потерян, получайте его заново

Объект без картинки
Норма

Показывается заглушка или пустое поле без ошибок

Тревожный признак

Ошибка при открытии — нет проверки на Неопределено

Типичные ошибки
01
Вид элемента оставлен «Поле ввода» вместо «Поле картинки» — вместо изображения виден текст адреса
02
В реквизит помещены двоичные данные вместо адреса временного хранилища — ошибка формата или пустое поле
03
ПоместитьВоВременноеХранилище вызвано без УникальныйИдентификатор формы — адрес перестаёт работать после серверных вызовов
04
Код заполнения вызван только при создании — после записи объекта картинка не обновляется
05
Нет проверки на отсутствие файла — форма падает с ошибкой у объектов без изображения

Ограничения и производительность

В тонком клиенте поле картинки корректно отображает распространённые форматы: PNG, JPEG, BMP, GIF. Экзотические форматы (например, TIFF с некоторыми кодировками) могут не отрисоваться — конвертируйте их при загрузке. В веб-клиенте поведение аналогично, но большие изображения заметно влияют на скорость открытия формы, так как передаются по сети каждый раз.

Практическая рекомендация: при загрузке уменьшайте фото до разумного размера (например, до 800–1200 пикселей по большей стороне) средствами объекта «Картинка» или внешней обработкой. Для списков, где нужно много миниатюр, храните отдельные уменьшенные копии, а не масштабируйте полноразмерные фото на форме.

Для списка товаров с миниатюрами не выводите поле картинки напрямую в динамический список — это резко замедляет прокрутку. Лучше показывать фото выбранной строки в отдельной группе формы списка, обновляя его в обработчике ПриАктивизацииСтроки.
ПЗ
Практическое замечание

Частые вопросы

Почему поле картинки пустое, хотя файл у объекта есть?

Чаще всего реквизит формы не заполнен адресом или адрес получен без привязки к УникальныйИдентификатор формы. Проверьте, что код заполнения реально выполняется (поставьте сообщение или точку останова) и что в реквизите строка с навигационной ссылкой, а не двоичные данные.

Можно ли вывести картинку без изменения конфигурации?

Только если конфигурация уже содержит нужный реквизит и подсистему работы с файлами — тогда через расширение конфигурации можно добавить элемент формы и код без изменения основной конфигурации. Полностью «внешним» способом, без расширения, вывести произвольную картинку на форму объекта нельзя.

Как показать картинку из библиотеки картинок конфигурации?

Для статичных значков не нужен реквизит с данными: добавьте на форму декорацию вида «Картинка» и в свойстве «Картинка» выберите нужное изображение из общей библиотеки картинок. Такой элемент отображается всегда и не зависит от данных объекта.

Как сделать, чтобы при клике на картинку она открывалась в полном размере?

Установите у поля картинки свойство «Гиперссылка» и обработайте событие «Нажатие»: в обработчике получите двоичные данные по адресу, сохраните их во временный файл на клиенте и откройте стандартным средством просмотра через НачатьЗапускПриложения или метод ПолучитьФайл с последующим открытием.

Почему в веб-клиенте картинка грузится медленно?

Изображение каждый раз передаётся с сервера в браузер. Уменьшайте размер файлов при загрузке, храните превью для списков и не выводите полноразмерные фото в динамических списках — это основные способы ускорить отображение.

Итог

Что важно запомнить

Поле картинки на форме 1С выводится через реквизит (строка с адресом временного хранилища или тип Картинка) и элемент с видом «Поле картинки». Адрес получайте с привязкой к УникальныйИдентификатор формы, обновляйте после записи, проверяйте отсутствие данных и контролируйте размер изображений, чтобы не замедлить базу и клиента.