При автоматизации розничной торговли часто возникает ситуация, когда в одной сети магазинов используется разное оборудование — так называемый «зоопарк» касс. Если в современных версиях драйверов (например, АТОЛ 10) задача отключения печати бумажного чека решается установкой одного параметра LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, то в старой, но все еще популярной 8-й версии драйвера (ДТО 8) этот процесс имеет свои нюансы. Разберем подробно, как заставить кассу под управлением АТОЛ 8 не печатать бумагу, если покупатель предоставил свои контактные данные для получения электронного чека.
Для начала проанализируем, почему простой передачи Email покупателя (тег 1008) недостаточно. На уровне фискального накопителя и прошивки кассы передача атрибута 1008 лишь сообщает системе, куда отправить чек, но по умолчанию касса обязана продублировать его на бумажной ленте, если не задана обратная команда. В 8-й версии драйвера АТОЛ ключевым инструментом для изменения этого поведения является свойство CheckMode.
Рассмотрим, какие значения может принимать это свойство:
Важный момент: Установка режима CheckMode = 0 требует обязательного наличия заполненного атрибута 1008 (телефон или адрес электронной почты). Если вы попытаетесь пробить электронный чек без указания контактов, ККТ либо выдаст ошибку, либо принудительно распечатает бумажный носитель, так как это требование законодательства (ФЗ-54).
Выясним, в какой последовательности необходимо вызывать методы драйвера, чтобы команда была принята устройством. Самая распространенная ошибка программистов — установка режима после того, как чек уже открыт. Посмотрим на правильный алгоритм действий.
Сначала подготовим объект драйвера и установим режим работы до начала каких-либо операций с чеком:
// Предположим, что Объект — это установленное соединение с драйвером АТОЛ 8
Если ЭлектронныйЧек = 1 Тогда
Объект.CheckMode = 0; // Устанавливаем режим "Без печати"
Иначе
Объект.CheckMode = 1; // Обычный режим с печатью
КонецЕсли;
Далее нам необходимо передать контактные данные покупателя. Это делается через механизм атрибутов (тегов) ФФД. Проанализируем пример функции для записи атрибута 1008:
Процедура ЗаписатьАтрибутОтправки(Объект, КонтактПокупателя)
Если ПустаяСтрока(КонтактПокупателя) = 0 Тогда
// Указываем номер тега согласно формату фискальных данных
Объект.AttrNumber = 1008;
// Передаем значение (Email или телефон)
Объект.AttrValue = СокрЛП(КонтактПокупателя);
// Вызываем метод записи атрибута
Объект.WriteAttribute();
КонецЕсли;
КонецПроцедуры
Теперь соберем все воедино в логическую цепочку формирования чека. Рассмотрим правильную последовательность вызовов методов:
CheckMode = 0.WriteAttribute().OpenCheck().Registration() или BeginItem() / EndItem().CloseCheck().Если мы изменим эту последовательность (например, установим CheckMode после OpenCheck), драйвер проигнорирует настройку, и лента будет расходоваться в обычном режиме.
Рассмотрим ситуацию, с которой часто сталкиваются коллеги: при использовании CheckMode = 0 и попытке закрыть чек типом оплаты "Наличные" (TypeClose = 0), касса выдает ошибку. Выясним причину этого поведения.
В некоторых старых версиях прошивок ККТ и релизах драйвера 8.х существовало жесткое ограничение: электронный чек считался несовместимым с наличным расчетом, так как предполагалось, что при наличном расчете клиент находится непосредственно у кассы и обязан получить бумажный документ. Чтобы обойти это ограничение, рекомендуется:
CheckMode в последних версиях 8-го драйвера появилось свойство ElectronicCheck. Попробуйте установить его в значение True, если стандартный метод не срабатывает.Проанализируем ситуацию, когда код написан верно, но чек все равно частично печатается. Важно понимать, что CheckMode = 0 отключает печать именно фискальной части чека. Однако касса может продолжать печатать:
Для полной "тишины" необходимо зайти в "Тест драйвера ККМ", перейти в "Настройки параметров оборудования" и проверить настройки печати нефискальных документов. Также стоит обратить внимание на параметр "Автоматическая отрезка", который иногда провоцирует микродвижения вала даже при отсутствии текста.
Таким образом, мы рассмотрели комплексный подход к отключению печати. Главное — помнить про установку CheckMode до открытия чека, обязательную передачу тега 1008 и проверку совместимости прошивки кассы с выбранным режимом работы.