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