Часто разработчики 1С сталкиваются с ситуацией, когда сформированный в программе QR-код выглядит корректно, успешно считывается обычными сканерами текста, но абсолютно игнорируется банковскими терминалами или мобильными приложениями (Сбербанк Онлайн, Тинькофф и другие). В этой статье мы подробно разберем, почему это происходит, проанализируем требования национального стандарта и выясним, как правильно подготовить данные в 1С, чтобы платеж проходил без ошибок.
Первое, что нам необходимо понять: банковское приложение ожидает не просто набор символов, а строго структурированную строку. Согласно ГОСТ Р 56042-2014, платежный реквизит в виде штрих-кода должен начинаться со служебного заголовка. Рассмотрим основные технические требования:
ST00012 (для кодировки UTF-8) или ST00011 (для Win-1251). Использование UTF-8 является современным стандартом и гарантирует корректное отображение русских букв в названии организации и назначении платежа.|.Sum должно быть передано значение 10050.Для того чтобы банковский терминал идентифицировал код как платежный, необходимо передать минимальный набор тегов (ключей). Проанализируем список обязательных полей:
Name — Наименование получателя платежа.PersonalAcc — Номер счета получателя (20 знаков).BankName — Название банка получателя.BIC — БИК банка (9 знаков).CorrespAcc — Корреспондентский счет (20 знаков).Если вы формируете платеж в бюджет (например, в налоговую), список дополняется критически важными полями: PayeeINN (ИНН получателя), KPP (КПП), CBC (КБК), OKTMO (код ОКТМО) и UIN (индекс документа или Уникальный идентификатор начисления). Проанализируем ситуацию: если УИН неизвестен, поле нельзя просто пропустить — в него нужно записать значение "0".
В современных конфигурациях 1С на базе БСП (Библиотека стандартных подсистем) для генерации кода используются встроенные механизмы. Рассмотрим, как программно сформировать данные для вывода на печать. Процесс обычно делится на два этапа: подготовка текстовой строки и генерация самой картинки.
Для формирования форматной строки воспользуемся методом общего модуля УправлениеПечатью:
// Подготовка структуры реквизитов платежа
РеквизитыПлатежа = Новый Структура;
РеквизитыПлатежа.Вставить("Name", "УФК по г. Москве (ИФНС №1)");
РеквизитыПлатежа.Вставить("PersonalAcc", "40101810045250010041");
РеквизитыПлатежа.Вставить("BankName", "ГУ БАНКА РОССИИ ПО ЦФО");
РеквизитыПлатежа.Вставить("BIC", "044525000");
РеквизитыПлатежа.Вставить("Sum", Формат(СуммаДокумента * 100, "ЧГ=0")); // Сумма в копейках
// Генерация строки по ГОСТ
QRСтрока = УправлениеПечатью.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа);
После получения строки необходимо преобразовать ее в двоичные данные картинки. Посмотрим на пример вызова внешней компоненты печати штрих-кодов:
// УровеньКоррекции: 1 - M, 2 - Q, 3 - H. Рекомендуется использовать 1 или 2.
// Размер: размер стороны квадрата в пикселях.
ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 1, 190);
Выясним важную деталь, которую часто упускают разработчики. Несмотря на то, что в некоторых версиях документации порядок дополнительных реквизитов заявлен как произвольный, практика показывает обратное. Банковские приложения (особенно Сбербанк Онлайн) могут некорректно парсить строку, если нарушена логическая последовательность тегов.
Рассмотрим решение: если код не читается, попробуйте пересобрать строку вручную, поставив сначала основные банковские реквизиты (счет, БИК, банк), а затем бюджетные (ИНН, КПП) и дополнительные сведения. Также проверьте наличие признака разделения в конце строки. Опыт показывает, что добавление индекса платежного документа (даже нулевого) существенно повышает вероятность успешного распознавания.
Если строка сформирована верно, но код всё равно не читается "с листа", проанализируем физические параметры картинки:
Purpose.M (средний) или Q (высокий). Уровень H (максимальный) делает картинку слишком перегруженной, что может мешать распознаванию.Для тестирования не обязательно сразу идти к банкомату. Рассмотрим порядок проверки:
Соблюдение этих простых, но строгих правил позволит вам создавать надежные QR-коды, которые значительно упростят процесс оплаты для ваших пользователей.