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