При подключении эквайрингового терминала PAX S300 к конфигурации 1С:Управление торговлей 11.4 (и другим старым версиям) пользователи часто сталкиваются с ситуацией, когда оплата по банковским картам проходит успешно, а при попытке провести оплату через Систему быстрых платежей (СБП) система выдает ошибку "Не заполнена колонка 'Номер платежной карты'". Это происходит даже если банк подтвердил, что функция СБП на терминале активирована.
Разберем, почему возникает эта ошибка и какие существуют способы ее решения, не прибегая к обязательному обновлению конфигурации 1С.
Корень проблемы кроется в логике работы старых версий конфигураций 1С. Механизм проведения эквайринговой операции жестко требует, чтобы в данных о платеже присутствовал номер банковской карты. Это обязательная валидация, заложенная в типовой код.
При оплате через СБП банковская карта физически не используется. Клиент сканирует QR-код, и платеж проходит напрямую между счетами. В результате терминал возвращает в 1С не номер карты, а уникальный идентификатор транзакции — RRN (Reference Retrieval Number). Этот номер записывается в поле Ссылочный номер.
Поскольку поле Номер платежной карты остается пустым, стандартная проверка 1С не проходит, и документ (Чек ККМ) не проводится, выдавая ошибку. В более новых версиях 1С (например, УТ 11.5.10 и выше) этот механизм был доработан, и система корректно обрабатывает платежи по СБП без номера карты.
Этот метод является теоретическим обходным путем, который может сработать в зависимости от настроек банка и версии драйвера. Суть заключается в том, чтобы создать в 1С два "виртуальных" терминала, привязанных к одному физическому устройству.
Таким образом, когда кассир в РМК будет выбирать оплату по СБП, 1С обратится к "виртуальному" терминалу, настроенному на СБП, и драйвер отправит на физическое устройство правильную команду для генерации QR-кода. Однако этот способ не гарантирует решения основной проблемы, если драйвер все равно не вернет RRN в нужное поле.
Это наиболее надежный и правильный способ решения проблемы без обновления всей конфигурации. Метод заключается в создании небольшого расширения, которое будет корректировать поведение программы в момент получения данных от терминала.
Логика работы расширения:
Основная задача — перехватить данные, которые драйвер возвращает в 1С, и, если номер карты пуст, подставить в это поле значение из ссылочного номера (RRN).
ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.&Вместо перехватывается процедура, которая обрабатывает результат выполнения операции на терминале.Пример концептуального кода в модуле расширения:
// В расширении, в заимствованном модуле ПодключаемоеОборудованиеУниверсальныйДрайверКлиент
// Перехватываем процедуру, которая обрабатывает результат от драйвера.
// Название оригинальной процедуры может отличаться в зависимости от версии.
&Вместо("ОбработатьРезультатОперацииЭквайринга")
Процедура Расш_ОбработатьРезультатОперацииЭквайринга(ДанныеОперации, ВыходныеПараметры)
// Сначала вызываем оригинальный метод, чтобы он заполнил структуру ВыходныеПараметры
ВызватьОригинальныйМетод(ДанныеОперации, ВыходныеПараметры);
// Теперь дорабатываем результат
// Предположим, что ВыходныеПараметры - это структура с полями "НомерПлатежнойКарты" и "СсылочныйНомер"
// Проверяем, что номер карты пуст, а RRN (СсылочныйНомер) пришел от терминала
Если НЕ ЗначениеЗаполнено(ВыходныеПараметры.НомерПлатежнойКарты) И ЗначениеЗаполнено(ВыходныеПараметры.СсылочныйНомер) Тогда
// Главный шаг: подставляем RRN в поле номера карты, чтобы обмануть стандартную проверку
ВыходныеПараметры.НомерПлатежнойКарты = ВыходныеПараметры.СсылочныйНомер;
КонецЕсли;
КонецПроцедуры
Такое расширение безопасно, не требует снятия конфигурации с поддержки и решает проблему кардинально. Оплата по СБП начинает проходить, чек проводится, а RRN корректно сохраняется для последующих операций, например, для возвратов.
Возвраты платежей, совершенных через СБП, также осуществляются на основе RRN, который печатается на чеке продажи (часто подписывается как payrnn или ID транзакции).
Процесс возврата:
Важно: если используется решение с расширением и оно настроено корректно, то при формировании возврата 1С может автоматически передавать сохраненный RRN в драйвер терминала. В этом случае кассиру даже не придется вводить его вручную. Это наиболее удобный и автоматизированный сценарий.