Генерация и печать QR-кодов в 1С 8.3
Содержание
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 нет, код добавляют в макет табличного документа через поле картинки. Схема действий одинакова для внешней печатной формы и для встроенной.
- В конфигураторе откройте нужный макет (или создайте внешнюю печатную форму через расширение конфигурации , чтобы не менять типовую).
- В макете добавьте область с полем картинки — именно картинки, а не рисунка-текста. Задайте ей фиксированные ширину и высоту.
- В модуле печати сформируйте строку данных кода.
- Передайте строку в компоненту печати штрихкодов с типом
QRи получите картинку. - Положите картинку в поле макета и выведите область в табличный документ.
QR-код должен быть квадратным. Если задать полю разные пропорции, модули кода исказятся и сканер его не прочитает. Делайте ширину равной высоте.
Для вывода на печать важно и разрешение: мелкий код на 1,5 × 1,5 см с длинным назначением платежа часто «замыливается» на струйном принтере. Либо увеличивайте поле, либо сокращайте объём данных.
Если печатная форма собирается на системе компоновки данных, картинку кода выводят тем же способом: в макете СКД заводят поле картинки и заполняют его в обработчике вывода. Отдельного «поля QR» в СКД нет — это обычная картинка, которую вы подготовили кодом.
Расширение конфигурации здесь — предпочтительный путь. Оно позволяет добавить свою печатную форму и обработчик, не снимая типовую конфигурацию с поддержки: обновления от вендора продолжат ставиться штатно, а ваша доработка останется в отдельном объекте.
Считывание 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.nspk.ru, и его выдаёт банк-эквайер по договору. Это несовместимые стандарты.Какой сканер нужен для считывания QR?
Сколько данных помещается в QR?
Можно ли добавить QR в документ, которого нет в типовой печати?
Источники
- ГОСТ Р 56042-2014 «Стандарты финансовых операций. Двумерные символы штрихкода для осуществления платежей»