Документы и Печать · 10 мин
Как вставить картинку в макет в 1С 8.3
Как вставить картинку в макет в 1С 8.3: табличный документ, логотип в печатной форме, картинка из двоичных данных. Пошаговая инструкция с примерами кода.
Вставка картинки в макет — типовая задача при доработке печатных форм в 1С 8.3: добавить логотип компании в счёт, поместить факсимильную подпись в договор, вывести штрихкод или фотографию товара. Платформа поддерживает несколько способов, и выбор зависит от того, где хранится изображение и какой тип макета используется.
Чаще всего картинку добавляют в макет типа «Табличный документ» — именно так устроены большинство печатных форм в типовых конфигурациях. Реже используют макеты типа «Двоичные данные» или «ActiveDocument», где изображение хранится целиком как ресурс конфигурации.
Ниже разобраны все рабочие способы: вставка через конфигуратор без программирования, вывод картинки из кода, подстановка изображения из справочника (например, логотипа организации), а также типичные ошибки, из-за которых картинка не появляется на печати.
Какие типы макетов поддерживают картинки
В 1С 8.3 изображения можно разместить в нескольких видах макетов, и механика вставки у них разная. Макет типа «Табличный документ» позволяет вставить картинку прямо в ячейку или как отдельный объект-рисунок поверх таблицы — это основной вариант для печатных форм.
Макет типа «Двоичные данные» хранит сам файл картинки (PNG, JPEG) как ресурс конфигурации. Такой макет не показывается пользователю напрямую — его читают из кода методом ПолучитьМакет() и передают в табличный документ или на форму. Этот способ удобен, когда одна и та же картинка (например, стандартный логотип) должна выводиться в разных печатных формах.
Макеты типа «ActiveDocument» (HTML-документ, документ Word) также поддерживают изображения, но там картинки вставляются средствами самого формата — через HTML-разметку или шаблон Word. В этой статье основной акцент сделан на табличный документ как наиболее востребованный сценарий.
Способы хранения картинки
Подходит для статичных изображений, которые не меняются: рамки, подложки. Ограничение — картинка зашита в конфигурацию, для замены нужен конфигуратор.
Одна картинка как ресурс, выводится кодом в любые печатные формы. Для замены также нужна доработка конфигурации.
Пользователь меняет изображение сам, без конфигуратора. Оптимально для логотипов организаций и факсимиле.
Вставка картинки в макет табличного документа через конфигуратор
Это самый простой способ, не требующий программирования. Откройте конфигуратор, найдите нужный объект (документ, справочник или общий макет), перейдите на вкладку «Макеты» и откройте макет типа «Табличный документ». Если макета ещё нет, создайте его кнопкой «Добавить» и выберите тип «Табличный документ».
Дальше есть два варианта. Первый — вставка рисунка как объекта: в меню выберите «Таблица — Рисунки — Вставить рисунок» (в некоторых версиях платформы пункт находится в главном меню «Таблица»). В диалоге укажите файл изображения, и рисунок появится поверх таблицы. Перетащите его мышью в нужное место и настройте размер.
Второй вариант — картинка внутри ячейки. Выделите ячейку, откройте её свойства (правый клик — «Свойства») и в свойстве «Картинка» выберите файл. Также полезно настроить свойство «РазмерКартинки»: значение «Пропорционально» сохранит пропорции изображения при изменении размера ячейки.
- 1Откройте конфигуратор и найдите объект с нужной печатной формой
- 2Перейдите на вкладку «Макеты» и откройте макет типа «Табличный документ»
- 3Выберите меню «Таблица — Рисунки — Вставить рисунок» и укажите файл
- 4Перетащите рисунок в нужную позицию и задайте размер
- 5Обновите конфигурацию базы данных (F7) и проверьте печатную форму в режиме предприятия
Вывод картинки из кода
Если изображение хранится в макете «Двоичные данные» или приходит извне, его выводят программно. Сначала в макете табличного документа создайте именованную область и вставьте в неё пустой рисунок — он послужит контейнером. Затем в модуле менеджера объекта или в общем модуле печати получите область и присвойте рисунку картинку.
Типовой фрагмент кода выглядит так:
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
Рисунок = ОбластьМакета.Рисунки.Логотип;
Рисунок.Картинка = Новый Картинка(ПолучитьМакет("ЛоготипКомпании"));
ТабличныйДокумент.Вывести(ОбластьМакета);
Здесь ПолучитьМакет("ЛоготипКомпании") возвращает двоичные данные макета, а конструктор Новый Картинка() преобразует их в объект картинки. Обратите внимание: обращение к рисунку идёт через коллекцию Рисунки области, а не через ячейки. Если рисунок называется иначе — уточните его имя в свойствах рисунка в макете.
Рисунок = ОбластьМакета.Рисунки.Логотип;
Рисунок.Картинка = Новый Картинка(ДвоичныеДанные);
ТабличныйДокумент.Вывести(ОбластьМакета);Вывод логотипа или факсимиле из базы данных
На практике логотип чаще хранится не в конфигурации, а в базе — например, в реквизите справочника «Организации» типа «Хранилище значения». Это правильный подход: пользователь меняет логотип сам, без доработки конфигурации. В типовых конфигурациях (БП, УТ, ERP) для этого есть штатные механизмы хранения файлов.
Чтобы вывести такую картинку, получите двоичные данные из хранилища и передайте их в рисунок макета:
ДвоичныеДанные = Организация.Логотип.Получить();
Если ДвоичныеДанные <> Неопределено Тогда
ОбластьМакета.Рисунки.Логотип.Картинка = Новый Картинка(ДвоичныеДанные);
КонецЕсли;
Обязательно делайте проверку на Неопределено: если логотип у организации не заполнен, попытка создать картинку из пустого значения вызовет ошибку и печатная форма не сформируется. Альтернатива — выводить область без рисунка вообще, если картинки нет.
Картинка в управляемой форме и внешних печатных формах
Для внешних печатных форм (подключаемых через «Дополнительные отчеты и обработки») механика та же: макет табличного документа лежит внутри обработки, рисунок добавляется в конфигураторе при её создании. Если нужна картинка из базы — читайте её из справочника в модуле обработки, код идентичен приведённому выше.
На управляемой форме картинку выводят иначе: через реквизит формы типа «Строка» с адресом во временном хранилище и элемент формы «Поле картинки». Двоичные данные помещают во временное хранилище методом ПоместитьВоВременноеХранилище(), а адрес присваивают реквизиту. Это отдельный сценарий, не связанный с макетами печати, но его часто путают с основной задачей.
Частые ошибки и как их исправить
Самая распространённая проблема — рисунок не отображается на печати, хотя в макете виден. Причины: рисунок выходит за границы области, которая выводится в документ; область с рисунком не выводится кодом; либо рисунок перекрыт другим объектом. Проверьте, что рисунок целиком находится внутри именованной области, которая реально выводится.
Вторая типичная ошибка — искажение пропорций. Если размер рисунка задан вручную и не совпадает с пропорциями исходника, логотип «расплывётся» или сплющится. Используйте режим размера «Пропорционально» или подгоняйте размер с сохранением соотношения сторон.
Третья проблема — ошибка «Недопустимое значение» при выводе из кода. Она возникает, когда двоичные данные пустые или содержат не изображение (например, в хранилище записан PDF). Перед созданием картинки проверяйте, что данные получены и это действительно графический файл.
Проверка результата
После вставки картинки обновите конфигурацию базы данных и сформируйте печатную форму в режиме предприятия. Проверьте три вещи: картинка видна на экране, не искажена и корректно переносится при выводе в PDF или на принтер. Просмотр на экране и реальная печать иногда отличаются — проверяйте именно печатный предпросмотр.
Если печатная форма доработана через расширение конфигурации, убедитесь, что расширение применено к нужной информационной базе и не конфликтует с другими доработками той же формы.
Как проверить результат
Картинка видна в сформированной печатной форме, пропорции сохранены
Рисунок отсутствует, обрезан или растянут
Картинка чёткая, не перекрывает текст
Изображение мыльное или смещается относительно макета
Печатная форма формируется у всех организаций, включая те, где логотип не задан
У части документов возникает ошибка при выводе
FAQ
Можно ли вставить картинку в макет без конфигуратора?
Да, если конфигурация поддерживает изменение макета в режиме предприятия («Ещё — Изменить макет» в печатной форме). Но такие изменения хранятся в пользовательских настройках и могут быть потеряны при обновлении. Для надёжного результата правьте макет в конфигураторе или через расширение.
Какие форматы изображений поддерживает табличный документ?
Платформа устойчиво работает с распространёнными растровыми форматами: PNG, JPEG, BMP, GIF. Для логотипов удобнее PNG — он поддерживает прозрачный фон, и картинка аккуратно ложится на макет без белой подложки.
Почему картинка видна в макете, но не выводится на печать?
Чаще всего рисунок находится за пределами именованной области, которую код выводит в табличный документ. Растяните границы области так, чтобы рисунок полностью входил в неё, либо переместите рисунок внутрь выводимой области.
Как вывести разные логотипы для разных организаций?
Храните логотип в реквизите справочника «Организации» (хранилище значения или присоединённый файл), а в коде печати получайте двоичные данные по текущей организации документа и присваивайте их рисунку макета. Один макет при этом обслуживает все организации.
Можно ли вставить штрихкод или QR-код в макет как картинку?
Да. Штрихкод формируется программно (в типовых конфигурациях есть механизмы генерации изображения штрихкода), полученная картинка присваивается рисунку макета так же, как логотип. Вставлять готовый файл штрихкода в макет статично не имеет смысла — он уникален для каждого документа.
Что важно запомнить
Статичную картинку вставляйте в макет табличного документа через конфигуратор («Таблица — Рисунки — Вставить рисунок»), динамические изображения (логотипы, подписи) храните в базе и выводите кодом через коллекцию Рисунки области. Следите, чтобы рисунок попадал внутрь выводимой области, проверяйте данные на пустоту и сжимайте тяжёлые файлы.