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