При работе с розничными продажами часто возникает необходимость вывести в кассовый чек дополнительную информацию. Это может быть рекламное сообщение, информация о текущих акциях, баланс бонусных баллов покупателя или просто пожелание хорошего дня. В конфигурации 1С:Управление торговлей 11.5 (УТ 11.5) архитектура работы с подключаемым оборудованием претерпела изменения по сравнению со старыми версиями, поэтому стандартные подходы не всегда очевидны. В этой статье мы подробно разберем несколько способов решения этой задачи: от простой настройки драйвера до программного изменения структуры чека.
Прежде чем приступать к программированию, давайте проанализируем штатные возможности системы. В современных релизах УТ 11.5 реализован мощный механизм управления внешним видом чека без изменения программного кода. Если вам нужно добавить статичный текст или стандартные параметры (например, ФИО кассира или номер смены), этот метод является приоритетным.
Выполним следующие шаги для настройки:
Если штатных шаблонов недостаточно (например, нужно выводить сложный расчетный текст или настроить печать копии чека сразу после пробития), нам потребуется вмешаться в логику формирования пакета данных. Рассмотрим, как это сделать правильно, не снимая конфигурацию с поддержки.
Основная логика подготовки данных чека в УТ 11.5 сосредоточена в общих модулях Библиотеки подключаемого оборудования (БПО). Нам необходимо переопределить функцию, отвечающую за формирование шаблона чека. Разберем ситуацию на примере модуля МенеджерОборудованияВызовСервераПереопределяемый.
Для добавления произвольной строки в конец чека или озвучивания события пробития создадим расширение и добавим в него функцию со следующим кодом:
&ИзменениеИКонтроль("СформироватьШаблонЧека")
Функция Расш1_СформироватьШаблонЧека(ОбщиеПараметры, ДополнительныйТекст, СтандартнаяОбработка, ТипОборудования)
// Создаем структуру для нашей текстовой строки
ИнформационнаяСтрока = Новый Структура("ТекстоваяСтрока, Текст, Выравнивание");
ИнформационнаяСтрока.Текст = "Спасибо за покупку! Ждем вас снова!";
ИнформационнаяСтрока.Выравнивание = "Центр"; // Варианты: Лево, Центр, Право
// Добавляем созданную строку в массив позиций чека
// В зависимости от логики, можно добавить в начало или в конец массива
ОбщиеПараметры.ПозицииЧека.Добавить(ИнформационнаяСтрока);
// Возвращаем Неопределено, чтобы система продолжила стандартную обработку
// или модифицируем результат по необходимости
Возврат Неопределено;
КонецФункции
Проанализируем этот код. Мы используем структуру ИнформационнаяСтрока, которая понятна драйверу БПО. Поле Текст содержит наше сообщение, а Выравнивание определяет позиционирование строки на ленте. Важно помнить, что в новых версиях БПО структура ОбщиеПараметры является ключевой для передачи данных на устройство.
В современных реалиях 1С обменивается данными с кассовым аппаратом посредством XML-документов. Если нам нужно внедрить нефискальные данные непосредственно в поток печати, следует обратить внимание на общий модуль МенеджерОборудованияКлиентСервер и функцию СформироватьXMLПакетДляПечатиЧека — для такой задачи есть расширение печати чеков с QR-кодами и произвольным текстом.
Рассмотрим структуру XML, которую ожидает драйвер (например, для устройств Штрих-М или Атол). Каждая текстовая строка описывается тегом TextString. Пример того, как это выглядит в коде формирования пакета:
// Пример добавления тега в XML структуру
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", "Акция: 1+1 на все товары до конца недели!");
ЗаписьXML.ЗаписатьАтрибут("Font", "1"); // Номер шрифта в настройках драйвера
ЗаписьXML.ЗаписатьКонецЭлемента();
Выясним причину, почему это решение может быть сложнее: при использовании формата фискальных данных ФФД 1.2 требования к структуре XML стали значительно строже. Любая "лишняя" строка внутри фискального блока (между позициями товаров и итогом) может привести к ошибке "Некорректный формат команды". Поэтому всегда добавляйте информационные строки либо в самый заголовок, либо строго после блока итогов чека.
Если текст сообщения статичен (например, адрес сайта или юридическая информация) и вы не хотите вносить изменения в 1С, можно воспользоваться внутренними таблицами самого фискального регистратора. Этот метод хорош тем, что строка будет печататься даже при пробитии чеков из других программ, подключенных к этой кассе.
Разберем по шагам работу с драйвером Штрих-М:
Важный нюанс: Многие современные драйверы при печати из 1С используют режим "Полного управления дизайном", при котором настройки таблиц драйвера могут игнорироваться. Если после настройки в драйвере строки не появились в чеке, значит 1С перекрывает их своими настройками шаблона (см. Способ 1).
Мы рассмотрели различные подходы к модификации чека. Выбор конкретного метода зависит от ваших задач:
Шаблоны чеков ККМ в интерфейсе УТ 11.5.СформироватьШаблонЧека.МенеджерОборудованияКлиентСервер.Тесте драйвера ККТ.Помните, что при работе с маркированными товарами и ФФД 1.2 любое вмешательство в структуру чека должно быть протестировано на эмуляторе или в режиме "без передачи данных", чтобы избежать блокировки кассы из-за некорректных тегов.