Почему ККТ печатает только шапку вместо слип-чека эквайринга и как это исправить?

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

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

Разберем детально, почему драйвер возвращает успешный статус выполнения при отсутствии тела документа на чековой ленте, и рассмотрим пошаговые способы устранения этой проблемы.

Причины возникновения проблемы

Проанализируем техническую сторону взаимодействия 1С, эквайрингового терминала и ККТ. Метод драйвера НапечататьТекстовыйДокумент выполняет открытие нефискального документа в кассе (в этот момент печатается заголовок), затем разбирает переданный XML-пакет на отдельные строки и закрывает документ с отрезом ленты.

Если печать обрывается сразу после заголовка, это указывает на одну из следующих причин:

  1. Недопустимые служебные символы в XML: Эквайринговый терминал может возвращать в строке слип-чека непечатные управляющие символы (например, управляющие коды отреза бумаги, символы смены шрифта, разделители строк в нестандартной кодировке). Встроенный XML-парсер драйвера спотыкается на таких символах и не может извлечь текст.
  2. Несоответствие структуры XML стандарту драйвера: Интеграционный драйвер ККТ ожидает строго фиксированную структуру XML по стандарту БПО («Библиотеки подключаемого оборудования»). Если теги сформированы неверно (например, используются нестандартные имена узлов), парсер драйвера определяет количество строк для печати равным нулю, после чего закрывает документ без ошибки.
  3. Превышение допустимой ширины строки: Для узкой ленты (57 мм) фискальный регистратор (например, «Штрих-Лайт-01Ф») ожидает строки длиной до 32–36 символов. Если терминал возвращает длинные неразбитые строки, буфер печати драйвера может их отбросить.

Способ 1. Проверка и корректировка символов окончания чека в терминале

Частая причина сбоя — специальный код отреза, который терминал вставляет в тело слипа. Если в настройках терминала задан символ частичной или полной отрезки, который некорректно экранируется в XML, печать прекращается.

Разберем порядок действий по настройке:

  1. С помощью сервисной утилиты настройки терминала (например, TlvEdit из комплекта поставки ПО эквайринга Сбербанка) проверьте параметр «Последовательность в конце чека».
  2. Замените бинарные служебные коды на текстовый маркер (например, [cut]) либо отключите автоматическую вставку отреза в терминале.
  3. В коде 1С реализуйте предварительную очистку полученной строки слипа от непечатных символов и разделите два экземпляра слип-чека (клиентский и кассовый) по маркеру [cut] перед отправкой в кассу.

Способ 2. Формирование корректного XML-пакета по стандарту БПО

Для гарантированной печати нефискального документа через метод НапечататьТекстовыйДокумент текст слип-чека должен быть преобразован в строго валидный XML-документ. Рассмотрим правильную структуру:


<?xml version="1.0" encoding="UTF-8"?>
<Document>
    <Positions>
        <TextString Text="ПАО СБЕРБАНК"/>
        <TextString Text="МЕРЧАНТ: 123456789012"/>
        <TextString Text="ОПЛАТА: 1000.00 РУБ."/>
        <TextString Text="ОДОБРЕНО"/>
    </Positions>
</Document>

Посмотрим на пример функции на встроенном языке 1С, которая принимает массив или многострочный текст слипа, очищает его и формирует корректный XML для передачи в метод НапечататьТекстовыйДокумент:


Функция СформироватьXMLСлипЧека(ТекстСлипа)
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");
    
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьНачалоЭлемента("Document");
    ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
    
    КоличествоСтрок = СтрЧислоСтрок(ТекстСлипа);
    Для НомерСтроки = 1 По КоличествоСтрок Цикл
        
        ТекСтрока = СтрПолучитьСтроку(ТекстСлипа, НомерСтроки);
        
        // Очищаем строку от возможных служебных маркеров
        ТекСтрока = СтрЗаменить(ТекСтрока, "[cut]", "");
        ТекСтрока = СокрП(ТекСтрока);
        
        // Добавляем непустые строки в узел TextString
        ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
        ЗаписьXML.ЗаписатьАтрибут("Text", ТекСтрока);
        ЗаписьXML.ЗаписатьКонецЭлемента(); // TextString
        
    КонецЦикла;
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Positions
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Document
    
    Возврат ЗаписьXML.Закрыть();

КонецФункции

Способ 3. Отладка обработки обслуживания торгового оборудования

Если структура XML сформирована корректно, но печать все равно не выполняется, необходимо отследить, что именно драйвер пытается передать в ККТ. В конфигурациях поколения 10.3 обработки обслуживания ТО динамически извлекаются из базы данных во временный каталог текущего пользователя.

Разберем по шагам, как локализовать место сбоя:

  1. Откройте каталог %USERPROFILE%\AppData\Local\Temp в операционной системе.
  2. Найдите файл внешней обработки с именем интеграционной компоненты (например, ShtrihMFiscalPrinters_v2.epf).
  3. Откройте данный файл обработки в конфигураторе 1С.
  4. Установите точку останова в функции НапечататьТекстовыйДокумент или процедурах разбора XML-пакета.
  5. В режиме отладки проверьте значение переменной с XML-пакетом и убедитесь, что парсер успешно считывает атрибуты Text и передает их в низкоуровневые команды драйвера печати строк.

Использование правильной структуры XML с предварительной очисткой от непечатных управляющих символов позволяет полностью восстановить корректную печать слип-чеков на фискальных регистраторах Штрих-М.

← На главную