QR-код в 1С: откуда он берётся в печатных формах и в коде
Содержание
Готовый QR в 1С появляется в трёх местах: в печати счёта на оплату, в кассовом чеке и в документах по прослеживаемости. Там его собирает сама конфигурация — руками делать ничего не нужно. Отдельный QR под свою задачу (ссылка, данные документа, визитка) собирают кодом через встроенный генератор штрихкодов.
Ниже разберём оба пути: где QR уже встроен и включается галочкой, и как разработчику вывести свой QR в макет. Плюс — почему код маркировки это не QR, и что делать, когда картинка печатается, а телефон её не читает.
Где QR-код формируется в 1С без программирования
Самый частый случай — счёт покупателю в «1С:Бухгалтерии 8». При печати счёта можно добавить платёжный QR по банковскому стандарту: клиент наводит камеру, реквизиты подставляются в приложение банка, остаётся подтвердить перевод.
Включается это в форме счёта на оплату: в настройках печати есть флажок вывода QR-кода. Данные для него берутся из реквизитов организации и суммы документа — вручную ничего не вписываете.
Второй случай — кассовый чек. Требование печатать QR на чеке закреплено в законе о ККТ. Этот код ведёт на сервис ФНС для проверки чека, его формирует касса и фискальный накопитель, а не конфигурация 1С. В «1С:Рознице» и «1С:Управлении нашей фирмой» он появляется автоматически при пробитии чека.
В QR чека зашиты дата и время продажи, сумма, номер фискального накопителя и признак расчёта. Покупатель наводит приложение «Проверка чека ФНС» и видит, легальна ли продажа. Если касса настроена верно, от бухгалтера тут ничего не требуется — код формирует связка «1С + фискальный регистратор».
Третий случай — документы прослеживаемости и платёжные квитанции ЖКХ (форма ПД-4, извещение). Здесь QR тоже формирует типовая печатная форма по готовому шаблону.
Если нужен платёжный QR на счёте, сначала проверьте, что в карточке организации заполнены банковский счёт, БИК и КПП. Пустой реквизит — и код либо не выведется, либо банк не распознает платёж.
Как платформа 1С рисует QR в печатной форме
Техническая основа одна для всех штрихкодов — внешняя компонента печати штрихкодов, которая поставляется в составе «Библиотеки стандартных подсистем» (БСП). Компонента принимает строку данных и параметры (тип кода, размер) и возвращает готовую картинку. Платформа сама подключает её при формировании печатной формы.
QR относится к двумерным матричным кодам: данные кодируются чёрно-белыми модулями в квадрате, а не полосками, как в линейном EAN-13. Поэтому в один QR влезает в сотни раз больше символов — отсюда и ссылки, и реквизиты платежа целиком.
В макете табличного документа QR-код размещают как картинку-параметр. В макете вы рисуете область с полем типа «Рисунок», задаёте ему вид заполнения «Параметр» и имя, например QR. А код печати заполняет это поле готовым изображением. Такой подход работает в любой конфигурации на управляемых формах.
Главное отличие от обычной картинки: само изображение не хранится в макете. Оно собирается на лету из данных конкретного документа, поэтому один макет печатает разные QR для разных накладных.
Как сгенерировать QR-код встроенным кодом 1С
Для своих задач QR собирают через генератор штрихкодов БСП. Схема такая: готовите структуру параметров, вызываете метод генерации, получаете картинку и кладёте её в поле макета.
Минимальный пример (встроенный язык 1С):
Генератор = Обработки.ГенераторШтрихкода.Создать();
Параметры = Новый Структура;
Параметры.Вставить("Штрихкод", "https://example.com/doc/123");
Параметры.Вставить("Ширина", 100);
Параметры.Вставить("Высота", 100);
Параметры.Вставить("КодСимвологии", 99); // QR-код
Параметры.Вставить("УровеньКоррекцииОшибок", 1);
Результат = Генератор.ИзображениеШтрихкода(Параметры);
Если Результат.ШтрихкодСформирован Тогда
КартинкаQR = Результат.Картинка;
КонецЕсли;
Дальше картинку выводят в макет: ОбластьМакета.Рисунки.QR.Картинка = КартинкаQR;.
Точный набор значений КодСимвологии и имена ключей структуры отличаются между версиями БСП. Перед использованием сверьтесь с описанием модуля ГенераторШтрихкода в вашей конфигурации — не копируйте числовой код вслепую.
Что кодировать в QR — решаете вы. Частые сценарии:
- 🔗 ссылка на документ, карточку товара или форму на сайте;
- 📄 текстовые реквизиты (номер и дата документа, сумма) для быстрого ввода;
- 🧾 платёжная строка по банковскому стандарту;
- 📇 контакт в формате vCard для визиток и бейджей.
Строку платёжного QR вручную собирать не надо — для счетов её формирует типовой механизм. А вот под произвольную ссылку генератор подходит идеально.
Пример контакта в формате vCard — такой QR при наведении камеры предложит сохранить визитку в телефон:
Строка = "BEGIN:VCARD" + Символы.ПС
+ "N:Иванов;Пётр" + Символы.ПС
+ "TEL:+70000000000" + Символы.ПС
+ "EMAIL:petr@example.com" + Символы.ПС
+ "END:VCARD";
Параметры.Вставить("Штрихкод", Строка);
Вызывать генератор правильнее в модуле печати документа (команда печати или серверная процедура формирования табличного документа), а не в форме списка. Так один код отработает и при печати пачкой, и при предпросмотре. Результат генерации — объект типа Картинка; его можно и выводить в макет, и сохранять во временное хранилище, и показывать в поле формы.
Если Результат.ШтрихкодСформирован вернул Ложь, картинку не выводите: обычно это значит, что строка пустая, слишком длинная или внешняя компонента не подключилась. Логируйте такой случай, чтобы не печатать пустой прямоугольник молча.
QR в печатных формах: вывод в макет и типичные промахи
Чтобы QR встал в свою печатную форму, нужны три вещи: поле-картинка в макете, строка данных и вызов генератора в модуле печати. Если выпадает любое звено — на листе пусто или серый прямоугольник.
Разберём, что идёт не так чаще всего.
Поле есть, картинки нет. Обычно забыли присвоить Картинка полю или перепутали имя. Имена в 1С чувствительны к регистру: QR и qr — разные поля.
QR печатается, но пустой или битый. Строка данных слишком длинная для выбранного размера, либо в неё попали непечатаемые символы. Сократите данные или увеличьте размер картинки.
Код уезжает за границу ячейки. Поле-рисунок меньше самого изображения. Задайте полю фиксированный размер и режим «по размеру области», чтобы QR не обрезался.
При печати на принтере не сканируется, а на экране — да. Виноват масштаб печати «уместить на страницу»: он мельчит код. Печатайте в 100% масштаба.
QR и маркировка: почему это DataMatrix, а не QR
Здесь важная поправка. Код маркировки товаров в системе «Честный ЗНАК» — это не QR, а DataMatrix. Оба двумерные и внешне похожи, но DataMatrix плотнее и устойчивее к повреждениям, поэтому его и выбрали для маркировки.
Отличить просто: у QR в трёх углах крупные квадраты-«глаза», у DataMatrix две сплошные стороны буквой «L» и пунктир по двум другим.
Что это значит на практике:
| Задача | Какой код | Где в 1С |
|---|---|---|
| Маркировка товара | DataMatrix | «1С:Бухгалтерия», УНФ, «1С:Розница» — подсистема маркировки |
| Платёж по счёту | QR | Печать счёта на оплату |
| Проверка чека в ФНС | QR | Кассовый чек |
При приёмке и выводе из оборота маркированного товара в 1С сканируют именно DataMatrix со стороны упаковки. Генерировать его самостоятельно не нужно и нельзя — коды эмитирует оператор «Честного ЗНАКА», 1С только считывает и передаёт их в систему.
Настоящий QR в маркировке встречается в другом месте — в мобильном приложении покупателя «Честный ЗНАК»: по QR на кассовом чеке приложение открывает проверку. Но это уже код чека, а не код товара.
Не пытайтесь «сгенерировать код маркировки» встроенным генератором штрихкодов. Самодельный DataMatrix не пройдёт проверку: коды регистрируются в государственной системе и привязаны к конкретной единице товара.
Сканирование и печать QR в мобильных решениях 1С
В мобильных приложениях на платформе 1С (мобильный клиент, мобильная платформа) QR работает в обе стороны — и на чтение, и на печать.
Сканирование камерой. Мобильная платформа умеет читать штрихкоды и QR камерой устройства. Код вызывает сканер, пользователь наводит телефон, в программу возвращается распознанная строка. Так удобно открывать карточку товара по QR на ценнике или подтягивать данные из кода на документе.
Печать и показ на экране. Тот же генератор штрихкодов собирает QR-картинку, которую приложение выводит на экран или отправляет на мобильный принтер. Частый сценарий — показать клиенту QR для оплаты прямо с телефона курьера или торгового представителя.
Если на устройстве несколько рабочих баз или слабая камера, распознавание бывает капризным. Помогают контрастная печать кода, достаточный размер и хорошее освещение — те же правила, что и для бумаги.
Как сделать QR надёжным: размер, уровень коррекции, поля
QR печатается, но читается через раз — почти всегда дело в геометрии кода, а не в данных. Четыре параметра решают почти всё.
Размер. Чем больше данных в коде, тем плотнее модули и тем крупнее должен быть квадрат. Для ссылки средней длины не делайте QR меньше 2×2 см на бумаге. На экране — не меньше 150–200 пикселей по стороне.
Уровень коррекции ошибок. В QR встроено восстановление данных: код читается, даже если часть повреждена. Уровней четыре — от L (восстанавливается около 7%) до H (около 30%). Для документов, которые мнутся и пачкаются, берите уровень выше; для чистой ссылки на экране хватит L или M, чтобы код был проще.
«Тихая зона» — поля вокруг кода. QR требует пустой рамки по периметру шириной в несколько модулей. Если прижать код к тексту или рамке таблицы, сканер не найдёт границы. Оставляйте отступ.
Контраст. Классика — чёрный код на белом фоне. Инверсия (белый на чёрном), цветной фон под кодом или печать бледным тонером ломают распознавание.
Отдельно про экран кассы и мобильных устройств: там QR читает уже камера покупателя, а не сканер. Снижают распознавание блики на глянцевом дисплее и слишком мелкий код в углу чека. Если клиенты жалуются, что «не считывается», начните с размера и яркости экрана, а не с содержимого кода.
Ещё одна частая причина — данные меняются, а размер поля в макете зафиксирован. Короткая ссылка влезает мелко и читается, длинная при том же размере превращается в кашу. Либо держите данные короткими (через сервис коротких ссылок), либо дайте полю расти.
Частые вопросы
Можно ли вывести QR в любой печатной форме, а не только в счёте?
Чем платёжный QR на счёте отличается от произвольного?
Нужна ли отдельная лицензия или программа для QR?
Почему код маркировки нельзя сгенерировать самому?
Можно ли закодировать в QR русский текст?
Источники
- ГОСТ Р 56042-2014 «Стандарты финансовых операций. Двумерные символы штрихового кода для платежей физических лиц»
- Федеральный закон от 22.05.2003 № 54-ФЗ «О применении контрольно-кассовой техники»