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

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

Как обратиться к картинке в 1С: все способы с примерами

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

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

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

Ниже разобраны все основные сценарии: обращение к общей картинке конфигурации, использование библиотеки картинок платформы, загрузка картинки из файла и из реквизита справочника, вывод на форму и в табличный документ, а также типичные ошибки и способы проверить результат.

Обращение к общей картинке конфигурации

Общие картинки добавляются в конфигураторе в ветке «Общие» → «Общие картинки». После добавления к ним можно обратиться из кода через глобальное свойство БиблиотекаКартинок по имени объекта:

Элементы.ДекорацияКартинка.Картинка = БиблиотекаКартинок.МояКартинка;

Имя обращения совпадает с именем, которое вы задали картинке в конфигураторе. Если переименовать общую картинку, все обращения в коде нужно обновить вручную — платформа не отслеживает такие ссылки автоматически при рефакторинге.

Тот же приём работает для кнопок командных панелей, полей картинки и ячеек табличных документов. Для кнопки достаточно в свойствах команды указать картинку через диалог выбора — код писать не потребуется.

Использование встроенной библиотеки картинок платформы

Платформа 1С содержит готовый набор стандартных пиктограмм: «Сохранить», «Печать», «Найти», «Информация» и десятки других. Обращение идентично общим картинкам:

Кнопка.Картинка = БиблиотекаКартинок.Информация;

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

Преимущество встроенных картинок — они не увеличивают размер конфигурации и автоматически выглядят единообразно с интерфейсом платформы. Для стандартных действий (печать, проведение, поиск) лучше использовать именно их.

Загрузка картинки из файла на диске

Если изображение лежит в файле (PNG, JPG, BMP, GIF), используется конструктор объекта Картинка:

КартинкаИзФайла = Новый Картинка("C:\Images\logo.png");

Элементы.Логотип.Картинка = КартинкаИзФайла;

На сервере путь указывается относительно файловой системы сервера, на клиенте — относительно компьютера пользователя. Это частая причина ошибки «файл не найден» при переносе кода из клиентской процедуры в серверную.

Для безопасной загрузки с проверкой существования файла используйте объект Файл:

ФайлКартинки = Новый Файл(ПутьКФайлу);

Если ФайлКартинки.Существует() Тогда

КартинкаИзФайла = Новый Картинка(ПутьКФайлу);

Иначе

Сообщить("Файл картинки не найден: " + ПутьКФайлу);

КонецЕсли;

Второй параметр конструктора Новый Картинка(Путь, Ложь) отключает разбиение на кадры для анимированных файлов. Для помещения картинки во временное хранилище (например, при передаче с клиента на сервер) используйте ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу), УникальныйИдентификаторФормы).

Хранение картинки в базе и обращение к реквизиту

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

Запись картинки в реквизит:

ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);

Объект.ФайлКартинки = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));

Объект.Записать();

Чтение и вывод на форму:

ДвоичныеДанные = Объект.ФайлКартинки.Получить();

Если ДвоичныеДанные <> Неопределено Тогда

АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);

Элементы.КартинкаТовара.Картинка = АдресВХранилище;

КонецЕсли;

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

Порядок действий: вывод картинки из базы на форму
  1. 1
    Добавьте в объект реквизит типа ХранилищеЗначения для двоичных данных картинки
  2. 2
    На форме создайте элемент Поле с видом Поле картинки и строковый реквизит формы для адреса
  3. 3
    При чтении объекта получите двоичные данные методом Получить() и поместите их во временное хранилище с привязкой к УникальныйИдентификатор формы
  4. 4
    Присвойте полученный адрес реквизиту формы, связанному с полем картинки
  5. 5
    Откройте форму и проверьте, что изображение отображается и не пропадает при обновлении

Вывод картинки в табличный документ и печатную форму

В табличном документе картинка выводится через коллекцию рисунков области. Сначала в макете создаётся рисунок типа «Картинка», затем из кода задаётся его содержимое:

Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

Рисунок.Картинка = Новый Картинка(ДвоичныеДанныеЛоготипа);

Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;

Рисунок.Верх = 5; Рисунок.Лево = 5;

Рисунок.Высота = 20; Рисунок.Ширина = 40;

Если картинка лежит в макете как именованный рисунок, обращайтесь к ней по имени: ТабличныйДокумент.Рисунки.Логотип.Картинка = .... Свойство РазмерКартинки управляет масштабированием: РеальныйРазмер, Пропорционально, Растянуть.

Для печатных форм, которые рассылаются или архивируются, храните картинку в базе, а не в файле на диске — иначе на другом компьютере или при переносе базы логотип «потеряется».

Обращение к картинке в тонком клиенте и веб-клиенте

В тонком и веб-клиенте прямой доступ к файловой системе ограничен. Перед использованием Новый Картинка(Путь) на клиенте требуется подключить расширение работы с файлами, а в веб-клиенте файлы передаются только через механизм помещения во временное хранилище:

НачатьПомещениеФайла(

Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект),

, , Истина, УникальныйИдентификатор);

В обработчике оповещения вы получите адрес во временном хранилище, который можно передать на сервер и там преобразовать в двоичные данные или объект картинки. Прямая конструкция Новый Картинка(Путь) в веб-клиенте с локальным путём пользователя не сработает.

Типичные ошибки
01
Обращение к БиблиотекаКартинок по имени, которое не совпадает с именем общей картинки — результат: пустое изображение без сообщения об ошибке
02
Попытка присвоить полю картинки двоичные данные напрямую вместо адреса временного хранилища — картинка не отображается
03
Использование локального пути к файлу в серверной процедуре или веб-клиенте — ошибка «файл не обнаружен»
04
Помещение данных во временное хранилище без привязки к УникальныйИдентификатор формы — картинка пропадает после перезапуска сервера или очистки хранилища
05
Хранение картинок в базе без сжатия — лишний рост размера базы при большом количестве изображений

Проверка результата и отладка

Если картинка не отображается, проверяйте по цепочке: существует ли источник, получены ли данные, правильно ли присвоено свойство. Быстрая диагностика в отладчике — вычислить выражение ДвоичныеДанные.Размер(): если размер равен нулю или вызов падает с ошибкой, проблема на этапе получения данных, а не отображения.

Для объекта Картинка полезны методы Вид() (тип изображения) и РазмерФайла(). Пустая картинка вернёт вид Неопределено или нулевой размер — это признак неудачной загрузки.

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

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

Отображение в форме
Норма

Изображение видно сразу после открытия и после нажатия «Обновить»

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

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

Двоичные данные в реквизите
Норма

Получить() возвращает объект с размером больше нуля

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

Возвращается Неопределено или размер равен 0

Печатная форма
Норма

Логотип выводится на предпросмотре и при печати на другом компьютере

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

На месте картинки пустая рамка или крест

Работа в веб-клиенте
Норма

Картинка загружается через помещение файла и отображается

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

Ошибка доступа к файловой системе или требование расширения

Часто задаваемые вопросы

Чем отличается тип Картинка от ДвоичныеДанные?

Картинка — объект для отображения: его можно присвоить элементу формы или рисунку табличного документа. ДвоичныеДанные — просто массив байтов файла, он подходит для хранения и передачи, но не отображается напрямую. Преобразование выполняется конструктором Новый Картинка(ДвоичныеДанные) и обратно методом ПолучитьДвоичныеДанные() или через временное хранилище.

Почему БиблиотекаКартинок.МояКартинка возвращает пустую картинку?

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

Как вывести разные картинки в строках динамического списка или таблицы?

Используйте колонку типа Картинка и событие «ПриПолученииДанныхНаСервере» или оформление строк. Для каждой строки вычисляйте нужную картинку (например, индикатор состояния) и присваивайте её ячейке. Хранить сами изображения удобно в общих картинках, а в данных — только ключ выбора.

Можно ли изменить картинку программно, например обрезать или повернуть?

Встроенный объект Картинка поддерживает ограниченный набор операций: преобразование формата, получение двоичных данных, в некоторых версиях платформы — базовые операции обработки через объект ОбработкаКартинок. Сложные трансформации (поворот на произвольный угол, фильтры) обычно выполняют внешними средствами до загрузки в 1С.

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

Используйте сжатие при помещении в ХранилищеЗначения, ограничивайте размер загружаемых файлов и по возможности храните уменьшенные копии для отображения в списках. Альтернатива — тома хранения файлов (присоединенные файлы в БСП), когда на диске лежат сами файлы, а в базе только ссылки.

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

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

Итог

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

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