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