Как программно вывести QR-код СБП в табличный документ в 1С:УНФ 3.0

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет IT и автоматизация бизнеса
← На главную

В современных реалиях розничной торговли использование Системы быстрых платежей (СБП) становится стандартом. В конфигурации 1С:Управление нашей фирмой (УНФ) 3.0 функционал работы с QR-кодами глубоко интегрирован в рабочее место кассира (РМК). Однако часто возникают задачи кастомизации: например, когда необходимо не просто показать QR-код на экране, но и сохранить его в файл, вывести в специфический табличный документ или отправить клиенту через мессенджер. В этой статье мы подробно разберем, где именно в коде «рождается» этот QR-код и как его перехватить для своих целей.

Поиск точки входа: где формируется QR-код в РМК

Для начала проанализируем структуру конфигурации. В интерфейсе РМК вывод QR-кода происходит в момент выбора оплаты через СБП. Как показывает практика и коллективный опыт разработчиков, ключевые механизмы обработки пречека и визуализации оплаты сосредоточены не в самой форме РМК, а в специализированных общих модулях интеграции.

Рассмотрим основной программный путь. Основная логика вывода данных на экран кассира находится в модуле:

Общие модули \ ИнтеграцияСПлатежнымиСистемамиУНФКлиент

Внутри этого модуля нас интересует процедура ВывестиПречекНаЭкран(Форма). Именно здесь система аккумулирует данные о платеже, полученные от банковского сервиса, и готовит их для отображения пользователю. Если вы планируете изменить поведение системы, «вытащить» картинку кода или настроить отправку печатной формы на WhatsApp, начинать отладку следует именно отсюда.

Разбор процесса генерации изображения

Важно понимать, что платежный сервис (будь то банк напрямую или агрегатор) возвращает не готовую картинку, а текстовую ссылку формата https://qr.nspk.ru/.... Наша задача — превратить эту строку в графический объект. Проанализируем, как это делает типовое решение.

Для генерации штрихкодов в 1С обычно используется составная логика из БСП (Библиотеки стандартных подсистем). Процесс выглядит следующим образом:

  1. Получение текстовой строки оплаты из структуры данных платежа.
  2. Настройка параметров генерации (уровень коррекции ошибок, размер маски).
  3. Вызов компоненты печати штрихкодов.

Пример кода, который выполняет это преобразование, обычно опирается на возможности модуля ГенерацияШтрихкода:


// Подготовка параметров для формирования QR
ПараметрыКвадратногоКода = БиблиотекаШтрихкодов.ПараметрыГенерацииQRКода();
ПараметрыКвадратногоКода.Текст = "https://qr.nspk.ru/AD10004B8G9218G19011728104880193?type=02&bank=100000000007&sum=10000&cur=RUB&crc=ABCD";
ПараметрыКвадратногоКода.Ширина = 300;
ПараметрыКвадратногоКода.Высота = 300;

// Формирование объекта Картинка
КартинкаQR = БиблиотекаШтрихкодов.СформироватьШтрихкод(ПараметрыКвадратногоКода);

Вывод QR-кода в Табличный документ

Выясним, как поместить полученную картинку в печатную форму. Ошибка новичков заключается в попытке присвоить картинку напрямую в значение ячейки. В 1С табличный документ работает с графикой через коллекцию Рисунки (Drawings). Проанализируем алгоритм вывода:

  1. Создаем или получаем область макета, где должен располагаться код.
  2. Добавляем в коллекцию рисунков новый элемент типа Картинка.
  3. Устанавливаем координаты и размеры рисунка.
  4. Собственно, помещаем сформированную КартинкаQR в объект рисунка.

Рассмотрим детальный пример реализации:


// Получаем область из макета
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьСБП");

// Добавляем графический объект на область
РисунокQR = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
РисунокQR.Картинка = КартинкаQR; // Наша сформированная картинка штрихкода

// Позиционирование (в миллиметрах)
РисунокQR.Верх = 2; 
РисунокQR.Лево = 2;
РисунокQR.Ширина = 40;
РисунокQR.Высота = 40;

// Убираем рамку, если она не нужна
РисунокQR.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);

// Выводим область в итоговый документ
ТабДок.Вывести(ОбластьМакета);

Динамический против Статического QR: в чем разница для разработчика

При работе в УНФ 3.0 важно различать два вида QR-кодов, так как методы доступа к ним в базе данных различаются:

1. Динамический QR-код. Он генерируется «на лету» под конкретную сумму чека. Ссылка на него живет только в рамках текущей транзакции. Если вам нужно поймать именно его, ищите данные в объекте оплаты в модуле ИнтеграцияСПлатежнымиСистемамиУНФКлиент.

2. Статический (кассовый) QR-код. Он привязан к конкретной кассе и не меняется от чека к чеку (клиент сам вводит сумму в приложении банка). Изображение такого кода хранится в реквизитах справочника Кассы ККМ. Если ваша задача — вывести статический код, вам не нужно обращаться к платежным сервисам, достаточно извлечь данные из справочника кассы, связанной с текущим РМК.

Использование инструментов отладки: «Секундомер»

Разберем полезный лайфхак для тех, кто пытается найти место формирования кода в незнакомой конфигурации. В Конфигураторе 1С есть инструмент, который многие называют «будильником» — это Замер производительности.

Если вы не знаете, какой метод отвечает за вывод QR, выполните следующие действия:

  1. Запустите РМК в режиме предприятия.
  2. В конфигураторе включите «Замер производительности».
  3. Нажмите кнопку оплаты СБП в 1С.
  4. Как только QR-код появился на экране, остановите замер.
  5. Проанализируйте список вызванных функций. Те, что выполнялись дольше всего или имели в названии слова QR, Precheck или SBP, будут вашими искомыми точками.

Альтернатива: использование шаблонов чеков

Перед тем как приступать к написанию кода, проанализируем, нельзя ли решить задачу стандартными средствами. В УНФ 3.0 существует мощный механизм Шаблоны чеков ККМ (раздел Продажи -> Печать).

Если ваша цель — добавить QR СБП в пречек, который печатается на фискальном регистраторе или обычном принтере, попробуйте отредактировать шаблон в пользовательском режиме. В современных редакциях УНФ предусмотрены специальные поля для вывода QR-кодов оплаты, которые можно просто перетащить в макет шаблона без использования конфигуратора.

Работа с NFC-метками

В последних релизах УНФ рядом с выводом QR-кода часто можно встретить вызов методов для записи NFC-меток. Посмотрим на это с практической стороны: данные, которые записываются в NFC-метку, идентичны строке, из которой строится QR-код. Если вы нашли переменную, содержащую ссылку для записи NFC, вы смело можете использовать её для генерации своего изображения QR-кода.

Таким образом, мы выяснили, что для успешного решения задачи необходимо совместить поиск в общем модуле ИнтеграцияСПлатежнымиСистемамиУНФКлиент, использование библиотеки генерации штрихкодов и правильную работу с коллекцией рисунков табличного документа.

← На главную