В процессе интеграции с Системой быстрых платежей (СБП) одной из ключевых задач является не просто получение ссылки на оплату от НСПК, но и её визуализация в виде 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 (высокий). Это гарантирует, что клиент сможет считать код даже при низком качестве печати или наличии бликов на экране.
В некоторых случаях, особенно в старых конфигурациях или специфических окружениях, прямое обращение к методам БСП может быть недоступно. В такой ситуации мы можем воспользоваться внешней компонентой 1CBarCode.dll. Этот метод требует, чтобы компонента была предварительно установлена в системе или загружена в информационную базу как общий макет.
Посмотрим на последовательность шагов при работе с компонентой:
РеквизитФормыВЗначение("Объект.КомпонентаПечатиШтрихкодов") или через Новый("AddIn.1CBarcode.1").ТипКода обычно равно 16.Текст передается полная ссылка СБП.Преимущество этого метода заключается в глубокой настройке визуальных параметров, однако работа с COM-объектами или внешними компонентами может вызвать сложности при работе 1С на сервере под управлением Linux.
После того как мы получили объект Картинка, нам необходимо вывести его в печатную форму. Рассмотрим, как это сделать правильно, чтобы избежать искажения пропорций штрихкода.
В макете 1С (Табличный документ) выполните следующие действия:
ОбластьQRКода) и тип картинки: Динамическая.Затем в программном коде вывода макета мы передаем нашу картинку в этот объект:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МойМакет");
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьЧека");
// Обращаемся к рисунку в области макета по его имени
РисунокQR = ОбластьМакета.Рисунки.ОбластьQRКода;
РисунокQR.Картинка = КартинкаQR;
ТабДок.Вывести(ОбластьМакета);
Важный нюанс: QR-код всегда должен быть квадратным. Если в макете область рисунка растянута по горизонтали или вертикали, сканеры банковских приложений могут не распознать код. Убедитесь, что свойства рисунка настроены на сохранение пропорций (РазмерКартинки = Пропорционально).
Проанализируем ситуацию с типами QR-кодов в СБП. Существует два вида ссылок:
Для динамических кодов критически важна скорость генерации. Метод БСП ГенерацияШтрихкода.ДанныеQRКода() работает на стороне сервера и обеспечивает высокую производительность, что позволяет генерировать код «на лету» прямо в момент пробития чека на кассе.
Также стоит упомянуть требования к визуализации. Согласно стандартам НСПК, рекомендуется размещать логотип СБП рядом с кодом или в его центре. Если вы решите разместить логотип в центре кода, обязательно используйте максимальный уровень коррекции ошибок (Level H), так как логотип фактически является «повреждением» части данных кода, которое система коррекции должна компенсировать.
В редких случаях, когда локальная генерация невозможна (например, в мобильном клиенте с ограниченными ресурсами), можно использовать внешние API-сервисы для генерации изображений. Мы отправляем GET-запрос со строкой ссылки, а сервис возвращает PNG или SVG файл. Однако помните о безопасности: передача банковских ссылок на сторонние ресурсы может противоречить политике безопасности вашей организации. Локальная генерация средствами 1С всегда является приоритетным и более надежным вариантом.