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