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

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

1С: как получить картинку из коллекции картинок

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

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

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

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

Что такое коллекция картинок в 1С

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

Второй вариант — общие картинки конфигурации. Это ветка «Общие → Общие картинки» в дереве конфигуратора, куда разработчик добавляет собственные изображения (логотипы, иконки статусов, пиктограммы документов). После сохранения конфигурации эти картинки тоже становятся доступны через БиблиотекаКартинок по их именам.

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

Как получить стандартную картинку платформы

Самый простой сценарий — взять готовую пиктограмму платформы. Достаточно обратиться к БиблиотекаКартинок по имени нужной картинки:

КартинкаСохранить = БиблиотекаКартинок.Записать;

Элементы.ДекорацияСтатус.Картинка = БиблиотекаКартинок.Информация;

Имя можно указать и строкой через квадратные скобки — это удобно, когда имя картинки вычисляется динамически или хранится в настройках:

ИмяКартинки = "СоздатьЭлементСписка";

Картинка = БиблиотекаКартинок[ИмяКартинки];

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

Как получить общую картинку конфигурации

Общие картинки добавляются в конфигураторе через ветку «Общие → Общие картинки»: создайте новый элемент, задайте имя (например, ЛоготипКомпании) и загрузите файл изображения через кнопку «Загрузить из файла» в палитре свойств. Поддерживаются распространённые растровые форматы, в том числе PNG с прозрачностью.

После обновления конфигурации базы данных картинка доступна в коде так же, как стандартная:

Логотип = БиблиотекаКартинок.ЛоготипКомпании;

// или безопасный вариант через строку:

Логотип = БиблиотекаКартинок["ЛоготипКомпании"];

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

Порядок действий для добавления общей картинки
  1. 1
    Откройте конфигуратор и в дереве конфигурации найдите ветку «Общие → Общие картинки»
  2. 2
    Добавьте новую общую картинку и задайте ей понятное имя без пробелов
  3. 3
    В палитре свойств загрузите файл изображения и при необходимости добавьте варианты для разных разрешений
  4. 4
    Обновите конфигурацию базы данных
  5. 5
    В коде обратитесь к картинке: БиблиотекаКартинок.ИмяКартинки
  6. 6
    Проверьте отображение на форме или в табличном документе

Как извлечь картинку из коллекции данных

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

Таблица значений с колонкой «Картинка»

Обращение выполняется по индексу строки и имени колонки:

Для Каждого СтрокаТЗ Из ТаблицаКартинок Цикл

ТекущаяКартинка = СтрокаТЗ.Картинка;

// работа с картинкой

КонецЦикла;

Список значений с картинками

У элемента списка значений картинка хранится в свойстве Картинка:

Для Каждого ЭлементСписка Из СписокЗначений Цикл

КартинкаЭлемента = ЭлементСписка.Картинка;

КонецЦикла;

Картинка из реквизита объекта или хранилища значений

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

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

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

Картинка = Новый Картинка(ДвоичныеДанные);

КонецЕсли;

Для вывода такой картинки в управляемой форме реквизит формы должен иметь тип «Строка» с адресом во временном хранилище: двоичные данные помещаются через ПоместитьВоВременноеХранилище, а элемент формы «Поле картинки» ссылается на этот реквизит.

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

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

Частая практическая задача — вывести картинку из коллекции в печатную форму. В табличном документе картинки размещаются через коллекцию рисунков области:

ОбластьКартинка = Макет.ПолучитьОбласть("Картинка");

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

Рисунок.Картинка = БиблиотекаКартинок.ЛоготипКомпании;

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

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

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

Альтернатива — заранее добавить рисунок в макет табличного документа в конфигураторе, дать ему имя и в коде только подменять картинку: Область.Рисунки.ИмяРисунка.Картинка = НужнаяКартинка;. Этот способ удобнее, когда позиция и размеры изображения фиксированы дизайном печатной формы.

Координаты и размеры рисунка задаются в миллиметрах. Если картинка не влезает в отведённую область, используйте свойство РазмерКартинки со значением «Пропорционально» — изображение впишется без искажения пропорций.

Способы получения картинки

БиблиотекаКартинок.Имя

Стандартные и общие картинки. Самый быстрый способ, но имя должно существовать — иначе пустая картинка без явной ошибки

Загрузка из файла: Новый Картинка(Путь)

Картинки на диске. Гибко, но требует доступа к файловой системе и работает иначе на клиенте и сервере

Из хранилища значений

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

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

Главный признак проблемы — вместо изображения отображается пустое место или стандартный значок «крестик». Проверку стоит начинать с типа полученного значения: убедитесь, что переменная действительно содержит объект типа «Картинка», а не Неопределено или строку с именем.

Полезный приём — проверить размер картинки методами Ширина() и Высота() либо преобразовать её в двоичные данные. Если картинка пустая (создана конструктором без параметров или получена по несуществующему имени), размеры будут нулевыми, и это легко перехватить в коде до вывода пользователю.

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

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

Тип значения переменной
Норма

Тип «Картинка»

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

Неопределено или Строка — обращение к коллекции выполнено неверно

Размеры картинки (Ширина/Высота)
Норма

Значения больше нуля

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

Нулевые размеры — картинка пустая, проверяйте имя или источник данных

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

Изображение видно и не искажено

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

Пустая рамка или значок ошибки — неверный адрес хранилища или имя картинки

Ограничения и безопасные приёмы

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

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

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

Итог

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

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

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

Как узнать список всех картинок в библиотеке картинок?

Встроенного метода перебора коллекции БиблиотекаКартинок во встроенном языке нет. Имена стандартных картинок смотрят в конфигураторе через диалог выбора картинки (свойство «Картинка» любого элемента формы), а имена общих картинок видны в ветке «Общие → Общие картинки» дерева конфигурации.

Почему БиблиотекаКартинок.Имя не выдаёт ошибку при неверном имени?

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

Можно ли получить картинку из другой конфигурации или расширения?

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

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

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

Чем отличается Картинка от двоичных данных изображения?

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

Работает ли БиблиотекаКартинок в веб-клиенте?

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