При работе с торговым оборудованием в 1С часто возникает ситуация: продажи через подключенный эквайринг проходят идеально, но как только дело доходит до оформления возврата, система ведет себя некорректно. В случае с банком УралСиб и протоколом INPAS (UNIPOS), кассиры часто сталкиваются с тем, что при нажатии кнопки «Возврат» в РМК программа сразу печатает фискальный чек возврата, но сам банковский терминал даже не «просыпается» и не предлагает приложить карту. Проанализируем, почему так происходит и как заставить оборудование работать правильно.
Проанализируем ситуацию с технической стороны. Когда мы пробиваем обычный чек продажи, 1С посылает драйверу простую команду на авторизацию суммы. Для возврата же протокол INPAS (используемый в терминалах PAX) требует гораздо больше данных. Для успешной операции возврата (Refund) или отмены (Void) банку необходимо идентифицировать оригинальную транзакцию. Если 1С передает пустые параметры, драйвер блокирует выполнение операции еще до того, как команда дойдет до «железа».
Основными параметрами, которые требуются терминалу для инициации возврата, являются:
Если в коде 1С эти поля инициализируются как пустые строки, терминал просто игнорирует запрос. Рассмотрим, как это выглядит в стандартном коде процедуры ЗавершитьВозвратПлатежнойКартойЧерезЭквайринговыйТерминалНачало:
ПараметрДействия.Вставить("СтрокаСлипЧека", "");
ПараметрДействия.Вставить("НомерСсылкиОперации", ""); // Это и есть RRN
ПараметрДействия.Вставить("НомерЧекаЭТ", ""); // Это номер оригинального чека
Как мы видим, в базовых версиях или при определенных настройках РМК, эти данные могут не подтягиваться из базы автоматически, что и приводит к «молчанию» терминала.
Прежде чем приступать к правке кода, нам необходимо убедиться, что проблема именно в передаче параметров. Для этого проанализируем логи драйвера INPAS. Обычно они располагаются по пути: C:\ProgramData\Inpas\SmartSale\Logs\ или в папке установки UNIPOS.
Найдем файл unipos.log и посмотрим на последние записи в момент нажатия кнопки возврата. Если мы видим ошибки типа Invalid Parameter или Empty RRN, значит, подозрения подтвердились: 1С не передает нужные идентификаторы транзакции.
Разберем важный нюанс: поведение системы в РМК (Рабочем месте кассира) и в обычном режиме документов может отличаться. Проверим, работает ли возврат, если делать его не через общую кнопку возврата в РМК, а через поиск чека продажи:
Чек с типом операции «Возврат» на основании оригинальной продажи.Если в этом случае терминал срабатывает, значит, проблема локализована в процедурах обработки интерфейса РМК, который «теряет» связь с исходной эквайринговой операцией.
Для решения проблемы нам потребуется вмешаться в процесс подготовки параметров для эквайринговой операции. Нам нужно, чтобы при возврате система находила запись в регистре ЭквайринговыеОперации, соответствующую исходному чеку, и доставала оттуда RRN.
Рассмотрим пример того, как должны заполняться ПараметрыОперации перед вызовом метода драйвера:
ПараметрыОперации = ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации();
ПараметрыОперации.ТипТранзакции = "AuthorizeRefund"; // Тип операции - Возврат
ПараметрыОперации.СуммаОперации = СуммаОперации;
// Важно заполнить данные из оригинального слип-чека!
ПараметрыОперации.НомерЧека = НомерОригинальногоЧекаЭТ;
ПараметрыОперации.НомерСсылки = НужныйRRN;
Важный момент: в некоторых конфигурациях 1С:Розница 2.3 параметр ПараметрыОперации.НомерЧека по умолчанию заполняется пробелом " ". Для терминалов PAX под управлением ПО от УралСиб это может быть критично — они ожидают либо точный номер, либо отсутствие этого поля в структуре, если банк разрешает «непретензионный» возврат.
Если вы не хотите менять программный код, существует альтернативный путь. Проанализируем возможность изменения настроек самого терминала. У банковских инженеров есть возможность изменить конфигурацию профиля на сервере банка для конкретных терминалов:
В этом случае при получении команды на возврат терминал не будет искать в своей памяти старую транзакцию, а просто предложит кассиру ввести сумму или сразу приложить карту. Однако помните, что банки неохотно идут на это из-за требований безопасности (борьба с ФЗ-115).
Подводя итог, если ваш эквайринг УралСиб в 1С:Розница не делает возвраты, выполните следующие действия:
ИНПАС:Эквайринговые терминалы UNIPOS) актуальна и соответствует установленному ПО на компьютере.C:\ProgramData\Inpas\, чтобы увидеть реальную причину отказа (ошибка параметров).RRN и НомерЧекаЭТ в структуру ПараметрыОперации при вызове процедуры возврата.AuthorizeRefund (Возврат) вместо CancelTransaction (Отмена), так как для отмены часто требуется только номер чека, а для возврата — полный набор данных.Соблюдение этих шагов позволит синхронизировать работу 1С и банковского оборудования, исключив ручной ввод сумм на терминале и расхождения в учете.