Как доработать печать чека ККМ для онлайн-касс в 1С:Розница

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

С переходом на онлайн-кассы (ФЗ-54) формат взаимодействия 1С с фискальными регистраторами существенно изменился. Если раньше драйверы позволяли отправлять простые текстовые команды, то теперь обмен данными происходит через формирование сложных XML-пакетов. Часто возникает задача вывести в чек дополнительную информацию, например, номер дисконтной карты, баланс бонусов или рекламное сообщение. В этой статье мы разберем, как правильно модифицировать XML-пакет и какие механизмы БПО (Библиотеки подключаемого оборудования) для этого задействовать.

Понимание структуры XML-пакета фискализации

Для начала проанализируем, как онлайн-касса «понимает», что ей нужно напечатать. Вместо набора разрозненных команд 1С формирует один массив данных в формате XML и передает его драйверу. Ключевым элементом здесь является блок Positions, внутри которого описываются товары. Однако в этот же блок можно вставлять и нефискальную информацию.

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


<Positions>
    <TextString Text="Карта: 0000000000001" />
</Positions>

Важно помнить, что тег TextString является самозакрывающимся или должен иметь четкую структуру атрибутов. Атрибут Text содержит саму строку, которую вы хотите увидеть на бумаге. Также можно использовать атрибуты Font (номер шрифта) и Intensity (яркость), если это поддерживает ваш драйвер ККТ.

Программная реализация через БПО

В современных конфигурациях, таких как 1С:Розница, Управление торговлей 11 или ERP, вся работа с кассой сосредоточена в модулях БПО. Процесс формирования чека проходит через несколько этапов. Разберем по шагам, где именно нужно внедрить свой код.

Основная логика подготовки данных находится в функции ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.ФискализацияЧека. Внутри этой функции вызывается серверный метод для генерации XML. Для доработки нам потребуется найти место, где вызывается:


ДанныеЧека = МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляФискализацияЧека(ОбщиеПараметры, ШаблонЧека, СуммаЧека, ШиринаСтроки, НовыйФормат);

Чтобы добавить свои данные, не рекомендуется править типовой код напрямую. Лучше всего использовать механизм расширений. Рассмотрим пример того, как можно дополнить таблицу позиций чека перед тем, как она превратится в XML.

  1. Создадим расширение для конфигурации.
  2. Найдем процедуру, отвечающую за заполнение структуры данных чека (обычно это происходит в модулях, связанных с обработкой документа «Чек ККМ»).
  3. В таблицу позиций (которая позже будет преобразована в XML) добавим строку с типом «Текстовая строка».

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


НоваяСтрока = ТаблицаПозиций.Добавить();
НоваяСтрока.Наименование = "Дисконтная карта: " + НомерКарты;
НоваяСтрока.ТипПозиции = 1; // Указывает драйверу, что это текстовая информация
НоваяСтрока.Количество = 0;
НоваяСтрока.Цена = 0;

Вывод штрихкодов и QR-кодов в чеке

Если ваша задача — напечатать QR-код (например, ссылку на личный кабинет или акцию), структура XML будет отличаться. Вместо TextString используется тег Barcode. Проанализируем пример такого блока:

<Barcode Value="https://mysite.ru/promo" Type="QR" />

Здесь атрибут Value — это данные для кодирования, а Type — тип кода (EAN13, Code128, QR). Обратите внимание, что не все бюджетные модели фискальных регистраторов поддерживают печать произвольных QR-кодов внутри фискального документа. Если драйвер выдает ошибку, проанализируем альтернативный вариант — печать нефискального документа.

Разделение фискального и информационного чека

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

Логика работы будет следующей:

  1. Сначала вызываем стандартную процедуру ФискализироватьЧек.
  2. Если фискализация прошла успешно, формируем отдельный XML, содержащий только текстовые блоки и штрихкоды.
  3. Передаем этот XML в метод печати нефискального документа.

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

Отладка и типичные проблемы

Процесс отладки работы с ККТ осложняется тем, что при остановке на точке останова драйвер может разорвать соединение по таймауту, что приводит к зависанию сессии 1С. Выясним, как этого избежать:

Во-первых, используйте «Эмулятор ККТ». Это встроенный в 1С драйвер, который не требует реального аппарата. Он выводит сформированный XML в текстовое окно, что позволяет проверить структуру тегов TextString и Positions без порчи бумаги.

Во-вторых, следите за шириной строки. Если ваша строка текста (например, «Спасибо за покупку, ждем вас снова!») превышает ширину ленты (32, 40 или 48 символов), драйвер может либо обрезать её, либо аварийно завершить печать всего чека. Проанализируем ширину ленты в настройках оборудования перед отправкой данных.

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

Использование шаблонов чеков в 1С:Розница

Прежде чем приступать к сложному программированию, рассмотрим встроенный функционал «Шаблоны чеков ККМ». В 1С:Розница реализован визуальный редактор шаблонов. Он позволяет:

Если стандартных полей шаблона недостаточно, можно воспользоваться механизмом «Дополнительные печатные формы» или расширить схему компоновки данных, которую использует шаблон чека. Это более «чистый» способ доработки, который сохранит обновляемость вашей конфигурации.

← На главную