При работе с нестандартными или устаревшими конфигурациями на платформе 1С часто возникает задача интеграции банковского терминала для приема безналичных платежей. Использование современной подсистемы БСП «Подключаемое оборудование» в таких случаях часто бывает избыточным или технически невозможным из-за глубоких различий в архитектуре. Разберем, как реализовать подключение терминала максимально эффективно, используя проверенные методы.
Прежде чем приступать к написанию кода, проанализируем ситуацию. У нас есть три основных пути интеграции оборудования:
Управление торговлей 10.3. Если на управляемых — можно подсмотреть реализацию в Рознице или УНФ.Рассмотрим ситуацию, когда база работает на «толстом клиенте» (обычные формы). В этом случае логика подключения в типовых решениях (например, в УТ 10.3) реализована через внешние обработки обслуживания. Посмотрим на алгоритм действий:
Найдем в типовой конфигурации объект, отвечающий за работу с эквайрингом. Обычно это обработка, вызываемая из формы чека ККМ. В коде кнопки «Оплатить картой» происходит вызов функций драйвера. Нам нужно перенести не всю подсистему, а только механизмы инициализации параметров и вызова транзакции.
Проанализируем основные этапы взаимодействия, которые нужно реализовать в коде:
// Пример упрощенной инициализации объекта терминала
Драйвер = Новый COMОбъект("AddIn.SberbankTerminal");
Результат = Драйвер.Инициализировать(Порт, Скорость);
Если Результат = 0 Тогда
// Вызов оплаты
РезультатОплаты = Драйвер.Оплатить(СуммаПоЧеку);
Если РезультатОплаты = 0 Тогда
ТекстЧека = Драйвер.ПолучитьСлипЧек();
// Далее текст нужно отправить на фискальный регистратор
КонецЕсли;
КонецЕсли;
Выясним причину, по которой многие программисты предпочитают этот метод: он дает полный контроль над процессом и не зависит от обновлений 1С. Большинство банков в РФ используют несколько стандартных протоколов.
Работа со Сбербанком (ПО «Пилот»):
Чаще всего используется библиотека EquipSberBank.dll. Для работы с ней в 1С нам не нужно регистрировать оборудование в справочниках. Достаточно знать, где лежат файлы обмена (обычно это C:\sc552). Работа происходит через вызов исполняемого файла или через компоненту.
Протоколы Arcus2 или DualConnector:
Эти протоколы используют многие другие банки (ВТБ, Газпромбанк). Взаимодействие строится через создание COM-объекта. Важно помнить, что терминал возвращает не только статус транзакции, но и слип-чек — текстовую информацию, которую необходимо распечатать на кассовом аппарате.
Разберем важный нюанс: в самописных конфигурациях печать чека на ККТ и печать подтверждения от терминала — это два разных процесса. Когда терминал возвращает текст чека (обычно это длинная строка с разделителями), нам нужно программно вывести её на ленту ККТ. Для этого используются методы драйвера кассы, такие как ПечатьТекста() или НапечататьНефискальныйДокумент().
Посмотрим на пример логики обработки текста чека:
// Разделяем полученный текст на строки и выводим на кассу
МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ТекстСлипЧека, Символы.ПС);
Для Каждого СтрокаТекста Из МассивСтрок Цикл
ОбъектКассы.ПечатьТекста(СтрокаТекста);
КонецЦикла;
Проанализируем ситуацию с 64-битной платформой. Это критически важный момент для версии 8.3.12 и выше. Если ваш клиент 1С — 64-битный, а драйвер банка (DLL) — 32-битный, стандартный Новый COMОбъект выдаст ошибку «Класс не зарегистрирован».
Способы решения:
Рассмотрим шаги для создания собственной «приблуды» для подключения:
JSON или Структуры.Попытка ... Исключение. Зависший терминал не должен «вешать» всю программу 1С.Подводя итог, можно сказать, что подключение терминала к старой конфигурации — задача не столько сложная, сколько требующая аккуратности в работе с внешними библиотеками. Самый стабильный путь — использование упрощенной логики из УТ 10.3 или прямой вызов банковской компоненты, если вы готовы самостоятельно обрабатывать ответы оборудования.