В процессе автоматизации розничной торговли часто возникает необходимость вывести на кассовый чек дополнительную информацию, которая не предусмотрена стандартными настройками. Это может быть рекламное сообщение, информация о бонусном балансе покупателя, наименование склада или любая другая переменная строка. В зависимости от версии конфигурации и используемого оборудования (старый фискальный регистратор или современная онлайн-касса), методы решения этой задачи будут различаться.
В данной статье мы подробно разберем три основных способа реализации этой задачи: использование штатных шаблонов чеков с редактированием схемы компоновки данных (СКД), программное вмешательство в модули печати и особенности работы с современными ККТ по 54-ФЗ.
Начиная с версии «1С:Розница 2.2», разработчики внедрили мощный механизм управления внешним видом чека через справочник Шаблоны чеков ККМ. Этот метод является наиболее правильным, так как он не требует изменения программного кода и сохраняет конфигурацию на поддержке.
Рассмотрим по шагам, как добавить в чек произвольное поле, например, информацию о складе или текст из дополнительного реквизита:
Склад документа ЧекККМ.Этот способ позволяет выводить динамические данные, которые подтягиваются непосредственно из документа продажи в момент пробития чека. Если же вам нужно просто напечатать статичную строку (например, «Спасибо за покупку!»), в редакторе шаблона достаточно добавить элемент Текст и прописать нужное значение.
Если вы работаете с оборудованием старого образца (например, Fprint-03к) и используете драйверы АТОЛ, можно прибегнуть к программному вызову печати нефискальной строки. Проанализируем, в какой общий модуль необходимо внести изменения.
Для корректной работы нам понадобится найти процедуру, отвечающую за формирование подвала чека. В типовых конфигурациях это часто делается в общем модуле МенеджерОборудованияПереопределяемый. Разберем пример кода, который можно добавить в функцию ПечатьЧека:
// В общем модуле МенеджерОборудованияПереопределяемый
// Находим цикл печати подвала чека
Для Каждого СтрокаШапки Из МассивПодвалЧека Цикл
Если НЕ ОбщийМодульОборудования.НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаШапки, ВыходныеПараметры) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
// Добавляем нашу произвольную строку после стандартного подвала
ВашаПроизвольнаяСтрока = "Ваш текст или переменная";
ОбщийМодульОборудования.НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВашаПроизвольнаяСтрока, ВыходныеПараметры);
Важно: Данный метод хорошо работает на фискальных регистраторах, которые позволяют печатать текст построчно. Однако при использовании этого подхода стоит учитывать, что прямое вмешательство в общий модуль может усложнить процесс обновления программы.
С внедрением онлайн-касс механизм печати изменился. Теперь касса ожидает получения всего пакета данных чека целиком. Попытка вызвать команду НапечататьНефискальнуюСтроку может привести к тому, что касса аннулирует чек или напечатает лишние клише (шапку и подвал) для каждой такой строки, превращая чек в длинную ленту из обрывков.
Разберем, как правильно действовать в случае использования Библиотеки подключаемого оборудования (БПО) для ККТ с передачей данных:
1. Использование ТаблицыТекстовыхСтрок. Вместо того чтобы посылать команду на печать отдельной строки, мы должны включить наш текст в структуру данных, передаваемую в метод PrintReceipt. Рассмотрим, как это реализовано в модуле менеджера документа ЧекККМ.
Найдем процедуру ПодготовитьДанныеДляПробитияЧека и проанализируем формирование массива позиций. Мы можем добавить структуру с типом ТекстоваяСтрока в массив строк чека:
НоваяСтрока = Новый Структура;
НоваяСтрока.Вставить("Текст", "Дополнительная информация для клиента");
НоваяСтрока.Вставить("Тип", "ТекстоваяСтрока");
// Добавляем в общий массив данных чека
ДанныеЧека.Строки.Добавить(НоваяСтрока);
2. Передача данных через Тег 1192. Если информация должна быть официально зафиксирована, можно использовать дополнительный реквизит чека (тег 1192). Многие современные драйверы (например, АТОЛ 10-й версии) автоматически печатают содержимое этого тега в самом конце фискального документа.
Проанализируем ситуацию, когда при попытке печати текста касса выдает ошибку «Чек аннулирован». Это часто происходит по следующим причинам:
30. Проверьте настройки подключения оборудования в 1С.Подводя итог, отметим, что для современных версий «1С:Розница» оптимальным является первый способ через шаблоны чеков. Он предоставляет гибкость настройки и не требует глубоких знаний программирования. К программным методам стоит прибегать только в исключительных случаях, когда логика вывода текста слишком сложна для реализации через механизмы СКД.