Как исправить ошибку возврата на эквайринговом терминале УралСиб (INPAS) в 1С:Розница?

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

При работе с торговым оборудованием в 1С часто возникает ситуация: продажи через подключенный эквайринг проходят идеально, но как только дело доходит до оформления возврата, система ведет себя некорректно. В случае с банком УралСиб и протоколом INPAS (UNIPOS), кассиры часто сталкиваются с тем, что при нажатии кнопки «Возврат» в РМК программа сразу печатает фискальный чек возврата, но сам банковский терминал даже не «просыпается» и не предлагает приложить карту. Проанализируем, почему так происходит и как заставить оборудование работать правильно.

Выясняем причину: почему терминал «молчит»?

Проанализируем ситуацию с технической стороны. Когда мы пробиваем обычный чек продажи, 1С посылает драйверу простую команду на авторизацию суммы. Для возврата же протокол INPAS (используемый в терминалах PAX) требует гораздо больше данных. Для успешной операции возврата (Refund) или отмены (Void) банку необходимо идентифицировать оригинальную транзакцию. Если 1С передает пустые параметры, драйвер блокирует выполнение операции еще до того, как команда дойдет до «железа».

Основными параметрами, которые требуются терминалу для инициации возврата, являются:

  1. RRN (Retrieval Reference Number) — 12-значный ссылочный номер транзакции.
  2. Номер чека ЭТ — код авторизации или номер слип-чека из оригинальной продажи.
  3. Сумма операции.

Если в коде 1С эти поля инициализируются как пустые строки, терминал просто игнорирует запрос. Рассмотрим, как это выглядит в стандартном коде процедуры ЗавершитьВозвратПлатежнойКартойЧерезЭквайринговыйТерминалНачало:


ПараметрДействия.Вставить("СтрокаСлипЧека", "");
ПараметрДействия.Вставить("НомерСсылкиОперации", ""); // Это и есть RRN
ПараметрДействия.Вставить("НомерЧекаЭТ", "");        // Это номер оригинального чека

Как мы видим, в базовых версиях или при определенных настройках РМК, эти данные могут не подтягиваться из базы автоматически, что и приводит к «молчанию» терминала.

Шаг 1. Проверка логов драйвера

Прежде чем приступать к правке кода, нам необходимо убедиться, что проблема именно в передаче параметров. Для этого проанализируем логи драйвера INPAS. Обычно они располагаются по пути: C:\ProgramData\Inpas\SmartSale\Logs\ или в папке установки UNIPOS.

Найдем файл unipos.log и посмотрим на последние записи в момент нажатия кнопки возврата. Если мы видим ошибки типа Invalid Parameter или Empty RRN, значит, подозрения подтвердились: 1С не передает нужные идентификаторы транзакции.

Шаг 2. Тестирование возврата «На основании»

Разберем важный нюанс: поведение системы в РМК (Рабочем месте кассира) и в обычном режиме документов может отличаться. Проверим, работает ли возврат, если делать его не через общую кнопку возврата в РМК, а через поиск чека продажи:

  1. Зайдем в список чеков или найдем нужный чек через «Возврат по чеку».
  2. Создадим документ Чек с типом операции «Возврат» на основании оригинальной продажи.
  3. Попробуем пробить его.

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

Шаг 3. Исправление кода через расширение

Для решения проблемы нам потребуется вмешаться в процесс подготовки параметров для эквайринговой операции. Нам нужно, чтобы при возврате система находила запись в регистре ЭквайринговыеОперации, соответствующую исходному чеку, и доставала оттуда RRN.

Рассмотрим пример того, как должны заполняться ПараметрыОперации перед вызовом метода драйвера:


ПараметрыОперации = ОборудованиеПлатежныеСистемыКлиентСервер.ПараметрыВыполненияЭквайринговойОперации();
ПараметрыОперации.ТипТранзакции = "AuthorizeRefund"; // Тип операции - Возврат
ПараметрыОперации.СуммаОперации = СуммаОперации;

// Важно заполнить данные из оригинального слип-чека!
ПараметрыОперации.НомерЧека = НомерОригинальногоЧекаЭТ; 
ПараметрыОперации.НомерСсылки = НужныйRRN; 

Важный момент: в некоторых конфигурациях 1С:Розница 2.3 параметр ПараметрыОперации.НомерЧека по умолчанию заполняется пробелом " ". Для терминалов PAX под управлением ПО от УралСиб это может быть критично — они ожидают либо точный номер, либо отсутствие этого поля в структуре, если банк разрешает «непретензионный» возврат.

Шаг 4. Настройка на стороне банка

Если вы не хотите менять программный код, существует альтернативный путь. Проанализируем возможность изменения настроек самого терминала. У банковских инженеров есть возможность изменить конфигурацию профиля на сервере банка для конкретных терминалов:

В этом случае при получении команды на возврат терминал не будет искать в своей памяти старую транзакцию, а просто предложит кассиру ввести сумму или сразу приложить карту. Однако помните, что банки неохотно идут на это из-за требований безопасности (борьба с ФЗ-115).

Резюме по исправлению

Подводя итог, если ваш эквайринг УралСиб в 1С:Розница не делает возвраты, выполните следующие действия:

  1. Убедитесь, что версия драйвера в 1С (ИНПАС:Эквайринговые терминалы UNIPOS) актуальна и соответствует установленному ПО на компьютере.
  2. Проверьте логи в C:\ProgramData\Inpas\, чтобы увидеть реальную причину отказа (ошибка параметров).
  3. Используйте Расширение конфигурации, чтобы принудительно передавать RRN и НомерЧекаЭТ в структуру ПараметрыОперации при вызове процедуры возврата.
  4. Если возврат происходит «день в день», убедитесь, что система не пытается сделать AuthorizeRefund (Возврат) вместо CancelTransaction (Отмена), так как для отмены часто требуется только номер чека, а для возврата — полный набор данных.

Соблюдение этих шагов позволит синхронизировать работу 1С и банковского оборудования, исключив ручной ввод сумм на терминале и расхождения в учете.

← На главную