Как программно сформировать изображение QR-кода СБП в макете 1С?

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

В процессе интеграции с Системой быстрых платежей (СБП) одной из ключевых задач является не просто получение ссылки на оплату от НСПК, но и её визуализация в виде QR-кода. Это необходимо для размещения кода в печатных формах счетов, чеков или для отображения на дисплее покупателя. Рассмотрим подробно, как преобразовать текстовую ссылку СБП в полноценное изображение внутри платформы 1С:Предприятие 8.3.

Использование Библиотеки стандартных подсистем (БСП)

Если вы работаете в современной конфигурации (например, ERP, Управление торговлей 11, Бухгалтерия предприятия 3.0 или Розница 2/3), наиболее эффективным и правильным способом будет использование встроенных механизмов БСП. В составе БСП есть общий модуль ГенерацияШтрихкода, который позволяет получить двоичные данные QR-кода без использования внешних визуальных компонент на форме.

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

Проанализируем пример программного кода для формирования картинки:


// Подготовим текст ссылки, полученный от банка или НСПК
ТекстСсылкиСБП = "https://qr.nspk.ru/AD1F2CD7212E48FA919AB52EF0AEFB33?type=02&bank=10000001&sum=111000&cur=RUB&crc=C08B";

// Укажем параметры генерации
УровеньКоррекции = 2; // Соответствует уровню Q (25% избыточности)
РазмерШтрихкода = 300; // Примерный размер стороны квадрата

// Вызываем метод БСП для генерации двоичных данных картинки
РезультатГенерации = ГенерацияШтрихкода.ДанныеQRКода(ТекстСсылкиСБП, УровеньКоррекции, РазмерШтрихкода);

Если РезультатГенерации.Результат Тогда
    // Создаем объект Картинка из полученных двоичных данных
    КартинкаQR = Новый Картинка(РезультатГенерации.ДвоичныеДанные);
Иначе
    Сообщить("Ошибка генерации: " + РезультатГенерации.ТекстОшибки);
КонецЕсли;

Важно помнить, что для СБП рекомендуется использовать уровень коррекции ошибок Q (средне-высокий) или H (высокий). Это гарантирует, что клиент сможет считать код даже при низком качестве печати или наличии бликов на экране.

Применение внешней компоненты 1С:Печать штрихкодов

В некоторых случаях, особенно в старых конфигурациях или специфических окружениях, прямое обращение к методам БСП может быть недоступно. В такой ситуации мы можем воспользоваться внешней компонентой 1CBarCode.dll. Этот метод требует, чтобы компонента была предварительно установлена в системе или загружена в информационную базу как общий макет.

Посмотрим на последовательность шагов при работе с компонентой:

  1. Создается объект внешней компоненты РеквизитФормыВЗначение("Объект.КомпонентаПечатиШтрихкодов") или через Новый("AddIn.1CBarcode.1").
  2. Устанавливается тип кода. Для QR-кода значение свойства ТипКода обычно равно 16.
  3. В свойство Текст передается полная ссылка СБП.
  4. Вызывается метод получения картинки.

Преимущество этого метода заключается в глубокой настройке визуальных параметров, однако работа с COM-объектами или внешними компонентами может вызвать сложности при работе 1С на сервере под управлением Linux.

Вывод QR-кода в макет печатной формы

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

В макете 1С (Табличный документ) выполните следующие действия:

  1. Создайте область макета.
  2. Вставьте объект типа Рисунок (Меню: Таблица -> Рисунки -> Вставить картинку).
  3. В свойствах рисунка укажите имя (например, ОбластьQRКода) и тип картинки: Динамическая.

Затем в программном коде вывода макета мы передаем нашу картинку в этот объект:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МойМакет");
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьЧека");

// Обращаемся к рисунку в области макета по его имени
РисунокQR = ОбластьМакета.Рисунки.ОбластьQRКода;
РисунокQR.Картинка = КартинкаQR;

ТабДок.Вывести(ОбластьМакета);

Важный нюанс: QR-код всегда должен быть квадратным. Если в макете область рисунка растянута по горизонтали или вертикали, сканеры банковских приложений могут не распознать код. Убедитесь, что свойства рисунка настроены на сохранение пропорций (РазмерКартинки = Пропорционально).

Технические требования и стандарты НСПК

Проанализируем ситуацию с типами QR-кодов в СБП. Существует два вида ссылок:

Для динамических кодов критически важна скорость генерации. Метод БСП ГенерацияШтрихкода.ДанныеQRКода() работает на стороне сервера и обеспечивает высокую производительность, что позволяет генерировать код «на лету» прямо в момент пробития чека на кассе.

Также стоит упомянуть требования к визуализации. Согласно стандартам НСПК, рекомендуется размещать логотип СБП рядом с кодом или в его центре. Если вы решите разместить логотип в центре кода, обязательно используйте максимальный уровень коррекции ошибок (Level H), так как логотип фактически является «повреждением» части данных кода, которое система коррекции должна компенсировать.

Альтернатива через HTTP-сервисы (для облачных решений)

В редких случаях, когда локальная генерация невозможна (например, в мобильном клиенте с ограниченными ресурсами), можно использовать внешние API-сервисы для генерации изображений. Мы отправляем GET-запрос со строкой ссылки, а сервис возвращает PNG или SVG файл. Однако помните о безопасности: передача банковских ссылок на сторонние ресурсы может противоречить политике безопасности вашей организации. Локальная генерация средствами 1С всегда является приоритетным и более надежным вариантом.

← На главную