QR-код для оплаты в счёте 1С: встроенная печать, доработка макета и строка по ГОСТ
Содержание
Чтобы в 1С сделать QR-код в счёте, сначала распечатайте счёт штатной командой Печать → Счет на оплату: в свежих релизах типовых конфигураций на БСП (Бухгалтерия 3.0, УТ 11, УНФ) код уже выводится сам, если у организации заполнен банковский счёт. Если кода нет, его добавляют внешней печатной формой или расширением: программа собирает строку платежа по ГОСТ Р 56042-2014 и превращает её в картинку на макете.
Покупатель наводит камеру банковского приложения на куар код в счёте — и реквизиты, сумма и назначение платежа подставляются без ручного ввода. Меньше опечаток в БИК и расчётном счёте, быстрее приходят деньги.
Что проверить в типовой конфигурации до доработки
Дорабатывать конфигурацию стоит только после того, как вы убедились, что штатная печать не справляется. Проверка занимает пять минут.
- Откройте любой проведённый счёт покупателю и нажмите
Печать → Счет на оплату. - Посмотрите на блок с реквизитами: QR-код обычно стоит рядом с банковскими реквизитами или в шапке.
- Если кода нет, откройте карточку организации и её банковский счёт. Проверьте, что заполнены БИК, корреспондентский счёт, номер расчётного счёта и наименование банка.
- Сравните релиз конфигурации (
Справка → О программе) с актуальным. На старом релизе кода может просто не быть.
Без любого из обязательных реквизитов программа не может собрать корректную строку платежа и пропускает код.
Если QR-код есть, но мешает (например, счета уходят только юрлицам и место нужно под печать), его можно убрать в пользовательском макете — об этом ниже, в разделе про макет.
Когда нужна доработка
- 🧩 Конфигурация самописная или сильно изменённая, и печать счёта своя.
- 🧩 Нужна своя печатная форма счёта с QR-кодом, а типовую трогать нельзя.
- 🧩 В строку нужно добавить поля, которых нет в типовой: номер договора, лицевой счёт, КБК.
- 🧩 Код нужен не в счёте, а в другой форме: в квитанции, акте, письме-уведомлении.
Способ 1. Внешняя печатная форма с QR-кодом
Внешняя печатная форма — файл .epf, который подключают к базе без изменения конфигурации. Обновления она не ломает, а отключить её можно в один клик. Для большинства бухгалтерий это самый безопасный путь.
Как подключить
- Включите механизм:
Администрирование → Печатные формы, отчеты и обработки, флажокДополнительные отчеты и обработки. - Перейдите по ссылке
Дополнительные отчеты и обработкив том же разделе. - Нажмите
Добавить из файлаи выберите.epf. - Проверьте, что в карточке обработки в таблице размещения указан нужный документ — счёт покупателю.
- Запишите карточку. Новая команда появится в меню
Печатьдокумента.
Программа предупредит, что внешний файл может навредить базе. Подключайте только обработки из надёжного источника или написанные вашим программистом. Внешняя обработка выполняется с правами пользователя и может изменить данные.
Откуда взять обработку
- 🛠 Написать самому или заказать программисту: каркас — копия типовой формы счёта плюс картинка с кодом.
- 🛠 Взять у партнёра 1С, который сопровождает базу.
- 🛠 Скачать готовую — только после проверки кода: откройте файл в Конфигураторе и посмотрите модуль объекта.
Внешняя форма или расширение
| Вариант | Когда подходит | Риски |
|---|---|---|
| Внешняя печатная форма | Нужна отдельная форма счёта, типовую не трогаем | Отдельный файл надо обновлять при смене структуры документа |
| Расширение конфигурации | Код нужен прямо в типовой форме, изменений немного | Расширение проверяют после каждого обновления релиза |
| Изменение основной конфигурации | Самописная база без поддержки | Снятие с поддержки усложняет обновления |
Расширения доступны с платформы 8.3.6. Для типовой базы на поддержке выбирайте внешнюю форму или расширение — не снимайте конфигурацию с поддержки ради одной картинки.
Способ 2. Как в 1С сделать куар код в счёте через макет
Неважно, внешняя форма или расширение: QR-код — это картинка, которую код программы кладёт в заранее подготовленное место макета.
Подготовка макета в Конфигураторе
- Откройте макет печатной формы — табличный документ.
- В области с банковскими реквизитами вставьте объект «Рисунок» через меню
Таблица → Рисунки → Картинка. - Задайте рисунку имя в свойствах, например
QRКод. По этому имени программа найдёт его в области. - Размер — квадрат примерно 25–35 мм. Меньше 20 мм камеры телефонов читают хуже.
- В свойстве размера картинки поставьте режим, при котором картинка вписывается без искажения пропорций.
Пользовательский макет без Конфигуратора
В типовых конфигурациях на БСП макет можно править в режиме Предприятия: Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Найдите макет счёта, откройте и сохраните изменённую копию.
Так удобно двигать уже имеющийся QR-код, менять его размер или убирать. Добавить код «с нуля» в пользовательском макете не получится: картинку заполняет программный модуль, а он в пользовательском макете не меняется.
Чтобы вернуть всё как было, в том же списке есть команда возврата к стандартному макету. Пользовательский макет при обновлении конфигурации сохраняется — после обновления проверьте, что он не сломал новые поля типовой формы.
Код заполнения картинки
В конфигурациях на БСП картинку QR-кода генерирует общий модуль УправлениеПечатью, функция ДанныеQRКода. Сигнатуру уточните в модуле вашей версии БСП: в типичном варианте параметры — строка, уровень коррекции ошибок (0–3) и размер в пикселях.
// ОбластьРеквизиты — область макета, где лежит рисунок с именем QRКод
СтрокаQR = СтрокаПлатежаГОСТ(ДанныеСчета);
ДанныеКартинки = УправлениеПечатью.ДанныеQRКода(СтрокаQR, 1, 200);
Если ТипЗнч(ДанныеКартинки) = Тип("ДвоичныеДанные") Тогда
ОбластьРеквизиты.Рисунки.QRКод.Картинка = Новый Картинка(ДанныеКартинки);
Иначе
// Генерация не удалась: удаляем пустой рисунок, чтобы не печатать рамку
ОбластьРеквизиты.Рисунки.Удалить(ОбластьРеквизиты.Рисунки.QRКод);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьРеквизиты);
Уровень коррекции 1 соответствует уровню M — около 15% повреждённого кода восстанавливается. Для счетов, которые печатают на офисном принтере, этого достаточно.
Строка платежа по ГОСТ: из чего состоит QR-код в счете
Банковские приложения понимают формат ГОСТ Р 56042-2014. Это обычная текстовая строка: служебный заголовок и пары «ключ=значение» через вертикальную черту.
ST00012|Name=ООО Ромашка|PersonalAcc=40702810900000012345|BankName=АО Банк|BIC=044525000|CorrespAcc=30101810400000000225|PayeeINN=7701234567|KPP=770101001|Sum=1250000|Purpose=Оплата по счету № 15 от 03.10, НДС не облагается
Заголовок
ST0001 — признак формата и версия стандарта. Последняя цифра — кодировка текста:
| Цифра | Кодировка | Когда использовать |
|---|---|---|
| 1 | windows-1251 | Если генератор работает в этой кодировке |
| 2 | UTF-8 | Основной вариант для 1С 8.3 |
| 3 | КОИ8-Р | На практике почти не встречается |
Обязательные и полезные поля
| Поле | Что содержит | Обязательное |
|---|---|---|
Name | Наименование получателя | Да |
PersonalAcc | Расчётный счёт, 20 цифр | Да |
BankName | Наименование банка | Да |
BIC | БИК, 9 цифр | Да |
CorrespAcc | Корреспондентский счёт | Да |
PayeeINN | ИНН получателя | Нет, но без него многие банки просят ввод вручную |
KPP | КПП получателя | Нет |
Sum | Сумма в копейках, без разделителей | Нет, но без суммы покупатель введёт её сам |
Purpose | Назначение платежа | Нет |
Сумма в поле Sum указывается в копейках. Счёт на 12 500,00 ₽ — это Sum=1250000. Передадите рубли — покупатель увидит к оплате 125 ₽.
Функция сборки строки
Функция СтрокаПлатежаГОСТ(Данные)
Части = Новый Массив;
Части.Добавить("ST00012");
Части.Добавить("Name=" + ЧистоеЗначение(Данные.Получатель));
Части.Добавить("PersonalAcc=" + ЧистоеЗначение(Данные.РасчетныйСчет));
Части.Добавить("BankName=" + ЧистоеЗначение(Данные.Банк));
Части.Добавить("BIC=" + ЧистоеЗначение(Данные.БИК));
Части.Добавить("CorrespAcc=" + ЧистоеЗначение(Данные.КоррСчет));
Части.Добавить("PayeeINN=" + ЧистоеЗначение(Данные.ИНН));
Если ЗначениеЗаполнено(Данные.КПП) Тогда
Части.Добавить("KPP=" + ЧистоеЗначение(Данные.КПП));
КонецЕсли;
Копейки = Окр(Данные.СуммаДокумента * 100, 0);
Части.Добавить("Sum=" + Формат(Копейки, "ЧГ=0; ЧН=0"));
Части.Добавить("Purpose=" + ЧистоеЗначение(Данные.Назначение));
Возврат СтрСоединить(Части, "|");
КонецФункции
Функция ЧистоеЗначение(Значение)
// Вертикальная черта — разделитель полей, внутри значений её быть не должно
Возврат СокрЛП(СтрЗаменить(Строка(Значение), "|", " "));
КонецФункции
Проверка арифметики: 12 500,00 × 100 = 1 250 000. Формат с ЧГ=0 уберёт пробел-разделитель групп, иначе строка получится 1 250 000 и банк её не разберёт.
Назначение платежа держите коротким — до 210 символов, как в платёжке. Длинная строка делает код плотнее: на печати точки сливаются, и телефон его не читает.
Как проверить, что QR-код считывается
Код может выглядеть нормально, но содержать ошибку. Проверяйте не картинку, а то, что из неё получает банк.
Порядок проверки
- Распечатайте тестовый счёт на том принтере, которым пользуется отдел продаж.
- Отсканируйте его обычной камерой телефона или сканером QR. Вы увидите исходную строку целиком — сверьте каждое поле с карточкой организации.
- Отсканируйте тот же счёт в банковском приложении физлица, в режиме оплаты по QR. Дойдите до экрана подтверждения, но не платите.
- Проверьте сумму, получателя, ИНН и назначение на экране банка.
- Повторите для PDF: сохраните счёт в PDF, как его отправляют по почте, и наведите телефон на монитор.
Что смотреть на экране банка
- 🔍 Кириллица отображается нормально, без «кракозябр».
- 🔍 Сумма совпадает с итогом счёта, копейки на месте.
- 🔍 Назначение не обрезано и не содержит лишних символов.
- 🔍 БИК и счёт подставились, приложение не требует ввести их вручную.
Если в базе несколько организаций, повторите проверку для каждой: строка собирается из реквизитов конкретной организации и её банковского счёта, и ошибка в одной карточке не видна на счетах другой.
Стандарт создавался под платежи физических лиц. Приложения для бизнеса формат поддерживают не всегда — уточните у банка, если ваши покупатели в основном организации.
Ошибки при выводе QR-кода в счёт и что с ними делать
Если код пропал после обновления
- 🔄 Пользовательский макет устарел: верните стандартный макет и перенесите изменения заново.
- 🔄 Расширение перестало применяться: посмотрите
Администрирование → Печатные формы, отчеты и обработки → Расширения, нет ли у него ошибки при подключении. - 🔄 Внешняя форма обращается к реквизиту, который переименовали в новом релизе: команда печати упадёт с ошибкой — пусть программист сверит обращения к полям документа.
Частые вопросы
Нужно ли согласовывать QR-код с банком?
Можно ли добавить QR-код в счёт в 1С без программиста?
Попадёт ли QR-код в счёт, отправленный по почте из 1С?
Подходит ли такой QR-код для оплаты через СБП?
Что делать, если у организации несколько расчётных счетов?
Источники
- ГОСТ Р 56042-2014 «Стандарты финансовых операций. Двумерные символы штрихового кода для осуществления платежей физических лиц»