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