При работе с торговым оборудованием в решениях на платформе 1С:Предприятие (в частности, в управленческих конфигурациях на обычных формах, таких как 1С:Управление торговлей 10.3) программисты и администраторы часто сталкиваются с необходимостью кастомизации печатной формы чека. Покупатели или руководство могут попросить убрать «лишние» строки для экономии кассовой ленты, изменить шрифт, сократить наименования ставок НДС или изменить названия типов оплаты (например, заменить «БЕЗНАЛИЧНЫМИ» на «КАРТОЙ»).
Однако стандартные попытки найти и поправить эти слова непосредственно в кодовой базе 1С — например, в обработке обслуживания ККТ ATOLkkt.epf или в общем модуле интеграции — не приносят никакого результата. Давайте подробно разберем, почему так происходит, как устроено взаимодействие системы 1С с кассовыми аппаратами АТОЛ, и какими способами можно реально управлять содержимым и внешним видом чека. Для корректной интеграции конфигурации с современным драйвером ККТ без изменения типового кода можно использовать обработку обслуживания ККТ АТОЛ для УТ 10.3 под требования 54-ФЗ и ДТО 10.
Для начала проанализируем архитектуру фискализации. Современные кассовые аппараты (онлайн-кассы) работают в строгом соответствии с требованиями Федерального закона ФЗ-54 и актуальных форматов фискальных документов (ФФД 1.05, 1.1, 1.2). Согласно этой схеме, учетная система 1С выполняет лишь роль «командного центра», который отправляет драйверу кассы структурированный запрос на продажу.
Рассмотрим, как выглядит этот процесс по шагам:
CheckPackage), описывающий состав чека, суммы, ставки налога и типы оплат.none).Посмотрим на пример структуры XML-пакета, который формируется в 1С и передается драйверу ККТ:
// Пример формирования структуры XML для отправки на ККТ через Драйвер АТОЛ
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("CheckPackage");
// Параметры чека (тип расчета, СНО)
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
ЗаписьXML.ЗаписатьАтрибут("PaymentType", "1"); // 1 - Приход
ЗаписьXML.ЗаписатьАтрибут("TaxVariant", "1"); // Код СНО (например, упрощенная СНО)
ЗаписьXML.ЗаписатьКонецЭлемента(); // Parameters
// Позиции чека
ЗаписьXML.ЗаписатьНачалоЭлемента("Positions");
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", "Услуга по настройке ПО");
ЗаписьXML.ЗаписатьАтрибут("Quantity", "1");
ЗаписьXML.ЗаписатьАтрибут("Price", "1500.00");
ЗаписьXML.ЗаписатьАтрибут("Amount", "1500.00");
ЗаписьXML.ЗаписатьАтрибут("Department", "1");
ЗаписьXML.ЗаписатьАтрибут("Tax", "none"); // Код ставки НДС (БЕЗ НДС)
ЗаписьXML.ЗаписатьКонецЭлемента(); // FiscalString
ЗаписьXML.ЗаписатьКонецЭлемента(); // Positions
ЗаписьXML.ЗаписатьКонецЭлемента("CheckPackage");
XMLПакет = ЗаписьXML.Закрыть();
Как видим из кода, в XML-пакете нет слов «БЕЗ НДС» или «ПОЛНЫЙ РАСЧЕТ» — их печатает сама касса на основе переданных тегов. Следовательно, изменять программный код 1С для редактирования фискальных терминов бессмысленно.
Выясним причину, почему старые руководства по настройке внешнего вида чеков больше не работают. В кассах АТОЛ предыдущих поколений (работавших на Платформе 2.5 или 3.0) существовала специализированная утилита «Редактор шаблонов чеков АТОЛ» (TemplateEditor). Она позволяла визуально передвигать блоки чека, менять шрифты и даже удалять некоторые нефискальные строки.
В современных кассах, переведенных на Платформу 5.0, концепция изменилась:
Для того чтобы переключить используемый шаблон или настроить плотность печати, нам потребуется воспользоваться сервисной утилитой от производителя ККТ.
Для изменения глобального оформления чека (высоты шрифта, плотности строк, переносов) выполним следующие шаги с использованием утилиты управления драйвером:
Если перед нами стоит задача выводить на чек динамическую информацию из 1С (например, баланс бонусной карты клиента, рекламную информацию о текущих акциях или ФИО кассира), то делать это нужно через механизм нефискальных строк чека.
Для этого в конфигурации 1С:Управление торговлей 10.3 необходимо доработать модуль, отвечающий за формирование XML-пакета чека. Обычно это функция ПодготовитьДанныеДляФискализацииЧека в обработке обслуживания оборудования или общем модуле работы с торговым оборудованием. Нам нужно внедрить в структуру XML тег TextString.
Проанализируем пример кода, который добавляет блок нефискальной текстовой информации в конец чека перед его закрытием:
// Пример добавления нефискального текста в XML-пакет чека
// Предположим, у нас есть сформированный пакет структуры XML
// Добавим информацию о бонусном балансе клиента
ЗаписьXML.ЗаписатьНачалоЭлемента("NonFiscalLines"); // Секция нефискальных строк
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", "--------------------------------");
ЗаписьXML.ЗаписатьКонецЭлемента(); // TextString
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", "Баланс вашей карты: 450 бонусов");
ЗаписьXML.ЗаписатьКонецЭлемента(); // TextString
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", "Скидка на следующую покупку 5%!");
ЗаписьXML.ЗаписатьКонецЭлемента(); // TextString
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", "--------------------------------");
ЗаписьXML.ЗаписатьКонецЭлемента(); // TextString
ЗаписьXML.ЗаписатьКонецЭлемента(); // NonFiscalLines
При получении такого XML-пакета драйвер АТОЛ скомандует кассовому аппарату напечатать указанные строки обычным текстовым шрифтом. Эти строки не будут проверяться фискальным накопителем и не отправятся в ОФД, но отобразятся на бумажном документе. При необходимости выводить после чека не только текст, но и графику, можно использовать решение для печати картинок и рекламы в нефискальной части чека ККМ АТОЛ через ДТО 10.
Рассматривая варианты сокращения чека, важно помнить о юридической стороне вопроса. Согласно требованиям ФФД, на чеке обязательно должны присутствовать определенные реквизиты (дата и время расчета, адрес и место осуществления расчетов, ИНН, система налогообложения, признак расчета, наименование товаров/услуг, суммы по разным типам оплат и т. д.).
Если вы попытаетесь принудительно исключить передачу обязательного тега из 1С, ККТ выдаст ошибку и откажется пробивать чек. Для легального уменьшения длины чека рекомендуем использовать следующие настройки в параметрах ККТ через Тест драйвера:
Таким образом, правильный путь изменения чека АТОЛ в связке с 1С:УТ 10.3 — это комбинация настройки встроенных шаблонов ККТ через тест драйвера и программное добавление нефискальных текстовых блоков (тег TextString) в XML-структуру пакета печати чека.