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

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

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

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

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

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

Ниже разобраны рабочие варианты для управляемых и обычных форм, даны примеры кода, условия выбора метода и типичные ошибки, из-за которых картинка не отображается.

Откуда 1С может взять картинку для отчета

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

Второй источник — файл на диске или в сетевом каталоге. Такой вариант подходит для логотипов и статичных изображений, которые редко меняются. Объект Картинка создается из файла конструктором Новый Картинка(ИмяФайла).

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

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

Классический способ, работающий в отчетах, построенных на объекте «Табличный документ». В макете отчета создайте область и добавьте в нее рисунок: в редакторе макета выберите пункт меню «Таблица — Рисунки — Картинка». У рисунка задайте имя, например Логотип, а в свойствах установите подходящий размер и параметр «Размер картинки» — «Пропорционально» или «Реальный размер».

При формировании отчета получите область макета, найдите в ней рисунок по имени и присвойте его свойству Картинка нужное изображение. Пример кода:

Макет = Отчеты.МойОтчет.ПолучитьМакет("МакетОтчета");

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

Рисунок = ОбластьШапка.Рисунки.Логотип;

Рисунок.Картинка = Новый Картинка("C:\Images\logo.png");

ТабДок.Вывести(ОбластьШапка);

Если картинка хранится в базе, сначала извлеките двоичные данные из хранилища значения, а затем передайте их в конструктор картинки: Новый Картинка(ДвоичныеДанные). Проверяйте, что хранилище не пустое — иначе получите ошибку или пустой рисунок.

Порядок вывода картинки через макет
  1. 1
    Откройте макет отчета и добавьте рисунок типа «Картинка» в нужную область
  2. 2
    Задайте рисунку понятное имя и настройте размер
  3. 3
    В модуле отчета получите область и найдите рисунок по имени через коллекцию Рисунки
  4. 4
    Присвойте свойству Картинка объект, созданный из файла или двоичных данных
  5. 5
    Выведите область в табличный документ и проверьте результат в режиме предприятия

Картинка в отчете на СКД

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

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

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

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

Макет табличного документа

Подходит для печатных форм и отчетов без СКД. Полный контроль над позицией и размером, но требует ручного формирования результата.

СКД + программная вставка рисунков

Подходит для аналитических отчетов, где картинки зависят от строк данных. Требует обхода результата после формирования.

Макет области в настройках СКД

Компромисс: отчет остается на СКД, но отдельные области (шапка, строка) оформляются собственным макетом с рисунками.

Вывод картинок из справочника по строкам отчета

Задача «фото товара в каждой строке» решается через выборку данных с извлечением хранилища значения. В запросе выберите реквизит с картинкой, затем в цикле обхода для каждой строки получите двоичные данные и создайте объект картинки.

Пример фрагмента обработки строки:

ДвоичныеДанные = Выборка.ФотоХранилище.Получить();

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

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

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

Рисунок.Разместить(ТабДок.Область(НомерСтроки, 1, НомерСтроки, 1));

КонецЕсли;

Учтите особенность: рисунок в табличном документе привязан к координатам области, а не к содержимому ячейки. Если высота строки меньше высоты картинки, изображение обрежется или наложится на соседние строки. Задавайте высоту строки явно через ТабДок.Область(...).ВысотаСтроки либо масштабируйте рисунок под фиксированный размер ячейки.

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

Оптимизация: размер, формат и производительность

Большие фотографии в исходном разрешении — главная причина медленного формирования отчетов с картинками. Если в базе хранятся изображения по несколько мегабайт, отчет на сотню строк будет формироваться заметно дольше и «раздует» файл при сохранении в Excel или PDF.

Практичное решение — хранить в базе уменьшенные копии изображений специально для отчетов и печатных форм. Если конфигурация позволяет, обрабатывайте картинку при загрузке в базу, а не при каждом формировании отчета. Формат PNG подходит для логотипов и схем, JPEG — для фотографий.

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

Типичные ошибки и как их исправить

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

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

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

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

Проверка результата перед передачей пользователям

После доработки отчета проверьте формирование в нескольких режимах: на экране в режиме предприятия, при печати на принтере и при сохранении в Excel и PDF. Поведение рисунков в этих сценариях различается, и корректное отображение на экране не гарантирует правильной печати.

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

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

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

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

Картинка видна в каждой строке, пропорции сохранены

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

Пустые ячейки, деформированные или обрезанные изображения

Печать и предпросмотр
Норма

Рисунки не смещаются, не перекрывают текст

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

Картинки налезают на соседние строки или исчезают

Выгрузка в Excel/PDF
Норма

Изображения на своих местах, файл разумного размера

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

Картинки смещены, файл весит десятки мегабайт

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

Пустая область вместо фото, верстка не ломается

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

Ошибка формирования или сдвиг всей таблицы

FAQ: частые вопросы о картинках в отчетах 1С

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

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

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

Чаще всего хранилище пустое или содержит не двоичные данные, а сериализованный объект другого типа. Проверьте, что метод Получить() возвращает именно двоичные данные, и что конструктор Новый Картинка() их принимает без исключения.

Как вывести логотип в шапку всех страниц отчета?

Разместите рисунок в области верхнего колонтитула макета либо используйте свойства табличного документа ВерхнийКолонтитул. Альтернатива — повторяющаяся шапка через область, выводимую как заголовок при разбивке на страницы.

Картинка выводится на экране, но пропадает при печати. Что делать?

Проверьте размер рисунка относительно области печати и поля страницы. Также убедитесь, что у рисунка не установлен режим, при котором он выходит за границы листа. Протестируйте на виртуальном принтере с сохранением в PDF.

Можно ли взять картинку по ссылке из интернета?

Технически можно, загрузив файл через HTTP-соединение и создав картинку из двоичных данных. Но это замедляет формирование отчета и делает его зависимым от доступности внешнего ресурса — надежнее хранить изображения в базе.

Как изменить размер картинки прямо в отчете?

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

Итог

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

Картинка в отчет 1С выводится как рисунок табличного документа: через макет с заполнением свойства Картинка, через собственный макет области в СКД или программной вставкой после формирования. Источник — хранилище значения, файл или библиотека картинок. Проверяйте пустые данные, размеры строк и поведение при печати, а типовые объекты дорабатывайте через расширение или внешний отчет.