Почему возвраты по эквайрингу Сбербанка уходят не на ту организацию при использовании мультимерчанта в 1С?

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

Ситуация, когда один эквайринговый терминал используется для обслуживания двух и более организаций (так называемый режим мультимерчанта), является стандартной для многих торговых точек. Однако при интеграции с «1С:Управление торговлей 11» часто возникает критическая ошибка: продажи проходят корректно по разным организациям, а все возвраты «падают» на расчетный счет только одной (обычно первой) компании. Проанализируем причины этой проблемы и разберем способы ее решения.

Механика взаимодействия 1С и терминала Сбербанка

Для начала разберем, как именно 1С сообщает терминалу, по какой организации нужно провести транзакцию. При использовании драйверов Сбербанка (библиотека sb_pilot.dll) разделение потоков идет по так называемым отделам (Departments) или Merchant ID. В настройках подключаемого оборудования в 1С для каждой организации прописывается свой номер отдела.

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

Проблема 1: Особенности настройки файла pinpad.ini

Рассмотрим структуру конфигурационных файлов программного обеспечения Сбербанка, которое обычно располагается в папке C:\sc552\ или аналогичной. Основным файлом настроек является pinpad.ini. В режиме мультимерчанта этот файл должен содержать маппинг (соответствие) номеров отделов и их логических имен.

Выясним причину ошибки: если инженер банка настроил «сквозную» продажу по отделам, но в параметрах операций возврата (Refund) жестко закрепил только один основной идентификатор, терминал будет игнорировать команды от 1С. Проанализируем секции файла pinpad.ini. Для корректной работы каждой организации должен соответствовать свой MerchantID и TerminalID. Если при попытке возврата драйвер не находит в этом файле четкого указания, на какой MerchantID отправить операцию для конкретного отдела, он выбирает значение по умолчанию — Отдел №1.

Проблема 2: Различие операций «Отмена» и «Возврат»

Крайне важно различать две разные банковские операции, которые в интерфейсе 1С могут выглядеть похоже:

  1. Отмена операции (Void): Выполняется до закрытия смены (до сверки итогов). В этом случае терминал ищет транзакцию в своей памяти по номеру чека или RRN. Поскольку продажа была совершена по конкретной организации, отмена автоматически пройдет по ней же.
  2. Возврат (Refund): Выполняется после закрытия смены (в другой день). Это новая транзакция, которая требует передачи всех параметров заново, включая номер отдела.

Посмотрим на ситуацию со стороны 1С: если при выполнении операции Refund программный код не передает параметр Department, терминал Сбербанка по умолчанию проведет деньги по первой организации в списке. Это наиболее вероятная причина поведения, описанного пользователями.

Проблема 3: Программная ошибка в коде 1С (УТ 11.4)

В релизах ветки 1С:УТ 11.4 (например, 11.4.3.167) была замечена недоработка в модуле интеграции с эквайрингом. Разберем по шагам, что происходит в коде. При вызове формы оплаты 1С корректно определяет организацию, но при формировании структуры данных для драйвера эквайринга в методе ВыполнитьОперациюВозврата, поле НомерОтдела может оставаться пустым или принимать значение 0.

Чтобы убедиться в этом, программисту необходимо проверить обработку команды ReturnPayment в общем модуле, отвечающем за подключаемое оборудование. Проанализируем пример логики, которая должна присутствовать:


// Пример фрагмента кода в модуле интеграции
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("Сумма", СуммаВозврата);
ПараметрыОперации.Вставить("НомерОтдела", ОбъектЭквайринга.НомерОтдела); // Важно проверить заполнение этого поля!
ПараметрыОперации.Вставить("ТипОплаты", 1);

Результат = ЭквайринговыйТерминал.ВыполнитьОплату(ПараметрыОперации);

Если в вашей конфигурации параметр НомерОтдела (или Department) не передается в функцию возврата, его необходимо добавить вручную или обновить конфигурацию до актуального релиза, где эта ошибка исправлена.

Проблема 4: Настройка выбора отдела на самом терминале

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

Попросите инженера Сбербанка изменить режим работы терминала так, чтобы при любой операции возврата (Refund) терминал принудительно запрашивал выбор отдела на экране самого пин-пада. В этом случае:

  1. Кассир нажимает «Возврат» в 1С.
  2. На экране терминала появляется меню: «1. Организация №1», «2. Организация №2».
  3. Кассир вручную выбирает нужную организацию.

Этот метод является «костылем», но он гарантирует, что деньги уйдут с правильного счета, даже если 1С передает некорректные данные или драйвер работает нестабильно.

Диагностика через лог-файлы

Чтобы окончательно выяснить, на чьей стороне проблема, проанализируем файл p.log, который генерирует ПО Сбербанка. В этом логе фиксируются все команды, поступающие из 1С в библиотеку sb_pilot.

Найдите в логе строку, соответствующую операции возврата. Ищите ключевые слова Amount и Department. Если в логе вы видите Department=1, в то время как возврат делается по второй организации — значит, виновата 1С (или настройки драйвера в 1С). Если же в логе стоит правильный номер отдела (например, Department=2), но деньги все равно списались с первой организации — значит, проблема в настройках процессинга банка или в файлах конфигурации самого терминала.

Резюме и рекомендации

Подведем итог. Для решения проблемы с возвратами при мультимерчанте необходимо:

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

← На главную