При автоматизации розничной торговли часто возникает задача интеграции безналичной оплаты с программой 1С. Рассмотрим, как устроено взаимодействие платформы 1С с эквайринговыми терминалами Сбербанка, в чем разница между моделями оборудования и как организовать печать банковского слип-чека напрямую через фискальный регистратор (ККТ).
Проанализируем основные принципы работы эквайрингового оборудования с учетной системой:
Таким образом, для автоматической передачи сумм из 1С необходим именно интегрированный терминал.
Разберем по шагам, как происходит обмен данными при вызове эквайринговой операции из программы:
gate.dll, sb_pilot.exe или COM-объект SBRFCOM.dll) обращается к пин-паду через COM-порт.p) или заполняет выходные параметры в объекте 1С, возвращая код авторизации, ссылочный номер и сформированные строки слип-чека.Существует несколько способов работы с терминалом Сбербанка из кода 1С:
В современных типовых конфигурациях (1С:Розница, 1С:УТ, 1С:ERP) используется стандартный механизм БПО и модуль ПодключаемоеОборудованиеСБРФЭквайринговыеТерминалыКлиент. Для подключения терминала не требуется регистрировать COM-компоненты через regsvr32. Достаточно установить драйвер «1С:Эквайринговые терминалы Сбербанк 2.х» (NativeAPI) и указать в настройках оборудования путь к рабочему каталогу Сбербанка (например, C:\sc552\ или C:\SBERBANK\PILOT_NT\).
Этот способ часто применяется в доработанных и нетиповых конфигурациях. Рассмотрим пример кода на языке 1С для вызова операции оплаты:
&НаКлиенте
Функция ОплатитьКартой(СуммаВРублях)
Результат = Ложь;
СсылочныйНомер = Неопределено;
КодАвторизации = Неопределено;
КодХеш = Неопределено;
КартаСбербанка = Неопределено;
НазваниеКарты = Неопределено;
Ошибка = Неопределено;
// Перевод суммы в копейки
СуммаВременная = СуммаВРублях * 100;
НомерКарты = "****************";
Попытка
// Вызов метода оплаты через зарегистрированный объект драйвера
Ответ = ОбъектДрайвераАвторизатора.ОплатитьПлатежнойКартой(
СуммаВременная,
СсылочныйНомер,
КодАвторизации,
КодХеш,
КартаСбербанка,
НазваниеКарты,
НомерКарты
);
Исключение
Сообщить("Ошибка при работе с библиотекой SBRFCOM: " + ОписаниеОшибки());
Возврат Результат;
КонецПопытки;
Если НЕ Ответ Тогда
ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка);
Сообщить("Ошибка оплаты: " + Ошибка);
Иначе
СлипЧек = Неопределено;
Результат = ПолучитьСтрокиСлипЧека(СлипЧек);
Если Результат Тогда
// Здесь выполняется отправка массива строк СлипЧек в драйвер ККТ
// ПечатьТекстаНаККТ(СлипЧек);
Иначе
Сообщить("Произошла ошибка при получении чека. Аварийная отмена операции...");
АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Если возникли сложности с регистрацией COM-компоненты или разрядностью платформы, можно вызвать утилиту sb_pilot.exe из 1С с помощью функции ЗапуститьПриложение, передав ей код операции и сумму. После завершения процесса 1С вычитывает сформированный утилитой текстовый файл ответа p.
Банковский слип-чек передается в ККТ как нефискальный текст. Драйвер ККТ Атол (версий 8.x или 10.x) принимает массив строк и последовательно выводит их на чековую ленту без регистрации позиций в фискальном накопителе (ФН). Только после этого печатается сам фискальный чек с позициями товаров.
Выделим несколько ключевых моментов, о которых стоит помнить системным администраторам и разработчикам:
SBRFCOM.dll является 32-битной. Если тонкий клиент 1С запущен в 64-битном режиме (1cv8c.exe x64), подключить эту DLL напрямую через COM не удастся. В таких случаях следует использовать драйвер NativeAPI из БПО или утилиту sb_pilot.exe.SBRFCOM.dll метод может принимать 3 или 7 параметров. При несовпадении количества параметров 1С выдаст ошибку «Недостаточно фактических параметров».e.log, p, e) в свой рабочий каталог (например, C:\sc552). Пользователю ОС Windows, под которым работает 1С, необходимо предоставить полные права на чтение и запись к этой папке.pinpad.ini. Параметр PrinterEnd отвечает за символы переноса и команды отрезчика. Если слип-чек «склеивается» с фискальным чеком, откорректируйте этот параметр согласно рекомендациям инженера эквайринга.