Что делать, если драйвер терминала VeriFone при оплате картой сообщает о недостатке параметров?

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

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

Разберем причину возникновения ошибки

Основная причина кроется в несоответствии количества аргументов, которые передает программный код «1С», и количества аргументов, которые ожидает конкретная версия библиотеки SBRF.dll (или SBRFCOM.dll), зарегистрированная в вашей операционной системе. Сбербанк поставляет программное обеспечение (UPOS) с разными вариантами COM-объектов. Проанализируем два основных стандарта:

  1. Версия с 3 параметрами: Ожидает только Сумму, RRN (идентификатор транзакции) и Код авторизации. Этот вариант характерен для старых библиотек и часто используется в конфигурациях на обычных формах, таких как «Управление торговлей 10.3».
  2. Версия с 7 параметрами: Помимо суммы и кодов, требует передачи номера карты, срока действия, имени держателя и текста чека. Эта версия чаще встречается в современных конфигурациях на управляемых формах (БСП, БПО).

Если в коде 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

Иногда простая замена файла в папке не помогает, так как в реестре Windows остается ссылка на старый путь или другую версию библиотеки. Выясним, как проверить это правильно. Программный идентификатор (ProgID) компоненты Сбербанка обычно выглядит как SBRFSRV.Server или Sberbank.SberbankTerminal.

Для корректной работы выполним следующие шаги:

  1. Закроем все сеансы «1С:Предприятие».
  2. Запустим командную строку от имени администратора.
  3. Выполним команду разрегистрации текущей библиотеки: regsvr32 /u "C:\путь_к_старой_папке\SBRF.dll".
  4. Выполним регистрацию нужной библиотеки (из папки 3_par): regsvr32 "C:\sc552\1C\3_par\SBRF.dll".

Важный нюанс: Обратите внимание на разрядность. Если вы используете 32-битный клиент 1С (что является стандартом для большинства случаев работы с торговым оборудованием), библиотека также должна быть 32-битной. В 64-битной среде вызовы COM-объектов могут вести себя непредсказуемо или возвращать ошибки параметров из-за неверной интерпретации типов данных.

Анализируем типы данных и возвращаемые значения

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

Рассмотрим рекомендации по инициализации переменных:

Проверка файлов зависимостей

Работа метода ОплатитьПлатежнойКартой зависит не только от зарегистрированной DLL, но и от окружения в основной папке драйвера (там, где находится pilot_nt.dll). Посмотрим, какие файлы должны присутствовать в рабочем каталоге:

Если в pinpad.ini указаны неверные параметры порта или скорости, драйвер может аварийно завершить метод, что иногда интерпретируется платформой 1С как ошибка вызова (в том числе "ошибка параметров").

Использование логирования для диагностики

Если ситуация не прояснилась, включим логирование операций драйвера. Найдем файл pinpad.ini в рабочей директории и установим параметр Log=1. После повторной попытки оплаты проанализируем файл лога (обычно sberlog.txt или аналогичный). В нем будет четко видно, дошел ли вызов до библиотеки и сколько аргументов она фактически получила. Это позволит исключить проблемы на стороне кода 1С.

Заключение и выводы

Подведем итог. Если терминал VeriFone в 1С жалуется на параметры, пройдем по шагам:

  1. Проверим, сколько параметров передает ваша обработка (3 или 7).
  2. Убедимся, что зарегистрирована SBRF.dll из соответствующей папки (3_par или 7_par).
  3. Проверим регистрацию через regsvr32, предварительно удалив старые записи.
  4. Инициализируем переменные для выходных параметров как пустые строки.
  5. Проверим соответствие разрядности библиотеки и клиента 1С.

Соблюдение этих технических нюансов гарантирует стабильную работу эквайринга в любой конфигурации «1С:Предприятие».

← На главную