При переходе на современные онлайн-кассы АТОЛ, работающие на Платформе 5, многие специалисты сталкиваются с неприятной особенностью: настройки в драйвере, которые раньше позволяли подавлять печать отчетов об открытии и закрытии смены, перестают работать. Техническая поддержка производителя часто ссылается на то, что управление печатью теперь должно осуществляться на стороне учетного ПО. В этой статье мы подробно разберем, как программно заставить 1С не печатать бумажные чеки при выполнении кассовых операций.
Ранее для отключения печати в драйверах АТОЛ 10-й серии использовался параметр electronically. Однако с выходом новых прошивок и обновлением стандартов 1С (БПО — Библиотека подключаемого оборудования), логика изменилась. Теперь 1С формирует XML-пакет, который передается драйверу, и если в этом пакете отсутствуют специфические флаги, касса печатает отчет «по старинке».
Основная сложность заключается в том, что старые ревизии интерфейса взаимодействия (например, 2000 или 3000) не поддерживают передачу флага запрета печати для фискальных отчетов. Нам необходимо рассмотреть переход на использование ревизии 4000 и выше, которая соответствует требованиям стандарта 4.1.
Выясним причину, по которой параметр игнорируется. В типовых конфигурациях 1С формирование параметров для ККТ происходит в общих модулях. Для управления печатью в стандарте 4.1 появился атрибут PrintRequired. Рассмотрим пример того, как должен выглядеть модифицированный код функции ПолучитьXMLПакетДляОперации в модуле, отвечающем за формирование XML для ККТ:
Функция ПолучитьXMLПакетДляОперации(ОбщиеПараметры, РевизияИнтерфейса = 0) Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML;
ЗаписьXML.ЗаписатьНачалоЭлемента("InputParameters");
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
// Форсируем использование логики ревизии 4000 для поддержки PrintRequired
Если РевизияИнтерфейса >= 4000 Тогда
// Если в параметрах передано требование не печатать
Если ОбщиеПараметры.Свойство("Печать") И НЕ ОбщиеПараметры.Печать Тогда
ЗаписьXML.ЗаписатьАтрибут("PrintRequired", "false");
Иначе
ЗаписьXML.ЗаписатьАтрибут("PrintRequired", "true");
КонецЕсли;
КонецЕсли;
// Стандартные параметры кассира
ЗаписьXML.ЗаписатьАтрибут("CashierName", ?(ОбщиеПараметры.Свойство("Кассир"), XMLСтрока(ОбщиеПараметры.Кассир), "Администратор"));
ЗаписьXML.ЗаписатьАтрибут("CashierINN" , ?(ОбщиеПараметры.Свойство("КассирИНН"), XMLСтрока(ОбщиеПараметры.КассирИНН), ""));
ЗаписьXML.ЗаписатьКонецЭлемента; // Parameters
ЗаписьXML.ЗаписатьКонецЭлемента; // InputParameters
Возврат ЗаписьXML.Закрыть();
КонецФункции
Проанализируем ситуацию: просто добавить атрибут в XML недостаточно. Необходимо, чтобы метод ОткрытьСмену или ЗакрытьСмену в коде 1С вызывался с указанием РевизияИнтерфейса = 4000. Если ваш драйвер сертифицирован под версию 3.6 или ниже, 1С может принудительно сбрасывать это значение. В таком случае потребуется вмешательство в модуль МенеджерОборудованияКлиент, чтобы разрешить передачу параметров высокой ревизии.
Если стандартные механизмы БПО не позволяют добиться желаемого результата из-за ограничений версии драйвера, мы можем воспользоваться «обходным путем». Драйверы АТОЛ 10.х позволяют отправлять команды напрямую в кассу в формате JSON. Этот метод игнорирует XML-прослойку 1С и позволяет передать параметр electronically напрямую.
Разберем по шагам, как реализовать закрытие смены без печати через ProcessJson (используйте просмотр JSON с форматированием для удобства отладки):
"electronically": true, предварительно выполнив проверку на заполненность обязательных полей.ProcessJson.
// Пример формирования JSON для закрытия смены
СтрокаЗадания = "{
| ""type"": ""closeShift"",
| ""electronically"": true,
| ""operator"": {
| ""name"": ""Иванов И.И."",
| ""vatin"": ""123456789012""
| }
|}";
// Вызов метода драйвера
Результат = ОбъектДрайвера.ProcessJson(ПараметрыПодключения.Идустройста, СтрокаЗадания);
Этот способ является наиболее надежным для Платформы 5, так как он работает напрямую с ядром драйвера. Рассмотрим подробнее: параметр electronically в значении true сообщает кассе, что бумажный отчет печатать не нужно, данные должны быть только переданы в ОФД.
Посмотрим на ситуацию со стороны распределенных систем. Если касса используется в режиме самообслуживания, часто применяется Web-сервер АТОЛ. В этом случае взаимодействие идет через HTTP-запросы. В структуре JSON-запроса к Web-серверу также присутствует флаг electronically.
Однако помните о важном нюансе: компания АТОЛ ввела лицензирование для работы с Web-сервером. Для использования этого функционала на постоянной основе требуется наличие действующей подписки (лицензии). Если лицензия отсутствует, касса может игнорировать программные флаги и переходить в режим обязательной печати для обеспечения сохранности данных.
Проанализируем возможности настройки оборудования без изменения кода 1С. В некоторых версиях прошивок Платформы 5 (начиная с 5.8.x) в «Тесте драйвера» появилась возможность настройки отчетов по умолчанию. Выполним следующие действия:
Важно: Учетное ПО (1С) имеет приоритет над внутренними настройками кассы. Если 1С принудительно посылает команду на печать, внутренняя настройка может не сработать. Поэтому комплексное решение всегда требует сочетания правильной настройки ККТ и корректной передачи параметров из кода 1С.
Для успешного отключения печати на Платформе 5 мы рекомендуем придерживаться следующего алгоритма:
ProcessJson для прямой отправки команды closeShift с флагом electronically: true.Применяя эти подходы, мы сможем добиться стабильной работы касс в режиме без кассира и существенно сэкономить на расходных материалах (чековой ленте), направляя отчеты только в электронном виде администратору системы или в учетную базу.