Как вывести дополнительный текст или данные покупателя в чек на ККТ АТОЛ в 1С?

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

При интеграции кассового оборудования и доработке типовых конфигураций 1С часто возникает задача вывести в кассовый чек дополнительную информацию перед списком товаров или услуг. Это может быть номер договора, ФИО покупателя, комментарий к заказу или служебные реквизиты. Однако попытка отправить произвольный текст на печать прямым вызовом методов драйвера до или после пробития чека приводит к разрыву документа: касса печатает строку, отрезает чек или формирует отдельный нефискальный документ, нарушая целостность чека.

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

Почему нельзя вызывать прямые методы печати текста драйвера

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

При таком подходе происходят следующие действия:

  1. Драйвер ККТ воспринимает команду печати текста как отдельный нефискальный документ.
  2. Касса выводит указанную строку на чековую ленту, выполняет промотку и отрезку (если включен автоотрез).
  3. Следом запускается стандартная процедура пробития чека, которая снова печатает клише (шапку кассы), товарные позиции и выполняет вторую отрезку.

Главное правило: любые данные, которые должны оказаться внутри фискального чека (между открытием документа и подвалом с QR-кодом), обязаны передаваться в кассу единым сформированным XML-пакетом или структурой данных через типовой механизм СформироватьЧек.

Принцип передачи текстовых строк в структуре чека БПО

Выясним, как подсистема подключаемого оборудования 1С формирует состав чека. В типовых конфигурациях (1С:Бухгалтерия государственного учреждения, 1С:Розница, 1С:Управление торговлей, 1С:ERP и др.) перед отправкой команды на кассу вызывается процедура подготовки данных (например, ПодготовитьДанныеДляПробитияЧека или СформироватьXMLПакетДляЧекаККТ).

Внутри этой процедуры формируется массив ПозицииЧека, который передается в сериализатор пакета. Каждая товарная строка представляет собой структуру с набором свойств (наименование, количество, цена, ставка НДС, признак способа расчета и т. д.).

Чтобы добавить нефискальную текстовую строку, в этот же массив ПозицииЧека необходимо вставить специальную структуру. Рассмотрим ее особенности:

  1. Ключ ТекстоваяСтрока выступает маркером типа строки для парсера БПО (значение может быть пустым).
  2. Ключ Текст содержит непосредственную строку, которую необходимо напечатать на чековой ленте.

Такая архитектура сделана для стандартизации: парсер проверяет наличие ключа-маркера и, если обнаружена ТекстоваяСтрока, формирует соответствующий узел XML-пакета <TextString Text="..."/> вместо фискальной товарной позиции.

Пошаговая реализация добавления текстовых строк

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

1. Найдем в модуле конфигурации место, где заполняется массив ПозицииЧека (или результирующая таблица/массив позиций документа).

2. Создадим структуру для текстовой строки и вставим ее в массив позиций на нулевой индекс (в начало массива):


// Создаем структуру для текстовой строки
СтрокаТекста = Новый Структура;
СтрокаТекста.Вставить("ТекстоваяСтрока", "");
СтрокаТекста.Вставить("Текст", "Покупатель: " + СокрЛП(РеквизитыДокумента.Покупатель));

// Вставляем строку в самое начало массива позиций чека
ПозицииЧека.Вставить(0, СтрокаТекста);

// При необходимости можно добавить еще одну строку
СтрокаДокумент = Новый Структура;
СтрокаДокумент.Вставить("ТекстоваяСтрока", "");
СтрокаДокумент.Вставить("Текст", "Основание: " + СокрЛП(РеквизитыДокумента.НомерДоговора));

ПозицииЧека.Вставить(1, СтрокаДокумент);

3. Если в конфигурации позиции формируются через таблицу значений, текстовые строки добавляются аналогичным образом через соответствующие колонки перед конвертацией в XML-пакет.

Требования 54-ФЗ и форматы фискальных данных (ФФД)

Обратим внимание на важный законодательный нюанс. Если задача заключается в передаче данных юридического лица или ИП (покупателя) при расчетах между организациями, простой печати нефискального текста недостаточно.

Согласно требованиям 54-ФЗ и форматам фискальных данных (ФФД 1.05, 1.1, 1.2), сведения о покупателе должны быть фискализированы и отправлены в ОФД через обязательные теги:

  1. Тег 1227 (ПокупательНаименование / Клиент): наименование организации или ФИО индивидуального предпринимателя.
  2. Тег 1228 (ПокупательИНН): ИНН покупателя.
  3. Тег 1192 (ДополнительныйРеквизитЧека): произвольный реквизит чека (наименование и значение), который регистрируется в фискальном накопителе и передается в ОФД.

Посмотрим на пример заполнения фискальных данных покупателя в корневой структуре чека:


// Заполнение фискальных реквизитов покупателя в шапке чека
ПараметрыЧека.Вставить("ПокупательНаименование", РеквизитыДокумента.КонтрагентНаименование);
ПараметрыЧека.Вставить("ПокупательИНН", РеквизитыДокумента.КонтрагентИНН);

// Дополнительный реквизит чека (Тег 1192)
ДопРеквизит = Новый Структура;
ДопРеквизит.Вставить("Наименование", "НомерЗаказа");
ДопРеквизит.Вставить("Значение", РеквизитыДокумента.НомерЗаказа);
ПараметрыЧека.Вставить("ДополнительныйРеквизитЧека", ДопРеквизит);

При таком заполнении драйвер ККТ АТОЛ автоматически распечатает данные покупателя в соответствии с шаблоном прошивки кассы и передаст эти теги в электронный чек для ФНС.

Ограничения и рекомендации по доработке

Рассмотрим несколько практических рекомендаций для стабильной работы кассы АТОЛ 22ПТК / 22Ф:

  1. Контроль длины строки: ширина чековой ленты ограничена (для ленты 80 мм стандартно доступно до 48 символов в строке, для ленты 57 мм — до 32–36 символов). Длинный текст может обрезаться или переноситься некрасиво, поэтому рекомендуется предварительно программно разбивать длинные строки.
  2. Настройки шаблона чека в ККТ: начиная с платформы 5.0 (ДТО 10), внешний вид чека зависит от прошивки ККТ. При использовании компактного шаблона касса может форматировать нефискальные строки сжатым шрифтом.
  3. Доработка через расширение: чтобы не снимать типовую конфигурацию с поддержки, перехват формирования чека рекомендуется выполнять в расширении конфигурации с помощью аннотации &ИзменениеИКонтроль или &Вместо для процедур модуля МенеджерОборудованияВызовСервера или специализированных менеджеров документов.
← На главную