При настройке эквайринга Сбербанка в 1С 7.7 разработчики часто сталкиваются с ошибками при вызове методов или неудачными попытками создания объекта внешней компоненты. Например, при вызове метода ПрочитатьХэш система может выдать сообщение «Поле агрегатного объекта не обнаружено». Рассмотрим подробнее, почему это происходит, разберем отличия старой и новой библиотек эквайринга и выясним, как правильно подключить современную компоненту.
Если при попытке работы с терминалом возникает ошибка, что метод не обнаружен (например, ПрочитатьХэш), важно понимать, что такого метода в стандартных официальных библиотеках Сбербанка не существует. Вероятно, этот метод вызывался в чьей-то сторонней обертке или был перепутан с другой функцией. При прямом обращении к официальным библиотекам используются штатные методы, которые мы проанализируем ниже.
Также важно различать две версии библиотек:
При переходе на новый эквайринг через SBRFCOM.dll, попытка создать объект напрямую через СоздатьОбъект("AddIn.SBRFCOMObject.1") приведет к ошибке инициализации. Разберем по шагам правильную последовательность подключения.
Сначала необходимо подключить саму внешнюю компоненту с использованием ее ProgID, а затем создать объект расширения. Посмотрим на пример рабочего кода:
// Подключаем внешнюю компоненту
ПодключитьВнешнююКомпоненту("AddIn.SBRFCOMObject");
// Создаем объект для работы с терминалом
ОбКарт = СоздатьОбъект("AddIn.SBRFCOMExtension");
Объект AddIn.SBRFCOMExtension предоставляет свой набор методов для работы с оплатой и чеками:
ОплатитьПлатежнойКартой — инициирует оплату. В зависимости от версии компоненты он может принимать 3 параметра (Сумма, КодRRN, КодАвторизации) или 7 параметров (Amount, RRN, AuthCode, Hash, IsOwn, CardName, CardNum). При использовании версии с 7 параметрами признак принадлежности карты Сбербанку (IsOwn) и ее хэш (Hash) возвращаются прямо в переменные.КоличествоСтрокСлипЧека (узнать число строк) и ПолучитьСтрокуСлипЧека(НомерСтроки, Буфер) для чтения текста чека в цикле.ПолучитьОшибку(ТекстОшибки).Если вы продолжаете использовать старую библиотеку SBRF.dll, ее ProgID для создания объекта — SBRFSRV.Server. Логика работы здесь построена на передаче числовых кодов операций.
Разберем ситуацию, когда необходимо определить, является ли карта картой Сбербанка, и получить ее хэш. Для этого используется информационная операция (код 5002):
ОбКарт = СоздатьОбъект("SBRFSRV.Server");
ОбКарт.Clear(); // Очищаем параметры
ОбКарт.NFun(5002); // Выполняем информационную операцию по карте
// Получаем результаты
ХэшКарты = ОбКарт.GParamString("hash");
ПризнакСбербанка = ОбКарт.GParamString("OWNCArd"); // "1" - своя, "0" - чужая
ЗамаскированныйНомер = ОбКарт.GParamString("ClientCard");
При настройке рабочего места обратите внимание на следующие технические аспекты:
SBRFCOM.dll.C:\Windows\SysWOW64\regsvr32.exe "Путь_К_SBRFCOM.dll".GATE.DLL, SB_KERNEL.DLL, LOADPARM.EXE и файлы конфигурации.При работе в терминальном режиме или если на одном компьютере используется несколько ККМ для разных юрлиц, эквайринг может "путать" настройки терминалов. Чтобы решить эту проблему в новой библиотеке AddIn.SBRFCOMExtension, воспользуемся методом ЗадатьИмяБиблиотеки.
Создайте отдельные папки для каждого рабочего места или юридического лица с индивидуальными настройками терминала, скопируйте туда gate.dll. Перед инициализацией оплаты укажите компоненте нужный путь:
ОбКарт.ЗадатьИмяБиблиотеки("C:\Terminals\Kassa1\gate.dll");
Это позволит платформе четко понимать, к какому именно терминалу идет обращение, и избегать конфликтов оборудования.