При автоматизации торговых точек часто возникает задача распечатать на контрольно-кассовой технике (ККТ) дополнительную информацию, которая не является частью фискального расчета: слип-чек эквайринга, чек ЕГАИС, гарантийный талон, купон на скидку, пречек или сервисный акт. В типовых конфигурациях 1С, таких как 1С:Комплексная автоматизация 2 и 1С:Управление торговлей 11, печать чеков реализована на базе подсистемы Библиотеки подключаемого оборудования (БПО).
Разберем по шагам, как устроена печать нефискальных документов, какие механизмы платформы 1С для этого используются и как правильно передать произвольный текст на онлайн-кассу.
С точки зрения протоколов ККТ понятия «нефискальный чек» в чистом виде не существует. Кассовый аппарат разделяет операции на две категории:
Посмотрим на основные подходы к реализации печати нефискальных данных из типовых конфигураций 1С.
В стандартах разработки БПО предусмотрена специальная операция для печати нефискальных данных — ПечатьТекстовогоДокумента (или асинхронный вызов МенеджерОборудованияКлиент.НачатьПечатьТекстовогоДокумента). В отличие от фискального чека, где драйверу передается XML-пакет со структурой CheckPackage, для произвольного текста используется схема DocumentPackage.
Рассмотрим структуру XML-пакета DocumentPackage:
<DocumentPackage>
<Parameters TextWrap="true" />
<Positions>
<TextString Text="================================" />
<TextString Text=" КУПОН НА СКИДКУ 10% " />
<TextString Text="================================" />
<TextString Text="Действует до 31.12.2026 " />
<Barcode Type="QR" Value="https://example.com/promo" Height="150" />
<TextString Text=" " />
<TextString Text=" " />
</Positions>
</DocumentPackage>
Проанализируем основные элементы пакета:
<TextString Text="..." /> — строка произвольного текста. Атрибут TextWrap="true" в параметрах документа включает автоматический перенос длинных строк.<Barcode ... /> — печать штрихкодов или QR-кодов (например, для ссылок или кодов систем лояльности).<TextString Text=" " /> в конце документа обеспечивают технологическую протяжку бумаги перед отрезкой.Разберем пример программного вызова операции печати текстового документа на клиенте:
ПараметрыОперации = Новый Массив;
ПараметрыОперации.Добавить(ИдентификаторУстройства);
ПараметрыОперации.Добавить(XMLПакетТекстовогоДокумента);
ОповещениеПриЗавершении = Новый ОписаниеОповещения("ПослеПечатиТекстовогоДокумента", ЭтотОбъект);
МенеджерОборудованияКлиент.НачатьПечатьТекстовогоДокумента(
ОповещениеПриЗавершении,
ИдентификаторУстройства,
XMLПакетТекстовогоДокумента
);
Частый вопрос при печати нефискальных чеков — как заставить кассу (например, АТОЛ 22) выполнить отрезку бумаги после документа. В рамках стандарта БПО физическая отрезка ленты выполняется драйвером ККТ автоматически в момент успешного закрытия пакета DocumentPackage. Никаких специальных команд вставки ESC-последовательностей для автоотрезчика в XML передавать не требуется.
Если отрезчик не срабатывает или обрезает последнюю строчку текста, необходимо проверить следующие моменты:
Positions, чтобы печатающая головка вытолкнула бумагу за линию ножа отрезчика.Если нет необходимости физически разделять документы отрезчиком, произвольный текст можно поместить непосредственно в фискальный чек (например, в подвал или шапку документа). Для этого в формируемый процедурой ПолучитьXMLПакетДляФискализацияЧека пакет CheckPackage добавляются теги <TextString> до или после блока товарных позиций <FiscalStrings>.
В таком случае фискальный чек и дополнительная информация будут напечатаны единым блоком на одной ленте без срабатывания промежуточной отрезки.
При выводе произвольного текста на ККТ с передачей данных необходимо помнить о юридических ограничениях: