Генерация и печать QR-кодов в 1С 8.3

· 9 мин

Содержание

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

Чтобы код считывался банком или кассой, важны две вещи: правильный формат данных внутри QR (для платёжных реквизитов это ГОСТ Р 56042) и достаточный размер картинки при печати. Ниже — как сгенерировать код, положить его в форму, прочитать сканером и что делать, если банк QR не распознаёт.

Чем 1С рисует двумерный код

Платформа «1С:Предприятие 8.3» не содержит отдельного объекта «нарисуй QR» в чистом виде — генерацию картинки обеспечивает внешняя компонента печати штрихкодов. Она умеет и линейные коды (EAN-13, Code128), и двумерные: QR, DataMatrix, PDF417.

В типовых конфигурациях на «Библиотеке стандартных подсистем» (БСП) эта компонента уже входит в состав и подключается автоматически при первой печати. Отдельно ставить ничего не нужно — код формируется прямо из документа.

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

Важно не путать QR с кодом маркировки «Честного знака». Код на упаковке маркированного товара — это Data Matrix, другой двумерный стандарт, и формирует его оператор ГИС МТ, а не 1С. Платёжный и информационный QR конфигурация рисует сама; код маркировки она только считывает и хранит. Если речь про маркировку — это отдельная тема, и описанный ниже механизм генерации к ней не относится.

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

QR-код на счёте на оплату по ГОСТ

Самый частый сценарий — QR на счёте, чтобы клиент оплатил его из мобильного банка одним сканированием. В «1С:Бухгалтерии 8» ред. 3.0 при печати счёта на оплату доступен вариант формы с QR-кодом. Код содержит платёжные реквизиты по стандарту ГОСТ Р 56042-2014.

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

Обязательные поля по ГОСТ:

  • 🏢 Name — наименование получателя;
  • 💳 PersonalAcc — расчётный счёт (20 цифр);
  • 🏦 BankName — наименование банка;
  • 🔢 BIC — БИК банка;
  • 🧾 CorrespAcc — корреспондентский счёт.

Остальные поля (Sum, Purpose, PayeeINN, KPP) — дополнительные, но для корректного автозаполнения платежа их лучше передавать. Если хотя бы одно обязательное поле пустое, банк либо откажет в распознавании, либо подставит неполные реквизиты.

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

Как вывести код в свою печатную форму

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

  1. В конфигураторе откройте нужный макет (или создайте внешнюю печатную форму через расширение конфигурации , чтобы не менять типовую).
  2. В макете добавьте область с полем картинки — именно картинки, а не рисунка-текста. Задайте ей фиксированные ширину и высоту.
  3. В модуле печати сформируйте строку данных кода.
  4. Передайте строку в компоненту печати штрихкодов с типом QR и получите картинку.
  5. Положите картинку в поле макета и выведите область в табличный документ.

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

Для вывода на печать важно и разрешение: мелкий код на 1,5 × 1,5 см с длинным назначением платежа часто «замыливается» на струйном принтере. Либо увеличивайте поле, либо сокращайте объём данных.

Если печатная форма собирается на системе компоновки данных, картинку кода выводят тем же способом: в макете СКД заводят поле картинки и заполняют его в обработчике вывода. Отдельного «поля QR» в СКД нет — это обычная картинка, которую вы подготовили кодом.

Расширение конфигурации здесь — предпочтительный путь. Оно позволяет добавить свою печатную форму и обработчик, не снимая типовую конфигурацию с поддержки: обновления от вендора продолжат ставиться штатно, а ваша доработка останется в отдельном объекте.

Что проверить перед печатью QR
Выполнено: 0 / 5

Считывание QR-кодов сканером

Для ввода данных из кода в 1С нужен 2D-сканер — обычный линейный штрихкод-сканер двумерные коды не читает. Большинство 2D-сканеров работают в режиме эмуляции клавиатуры (HID): сканер «набирает» раскодированную строку в активное поле и добавляет суффикс (чаще всего Enter или Tab).

Подключают сканер как подключаемое оборудование. В «1С:Рознице» и «1С:Управлении торговлей 11» это раздел НСИ и администрирование → Подключаемое оборудование; там выбирают тип «Сканер штрихкода» и драйвер. В других типовых решениях путь аналогичен — через раздел администрирования.

Ключевые настройки сканера:

  • 🔌 режим подключения — USB-HID (эмуляция клавиатуры) или через драйвер оборудования;
  • ⌨️ суффикс — символ, по которому 1С понимает, что строка кода закончилась;
  • 🔲 включённая поддержка двумерных кодов в прошивке сканера.

Если сканер подключён как клавиатура, но 1С не реагирует на код, проверьте суффикс. Без завершающего Enter/Tab программа не поймёт конец строки и будет ждать продолжения.

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

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

Интеграция с банком и мобильными приложениями

QR на счёте и QR для перевода через СБП — это два разных стандарта, их нельзя путать.

Платёжный QR по ГОСТ Р 56042. Внутри — текстовая строка с реквизитами. Его сканируют в мобильном банке как «оплату по QR счёта»; клиент-банк тоже умеет импортировать платёж из такого кода. Это код, который печатает «1С:Бухгалтерия» на счёте.

QR Системы быстрых платежей (СБП). Формат задаёт оператор СБП (НСПК): внутри не реквизиты, а ссылка вида https://qr.nspk.ru/.... Такой код формирует не 1С самостоятельно, а банк или сервис-посредник через договор эквайринга; 1С получает от банка готовую ссылку или картинку.

Что в кодеГОСТ Р 56042СБП (НСПК)
СодержимоеРеквизиты платежа текстомСсылка qr.nspk.ru
Кто формирует1С / ваша печатная формаБанк-эквайер
Где применяютСчёт на оплату, квитанцияКасса, оплата покупателем

С клиент-банком связь идёт в обе стороны. Исходящий счёт с QR по ГОСТ контрагент оплачивает из своего банка одним сканированием. А входящие платежи 1С получает не из QR, а из банковской выписки в формате обмена с клиент-банком — код здесь лишь удобство для плательщика на этапе оплаты, в учёт он не загружается.

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

Генерация строки кода: пример

Платёжную строку по ГОСТ собирают из реквизитов документа. Служебный заголовок ST00012 — это идентификатор формата ST0001 плюс признак кодировки (1 — Windows-1251, 2 — UTF-8). Поля разделяются вертикальной чертой |.

ТекстКода = "ST00012";
ТекстКода = ТекстКода + "|Name=" + Контрагент;
ТекстКода = ТекстКода + "|PersonalAcc=" + РасчетныйСчет;   // 20 цифр
ТекстКода = ТекстКода + "|BankName=" + НаименованиеБанка;
ТекстКода = ТекстКода + "|BIC=" + БИК;
ТекстКода = ТекстКода + "|CorrespAcc=" + КоррСчет;
ТекстКода = ТекстКода + "|Sum=" + Формат(Сумма * 100, "ЧЦ=11; ЧГ=0"); // в копейках
ТекстКода = ТекстКода + "|Purpose=" + НазначениеПлатежа;
ТекстКода = ТекстКода + "|PayeeINN=" + ИНН;

Два момента, на которых чаще всего ошибаются:

  • 💰 Сумма передаётся в копейках, целым числом. Поэтому Сумма * 100, а Формат с ЧГ=0 убирает разделители групп разрядов — иначе в строку попадут пробелы и банк её не разберёт.
  • 🔡 Кодировка в заголовке должна совпадать с реальной кодировкой строки. Если текст в Windows-1251, последний символ заголовка — 1; для UTF-8 — 2. Исторически многие банковские приложения увереннее читают Windows-1251, поэтому для платёжного QR её выбирают чаще — но проверьте на своём банке, отсканировав пробный код.

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

Не собирайте строку конкатенацией реквизитов, в которых могут быть символ | или перевод строки (например, в длинном назначении платежа). Такие символы ломают разбор полей — их нужно чистить перед сборкой.

Типичные ошибки и их причины

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

Диагностика: выберите симптом

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

Нужна ли платная компонента, чтобы печатать QR?
Для типовых конфигураций на БСП — нет: компонента печати штрихкодов уже входит в поставку. Отдельная лицензия на генерацию QR не требуется.
Чем QR на счёте отличается от QR для СБП?
Внутри QR по ГОСТ Р 56042 лежат реквизиты платежа текстом, и его формирует 1С. В QR для СБП — ссылка qr.nspk.ru, и его выдаёт банк-эквайер по договору. Это несовместимые стандарты.
Какой сканер нужен для считывания QR?
Только 2D-сканер (имиджевый). Обычный лазерный сканер линейных штрихкодов двумерные коды физически не читает.
Сколько данных помещается в QR?
Чем больше символов, тем мельче и плотнее модули кода. Для платёжного QR длинное назначение платежа сокращают — иначе код плохо печатается и не сканируется на обычном принтере.
Можно ли добавить QR в документ, которого нет в типовой печати?
Да. Создайте внешнюю печатную форму через расширение конфигурации, добавьте в макет поле картинки и заполните его сгенерированным кодом — типовую конфигурацию менять при этом не придётся.

Источники

  • ГОСТ Р 56042-2014 «Стандарты финансовых операций. Двумерные символы штрихкода для осуществления платежей»