Как напечатать нефискальный чек на онлайн-кассе из 1С:Комплексная автоматизация или 1С:Управление торговлей?

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

При автоматизации торговых точек часто возникает задача распечатать на контрольно-кассовой технике (ККТ) дополнительную информацию, которая не является частью фискального расчета: слип-чек эквайринга, чек ЕГАИС, гарантийный талон, купон на скидку, пречек или сервисный акт. В типовых конфигурациях 1С, таких как 1С:Комплексная автоматизация 2 и 1С:Управление торговлей 11, печать чеков реализована на базе подсистемы Библиотеки подключаемого оборудования (БПО).

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

Понятие нефискального документа в кассовом оборудовании

С точки зрения протоколов ККТ понятия «нефискальный чек» в чистом виде не существует. Кассовый аппарат разделяет операции на две категории:

  1. Фискальный документ: кассовый чек прихода, расхода, возврата или коррекции. Он передается в фискальный накопитель (ФН), подписывается фискальным признаком и уходит через ОФД в налоговую службу.
  2. Произвольный текстовый документ: нефискальный документ (текстовый блок), который выводится печатающим механизмом кассы без регистрации данных в фискальном накопителе и без передачи в ОФД.

Посмотрим на основные подходы к реализации печати нефискальных данных из типовых конфигураций 1С.

Вариант 1. Печать отдельного нефискального документа через схему DocumentPackage

В стандартах разработки БПО предусмотрена специальная операция для печати нефискальных данных — ПечатьТекстовогоДокумента (или асинхронный вызов МенеджерОборудованияКлиент.НачатьПечатьТекстовогоДокумента). В отличие от фискального чека, где драйверу передается 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>

Проанализируем основные элементы пакета:

  1. <TextString Text="..." /> — строка произвольного текста. Атрибут TextWrap="true" в параметрах документа включает автоматический перенос длинных строк.
  2. <Barcode ... /> — печать штрихкодов или QR-кодов (например, для ссылок или кодов систем лояльности).
  3. Пустые строки <TextString Text=" " /> в конце документа обеспечивают технологическую протяжку бумаги перед отрезкой.

Разберем пример программного вызова операции печати текстового документа на клиенте:


ПараметрыОперации = Новый Массив;
ПараметрыОперации.Добавить(ИдентификаторУстройства);
ПараметрыОперации.Добавить(XMLПакетТекстовогоДокумента);

ОповещениеПриЗавершении = Новый ОписаниеОповещения("ПослеПечатиТекстовогоДокумента", ЭтотОбъект);

МенеджерОборудованияКлиент.НачатьПечатьТекстовогоДокумента(
    ОповещениеПриЗавершении,
    ИдентификаторУстройства,
    XMLПакетТекстовогоДокумента
);

Как работает отрезчик бумаги

Частый вопрос при печати нефискальных чеков — как заставить кассу (например, АТОЛ 22) выполнить отрезку бумаги после документа. В рамках стандарта БПО физическая отрезка ленты выполняется драйвером ККТ автоматически в момент успешного закрытия пакета DocumentPackage. Никаких специальных команд вставки ESC-последовательностей для автоотрезчика в XML передавать не требуется.

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

  1. Настройки драйвера ККТ: в утилите «Тест драйвера ККТ» проверьте параметры работы отрезчика и режим автоматической отрезки при закрытии документа.
  2. Протяжка ленты: добавьте 2–3 пустые текстовые строки в конец блока Positions, чтобы печатающая головка вытолкнула бумагу за линию ножа отрезчика.

Вариант 2. Добавление текстовых строк в фискальный пакет CheckPackage

Если нет необходимости физически разделять документы отрезчиком, произвольный текст можно поместить непосредственно в фискальный чек (например, в подвал или шапку документа). Для этого в формируемый процедурой ПолучитьXMLПакетДляФискализацияЧека пакет CheckPackage добавляются теги <TextString> до или после блока товарных позиций <FiscalStrings>.

В таком случае фискальный чек и дополнительная информация будут напечатаны единым блоком на одной ленте без срабатывания промежуточной отрезки.

Важные ограничения законодательства (54-ФЗ)

При выводе произвольного текста на ККТ с передачей данных необходимо помнить о юридических ограничениях:

  1. В нефискальных текстовых документах запрещено имитировать структуру официального кассового чека. Нельзя печатать реквизиты, похожие на фискальные признаки (ФД, ФП, ФПД), псевдо-QR-коды чеков ФНС и вводящие покупателя в заблуждение заголовки.
  2. Для печати нефискальных документов регистратор должен находиться в рабочем режиме (смена открыта, нет блокирующих ошибок ФН).
← На главную