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

Отчеты и Аналитика · 10 мин

Как вывести картинку в отчете на СКД в 1С

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

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

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

Откуда СКД может взять картинку

Прежде чем настраивать отчет, определите источник изображения. От этого зависит весь сценарий. Типичные варианты: реквизит типа «ХранилищеЗначения» в справочнике (например, «ФайлКартинки» у номенклатуры), присоединенные файлы через механизм БСП (работа с файлами), картинка, встроенная в макет конфигурации, либо картинка, формируемая кодом (штрихкод, QR-код).

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

Реквизит «ХранилищеЗначения»Данные картинки в поле объекта

Поле можно выбрать в запросе СКД и вывести через оформление ячейки

Присоединенные файлы (БСП)Картинка лежит в отдельном справочнике файлов

Потребуется программное получение данных файла при формировании отчета

Картинка в макете конфигурацииСтатичное изображение (логотип)

Выводится областью макета СКД без запроса

Генерируемая картинкаШтрихкод или QR-код

Формируется кодом и вставляется в табличный документ после компоновки

Вывод картинки из хранилища значений через настройки СКД

Самый простой сценарий — картинка хранится в реквизите справочника с типом «ХранилищеЗначения». Создайте набор данных с запросом, в котором выбирается это поле, например: ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.ФайлКартинки ИЗ Справочник.Номенклатура. Добавьте поле «ФайлКартинки» в ресурсы или в выбранные поля отчета.

Далее откройте закладку «Настройки» схемы компоновки и для нужного поля задайте параметр оформления «Тип макета области» — но чаще используется другой путь: в настройках отчета на закладке «Дополнительные настройки» или через «Оформление» конкретного поля укажите параметр «ТипМакета» со значением «Картинка» для области детальных записей. Альтернатива — собственный макет СКД, где ячейке назначается тип «Картинка» и параметр с именем поля.

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

Порядок действий для картинки из хранилища значений
  1. 1
    В запросе набора данных выберите поле типа «ХранилищеЗначения» с картинкой
  2. 2
    Добавьте поле в выбранные поля или ресурсы отчета
  3. 3
    На закладке «Макеты» создайте макет для детальной записи
  4. 4
    В ячейке картинки задайте тип заполнения «Параметр» и имя поля
  5. 5
    В свойствах области макета укажите, что ячейка содержит картинку
  6. 6
    Сформируйте отчет и проверьте вывод изображения

Вывод картинки из присоединенных файлов БСП

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

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

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

bsl
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
        КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    // Далее — вставка картинок в ячейки ДокументРезультат
КонецПроцедуры

Картинка из макета конфигурации и генерируемые изображения

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

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

Сравнение способов вывода картинки

Оформление ячейки / макет СКД

Подходит для поля «ХранилищеЗначения» в запросе; не требует кода, но не работает с присоединенными файлами

Программная вставка в ПриКомпоновкеРезультата

Универсальный способ для файлов БСП и генерируемых картинок; требует кода и усложняет сопровождение

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

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

Собственный макет с картинкой из конфигурации

Идеален для статичных изображений вроде логотипа; не подходит для картинок из данных

Типовые ошибки и ограничения

Частая ошибка — попытка вывести в ячейку поле с хранилищем значений как обычный текст. В результате в отчете появляется пустая ячейка или служебное представление вместо изображения. Причина: ячейке не задан тип «Картинка», и СКД трактует значение как строку.

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

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

Типичные ошибки
01
Поле картинки не добавлено в выбранные поля — ячейка остается пустой
02
Ячейке не назначен тип «Картинка» — выводится текст вместо изображения
03
Попытка вывести ссылку на присоединенный файл как картинку — в ячейке появляется представление ссылки
04
Макет создан для заголовка группировки, а не для детальных записей — картинка выводится один раз
05
Вывод полноразмерных фото в отчет на сотни строк — отчет формируется долго и может завершаться ошибкой нехватки памяти

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

После настройки сформируйте отчет и проверьте несколько контрольных точек. Картинка должна отображаться в каждой строке, где у объекта есть изображение; строки без картинки должны выводиться без ошибок, с пустой ячейкой. Убедитесь, что при выгрузке отчета в Excel или PDF изображения сохраняются — для табличного документа 1С это обычно работает, но стоит проверить на реальных данных.

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

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

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

Строка с картинкой
Норма

Изображение отображается в ячейке корректного размера

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

Пустая ячейка или текстовое представление значения

Строка без картинки
Норма

Пустая ячейка, отчет формируется без ошибок

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

Ошибка формирования или «битая» область

Изменение настроек пользователем
Норма

Картинки остаются на своих местах

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

Изображения смещаются или дублируются

Сохранение в Excel/PDF
Норма

Картинки присутствуют в выгруженном файле

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

Изображения теряются при выгрузке

FAQ

Можно ли вывести картинку в СКД вообще без программирования?

Да, если картинка хранится в реквизите с типом «ХранилищеЗначения» и это поле можно выбрать в запросе. Достаточно создать собственный макет на закладке «Макеты» и назначить ячейке тип «Картинка» с параметром этого поля. Для присоединенных файлов БСП без кода не обойтись.

Почему вместо картинки выводится пустая ячейка?

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

Как вывести фото номенклатуры в типовой УТ или ERP?

Фото хранятся как присоединенные файлы. В отчете получайте данные файла программно в событии «ПриКомпоновкеРезультата» и вставляйте картинку в табличный документ результата, либо используйте типовые механизмы печатных форм с картинками, если они есть в вашей конфигурации.

Отчет с картинками формируется очень долго. Что делать?

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

Сохранятся ли картинки при выгрузке отчета в Excel?

Табличный документ 1С при сохранении в формат Excel обычно переносит вставленные рисунки. Однако результат зависит от способа вставки и версии платформы, поэтому проверку на реальных данных проводить обязательно.

Можно ли вывести QR-код в отчете на СКД?

Да. QR-код формируется программно (в типовых конфигурациях есть механизмы генерации штрихкодов), полученная картинка вставляется в табличный документ результата в событии «ПриКомпоновкеРезультата» — так же, как картинки из присоединенных файлов.

Итог

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

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