При автоматизации розничной торговли и расчетов с покупателями часто возникает необходимость массового формирования чеков коррекции. Если таких чеков нужно пробить десятки или сотни (например, при исправлении массового сбоя или корректировке платежей на расчетный счет), печать на чековой ленте приводит к колоссальному расходу бумаги и износу термоголовки кассового аппарата. Рассмотрим подробно, как решить проблему печати чеков коррекции на бумаге для популярной модели ККТ АТОЛ-50Ф средствами платформы 1С:Предприятие 8 и драйверов АТОЛ.
В типовых конфигурациях 1С (например, в 1С:Бухгалтерия 3.0 КОРП) для обычных чеков (приход, возврат прихода) опция электронного чека работает исправно. Пользователю достаточно установить признак "Не печатать бумажный чек" и указать адрес электронной почты или номер телефона покупателя (Тег 1008). После этого чек уходит в ОФД и покупателю, а бумажная лента ККТ остается нетронутой.
Однако при попытке пробить аналогичным образом чек коррекции касса все равно упорно распечатывает бумажный документ. Проанализируем ситуацию с технической стороны. Взаимодействие между 1С и кассовым аппаратом строится через два уровня программного обеспечения:
Проблема кроется в различиях интерфейсов методов фискализации обычных чеков и чеков коррекции в архитектуре БПО и драйверов.
В старых версиях БПО (в ревизиях интерфейса требований к драйверам ниже 4004, к которым относится, например, версия 2.1.1.x) разработчики 1С заложили принципиально разные сигнатуры для вызова функций обычного чека и чека коррекции.
Рассмотрим пример кода из старой версии БПО при формировании обычного чека:
Результат = ОбъектДрайвера.СформироватьЧек(
ПараметрыПодключения.ИДУстройства,
ПараметрыФискализации.Электронно,
ПараметрыФискализации.ДанныеЧекаXML,
ПараметрыФискализации.НомерЧекаККТ,
ПараметрыФискализации.НомерСменыККТ,
ПараметрыФискализации.ФискальныйПризнак,
ПараметрыФискализации.АдресСайтаПроверки
);
Обратим внимание на второй параметр: ПараметрыФискализации.Электронно. Именно он передает драйверу ККТ команду не выводить документ на печать.
Теперь посмотрим на вызов формирования чека коррекции в тех же версиях БПО:
Если ПараметрыФискализации.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
Результат = ОбъектДрайвера.СформироватьЧекКоррекции(
ПараметрыПодключения.ИДУстройства,
ПараметрыФискализации.ДанныеЧекаXML,
ПараметрыФискализации.РезультатОперацииXML
);
Иначе
Результат = ОбъектДрайвера.СформироватьЧекКоррекции(
ПараметрыПодключения.ИДУстройства,
ПараметрыФискализации.ДанныеЧекаXML,
ПараметрыФискализации.НомерЧекаККТ,
...
);
КонецЕсли;
Как мы видим, в списке параметров метода СформироватьЧекКоррекции физически отсутствует параметр передачи булева свойства "Электронно". Из-за этого драйвер ККТ по умолчанию считает, что документ необходимо распечатать в бумажном виде.
Если мы обновим конфигурацию 1С и используемые драйверы ККТ до актуальных релизов (где ревизия требований к драйверам ККТ имеет версию 4004 или выше), мы увидим, что фирма 1С исправила это ограничение. В новой спецификации требований метод СформироватьЧекКоррекции получил поддержку признака электронного формирования:
// В новых версиях БПО (ревизия 4.0 и выше) сигнатура метода выглядит следующим образом:
Результат = ОбъектДрайвера.СформироватьЧекКоррекции(
ПараметрыПодключения.ИДУстройства,
ПараметрыФискализации.Электронно, // Передается значение Истина/Ложь
ПараметрыФискализации.ДанныеЧекаXML,
ПараметрыФискализации.РезультатОперацииXML
);
Решение на уровне 1С: Чтобы программно отключить бумажную печать чека коррекции, необходимо обновить 1С:Бухгалтерию и драйвер АТОЛ до версий, поддерживающих стандарт БПО не ниже 3.1. При написании собственной внешней обработки для пакетной печати обязательно проверяйте значение ПараметрыФискализации.РевизияИнтерфейса и передавайте вторым параметром Истина в метод СформироватьЧекКоррекции.
Даже если программа 1С корректно передает флаг электронного чека, ККТ АТОЛ-50Ф может продолжать печатать бумагу. Это связано с внутренними настройками кассового аппарата и требованиями драйвера.
Разберем по шагам, какие настройки необходимо выполнить в драйвере АТОЛ 10:
LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY в значение true перед фискализацией документа.
// Пример прямого обращения к драйверу АТОЛ ДТО 10
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, Истина);
LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY для некоторых типов документов. Данную лицензию можно приобрести у авторизованных сервисных партнеров АТОЛ.Ранее на форумах велись активные споры о целесообразности автоматизации чеков коррекции, поскольку к каждому такому чеку требовалось прикладывать бумажное заявление или объяснительную записку для ФНС. В связи с этим массовая печать электронных чеков коррекции казалась бессмысленной.
Ситуация кардинально изменилась с принятием Федерального закона № 240-ФЗ. Теперь действуют следующие правила:
Это нововведение полностью снимает методологические ограничения на массовую генерацию чеков коррекции. Написав внешнюю обработку пакетной печати и настроив работу ККТ АТОЛ-50Ф в электронном режиме, вы сможете быстро скорректировать любые объемы некорректно пробитых операций без бумажной волокиты.