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

Разработка и Конфигурация · 10 мин

Как вставить картинку в табличный документ 1С

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

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

Выбор способа зависит от задачи. Если картинка статична (логотип), проще вставить её в макет через конфигуратор. Если изображение меняется от документа к документу (фото товара, скан подписи), используют программную вставку через объект РисунокТабличногоДокумента или заполнение ячейки с типом «Картинка».

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

Способы вставки картинки: что выбрать

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

Второй способ — программное добавление рисунка через коллекцию Рисунки табличного документа. Используется, когда изображение берётся из базы данных (например, из реквизита справочника «Номенклатура») или из внешнего файла во время формирования отчёта.

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

Сравнение вариантов

Рисунок в макете (конфигуратор)

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

ТабДок.Рисунки.Добавить()

Для динамических изображений в произвольном месте документа. Требует кода и расчёта координат

Ячейка с типом «Картинка»

Для картинок в строках таблицы. Изображение привязано к ячейке и масштабируется вместе с ней

Вставка картинки в макет через конфигуратор

Откройте нужную конфигурацию в режиме «Конфигуратор» и найдите макет табличного документа: в общих макетах или в макетах конкретного объекта (например, документа «СчётНаОплату»). Двойной щелчок откроет редактор макета.

Для вставки рисунка используйте меню Таблица → Рисунки → Вставить рисунок (в некоторых версиях платформы — «Картинка»). В диалоге выберите источник: из файла на диске или из общей картинки конфигурации. После вставки рисунок можно перемещать мышью и менять размер за угловые маркеры.

Обратите внимание на свойства рисунка (правый клик → «Свойства»). Параметры «Размер» и «Положение» определяют, как картинка поведёт себя при печати. Полезное свойство — «Узор» и привязка к границам: если строки таблицы могут сдвигаться, статичный рисунок останется на месте.

Порядок действий в конфигураторе
  1. 1
    Откройте конфигуратор и найдите нужный макет табличного документа
  2. 2
    Откройте макет двойным щелчком
  3. 3
    Выберите меню Таблица → Рисунки → Вставить рисунок
  4. 4
    Укажите файл изображения или общую картинку
  5. 5
    Разместите рисунок, настройте размер и свойства
  6. 6
    Сохраните конфигурацию и проверьте печатную форму в режиме предприятия

Программная вставка рисунка из файла

Когда картинка хранится вне конфигурации — в файле на диске или в сетевой папке — её добавляют в уже сформированный табличный документ. Сначала создаётся объект Картинка с указанием файла, затем рисунок добавляется в коллекцию Рисунки табличного документа.

bsl
ТабДок = Новый ТабличныйДокумент;
// ... вывод областей макета ...

Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка("C:\Images\logo.png");
Рисунок.Верх = 5;    // мм от верхнего края
Рисунок.Лево = 10;   // мм от левого края
Рисунок.Высота = 20; // мм
Рисунок.Ширина = 40; // мм

ТабДок.Показать();

Координаты Верх, Лево, Высота, Ширина задаются в миллиметрах. Рисунок размещается поверх ячеек и не влияет на их содержимое. Если нужно, чтобы картинка не перекрывала текст, заранее оставьте под неё пустую область в макете.

При работе на сервере помните: путь к файлу должен быть доступен с сервера 1С, а не с клиентского компьютера. Файл C:\Images\logo.png на машине пользователя серверный код не увидит — это одна из самых частых причин «пропавшей» картинки.

Вставка картинки из базы данных (двоичные данные)

Фото товаров, сканы подписей и печати обычно хранятся в базе — в реквизитах типа «ХранилищеЗначения». В этом случае файл на диске не нужен: картинка создаётся из двоичных данных.

bsl
ДвоичныеДанные = Товар.ФайлКартинки.Получить(); // реквизит типа ХранилищеЗначения
Если ДвоичныеДанные <> Неопределено Тогда
    Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    Рисунок.Картинка = Новый Картинка(ДвоичныеДанные);
    Рисунок.Верх = 30;
    Рисунок.Лево = 150;
    Рисунок.Высота = 30;
    Рисунок.Ширина = 30;
КонецЕсли;

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

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

bsl
// В макете: ячейка с параметром "Фото", тип содержимого — Картинка
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовара");
ДвоичныеДанные = Выборка.Фото.Получить();
Если ДвоичныеДанные <> Неопределено Тогда
    ОбластьСтрока.Параметры.Фото = Новый Картинка(ДвоичныеДанные);
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);

Печать и подпись руководителя в документе

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

Рекомендуемый подход — вставить оба изображения рисунками поверх области «Подвал» макета, подобрав координаты опытным путём на тестовой печати. Учтите, что размеры в миллиметрах в свойствах рисунка соответствуют реальным размерам на бумаге, поэтому отладку удобно вести, распечатывая пробный лист.

Проверка результата и типичные ошибки

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

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

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

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

Картинка видна в табличном документе после формирования

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

Область пустая или значок битого изображения — проверьте источник данных

Предварительный просмотр печати
Норма

Рисунок на своём месте, не перекрывает текст

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

Рисунок съехал или обрезан — скорректируйте координаты и размеры

Печать на бумаге или в PDF
Норма

Изображение чёткое, пропорции сохранены

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

Картинка растянута или размыта — проверьте соотношение ширины и высоты

Типичные ошибки
01
Локальный путь к файлу в серверном коде — картинка не находится, форма не формируется
02
Отсутствие проверки на пустое хранилище значений — исключение прерывает вывод всей печатной формы
03
Нарушение пропорций: заданы ширина и высота, не соответствующие исходному изображению — картинка растягивается
04
Рисунок добавлен до вывода областей, а потом перекрыт поздними операциями — вставляйте рисунки после вывода всех областей
05
Слишком большой файл изображения — печатная форма формируется медленно, PDF получается тяжёлым; сжимайте картинки заранее

Ограничения и практические рекомендации

Табличный документ — не графический редактор: у рисунков нет обтекания текстом, слоёв и прозрачного позиционирования по якорям. Если макет сложный, с перекрывающимися элементами, проще заранее подготовить фоновое изображение целиком (например, скан фирменного бланка) и вставить его одним рисунком на весь лист.

По форматам: платформа корректно работает с распространёнными растровыми форматами — PNG, JPEG, BMP, GIF. Для логотипов и печатей предпочтителен PNG с прозрачным фоном: при наложении на цветные области макета не будет белого прямоугольника вокруг изображения.

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

Часто задаваемые вопросы

Можно ли вставить картинку в табличный документ без программирования?

Да, если изображение статичное. Откройте макет в конфигураторе и используйте меню Таблица → Рисунки → Вставить рисунок. Картинка сохранится внутри макета и будет выводиться при каждом формировании печатной формы без единой строки кода.

Почему картинка видна при тестировании на моём компьютере, но не у пользователей?

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

Как сохранить пропорции картинки при изменении размера?

Задавайте только один размер — ширину или высоту — либо рассчитайте второй пропорционально исходным размерам изображения. Узнать исходные размеры можно через свойства объекта Картинка: Ширина и Высота возвращают размеры в пикселях.

Как вывести фото товара в каждой строке прайс-листа?

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

Почему PDF с печатной формой получается очень большим?

Причина — несжатые изображения высокого разрешения. Фото в несколько мегапикселей для печатной формы избыточно. Уменьшайте картинки до разумного размера (например, 300–600 пикселей по большей стороне для логотипов и фото) перед сохранением в базу.

Итог

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

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