В современных реалиях розничной торговли использование Системы быстрых платежей (СБП) становится стандартом. В конфигурации 1С:Управление нашей фирмой (УНФ) 3.0 функционал работы с QR-кодами глубоко интегрирован в рабочее место кассира (РМК). Однако часто возникают задачи кастомизации: например, когда необходимо не просто показать QR-код на экране, но и сохранить его в файл, вывести в специфический табличный документ или отправить клиенту через мессенджер. В этой статье мы подробно разберем, где именно в коде «рождается» этот QR-код и как его перехватить для своих целей.
Для начала проанализируем структуру конфигурации. В интерфейсе РМК вывод QR-кода происходит в момент выбора оплаты через СБП. Как показывает практика и коллективный опыт разработчиков, ключевые механизмы обработки пречека и визуализации оплаты сосредоточены не в самой форме РМК, а в специализированных общих модулях интеграции.
Рассмотрим основной программный путь. Основная логика вывода данных на экран кассира находится в модуле:
Общие модули \ ИнтеграцияСПлатежнымиСистемамиУНФКлиент
Внутри этого модуля нас интересует процедура ВывестиПречекНаЭкран(Форма). Именно здесь система аккумулирует данные о платеже, полученные от банковского сервиса, и готовит их для отображения пользователю. Если вы планируете изменить поведение системы, «вытащить» картинку кода или настроить отправку печатной формы на WhatsApp, начинать отладку следует именно отсюда.
Важно понимать, что платежный сервис (будь то банк напрямую или агрегатор) возвращает не готовую картинку, а текстовую ссылку формата https://qr.nspk.ru/.... Наша задача — превратить эту строку в графический объект. Проанализируем, как это делает типовое решение.
Для генерации штрихкодов в 1С обычно используется составная логика из БСП (Библиотеки стандартных подсистем). Процесс выглядит следующим образом:
Пример кода, который выполняет это преобразование, обычно опирается на возможности модуля ГенерацияШтрихкода:
// Подготовка параметров для формирования QR
ПараметрыКвадратногоКода = БиблиотекаШтрихкодов.ПараметрыГенерацииQRКода();
ПараметрыКвадратногоКода.Текст = "https://qr.nspk.ru/AD10004B8G9218G19011728104880193?type=02&bank=100000000007&sum=10000&cur=RUB&crc=ABCD";
ПараметрыКвадратногоКода.Ширина = 300;
ПараметрыКвадратногоКода.Высота = 300;
// Формирование объекта Картинка
КартинкаQR = БиблиотекаШтрихкодов.СформироватьШтрихкод(ПараметрыКвадратногоКода);
Выясним, как поместить полученную картинку в печатную форму. Ошибка новичков заключается в попытке присвоить картинку напрямую в значение ячейки. В 1С табличный документ работает с графикой через коллекцию Рисунки (Drawings). Проанализируем алгоритм вывода:
Картинка.КартинкаQR в объект рисунка.Рассмотрим детальный пример реализации:
// Получаем область из макета
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьСБП");
// Добавляем графический объект на область
РисунокQR = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
РисунокQR.Картинка = КартинкаQR; // Наша сформированная картинка штрихкода
// Позиционирование (в миллиметрах)
РисунокQR.Верх = 2;
РисунокQR.Лево = 2;
РисунокQR.Ширина = 40;
РисунокQR.Высота = 40;
// Убираем рамку, если она не нужна
РисунокQR.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
// Выводим область в итоговый документ
ТабДок.Вывести(ОбластьМакета);
При работе в УНФ 3.0 важно различать два вида QR-кодов, так как методы доступа к ним в базе данных различаются:
1. Динамический QR-код. Он генерируется «на лету» под конкретную сумму чека. Ссылка на него живет только в рамках текущей транзакции. Если вам нужно поймать именно его, ищите данные в объекте оплаты в модуле ИнтеграцияСПлатежнымиСистемамиУНФКлиент.
2. Статический (кассовый) QR-код. Он привязан к конкретной кассе и не меняется от чека к чеку (клиент сам вводит сумму в приложении банка). Изображение такого кода хранится в реквизитах справочника Кассы ККМ. Если ваша задача — вывести статический код, вам не нужно обращаться к платежным сервисам, достаточно извлечь данные из справочника кассы, связанной с текущим РМК.
Разберем полезный лайфхак для тех, кто пытается найти место формирования кода в незнакомой конфигурации. В Конфигураторе 1С есть инструмент, который многие называют «будильником» — это Замер производительности.
Если вы не знаете, какой метод отвечает за вывод QR, выполните следующие действия:
QR, Precheck или SBP, будут вашими искомыми точками.Перед тем как приступать к написанию кода, проанализируем, нельзя ли решить задачу стандартными средствами. В УНФ 3.0 существует мощный механизм Шаблоны чеков ККМ (раздел Продажи -> Печать).
Если ваша цель — добавить QR СБП в пречек, который печатается на фискальном регистраторе или обычном принтере, попробуйте отредактировать шаблон в пользовательском режиме. В современных редакциях УНФ предусмотрены специальные поля для вывода QR-кодов оплаты, которые можно просто перетащить в макет шаблона без использования конфигуратора.
В последних релизах УНФ рядом с выводом QR-кода часто можно встретить вызов методов для записи NFC-меток. Посмотрим на это с практической стороны: данные, которые записываются в NFC-метку, идентичны строке, из которой строится QR-код. Если вы нашли переменную, содержащую ссылку для записи NFC, вы смело можете использовать её для генерации своего изображения QR-кода.
Таким образом, мы выяснили, что для успешного решения задачи необходимо совместить поиск в общем модуле ИнтеграцияСПлатежнымиСистемамиУНФКлиент, использование библиотеки генерации штрихкодов и правильную работу с коллекцией рисунков табличного документа.