В современных бизнес-процессах визуализация данных играет ключевую роль. Клиентам гораздо удобнее работать с прайс-листом, в котором они сразу видят внешний вид товара, а не только его артикул и наименование. Однако в типовых конфигурациях 1С:ERP и 1С:Управление торговлей 11 вывод изображений в стандартные отчеты часто требует дополнительной настройки со стороны разработчика. В этой статье мы подробно разберем, как устроена архитектура хранения изображений и как вывести их в отчет с помощью Системы компоновки данных (СКД). Для решения этой задачи есть готовый генератор Excel прайс-листов с остатками и изображениями.
Прежде чем приступать к написанию запроса, нам необходимо разобраться, где именно лежат данные. В конфигурациях, построенных на Библиотеке стандартных подсистем (БСП), таких как 1С:ERP, 1С:КА 2 и 1С:УТ 11, используется многоуровневая структура хранения. Разберем эту цепочку по шагам:
Номенклатура: Здесь находится основной реквизит ФайлКартинки. Это ссылка на элемент другого справочника.НоменклатураПрисоединенныеФайлы: Этот справочник хранит метаданные файла (имя, расширение, размер, тип хранения). Важно понимать, что сама картинка в этом справочнике (в виде двоичных данных) обычно не лежит.ДвоичныеДанныеФайлов: Если в настройках системы выбрано хранение файлов в информационной базе, то двоичные данные (код картинки) хранятся именно здесь. Ключом связи выступает ссылка на элемент справочника присоединенных файлов.ДвоичныеДанныеФайлов пусто, а путь к физическому файлу хранится в реквизитах присоединенного файла — для этой задачи есть утилита переноса картинок номенклатуры в тома на диске.Проанализируем ситуацию: для универсального решения нам нужно не просто «дернуть» данные из регистра, а использовать механизмы БСП, которые умеют определять, откуда брать файл (из базы или с диска). Однако для простого отчета в СКД чаще всего достаточно обращения к справочнику присоединенных файлов.
Рассмотрим, как изменить запрос отчета, чтобы получить данные о картинке. Нам нужно соединить основную таблицу номенклатуры со справочником присоединенных файлов. Посмотрим на пример упрощенного запроса:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
Номенклатура.Артикул КАК Артикул,
Номенклатура.ФайлКартинки КАК ФайлСсылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ЭтоГруппа
В данном случае поле ФайлКартинки является ключевым. Если мы хотим получить именно двоичные данные в запросе (что не всегда рекомендуется для тяжелых отчетов), мы можем добавить левое соединение с регистром ДвоичныеДанныеФайлов. Но для СКД лучше оставить ссылку на файл, так как система компоновки умеет обрабатывать типы значений автоматически.
Разберем, как заставить СКД отобразить картинку, а не просто текст со ссылкой. В некоторых случаях стандартного вывода поля недостаточно. Опытные разработчики рекомендуют использовать вычисляемые поля. Перейдем на вкладку «Вычисляемые поля» и добавим новое поле, например, Изображение.
В выражении для этого поля мы можем использовать функцию БСП, которая возвращает навигационную ссылку на изображение. Это позволит платформе динамически подгружать картинку при формировании отчета:
ПолучитьНавигационнуюСсылку(ФайлСсылка)
В колонке «Тип значения» обязательно укажем Картинка. Это даст сигнал системе, что данные нужно интерпретировать как визуальный объект.
Теперь выясним, как правильно расположить картинку в итоговой таблице документа. На вкладке «Настройки» в СКД выберем наше поле Изображение и настроим его условное оформление:
Проанализируем важный нюанс: если мы формируем прайс-лист на 10 000 позиций, одновременная загрузка всех полноразмерных изображений приведет к ошибке Нехватка памяти. Выясним, как этого избежать. Для решения проблемы нехватки памяти есть обработка для сжатия и оптимизации изображений в 1С.
В 1С:ERP реализован механизм создания миниатюр. При загрузке основного изображения система автоматически генерирует уменьшенную копию. Для отчета «Прайс-лист» использование миниатюр является обязательным условием стабильной работы. Вместо обращения к основному файлу, следует обращаться к связанному файлу превью, если он существует в системе.
Посмотрим на пример логики: в справочнике НоменклатураПрисоединенныеФайлы могут быть ссылки на связанные превью-изображения. Если программно или через запрос подтянуть именно их, нагрузка на оперативную память снизится в десятки раз.
Часто основной целью добавления картинок является последующая отправка прайса клиенту в формате Excel — для автоматизации этого процесса подойдет модуль автоматической рассылки прайс-листов с картинками. Рассмотрим особенности этого процесса. При стандартном сохранении табличного документа 1С в формат .xlsx изображения могут:
Для решения этой проблемы мы рекомендуем использовать программный вывод в Excel через COM-соединение или специализированные библиотеки, которые позволяют жестко закрепить объект «Картинка» внутри координат ячейки. Если же используется стандартное сохранение, убедитесь, что в свойствах ячеек в 1С установлено «Размещение: Переносить», а размер картинки максимально приближен к размеру ячейки. Также для корректного экспорта без искажений можно использовать модуль выгрузки произвольных данных с картинками в Excel.
Если ваша база данных хранит огромное количество медиаконтента, возможно, стоит рассмотреть альтернативный путь. Вместо того чтобы хранить картинки в ДвоичныеДанныеФайлов, можно выводить в отчет QR-код или текстовую гиперссылку на публичный сервер/облако, где хранятся фотографии товаров. Это сделает отчет максимально легким, а клиент сможет открыть фото в высоком разрешении по клику. Для реализации этого в СКД достаточно добавить поле типа Строка и в оформлении указать «Гиперссылка: Да».
Мы разберем по шагам весь процесс: от понимания того, что данные лежат в связке Номенклатура -> ПрисоединенныеФайлы -> ДвоичныеДанные, до тонкой настройки визуализации в СКД. Помните, что добавление изображений — это всегда компромисс между красотой отчета и скоростью его формирования. Используйте миниатюры, ограничивайте количество позиций в одном отчете и всегда проверяйте корректность отображения при экспорте во внешние форматы.