Как подключить платежный терминал к старой или самописной конфигурации 1С?

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

При работе с нестандартными или устаревшими конфигурациями на платформе 1С часто возникает задача интеграции банковского терминала для приема безналичных платежей. Использование современной подсистемы БСП «Подключаемое оборудование» в таких случаях часто бывает избыточным или технически невозможным из-за глубоких различий в архитектуре. Разберем, как реализовать подключение терминала максимально эффективно, используя проверенные методы.

Анализ подходов к интеграции

Прежде чем приступать к написанию кода, проанализируем ситуацию. У нас есть три основных пути интеграции оборудования:

  1. Заимствование логики из типовых конфигураций: Если ваша база работает на обычных формах, отличным донором кода станет Управление торговлей 10.3. Если на управляемых — можно подсмотреть реализацию в Рознице или УНФ.
  2. Прямое использование COM-объектов (драйверов): Это самый «легкий» способ для самописки. Мы напрямую обращаемся к библиотекам, которые предоставляет банк (например, Сбербанк или ВТБ), минуя сложные механизмы 1С.
  3. Интеграция через HTTP-сервисы: Подходит для современных смарт-терминалов, работающих по сетевым протоколам.

Вариант 1: Заимствование кода из типовых решений

Рассмотрим ситуацию, когда база работает на «толстом клиенте» (обычные формы). В этом случае логика подключения в типовых решениях (например, в УТ 10.3) реализована через внешние обработки обслуживания. Посмотрим на алгоритм действий:

Найдем в типовой конфигурации объект, отвечающий за работу с эквайрингом. Обычно это обработка, вызываемая из формы чека ККМ. В коде кнопки «Оплатить картой» происходит вызов функций драйвера. Нам нужно перенести не всю подсистему, а только механизмы инициализации параметров и вызова транзакции.

Проанализируем основные этапы взаимодействия, которые нужно реализовать в коде:


// Пример упрощенной инициализации объекта терминала
Драйвер = Новый COMОбъект("AddIn.SberbankTerminal");
Результат = Драйвер.Инициализировать(Порт, Скорость);

Если Результат = 0 Тогда
    // Вызов оплаты
    РезультатОплаты = Драйвер.Оплатить(СуммаПоЧеку);
    Если РезультатОплаты = 0 Тогда
        ТекстЧека = Драйвер.ПолучитьСлипЧек();
        // Далее текст нужно отправить на фискальный регистратор
    КонецЕсли;
КонецЕсли;

Вариант 2: Прямая работа с драйверами банков (COM-объекты)

Выясним причину, по которой многие программисты предпочитают этот метод: он дает полный контроль над процессом и не зависит от обновлений 1С. Большинство банков в РФ используют несколько стандартных протоколов.

Работа со Сбербанком (ПО «Пилот»):

Чаще всего используется библиотека EquipSberBank.dll. Для работы с ней в 1С нам не нужно регистрировать оборудование в справочниках. Достаточно знать, где лежат файлы обмена (обычно это C:\sc552). Работа происходит через вызов исполняемого файла или через компоненту.

Протоколы Arcus2 или DualConnector:

Эти протоколы используют многие другие банки (ВТБ, Газпромбанк). Взаимодействие строится через создание COM-объекта. Важно помнить, что терминал возвращает не только статус транзакции, но и слип-чек — текстовую информацию, которую необходимо распечатать на кассовом аппарате.

Реализация печати слип-чека

Разберем важный нюанс: в самописных конфигурациях печать чека на ККТ и печать подтверждения от терминала — это два разных процесса. Когда терминал возвращает текст чека (обычно это длинная строка с разделителями), нам нужно программно вывести её на ленту ККТ. Для этого используются методы драйвера кассы, такие как ПечатьТекста() или НапечататьНефискальныйДокумент().

Посмотрим на пример логики обработки текста чека:


// Разделяем полученный текст на строки и выводим на кассу
МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ТекстСлипЧека, Символы.ПС);
Для Каждого СтрокаТекста Из МассивСтрок Цикл
    ОбъектКассы.ПечатьТекста(СтрокаТекста);
КонецЦикла;

Проблема разрядности платформы

Проанализируем ситуацию с 64-битной платформой. Это критически важный момент для версии 8.3.12 и выше. Если ваш клиент 1С — 64-битный, а драйвер банка (DLL) — 32-битный, стандартный Новый COMОбъект выдаст ошибку «Класс не зарегистрирован».

Способы решения:

Практические рекомендации по разработке

Рассмотрим шаги для создания собственной «приблуды» для подключения:

  1. Создайте внешнюю обработку: Не вносите изменения сразу в конфигурацию. Создайте обработку, в которой будет поле «Сумма» и кнопка «Тест связи».
  2. Хранение настроек: Для работы терминала нужны параметры: номер COM-порта, IP-адрес, ID терминала. В самописке их проще всего хранить в отдельном регистре сведений или в константе в формате JSON или Структуры.
  3. Обработка ошибок: Всегда оборачивайте вызовы методов терминала в конструкцию Попытка ... Исключение. Зависший терминал не должен «вешать» всю программу 1С.

Подводя итог, можно сказать, что подключение терминала к старой конфигурации — задача не столько сложная, сколько требующая аккуратности в работе с внешними библиотеками. Самый стабильный путь — использование упрощенной логики из УТ 10.3 или прямой вызов банковской компоненты, если вы готовы самостоятельно обрабатывать ответы оборудования.

← На главную