Разработка и Конфигурация · 9 мин
Как вывести рисунок в табличный документ 1С
Как вывести картинку в табличный документ 1С: объект РисунокТабличногоДокумента, картинка из файла, хранилища и макета. Примеры кода и типичные ошибки.
Вывод изображений в табличный документ — частая задача при разработке печатных форм в 1С: логотип компании в шапке счёта, факсимильная подпись, штрихкод, фотография товара в прайс-листе. Платформа предоставляет для этого специальный объект РисунокТабличногоДокумента, который добавляется в коллекцию Рисунки табличного документа и размещается в нужной области.
Существует несколько способов получить само изображение: загрузить из файла на диске, взять из хранилища значений в базе данных, извлечь из макета конфигурации или получить из временного хранилища при работе в управляемых формах. Выбор способа зависит от того, где хранится картинка и в каком контексте выполняется код — на клиенте или на сервере.
Ниже разобраны все рабочие варианты с примерами кода, особенностями позиционирования, типичными ошибками и способами проверки результата перед печатью.
Основной механизм: объект РисунокТабличногоДокумента
Табличный документ 1С содержит коллекцию Рисунки, куда добавляются графические объекты. Каждый рисунок имеет свойства: Картинка (само изображение), РазмерКартинки (реальный, пропорциональный, подогнать под размер), Линия (рамка) и координаты размещения. Рисунок может быть привязан к именованной области либо расположен по абсолютным координатам.
Минимальный пример вывода картинки из файла:
ТабДок = Новый ТабличныйДокумент;
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка("C:\Images\logo.png");
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Расположить(ТабДок.Область("R1C1:R5C4"));
ТабДок.Показать();Метод Расположить привязывает рисунок к прямоугольной области ячеек. Если область не задана, рисунок размещается в левом верхнем углу документа и может перекрыть данные. Альтернатива — свойство Имя с последующим обращением по имени при доработке макета.
Вывод картинки из файла на диске
Самый простой вариант — файл доступен по пути на компьютере, где выполняется код. Конструктор Новый Картинка(ИмяФайла) загружает изображение в память. Поддерживаются распространённые растровые форматы: PNG, JPEG, BMP, GIF, а также векторный WMF/EMF.
Важно учитывать контекст исполнения. Если код выполняется на сервере, путь должен быть доступен именно серверу 1С, а не пользователю. Путь C:\Images\logo.png на сервере указывает на диск сервера. Поэтому в клиент-серверном режиме файлы с клиентских машин сначала передаются на сервер через временное хранилище.
Вывод картинки из макета конфигурации
Для статичных изображений — логотипа, образца подписи — удобно хранить картинку прямо в конфигурации. Создайте общий макет типа «Картинка» (или «Двоичные данные») и загрузите в него файл через конфигуратор. Затем получите изображение методом ПолучитьОбщийМакет:
КартинкаЛоготип = ПолучитьОбщийМакет("ЛоготипКомпании");
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = КартинкаЛоготип;
Рисунок.Расположить(ТабДок.Область("R2C2:R6C6"));Плюс подхода — картинка всегда доступна независимо от файловой системы и прав пользователя. Минус — изменение изображения требует обновления конфигурации, поэтому для логотипов, которые меняются пользователями, лучше подходит хранение в справочнике.
Вывод картинки из хранилища значений
В типовых конфигурациях изображения (фото товаров, факсимиле, логотипы организаций) обычно хранятся в реквизитах типа ХранилищеЗначения. Чтобы вывести такую картинку, нужно получить из хранилища двоичные данные и создать объект Картинка:
ДвоичныеДанные = ТоварСсылка.ФайлКартинки.Получить();
Если ДвоичныеДанные <> Неопределено Тогда
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка(ДвоичныеДанные);
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Расположить(ТабДок.Область("R10C2:R20C5"));
КонецЕсли;Обязательно проверяйте результат метода Получить() на Неопределено: если хранилище пустое, конструктор картинки вызовет ошибку, и вся печатная форма не сформируется. Проверка занимает одну строку, но избавляет от падения печати на товарах без фото.
Управление размером и позиционированием
Свойство РазмерКартинки определяет, как изображение впишется в область. Вариант РеальныйРазмер выводит картинку как есть — при большом исходнике она растянет область и «разорвёт» макет. Пропорционально масштабирует с сохранением пропорций — оптимально для фотографий и логотипов. ПодогнатьРазмер растягивает изображение точно по области, что может исказить пропорции.
Для точного позиционирования без привязки к ячейкам используются свойства Верх, Лево, Высота, Ширина (в миллиметрах). Это удобно для факсимиле, которое должно лежать поверх текста в строго заданной точке. При этом задать порядок наложения можно через Узор и порядок добавления рисунков: позже добавленный рисунок лежит выше.
Вывод рисунка через макет табличного документа
Альтернативный подход — разместить рисунок прямо в макете печатной формы. Откройте макет табличного документа в конфигураторе, выберите пункт меню «Таблица → Рисунки → Вставить рисунок» и укажите картинку. Такой рисунок выводится вместе с областью макета без единой строки кода.
Способ подходит для неизменных элементов оформления. Если изображение нужно подставлять динамически (разные фото товаров в строках), рисунок добавляется программно после вывода области через ТабДок.Вывести() или ТабДок.Присоединить(), с привязкой к только что выведенным строкам.
Как выбрать источник картинки
Проверка результата и типичные ошибки
Перед отправкой на принтер выведите табличный документ на экран методом Показать() или откройте предпросмотр через ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать). Убедитесь, что рисунок виден, не искажён и не перекрывает текст. Проверьте печать на целевом принтере: некоторые драйверы по-разному трактуют прозрачность PNG.
Отдельная проблема — производительность. Если в прайс-лист выводятся сотни фотографий в исходном разрешении, документ формируется долго и занимает много памяти. Практическое решение — хранить в базе уменьшенные копии для печати или сжимать изображения перед сохранением в хранилище.
Как проверить результат
Рисунок виден в предпросмотре, пропорции сохранены
Пустая область или искажённое изображение
Картинка в нужной области, текст читается
Рисунок перекрывает ячейки или съехал за границы
На бумаге и в PDF картинка совпадает с предпросмотром
Картинка пропала или сместилась при печати
Форма выводится без изображения, без ошибок
Ошибка выполнения на пустом хранилище
Часто задаваемые вопросы
Как вывести картинку в ячейку табличного документа без объекта Рисунок?
Напрямую вставить изображение внутрь ячейки как значение нельзя — ячейки содержат только текст и параметры. Стандартный способ — добавить РисунокТабличногоДокумента и привязать его к области нужной ячейки методом Расположить. Визуально это выглядит как картинка в ячейке.
Почему рисунок не отображается, хотя код выполняется без ошибок?
Чаще всего свойству Картинка присвоен пустой объект — например, хранилище вернуло Неопределено или файл не найден. Также проверьте, что область размещения существует и рисунок добавлен именно в тот табличный документ, который выводится на экран.
Можно ли вывести штрихкод как рисунок?
Да. Сформируйте изображение штрихкода (в типовых конфигурациях для этого есть функции работы со штрихкодами, возвращающие двоичные данные картинки), создайте объект Картинка из этих данных и добавьте рисунок в табличный документ обычным способом.
Как вывести разные картинки в строках табличной части?
В цикле по строкам после вывода каждой области добавляйте новый рисунок с привязкой к диапазону строк только что выведенной области. Номер первой строки области можно получить через свойство Верх объекта ОбластьЯчеекТабличногоДокумента.
Поддерживается ли прозрачный фон PNG при печати?
На экране прозрачность обычно отображается корректно, но поведение при печати зависит от драйвера принтера. Если прозрачный логотип печатается с чёрным фоном, сохраните изображение на белом фоне или проверьте настройки драйвера.
Что важно запомнить
Рисунок выводится через Рисунки.Добавить() с присвоением свойства Картинка и привязкой к области. Источник изображения выбирайте по сценарию: макет — для постоянных, хранилище значений — для пользовательских, файл — для локальных случаев. Всегда проверяйте данные на Неопределено и контролируйте результат в предпросмотре и на печати.