Почему QR-код из 1С не читается в банковском приложении и как это исправить?

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

Часто разработчики 1С сталкиваются с ситуацией, когда сформированный в программе QR-код выглядит корректно, успешно считывается обычными сканерами текста, но абсолютно игнорируется банковскими терминалами или мобильными приложениями (Сбербанк Онлайн, Тинькофф и другие). В этой статье мы подробно разберем, почему это происходит, проанализируем требования национального стандарта и выясним, как правильно подготовить данные в 1С, чтобы платеж проходил без ошибок.

Разбираем требования стандарта ГОСТ Р 56042-2014

Первое, что нам необходимо понять: банковское приложение ожидает не просто набор символов, а строго структурированную строку. Согласно ГОСТ Р 56042-2014, платежный реквизит в виде штрих-кода должен начинаться со служебного заголовка. Рассмотрим основные технические требования:

  1. Заголовок и кодировка: Строка должна начинаться с префикса ST00012 (для кодировки UTF-8) или ST00011 (для Win-1251). Использование UTF-8 является современным стандартом и гарантирует корректное отображение русских букв в названии организации и назначении платежа.
  2. Разделитель: В качестве разделителя между полями используется символ вертикальной черты |.
  3. Формат суммы: Это одна из самых частых ошибок. Сумма в строке QR-кода должна быть указана в копейках. Никаких точек или запятых. Если сумма платежа составляет 100 рублей 50 копеек, в параметре Sum должно быть передано значение 10050.

Анализируем состав обязательных реквизитов

Для того чтобы банковский терминал идентифицировал код как платежный, необходимо передать минимальный набор тегов (ключей). Проанализируем список обязательных полей:

Если вы формируете платеж в бюджет (например, в налоговую), список дополняется критически важными полями: PayeeINN (ИНН получателя), KPP (КПП), CBC (КБК), OKTMO (код ОКТМО) и UIN (индекс документа или Уникальный идентификатор начисления). Проанализируем ситуацию: если УИН неизвестен, поле нельзя просто пропустить — в него нужно записать значение "0".

Техническая реализация в 1С: использование БСП

В современных конфигурациях 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);

Почему порядок реквизитов имеет значение?

Выясним важную деталь, которую часто упускают разработчики. Несмотря на то, что в некоторых версиях документации порядок дополнительных реквизитов заявлен как произвольный, практика показывает обратное. Банковские приложения (особенно Сбербанк Онлайн) могут некорректно парсить строку, если нарушена логическая последовательность тегов.

Рассмотрим решение: если код не читается, попробуйте пересобрать строку вручную, поставив сначала основные банковские реквизиты (счет, БИК, банк), а затем бюджетные (ИНН, КПП) и дополнительные сведения. Также проверьте наличие признака разделения в конце строки. Опыт показывает, что добавление индекса платежного документа (даже нулевого) существенно повышает вероятность успешного распознавания.

Проблемы с визуализацией и качеством печати

Если строка сформирована верно, но код всё равно не читается "с листа", проанализируем физические параметры картинки:

  1. Размер изображения: Не делайте QR-код слишком маленьким. Оптимальный физический размер при печати на квитанции — примерно 20х20 мм. Коды размером 15х15 мм и меньше часто не фокусируются камерами бюджетных смартфонов.
  2. Плотность данных: Чем больше информации вы "зашиваете" в код (например, очень длинное назначение платежа), тем мельче становятся точки. Попробуйте сократить текст в поле Purpose.
  3. Уровень коррекции ошибок (Error Correction Level): В 1С этот параметр варьируется от 0 до 3. Рекомендуется устанавливать уровень M (средний) или Q (высокий). Уровень H (максимальный) делает картинку слишком перегруженной, что может мешать распознаванию.

Проверка результата

Для тестирования не обязательно сразу идти к банкомату. Рассмотрим порядок проверки:

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

← На главную