При интеграции банковского эквайрингового терминала и фискального регистратора в конфигурациях на базе обычных форм (например, в «1С:Управление торговлей 10.3») нередко возникает ситуация: безналичная оплата проходит успешно, метод отправки текста на кассу возвращает положительный результат без ошибок, но ККТ вместо полного банковского слипа распечатывает лишь клише с реквизитами организации («огрызок»).
Разберем детально, почему драйвер возвращает успешный статус выполнения при отсутствии тела документа на чековой ленте, и рассмотрим пошаговые способы устранения этой проблемы.
Проанализируем техническую сторону взаимодействия 1С, эквайрингового терминала и ККТ. Метод драйвера НапечататьТекстовыйДокумент выполняет открытие нефискального документа в кассе (в этот момент печатается заголовок), затем разбирает переданный XML-пакет на отдельные строки и закрывает документ с отрезом ленты.
Если печать обрывается сразу после заголовка, это указывает на одну из следующих причин:
Частая причина сбоя — специальный код отреза, который терминал вставляет в тело слипа. Если в настройках терминала задан символ частичной или полной отрезки, который некорректно экранируется в XML, печать прекращается.
Разберем порядок действий по настройке:
TlvEdit из комплекта поставки ПО эквайринга Сбербанка) проверьте параметр «Последовательность в конце чека».[cut]) либо отключите автоматическую вставку отреза в терминале.[cut] перед отправкой в кассу.Для гарантированной печати нефискального документа через метод НапечататьТекстовыйДокумент текст слип-чека должен быть преобразован в строго валидный 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.Закрыть();
КонецФункции
Если структура XML сформирована корректно, но печать все равно не выполняется, необходимо отследить, что именно драйвер пытается передать в ККТ. В конфигурациях поколения 10.3 обработки обслуживания ТО динамически извлекаются из базы данных во временный каталог текущего пользователя.
Разберем по шагам, как локализовать место сбоя:
%USERPROFILE%\AppData\Local\Temp в операционной системе.ShtrihMFiscalPrinters_v2.epf).НапечататьТекстовыйДокумент или процедурах разбора XML-пакета.Text и передает их в низкоуровневые команды драйвера печати строк.Использование правильной структуры XML с предварительной очисткой от непечатных управляющих символов позволяет полностью восстановить корректную печать слип-чеков на фискальных регистраторах Штрих-М.