Ситуация, когда один эквайринговый терминал используется для обслуживания двух и более организаций (так называемый режим мультимерчанта), является стандартной для многих торговых точек. Однако при интеграции с «1С:Управление торговлей 11» часто возникает критическая ошибка: продажи проходят корректно по разным организациям, а все возвраты «падают» на расчетный счет только одной (обычно первой) компании. Проанализируем причины этой проблемы и разберем способы ее решения.
Для начала разберем, как именно 1С сообщает терминалу, по какой организации нужно провести транзакцию. При использовании драйверов Сбербанка (библиотека sb_pilot.dll) разделение потоков идет по так называемым отделам (Departments) или Merchant ID. В настройках подключаемого оборудования в 1С для каждой организации прописывается свой номер отдела.
Когда кассир пробивает чек, 1С передает в драйвер команду на оплату, в которой содержится номер отдела. Если терминал настроен верно, он направляет запрос в банк с идентификатором соответствующего юридического лица. Проблема с возвратами заключается в том, что логика передачи номера отдела в операциях возврата в некоторых релизах 1С отличается от логики при продаже.
Рассмотрим структуру конфигурационных файлов программного обеспечения Сбербанка, которое обычно располагается в папке C:\sc552\ или аналогичной. Основным файлом настроек является pinpad.ini. В режиме мультимерчанта этот файл должен содержать маппинг (соответствие) номеров отделов и их логических имен.
Выясним причину ошибки: если инженер банка настроил «сквозную» продажу по отделам, но в параметрах операций возврата (Refund) жестко закрепил только один основной идентификатор, терминал будет игнорировать команды от 1С. Проанализируем секции файла pinpad.ini. Для корректной работы каждой организации должен соответствовать свой MerchantID и TerminalID. Если при попытке возврата драйвер не находит в этом файле четкого указания, на какой MerchantID отправить операцию для конкретного отдела, он выбирает значение по умолчанию — Отдел №1.
Крайне важно различать две разные банковские операции, которые в интерфейсе 1С могут выглядеть похоже:
Посмотрим на ситуацию со стороны 1С: если при выполнении операции Refund программный код не передает параметр Department, терминал Сбербанка по умолчанию проведет деньги по первой организации в списке. Это наиболее вероятная причина поведения, описанного пользователями.
В релизах ветки 1С:УТ 11.4 (например, 11.4.3.167) была замечена недоработка в модуле интеграции с эквайрингом. Разберем по шагам, что происходит в коде. При вызове формы оплаты 1С корректно определяет организацию, но при формировании структуры данных для драйвера эквайринга в методе ВыполнитьОперациюВозврата, поле НомерОтдела может оставаться пустым или принимать значение 0.
Чтобы убедиться в этом, программисту необходимо проверить обработку команды ReturnPayment в общем модуле, отвечающем за подключаемое оборудование. Проанализируем пример логики, которая должна присутствовать:
// Пример фрагмента кода в модуле интеграции
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("Сумма", СуммаВозврата);
ПараметрыОперации.Вставить("НомерОтдела", ОбъектЭквайринга.НомерОтдела); // Важно проверить заполнение этого поля!
ПараметрыОперации.Вставить("ТипОплаты", 1);
Результат = ЭквайринговыйТерминал.ВыполнитьОплату(ПараметрыОперации);
Если в вашей конфигурации параметр НомерОтдела (или Department) не передается в функцию возврата, его необходимо добавить вручную или обновить конфигурацию до актуального релиза, где эта ошибка исправлена.
Если вы столкнулись с сопротивлением со стороны банковских специалистов, которые утверждают, что «на стороне банка все настроено верно», существует надежный способ обойти проблему без изменения кода 1С. Рассмотрим настройку «Выбор отдела на терминале».
Попросите инженера Сбербанка изменить режим работы терминала так, чтобы при любой операции возврата (Refund) терминал принудительно запрашивал выбор отдела на экране самого пин-пада. В этом случае:
Этот метод является «костылем», но он гарантирует, что деньги уйдут с правильного счета, даже если 1С передает некорректные данные или драйвер работает нестабильно.
Чтобы окончательно выяснить, на чьей стороне проблема, проанализируем файл p.log, который генерирует ПО Сбербанка. В этом логе фиксируются все команды, поступающие из 1С в библиотеку sb_pilot.
Найдите в логе строку, соответствующую операции возврата. Ищите ключевые слова Amount и Department. Если в логе вы видите Department=1, в то время как возврат делается по второй организации — значит, виновата 1С (или настройки драйвера в 1С). Если же в логе стоит правильный номер отдела (например, Department=2), но деньги все равно списались с первой организации — значит, проблема в настройках процессинга банка или в файлах конфигурации самого терминала.
Подведем итог. Для решения проблемы с возвратами при мультимерчанте необходимо:
p.log на предмет передачи параметра Department.Следование этим шагам позволит настроить прозрачную и корректную работу с возвратами для всех юридических лиц, использующих общее оборудование.