Как вставить QR-код или картинку в макет 1С?

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

Часто перед разработчиками встает задача вывести в печатную форму не только текст и таблицы, но и графические изображения, например, логотип компании, подпись, печать или, что особенно актуально, QR-код. Разберемся, как правильно подойти к этой задаче, какие инструменты платформы "1С:Предприятие" для этого использовать, и почему попытка вставить картинку в текстовый макет обречена на провал.

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

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

Его основная задача — формирование простых текстовых файлов, файлов обмена данными (например, XML или JSON) или несложных печатных форм, не требующих графического оформления. Он оперирует только строками и символами. В его объектной модели просто нет возможности для вставки и отображения изображений. Поэтому, если вы пытаетесь добавить QR-код в ТекстовыйДокумент, вы не найдете подходящего метода — его там нет.

Основное решение: используем табличный макет

Для вывода изображений, сложного форматирования и, в частности, QR-кодов предназначен другой, гораздо более мощный инструмент — табличный макет. Он представляет собой аналог листа электронной таблицы (как в Excel) и позволяет гибко управлять расположением данных в ячейках, а также вставлять различные объекты, включая рисунки.

Рассмотрим по шагам, как решить нашу задачу с выводом QR-кода с помощью табличного макета.

  1. Создание макета

    В конфигураторе создаем новый макет и выбираем для него тип "Табличный документ". В этом макете мы можем спроектировать внешний вид нашей печатной формы: определить области (шапка, строка, подвал), настроить шрифты, границы, объединение ячеек и т.д.

  2. Программное формирование QR-кода

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

    Вам не нужно "изобретать велосипед". Изучите общие модули вашей конфигурации, связанные с печатью или работой с оборудованием. Например, в конфигурации "1С:Библиотека подключаемого оборудования" есть готовые алгоритмы, которые можно взять за основу. Обычно функция генерации кода принимает на вход строку, которую нужно закодировать, и возвращает объект типа Картинка.

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

    Теперь самое главное — как программно вставить сгенерированную картинку в наш макет. Алгоритм выглядит следующим образом:

    1. Создаем объект ТабличныйДокумент, в который будем выводить результат.
    2. Получаем наш макет из конфигурации с помощью функции ПолучитьМакет("ИмяМакета").
    3. Получаем нужную область макета, например, ОбластьПодвал = Макет.ПолучитьОбласть("Подвал").
    4. Выводим эту область в наш итоговый табличный документ: ТабДок.Вывести(ОбластьПодвал).
    5. Теперь вставляем картинку. В объекте ТабличныйДокумент есть коллекция Рисунки. Мы добавляем в нее новый элемент.

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

    
    // ТабДок - это наш итоговый ТабличныйДокумент
    // Предполагаем, что нужная область уже выведена в него
    
    // Получаем картинку с QR-кодом (функция зависит от вашей конфигурации)
    // Например, это может быть функция из общего модуля
    КартинкаQR = МенеджерОборудованияКлиент.КартинкаQRкода("https://ваш-сайт.ру", 200);
    
    // Находим ячейку в табличном документе, куда будем вставлять QR-код
    // Это можно сделать по имени области, если оно было задано в макете, или по координатам
    ОбластьДляКартинки = ТабДок.НайтиТекст("МестоДляQR"); // Условный пример, если в ячейке был текст-заполнитель
    Если ОбластьДляКартинки = Неопределено Тогда
        // Если не нашли по тексту, можно задать координаты явно
        // Например, для 5-й строки и 2-й колонки
        ОбластьДляКартинки = ТабДок.Область(5, 2, 5, 2);
    КонецЕсли;
    
    // Добавляем рисунок в коллекцию рисунков табличного документа
    Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    
    // Привязываем нашу картинку к объекту рисунка
    Рисунок.Картинка = КартинкаQR;
    
    // Задаем положение и размеры рисунка, привязывая его к ячейкам
    Рисунок.Лево = ОбластьДляКартинки.Лево;
    Рисунок.Верх = ОбластьДляКартинки.Верх;
    Рисунок.Ширина = ОбластьДляКартинки.Ширина; // Можно задать явно, например 100
    Рисунок.Высота = ОбластьДляКартинки.Высота; // Можно задать явно, например 100
    
    // Важное свойство, чтобы картинка не искажалась
    Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
    
  4. Отображение и сохранение результата

    После того как табличный документ полностью сформирован, его можно показать пользователю (ТабДок.Показать()), отправить на печать (ТабДок.Напечатать()) или сохранить в файл нужного формата, например, PDF или PNG, для последующей отправки на сайт или по почте (ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF)).

Практический пример: QR-код на кассовом чеке

Рассмотрим ситуацию из обсуждения: нужно сделать кассовый чек с QR-кодом, который ведет на страницу сайта для скачивания электронной версии чека. Как быть?

Здесь логика абсолютно та же. Неважно, куда выводится результат — на принтер чеков или в файл. Программа формирует макет. А каким он будет, решаете вы, разработчик.

  1. Создаете табличный макет для печатной формы чека.
  2. В коде формирования чека генерируете QR-код с нужной ссылкой.
  3. Вставляете полученную картинку в нужную область табличного документа, как показано в примере выше.
  4. Далее, в зависимости от задачи, вы либо отправляете этот табличный документ на печать на фискальный регистратор (драйвер оборудования сам обработает картинку), либо сохраняете его в файл (например, PDF) и загружаете на сайт.

Идея "сделать макет в табличном доке, вставить картинку с кодом и отправлять на сайт" — абсолютно верный и стандартный способ решения этой задачи средствами платформы 1С.

Альтернативный вариант: HTML-макеты

Стоит упомянуть еще один тип макета — HTML-макет. Если ваша задача — сформировать документ для отправки по электронной почте или для отображения на веб-странице, этот вариант может оказаться даже удобнее табличного. В HTML-макете вы можете использовать стандартный тег <img> для вставки изображения. Картинку при этом можно либо передать в виде данных в формате Base64, либо предварительно сохранить во временный файл и указать путь к нему.

Этот подход часто используется в подсистемах, работающих с электронной почтой, например, в "1С:Документооборот".

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

← На главную