При интеграции торгового оборудования, в частности эквайринговых терминалов VeriFone (Sberbank), программисты часто сталкиваются с ошибкой "Недостаточно фактических параметров" при вызове метода оплаты. Ситуация осложняется тем, что документация не всегда дает четкий ответ, а драйверы Сбербанка имеют несколько различных реализаций. В этой статье мы подробно разберем, почему возникает эта ошибка и как правильно настроить взаимодействие между «1С:Предприятие» и банковским терминалом.
Основная причина кроется в несоответствии количества аргументов, которые передает программный код «1С», и количества аргументов, которые ожидает конкретная версия библиотеки SBRF.dll (или SBRFCOM.dll), зарегистрированная в вашей операционной системе. Сбербанк поставляет программное обеспечение (UPOS) с разными вариантами COM-объектов. Проанализируем два основных стандарта:
Если в коде 1С написано Объект.Драйвер.ОплатитьПлатежнойКартой(Сумма, RRN, КодАвторизации), а в системе зарегистрирована «семипараметрическая» библиотека, интерпретатор выдаст ошибку о нехватке параметров.
Рассмотрим структуру папок в дистрибутиве Сбербанка (обычно это папка sc552). Внутри вы найдете каталог 1C, в котором зачастую выделены подпапки: 3_par и 7_par. Каждая из них содержит свою версию SBRF.dll.
Если ваша конфигурация 1С (например, старая самописная или УТ 10.3 с обработкой SberBankES_v2.epf) жестко запрограммирована на работу с 3 параметрами, вам необходимо использовать библиотеку именно из папки 3_par. Проанализируем типичный пример вызова в 1С:
// Пример вызова для версии с 3 параметрами
мСумма = 100;
КодRRN = "";
КодАвторизации = "";
// Важно: параметры RRN и КодАвторизации являются выходными,
// но их нужно передать в функцию инициализированными.
Ответ = Объект.Драйвер.ОплатитьПлатежнойКартой(мСумма, КодRRN, КодАвторизации);
Иногда простая замена файла в папке не помогает, так как в реестре Windows остается ссылка на старый путь или другую версию библиотеки. Выясним, как проверить это правильно. Программный идентификатор (ProgID) компоненты Сбербанка обычно выглядит как SBRFSRV.Server или Sberbank.SberbankTerminal.
Для корректной работы выполним следующие шаги:
regsvr32 /u "C:\путь_к_старой_папке\SBRF.dll".3_par): regsvr32 "C:\sc552\1C\3_par\SBRF.dll".Важный нюанс: Обратите внимание на разрядность. Если вы используете 32-битный клиент 1С (что является стандартом для большинства случаев работы с торговым оборудованием), библиотека также должна быть 32-битной. В 64-битной среде вызовы COM-объектов могут вести себя непредсказуемо или возвращать ошибки параметров из-за неверной интерпретации типов данных.
Как было замечено опытными специалистами, параметры КодRRN и КодАвторизации являются выходными. Это означает, что драйвер заполняет их данными, полученными от банковского сервера после успешной транзакции. Однако в языке 1С при вызове методов внешних компонент крайне важно передавать переменные правильного типа.
Рассмотрим рекомендации по инициализации переменных:
"". Использование значения Неопределено может привести к ошибке в момент вызова метода, так как COM-объект ожидает строковый буфер для записи ответа.Работа метода ОплатитьПлатежнойКартой зависит не только от зарегистрированной DLL, но и от окружения в основной папке драйвера (там, где находится pilot_nt.dll). Посмотрим, какие файлы должны присутствовать в рабочем каталоге:
gate.dll — отвечает за связь с сервером.sb_pilot.dll — ядро системы UPOS.pinpad.ini — конфигурационный файл настроек.Если в pinpad.ini указаны неверные параметры порта или скорости, драйвер может аварийно завершить метод, что иногда интерпретируется платформой 1С как ошибка вызова (в том числе "ошибка параметров").
Если ситуация не прояснилась, включим логирование операций драйвера. Найдем файл pinpad.ini в рабочей директории и установим параметр Log=1. После повторной попытки оплаты проанализируем файл лога (обычно sberlog.txt или аналогичный). В нем будет четко видно, дошел ли вызов до библиотеки и сколько аргументов она фактически получила. Это позволит исключить проблемы на стороне кода 1С.
Подведем итог. Если терминал VeriFone в 1С жалуется на параметры, пройдем по шагам:
SBRF.dll из соответствующей папки (3_par или 7_par).regsvr32, предварительно удалив старые записи.Соблюдение этих технических нюансов гарантирует стабильную работу эквайринга в любой конфигурации «1С:Предприятие».