При автоматизации розничной торговли часто возникает необходимость вывести в кассовый чек дополнительную информацию, которая не является строго фискальной, но важна для покупателя. Самый популярный пример — остаток бонусных баллов, сумма начисленных бонусов за покупку или рекламное сообщение о будущих акциях. В конфигурации «1С:Управление торговлей 10.3» при работе с современными онлайн-кассами (ККТ), такими как АТОЛ 30Ф, эта задача решается через модификацию XML-пакета, который программа передает драйверу кассы.
В этой статье мы подробно разберем, как программно добавить свои строки в чек, какие типы данных поддерживает драйвер и на какие технические ограничения оборудования стоит обратить внимание. Мы пройдем путь от поиска нужной функции в коде 1С до настройки внешнего вида текста в чеке.
Современные драйверы ККТ (начиная с версий 8.х и заканчивая актуальной 10.х) работают с 1С через так называемую Библиотеку подключаемого оборудования (БПО). Основной принцип заключается в том, что 1С формирует текстовый пакет в формате XML, в котором описаны все позиции чека, налоги, суммы и дополнительные реквизиты. Затем этот пакет передается методу драйвера ФискализацияЧека.
Проанализируем ситуацию: для того чтобы вставить свой текст, нам нужно найти место, где этот XML формируется. В типовой «УТ 10.3» за это отвечает процедура ПолучитьXMLПакетДляФискализацияЧека. Проанализируем структуру данных, которую принимает эта процедура. Она позволяет передавать строки трех основных типов:
Рассмотрим пример того, как может выглядеть добавление информации о бонусах в общий пакет данных. Нам необходимо вставить блок ТекстоваяСтрока в массив или таблицу значений, которая затем преобразуется в XML.
// Пример добавления произвольного текста в таблицу чека
НоваяСтрока = ТаблицаЧека.Добавить();
НоваяСтрока.ТипРасчета = "ТекстоваяСтрока";
НоваяСтрока.Текст = "Бонусов начислено: " + Строка(БонусыЗаПокупку);
НоваяСтрока = ТаблицаЧека.Добавить();
НоваяСтрока.ТипРасчета = "ТекстоваяСтрока";
НоваяСтрока.Текст = "Текущий баланс: " + Строка(ОстатокБонусов);
Важно понимать разницу в позиционировании текста. Если вы добавите ТекстоваяСтрока в общий массив позиций, она будет напечатана между товарами или сразу после них, но до блока «ИТОГО» и QR-кода ФНС. Если же ваша цель — вывести информацию в самом низу чека, так называемом «подвале», стоит рассмотреть дополнительные возможности драйвера.
Выясним причину, по которой текст иногда печатается не там, где ожидалось. Драйвер АТОЛ 10-й версии строго следует последовательности команд в XML. Рассмотрим подробнее атрибуты, которые можно передать в XML для управления оформлением текста:
Left, Center или Right. Например, для баланса бонусов логично использовать выравнивание по центру.Если вам нужно вывести текст строго после фискального признака (самый конец ленты), можно воспользоваться методом прямого вывода текста PrintText после закрытия документа. Однако это требует более глубокой модификации обработки обслуживания ККТ, так как стандартная БПО закрывает сеанс связи с кассой сразу после фискализации.
Проанализируем физические возможности модели АТОЛ 30Ф. Это бюджетная модель с шириной ленты 58 мм. Это накладывает существенные ограничения на длину вашей строки:
СтрДлина(ТекстБонусов) и принудительно разбивать ее на несколько элементов ТекстоваяСтрока.Пример функции для разбиения длинного текста:
Функция РазбитьСтрокуДляЧека(ИсходныйТекст, МаксДлина = 32)
Результат = Новый Массив;
Пока СтрДлина(ИсходныйТекст) > 0 Цикл
Часть = Лев(ИсходныйТекст, МаксДлина);
Результат.Добавить(Часть);
ИсходныйТекст = Сред(ИсходныйТекст, МаксДлина + 1);
КонецЦикла;
Возврат Результат;
КонецФункции
Рассмотрим ситуацию, когда текст является статичным (например, «Спасибо за покупку! Ждем вас снова»). В этом случае не обязательно менять код 1С. У каждой кассы АТОЛ есть внутренняя память для хранения клише (верхняя часть чека) и рекламного текста (нижняя часть чека).
Посмотрим, как это настроить через «Тест драйвера ККТ»:
Важное предостережение: Не используйте этот метод для динамических данных (количество баллов конкретного клиента). Память ККТ (EEPROM) имеет ограниченный ресурс циклов перезаписи. Если вы будете программно менять рекламный текст при каждом пробитии чека, касса может выйти из строя через несколько месяцев работы.
Современные правила 54-ФЗ позволяют печатать дополнительные QR-коды. В XML-пакет можно добавить блок Barcode. Проанализируем, зачем это нужно: вместо того чтобы печатать длинную инструкцию «Как потратить бонусы», выведите QR-код со ссылкой на страницу бонусной программы на вашем сайте. Это экономит кассовую ленту и выглядит современно.
// Пример структуры XML-узла для QR-кода (упрощенно)
// <Barcode Type="QR" Value="https://mysite.ru/bonus/12345" />
Завершая разбор, проанализируем юридическую сторону вопроса. Согласно 54-ФЗ, в чеке обязательно должны присутствовать фискальные реквизиты (наименование товара, цена, ИНН, QR-код ФНС и т.д.). Вывод дополнительной информации не запрещен, если она не мешает чтению обязательных реквизитов. Однако помните, что каждая дополнительная строка увеличивает расход чековой ленты. В масштабах сети магазинов это может привести к заметному росту операционных расходов. Старайтесь делать сообщения лаконичными и информативными.
Резюмируем: Для вывода бонусов в 1С:УТ 10.3 лучше всего использовать модификацию процедуры формирования XML-пакета, добавляя элементы с типом ТекстоваяСтрока. Это наиболее гибкий и безопасный способ, позволяющий выводить динамические данные для каждого покупателя индивидуально.