Как передать эквайринговый чек на печать в кассу АТОЛ: полное руководство

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

При автоматизации розничной торговли часто возникает задача объединения фискального чека и слип-чека эквайринга в единый процесс печати. Это экономит время кассира и чековую ленту. Однако в старых конфигурациях, таких как Управление торговлей 10.2, при использовании современных драйверов АТОЛ 10.х, возникают сложности с интеграцией этих двух процессов. Для решения подобных проблем часто используется специализированная обработка обслуживания «Эквайринговые терминалы Сбербанк 2.Х» для УТ 10.х, которая адаптирована под новые требования драйверов. Рассмотрим подробно, как реализовать печать слип-чека через ККТ АТОЛ 55Ф и другие модели этой линейки.

Разбор технической проблемы: почему чек не печатается автоматически

Проанализируем ситуацию: основная сложность заключается в том, что драйвер ККТ и драйвер эквайрингового терминала — это два независимых программных модуля. Когда 1С отправляет команду на оплату картой, терминал проводит транзакцию и хочет распечатать подтверждение. Если в настройках терминала указано "Печатать на принтере терминала", а у него нет своего принтера, или если он пытается напрямую захватить COM-порт кассы, возникает конфликт. В 1С в это время порт кассы может быть уже занят обработкой фискального чека.

Выясним причину, по которой текст слипа не попадает в XML-структуру фискального чека. Дело в том, что согласно ФФД (формату фискальных данных), банковский слип не является частью фискального документа. Он должен печататься либо как отдельный нефискальный документ, либо как текстовый блок до/после закрытия основного чека. При работе в сетевой инфраструктуре или через удаленный рабочий стол, часто применяется драйвер эквайринга Сбербанка (Web-версия) для работы через RDP, позволяющий избежать блокировок портов.

Способ 1. Настройка драйвера эквайринга (на примере Сбербанка)

Прежде чем вносить изменения в код 1С, проанализируем настройки банковского ПО. Большинство современных терминалов поддерживают режим передачи текста чека обратно в кассовое ПО. Например, для новых протоколов обмена разработано решение для API-интеграции с эквайринговыми терминалами Сбербанка (Kozen).

Рассмотрим параметры настройки для библиотек Сбербанка (UPOS):

  1. Найдем в папке с банковским ПО (обычно C:\sc552\) файл настроек pinpad.ini.
  2. Проверим параметр PrinterMode. Если установлено значение 1, терминал не будет пытаться печатать сам, а вернет текст слип-чека в 1С.
  3. В настройках драйвера в самой 1С убедимся, что снята галочка "Печатать слип на терминале".

После этого 1С сможет получить текстовую строку слипа. Если драйвер формирует файл P (результат операции), мы можем прочитать его содержимое и отправить на ККТ командой НапечататьТекстовыйДокумент.

Способ 2. Программная печать текстового слипа через драйвер АТОЛ 10.х

Если мы работаем со старыми конфигурациями (Обычные формы), нам необходимо вмешаться в код обработки обслуживания кассы. Разберем по шагам, как добавить печать нефискальных данных. Для оборудования других производителей, таких как Unitodi или Aisino, рекомендуется использовать обработку обслуживания «ПБФ:Эквайринговые терминалы» для УТ 10.х.

Для драйвера 10-й версии правильным подходом будет использование методов начала и окончания нефискального документа. Это позволит выделить слип-чек визуально. Пример логики в коде 1С:


// Получаем объект драйвера ККТ
Драйвер = Новый ("AddIn.Atol_KKT_10");
// ... установка параметров связи ...

// Печать слип-чека перед фискальным чеком
Драйвер.beginNonFiscalDocument();
ТекстСлипа = ОбъектЭквайринга.ПолучитьТекстСлипа(); // Метод зависит от вашего драйвера эквайринга

// Разбиваем текст на строки и выводим
Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстСлипа) Цикл
    Драйвер.setParam(Драйвер.LIBFPTR_PARAM_TEXT, СтрПолучитьСтроку(ТекстСлипа, НомерСтроки));
    Драйвер.setParam(Драйвер.LIBFPTR_PARAM_WRAP, Истина); // Включаем перенос длинных строк
    Драйвер.printText();
КонецЦикла;

Драйвер.endNonFiscalDocument();

Важный момент: использование параметра LIBFPTR_PARAM_WRAP (Перенос текста) критично для моделей типа АТОЛ 55Ф. Ширина ленты может отличаться от настроек банковского терминала, и без переноса часть важной информации (например, RRN или код авторизации) может быть обрезана. Для терминалов, работающих по протоколу UNIPOS, актуальна обработка обслуживания ИНПАС:Эквайринговые терминалы UNIPOS(ФЗ-491) для УТ 10.х.

Способ 3. Использование JSON-заданий (современный метод)

Драйверы АТОЛ версии 10.х поддерживают работу через JSON-структуры. Это наиболее стабильный способ, так как он позволяет отправить все задание на печать одним пакетом. Рассмотрим пример формирования задания для печати текстового блока:


{
    "type": "printText",
    "text": "ООО 'ТОРГОВЛЯ'\nЧЕК ПРОДАЖИ\nОПЛАТА КАРТОЙ\n..................\n",
    "alignment": "center",
    "font": 1,
    "doubleWidth": false,
    "doubleHeight": false
}

В коде 1С это реализуется через метод processJson. Проанализируем ситуацию: использование JSON позволяет избежать проблем с блокировкой порта между командами printText, так как всё задание уходит в драйвер целиком. Аналогичный принцип разделения потоков данных используется, когда выполняется обслуживание эквайринговых терминалов Ingenico IPP320 для УТ 10.х через ПО Arcus2.

Работа с тегом 1192 и требованиями ФФД

Несмотря на то, что слип-чек является текстовым документом, современные требования налоговой (ФФД 1.05 и выше) рекомендуют связывать фискальный чек с эквайринговой операцией. Для этого в ККТ предусмотрен тег 1192 (дополнительный реквизит пользователя).

Рекомендуем при печати фискального чека передавать в этот тег номер транзакции или RRN. Это не заменит слип-чек, но позволит налоговым органам и вам при сверке итогов однозначно сопоставить операцию по кассе с операцией в банке.

Тонкости форматирования и экономии ленты

При печати эквайринговых чеков часто возникает проблема излишнего расхода ленты. Рассмотрим, как оптимизировать этот процесс:

  1. Очистка текста: Перед отправкой в printText рекомендуется программно удалять пустые строки в начале и конце слипа, которые часто присылает банковское ПО.
  2. Печать разделителя: Чтобы кассиру было удобно отрезать два экземпляра слипа (клиенту и банку), используйте метод printSeparator или выводите строку из дефисов "-------------------".
  3. Управление шрифтом: Для слип-чека можно установить уменьшенный шрифт, чтобы уместить больше информации на узкой ленте (параметр font в JSON или метод setParam(Драйвер.LIBFPTR_PARAM_FONT, 2)).

Подведем итог: для реализации печати эквайрингового чека на кассе АТОЛ 55Ф в УТ 10.2 необходимо настроить драйвер терминала на возврат текста в 1С (PrinterMode=1) и использовать методы нефискальной печати драйвера ККТ АТОЛ для вывода полученных строк. Это обеспечит корректную работу без конфликтов за порты оборудования.

← На главную