В типовых решениях «1С:Бухгалтерия предприятия 3.0» печать QR-кода в счете на оплату жестко ограничена разработчиками: код выводится только в том случае, если покупателем выступает физическое лицо или индивидуальный предприниматель. Однако в современной бизнес-практике всё чаще возникают ситуации, когда юридические лица просят выводить QR-код для ускорения оплаты через бизнес-карты или мобильные приложения банков. В этой статье мы подробно разберем, как обойти стандартное ограничение системы, внести изменения в программный код через расширение и какие риски при этом следует учитывать.
Прежде чем переходить к технической части, проанализируем причину такого поведения системы. Основная причина кроется в соблюдении ГОСТ Р 56042-2014. Этот стандарт ориентирован на платежи физических лиц. Кроме того, существует серьезный риск нарушения 54-ФЗ (закона о применении ККТ). Если сотрудник компании-покупателя оплатит счет через личное мобильное приложение, банк распознает это как платеж от физического лица, что обязывает продавца пробить кассовый чек. Чтобы минимизировать подобные ошибки, фирма «1С» программно отключает вывод QR-кода, если в реквизите ЮридическоеФизическоеЛицо контрагента указано значение ЮридическоеЛицо.
Рассмотрим, где именно в коде происходит проверка типа контрагента. Основная логика управления вариантами печати сосредоточена в процедурах, отвечающих за формирование структуры печатной формы. Нам необходимо обратить внимание на следующие объекты:
ПечатьТорговыхДокументов — здесь находится функция ПечатьСчетаНаОплату, которая управляет процессом сборки данных для табличного документа.СчетНаОплатуПокупателю — в его формах (например, ФормаРеквизитыПечатиQRКод) реализована логика выбора варианта печати.ФормированиеПечатныхФорм — в нем формируются СведенияОПоставщике, необходимые для генерации штрихкода.Разберем самый корректный способ внесения изменений — использование расширения. Это позволит нам не снимать основную конфигурацию с поддержки. Мы воспользуемся механизмом &ИзменениеИКонтроль, чтобы точечно поправить логику, не заменяя весь метод целиком. Рассмотрим пошагово, какие участки кода требуют модификации.
В первую очередь нам нужно заставить систему предлагать вариант «Печатать» даже для юридических лиц. Для этого проанализируем процедуру ЗаполнитьСписокВыбораВариантовПечатиQR. Нам нужно разрешить добавление значения Печатать в список выбора, невзирая на тип контрагента.
Посмотрим на пример реализации в модуле формы документа СчетНаОплатуПокупателю:
&НаСервере
&ИзменениеИКонтроль("ЗаполнитьСписокВыбораВариантовПечатиQR")
Процедура Расш1_ЗаполнитьСписокВыбораВариантовПечатиQR(СписокВыбора)
// Удаляем стандартную логику проверки контрагента
// Код внутри процедуры должен принудительно добавлять варианты печати
СписокВыбора.Очистить();
СписокВыбора.Добавить(Перечисления.ВариантПечатиQRКода.Печатать, "Печатать");
СписокВыбора.Добавить(Перечисления.ВариантПечатиQRКода.НеПечатать, "Не печатать");
КонецПроцедуры
Далее перейдем к общему модулю ПечатьТорговыхДокументов. Здесь в функции ПечатьСчетаНаОплату система выполняет проверку реквизитов перед выводом области QR-кода. Нам необходимо найти фрагмент кода, где вызывается процедура ЗаполнитьВариантПечатиQRКода.
Выясним причину, почему простая замена в этой процедуре может не сработать. Система часто сбрасывает значение ВариантПечатиQRКода обратно в НеПечатать, если видит тип «Юридическое лицо» в данных плательщика. Проанализируем ситуацию и внесем правки:
&НаСервере
&ИзменениеИКонтроль("ПечатьСчетаНаОплату")
Функция Расш1_ПечатьСчетаНаОплату(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
// Внутри цикла перебора объектов ищем место определения QR-кода
// Находим условие проверки типа лица и модифицируем его
#Вставка
Если РеквизитыКонтрагента.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо Тогда
// Разрешаем печать для юрлиц
Объект.ВариантПечатиQRКода = Перечисления.ВариантПечатиQRКода.Печатать;
КонецЕсли;
#КонецВставки
КонецФункции
Важно помнить, что QR-код не просто картинка, а структурированная строка. Если мы принудительно включаем печать для юрлиц, мы должны убедиться, что функция СведенияОПоставщике собирает все необходимые данные. Проанализируем модуль ФормированиеПечатныхФорм. Убедитесь, что в структуру данных попадают:
Если эти реквизиты не заполнены в карточке организации, QR-код не будет сформирован, даже если программная проверка на тип лица пройдена. Проверьте настройки учетной политики и банковские счета организации.
Рассмотрим подробнее, какой именно код мы выводим. Если мы просто правим типовую печать, мы получаем статичный QR по ГОСТ. Он удобен для ручного сканирования. Однако, если ваша цель — предоставить клиентам-юрлицам возможность совершать мгновенные B2B-платежи, стоит рассмотреть интеграцию с Системой быстрых платежей (СБП).
В новых версиях 1С поддержка СБП для бизнеса реализована штатно. В этом случае QR-код динамический, он содержит информацию о конкретной транзакции и позволяет банку плательщика сразу идентифицировать платеж как B2B. Это более современный и безопасный путь, который не требует глубокой модификации кода, а настраивается через подключение кассового оборудования или платежных сервисов в администрировании.
Внедряя данное решение, мы должны предупредить пользователей о возможных последствиях. Поскольку QR-код провоцирует оплату через мобильные приложения, возрастает риск получения средств от физических лиц. Рекомендуем добавить в печатную форму счета (в область под QR-кодом) следующий текст:
«Внимание! Оплата по данному QR-коду допускается только с использованием бизнес-карт или расчетных счетов организаций. При оплате личными средствами физических лиц необходимо уведомление бухгалтерии для оформления кассового чека.»
Это поможет обезопасить компанию от штрафов за неприменение ККТ, которые могут составлять до 100% от суммы платежа.
Мы рассмотрели процесс включения QR-кода для юридических лиц в 1С:Бухгалтерия 3.0. Подведем итоги наших действий:
ПечатьТорговыхДокументов и форме счета, используя аннотацию &ИзменениеИКонтроль.Используя данный подход, вы сможете удовлетворить запросы клиентов на современный способ оплаты, сохранив при этом контроль над стабильностью системы.