Как вывести произвольный текст или информацию о бонусах в чек ККТ АТОЛ в 1С:УТ 10.3

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

При автоматизации розничной торговли часто возникает необходимость вывести в кассовый чек дополнительную информацию, которая не является строго фискальной, но важна для покупателя. Самый популярный пример — остаток бонусных баллов, сумма начисленных бонусов за покупку или рекламное сообщение о будущих акциях. В конфигурации «1С:Управление торговлей 10.3» при работе с современными онлайн-кассами (ККТ), такими как АТОЛ 30Ф, эта задача решается через модификацию XML-пакета, который программа передает драйверу кассы.

В этой статье мы подробно разберем, как программно добавить свои строки в чек, какие типы данных поддерживает драйвер и на какие технические ограничения оборудования стоит обратить внимание. Мы пройдем путь от поиска нужной функции в коде 1С до настройки внешнего вида текста в чеке.

Разбор механизма формирования чека через XML-пакет

Современные драйверы ККТ (начиная с версий 8.х и заканчивая актуальной 10.х) работают с 1С через так называемую Библиотеку подключаемого оборудования (БПО). Основной принцип заключается в том, что 1С формирует текстовый пакет в формате XML, в котором описаны все позиции чека, налоги, суммы и дополнительные реквизиты. Затем этот пакет передается методу драйвера ФискализацияЧека.

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

  1. ФискальнаяСтрока — это обычная товарная позиция с ценой, количеством и ставкой НДС.
  2. ТекстоваяСтрока — именно то, что нам нужно. Это нефискальная информация, которая просто распечатывается на ленте.
  3. ШтрихКод — команда на печать QR-кода или линейного штрихкода (например, для ссылки на личный кабинет).

Рассмотрим пример того, как может выглядеть добавление информации о бонусах в общий пакет данных. Нам необходимо вставить блок ТекстоваяСтрока в массив или таблицу значений, которая затем преобразуется в XML.


// Пример добавления произвольного текста в таблицу чека
НоваяСтрока = ТаблицаЧека.Добавить();
НоваяСтрока.ТипРасчета = "ТекстоваяСтрока";
НоваяСтрока.Текст = "Бонусов начислено: " + Строка(БонусыЗаПокупку);

НоваяСтрока = ТаблицаЧека.Добавить();
НоваяСтрока.ТипРасчета = "ТекстоваяСтрока";
НоваяСтрока.Текст = "Текущий баланс: " + Строка(ОстатокБонусов);

Где именно выводить текст: в теле чека или в подвале?

Важно понимать разницу в позиционировании текста. Если вы добавите ТекстоваяСтрока в общий массив позиций, она будет напечатана между товарами или сразу после них, но до блока «ИТОГО» и QR-кода ФНС. Если же ваша цель — вывести информацию в самом низу чека, так называемом «подвале», стоит рассмотреть дополнительные возможности драйвера.

Выясним причину, по которой текст иногда печатается не там, где ожидалось. Драйвер АТОЛ 10-й версии строго следует последовательности команд в XML. Рассмотрим подробнее атрибуты, которые можно передать в XML для управления оформлением текста:

Если вам нужно вывести текст строго после фискального признака (самый конец ленты), можно воспользоваться методом прямого вывода текста PrintText после закрытия документа. Однако это требует более глубокой модификации обработки обслуживания ККТ, так как стандартная БПО закрывает сеанс связи с кассой сразу после фискализации.

Технические ограничения АТОЛ 30Ф и форматирование

Проанализируем физические возможности модели АТОЛ 30Ф. Это бюджетная модель с шириной ленты 58 мм. Это накладывает существенные ограничения на длину вашей строки:

  1. Количество символов: Стандартный шрифт АТОЛ при ленте 58 мм позволяет вывести в одну строку от 32 до 34 символов. Если ваша строка с бонусами будет длиннее, драйвер либо обрежет ее, либо (что чаще) перенесет остаток на следующую строку, что может испортить визуальное восприятие чека.
  2. Программный перенос: Рекомендуем в коде 1С заранее проверять длину строки СтрДлина(ТекстБонусов) и принудительно разбивать ее на несколько элементов ТекстоваяСтрока.

Пример функции для разбиения длинного текста:


Функция РазбитьСтрокуДляЧека(ИсходныйТекст, МаксДлина = 32)
    Результат = Новый Массив;
    Пока СтрДлина(ИсходныйТекст) > 0 Цикл
        Часть = Лев(ИсходныйТекст, МаксДлина);
        Результат.Добавить(Часть);
        ИсходныйТекст = Сред(ИсходныйТекст, МаксДлина + 1);
    КонецЦикла;
    Возврат Результат;
КонецФункции

Альтернативный способ: Настройка клише в самой ККТ

Рассмотрим ситуацию, когда текст является статичным (например, «Спасибо за покупку! Ждем вас снова»). В этом случае не обязательно менять код 1С. У каждой кассы АТОЛ есть внутренняя память для хранения клише (верхняя часть чека) и рекламного текста (нижняя часть чека).

Посмотрим, как это настроить через «Тест драйвера ККТ»:

Важное предостережение: Не используйте этот метод для динамических данных (количество баллов конкретного клиента). Память ККТ (EEPROM) имеет ограниченный ресурс циклов перезаписи. Если вы будете программно менять рекламный текст при каждом пробитии чека, касса может выйти из строя через несколько месяцев работы.

Использование QR-кодов для маркетинга

Современные правила 54-ФЗ позволяют печатать дополнительные QR-коды. В XML-пакет можно добавить блок Barcode. Проанализируем, зачем это нужно: вместо того чтобы печатать длинную инструкцию «Как потратить бонусы», выведите QR-код со ссылкой на страницу бонусной программы на вашем сайте. Это экономит кассовую ленту и выглядит современно.


// Пример структуры XML-узла для QR-кода (упрощенно)
// <Barcode Type="QR" Value="https://mysite.ru/bonus/12345" />

Юридические аспекты (54-ФЗ)

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

Резюмируем: Для вывода бонусов в 1С:УТ 10.3 лучше всего использовать модификацию процедуры формирования XML-пакета, добавляя элементы с типом ТекстоваяСтрока. Это наиболее гибкий и безопасный способ, позволяющий выводить динамические данные для каждого покупателя индивидуально.

← На главную