К статье
Практический материал

Автоматизация · 12 мин

Как сформировать QR-код для оплаты в 1С

Как сформировать QR-код для оплаты в 1С: стандарт СБП, строка по ГОСТ, типовые механизмы и внешние компоненты, проверка результата и типичные ошибки.

QR-код для оплаты в 1С — это картинка, в которую зашита платёжная строка: реквизиты получателя, сумма, назначение платежа. Покупатель сканирует код приложением банка и подтверждает перевод, не вводя реквизиты вручную. Сформировать такой код можно тремя путями: типовыми механизмами конфигурации (подсистема СБП), добавлением печатной формы с QR на счёт или УПД, либо программной генерацией картинки через внешнюю компоненту или веб-сервис.

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

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

Какие бывают QR-коды для оплаты и что выбрать

Первый вариант — статический QR-код по ГОСТ Р 56042-2014. В нём зашиты реквизиты получателя: наименование, ИНН, расчётный счёт, БИК банка, корреспондентский счёт, а также сумма и назначение платежа. Такой код можно сформировать один раз и печатать на всех счетах — банк клиента подставит реквизиты в платёжное поручение. Сумму плательщик может изменить вручную, если она не зафиксирована в коде.

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

Третий вариант — произвольный QR с любой информацией: ссылка на оплату на сайте, реквизиты в свободном виде. Он проще всего технически, но покупателю придётся самостоятельно переносить данные в платёжку, поэтому для оплаты счетов такой формат неудобен.

Сравнение вариантов

Статический QR по ГОСТ

Подходит для счетов и актов без онлайн-контроля оплаты; не требует договора с банком, но оплату придётся сверять вручную по выписке

Динамический QR СБП

Подходит для розницы и интернет-заказов; даёт автоматическое подтверждение оплаты, но требует договора с банком и настройки подсистемы

QR со ссылкой на оплату

Подходит, если оплата идёт через сайт или платёжный агрегатор; прост в реализации, но зависит от внешнего сервиса

Формат платёжной строки по ГОСТ Р 56042-2014

Основа любого банковского QR — текстовая строка строгого формата. Она начинается с идентификатора ST00012 (для версии с набором полей 1.2), далее через символ «|» идут пары «Имя=Значение»: Name — наименование получателя, PersonalAcc — расчётный счёт, BankName — банк, BIC — БИК, CorrespAcc — корреспондентский счёт, PayeeINN — ИНН, Sum — сумма в копейках, Purpose — назначение платежа.

Пример строки для счёта на 15 000 рублей:

text
ST00012|Name=ООО Ромашка|PersonalAcc=40702810000000000001|BankName=ПАО БАНК|BIC=044525000|CorrespAcc=30101810000000000000|PayeeINN=7700000000|Sum=1500000|Purpose=Оплата по счёту № 154 от 12.05

Критичные правила: сумма указывается в копейках без разделителя, поля разделяются только вертикальной чертой, пробелы внутри значений допустимы, но переносы строк — нет. Кириллица кодируется в UTF-8. Ошибка хотя бы в одном символе БИК или счёта приведёт либо к отказу банковского приложения распознать код, либо к переводу не туда — поэтому строку формируют программно из данных карточки организации, а не вручную.

Настройка СБП в типовых конфигурациях

В типовых «Управление торговлей», «Комплексная автоматизация», «ERP» и «1С:Розница» динамические QR-коды формирует подсистема «Интернет-эквайринг и СБП» (в составе Библиотеки стандартных подсистем и библиотеки электронных документов). Предварительно заключается договор с банком, который выдаёт идентификатор мерчанта (торговой точки) и параметры подключения.

Порядок настройки в общем виде одинаков: в разделе настроек обмена с банками или продаж создаётся новая настройка подключения к СБП, указываются банк-эквайер, идентификатор торговой точки и банковский счёт зачисления. После проверки соединения в документах «Заказ клиента», «Реализация товаров и услуг» или в чеке ККМ появляется возможность сформировать QR-код для оплаты.

Порядок подключения СБП
  1. 1
    Заключите договор с банком и получите идентификатор торговой точки (мерчант ID)
  2. 2
    В 1С откройте настройки электронных платежей / обмена с банками и создайте настройку СБП
  3. 3
    Укажите банк, мерчант ID и счёт зачисления, проверьте соединение
  4. 4
    Включите возможность оплаты через СБП в видах оплат или шаблонах чеков
  5. 5
    Сформируйте тестовый заказ, выведите QR и оплатите его минимальной суммой со своего телефона
  6. 6
    Убедитесь, что оплата автоматически отразилась в документе

После настройки кассир или менеджер не формирует код вручную: программа передаёт сумму и номер заказа в банк, получает ссылку, строит из неё QR и показывает на экране или печатает на чеке. Статус оплаты система запрашивает у банка автоматически.

Вывод статического QR-кода на печатную форму счёта

Если договора СБП нет, практичное решение — добавить статический QR на печатную форму счёта на оплату. В типовых конфигурациях на управляемых формах есть готовые функции работы с QR (в ряде версий — генерация картинки штатными средствами или через компоненту печати штрихкодов «1С:Библиотека подключаемого оборудования»).

Логика доработки: в модуле менеджера печати документа «Счёт на оплату» формируется платёжная строка по ГОСТ из реквизитов организации и суммы документа, затем строка передаётся в функцию генерации QR, результат (картинка в формате PNG или двоичные данные) помещается в область макета табличного документа. В макете заранее добавляют область-картинку нужного размера — обычно 25–35 мм, чтобы код уверенно сканировался с бумаги.

Если конфигурация на поддержке и изменять её нельзя, альтернатива — внешняя печатная форма (файл .epf), подключаемая через «Дополнительные отчеты и обработки». Она заменяет штатную печать счёта без снятия конфигурации с поддержки.

Программная генерация QR-картинки

Когда штатных средств нет, картинку генерируют программно. Три рабочих подхода: внешняя компонента генерации штрихкодов (Native API, подключается через ПодключитьВнешнююКомпоненту), HTTP-запрос к публичному сервису генерации QR (подходит только для неконфиденциальных данных — платёжные реквизиты лучше не отправлять на сторонние сервисы), либо собственная реализация алгоритма QR на встроенном языке — вариант трудоёмкий и оправдан редко.

Типовой фрагмент кода для формирования платёжной строки выглядит так:

bsl
Функция СтрокаQR(Организация, Сумма, Назначение)
  СуммаВКопейках = Формат(Сумма * 100, "ЧГ=; ЧН=0");
  Возврат "ST00012|Name=" + Организация.Наименование
    + "|PersonalAcc=" + Организация.РасчетныйСчет
    + "|BankName=" + Организация.Банк
    + "|BIC=" + Организация.БИК
    + "|CorrespAcc=" + Организация.КорСчет
    + "|PayeeINN=" + Организация.ИНН
    + "|Sum=" + СуммаВКопейках
    + "|Purpose=" + Назначение;
КонецФункции

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

Не отправляйте платёжные строки с реквизитами в бесплатные онлайн-генераторы QR: строка содержит полные банковские реквизиты компании, а сторонний сервис может логировать запросы. Используйте локальную компоненту или штатные механизмы 1С.
ПЗ
Практическое замечание

Проверка результата и типичные ошибки

Перед массовым использованием каждый шаблон QR проверяют фактическим сканированием: откройте приложение своего банка на смартфоне, отсканируйте код с распечатки и с экрана. Приложение должно распознать платёж и показать форму с подставленными реквизитами — сверьте ИНН, счёт, БИК и сумму с документом. Платёж до конца проводить не обязательно, достаточно экрана подтверждения.

Контрольные точки

Как проверить результат

Сканирование приложением банка
Норма

Открывается форма платежа с реквизитами получателя

Тревожный признак

Код не распознаётся или открывается как обычный текст

Сумма в форме оплаты
Норма

Совпадает с суммой счёта

Тревожный признак

Сумма в рублях вместо копеек (в 100 раз меньше) или пустая

Назначение платежа
Норма

Содержит номер и дату счёта, читается без искажений

Тревожный признак

Иероглифы или обрезанный текст — проблема с кодировкой UTF-8

Печатная форма
Норма

QR квадратный, с полями вокруг, печатается чётко

Тревожный признак

Код растянут, обрезан или вплотную к тексту — сканеры не берут

Типичные ошибки
01
Сумма указана в рублях вместо копеек — клиент видит платёж в 100 раз меньше и оплачивает неверную сумму
02
Переносы строк или лишние пробелы в платёжной строке — банковское приложение не распознаёт код вовсе
03
QR напечатан слишком маленьким или без белого поля вокруг — камера телефона не фокусируется
04
Реквизиты вбиты вручную и устарели после смены банка — платежи уходят на закрытый счёт
05
Использован сторонний онлайн-генератор — утечка реквизитов и зависимость от доступности чужого сервиса

Ограничения и когда нужен разработчик

Самостоятельно, без доработок, задача решается только при наличии типовой подсистемы СБП и договора с банком. Вывод статического QR на счёт почти всегда требует изменения макета и модуля печати — это работа разработчика 1С, особенно если конфигурация нетиповая или сильно доработана.

Учитывайте и организационные ограничения: оплата по СБП доступна только клиентам банков — участников системы, есть лимиты на сумму одного перевода (для физических лиц они устанавливаются банками и регулятором), а комиссия за приём платежа зависит от тарифа вашего банка-эквайера. Статический QR по ГОСТ ограничений по сумме не имеет, но и не даёт автоматического контроля оплаты — сверка идёт по банковской выписке.

Итог

Что важно запомнить

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

Частые вопросы

Можно ли сформировать QR-код в 1С без доработок и договора с банком?

Только если ваша конфигурация уже содержит готовый механизм вывода QR на печатные формы — такие возможности встречаются в свежих типовых решениях. В остальных случаях статический QR потребует минимальной доработки макета и модуля печати или подключения внешней печатной формы. Договор с банком для статического кода не нужен.

Чем динамический QR СБП лучше статического кода на счёте?

Динамический код создаётся под конкретный заказ с точной суммой и идентификатором, а банк присылает в 1С уведомление об оплате — документ оплаты проводится автоматически, без сверки выписки. Статический код лишь подставляет реквизиты в платёжку клиента, и факт оплаты вы узнаете только из банковской выписки.

Почему банковское приложение видит сумму в 100 раз меньше?

По стандарту сумма в платёжной строке указывается в копейках целым числом. Если в поле Sum передать сумму в рублях, приложение интерпретирует её как копейки. Умножайте сумму документа на 100 и выводите без дробной части и разделителей разрядов.

Безопасно ли генерировать QR через бесплатный онлайн-сервис?

Для платёжных кодов — нет. Строка содержит полные банковские реквизиты организации, и сторонний сервис может сохранять запросы. Кроме того, внешний сервис создаёт зависимость: при его недоступности печать счетов встанет. Используйте локальную компоненту или штатные средства 1С.

QR-код на распечатке не сканируется, хотя на экране работает. Что проверить?

Проверьте размер картинки (меньше 20 мм сканируется плохо), наличие белого поля вокруг кода, пропорции (код должен оставаться квадратным) и качество печати. Если код сгенерирован с низким уровнем коррекции ошибок, повторите генерацию с уровнем M или выше.

Можно ли вшить в QR назначение платежа с номером счёта автоматически?

Да, и это рекомендуемая практика: в поле Purpose подставляйте строку вида «Оплата по счёту № … от …», сформированную из данных документа. Тогда в банковской выписке платёж легко идентифицировать, а клиенту не придётся заполнять назначение вручную. Следите, чтобы назначение не содержало переносов строк.