Как убрать QR-код на оплату по СБП в печатной форме Счета и вернуть стандартный код

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

В современных конфигурациях 1С, таких как «Управление нашей фирмой», «Управление торговлей» или «Бухгалтерия предприятия», реализована плотная интеграция с Системой быстрых платежей (СБП). Это удобно для бизнеса, но часто вызывает путаницу у пользователей. Если в документе (например, в «Заказе покупателя» или «Счете на оплату») один раз была нажата кнопка СБП и сформирована платежная ссылка, программа автоматически заменяет стандартный QR-код (сформированный по ГОСТ Р 56042-2014) на динамический QR-код СБП. В этой статье мы разберем, как вернуть привычный способ оплаты и почему простое удаление данных может привести к ошибкам.

Почему 1С «навязывает» QR-код СБП?

Проанализируем логику работы программы. Когда вы инициируете оплату через СБП, система создает уникальный идентификатор операции и записывает его в специальные регистры сведений. При формировании печатной формы модуль печати проверяет наличие активных ссылок СБП для данного документа. Если такая ссылка найдена, приоритет отдается ей, так как СБП считается более приоритетным каналом оплаты из-за низкой комиссии и мгновенного зачисления средств. Однако клиенты не всегда готовы платить через СБП, и бухгалтеру требуется вернуть «традиционный» QR-код с банковскими реквизитами.

Способ 1: Удаление записей из технических регистров (Ручной метод)

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

Рассмотрим последовательность действий:

  1. Перейдем в меню «Функции для технического специалиста» (или через «Все функции», если версия платформы старше).
  2. Найдем регистр сведений ДанныеОперацийСБП. Проанализируем список и найдем запись, связанную с вашим документом (Заказом или Счетом). Удалим эту запись.
  3. Найдем второй важный регистр — ИдентификаторыОперацийСБП. Здесь хранится связь между внутренним объектом 1С и внешним ID платежной системы. Удалим соответствующую строку и здесь.

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

Способ 2: Использование внешних печатных форм (Программный метод)

Если ситуация, когда клиент выбирает способ оплаты в последний момент, повторяется часто, ручное удаление записей из регистров становится опасным и неэффективным. Пользователи могут случайно удалить лишние данные, что нарушит работу обмена с банком. Рассмотрим более изящное решение — создание внешней печатной формы (ВПФ). Для готовой реализации в УТ 11 и КА 2 можно использовать внешнюю печатную форму счета на оплату с QR-кодом.

Разберем логику, которую можно внедрить в код ВПФ. Вместо того чтобы полагаться на стандартную функцию формирования области QR-кода, мы можем принудительно вызывать формирование кода по ГОСТу, игнорируя наличие данных СБП. Выясним, как это выглядит в коде:


// В модуле внешней печатной формы при подготовке данных для печати
// Мы можем переопределить параметр, отвечающий за выбор типа кода

Если ПараметрыПечати.Свойство("ТипQRКода") Тогда
    // Принудительно устанавливаем тип кода "ПоРеквизитам", игнорируя СБП
    ПараметрыПечати.ТипQRКода = "СтандартныйГОСТ"; 
КонецЕсли;

// Либо при заполнении области макета напрямую вызываем функцию генерации
ДанныеДляКода = ПодготовитьДанныеДляСтандартногоQR(ОбъектСсылка);
РезультатШтрихкод = УправлениеШтрихкодами.СформироватьКартинкуШтрихкода(ДанныеДляКода, "QR");

Такой подход позволяет реализовать интересную идею: в «Счете на оплату» всегда выводить стандартный QR-код, а в «Заказе покупателя» — код СБП. Это разграничение поможет клиенту самому выбрать удобный способ оплаты в зависимости от документа, который он держит в руках.

Способ 3: Настройка макета печатной формы (Без программирования)

Если вам в принципе не нужен функционал СБП в печатных формах, проанализируем возможность редактирования макета. Этот способ подходит для тех, кто хочет полностью исключить блок СБП из визуальной части документа.

  1. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Откроем пункт Макеты печатных форм.
  3. Найдем в списке «Счет на оплату» и нажмем кнопку «Изменить».
  4. В открывшемся редакторе макета найдем область, которая называется ОбластьQRКод или ЗаголовокQRКод.
  5. Мы можем либо очистить содержимое этой области, либо настроить видимость параметров так, чтобы данные СБП не выводились.

Обратите внимание: При обновлении конфигурации измененные макеты могут потребовать пересмотра, поэтому использование расширений или ВПФ считается более надежным методом в долгосрочной перспективе.

Почему возникают ошибки при формировании кода?

Иногда при попытке вывести код программа выдает сообщение: «Нет данных для формирования». Проанализируем причины этой ситуации:

Итоги и рекомендации

Подведем итог нашему разбору. Если вам нужно разово убрать QR-код СБП, используйте очистку регистров ДанныеОперацийСБП и ИдентификаторыОперацийСБП. Однако помните, что это «хирургическое» вмешательство. Для стабильной работы предприятия лучше один раз настроить Внешнюю печатную форму, которая будет содержать логику выбора кода. Например, можно добавить на форму документа «галочку» — «Печатать СБП», и в зависимости от её состояния выводить тот или иной тип кода. Это убережет базу данных от ошибок и сделает работу пользователей предсказуемой и безопасной. Для пользователей конфигурации «Бухгалтерия предприятия» подойдёт внешняя печатная форма счета с QR-кодом по реквизитам.

← На главную