Как отключить печать отчетов о закрытии и открытии смены на ККТ АТОЛ Платформа 5 средствами 1С

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При переходе на современные онлайн-кассы АТОЛ, работающие на Платформе 5, многие специалисты сталкиваются с неприятной особенностью: настройки в драйвере, которые раньше позволяли подавлять печать отчетов об открытии и закрытии смены, перестают работать. Техническая поддержка производителя часто ссылается на то, что управление печатью теперь должно осуществляться на стороне учетного ПО. В этой статье мы подробно разберем, как программно заставить 1С не печатать бумажные чеки при выполнении кассовых операций.

Анализ проблемы и механизма взаимодействия 1С с драйвером

Ранее для отключения печати в драйверах АТОЛ 10-й серии использовался параметр electronically. Однако с выходом новых прошивок и обновлением стандартов 1С (БПО — Библиотека подключаемого оборудования), логика изменилась. Теперь 1С формирует XML-пакет, который передается драйверу, и если в этом пакете отсутствуют специфические флаги, касса печатает отчет «по старинке».

Основная сложность заключается в том, что старые ревизии интерфейса взаимодействия (например, 2000 или 3000) не поддерживают передачу флага запрета печати для фискальных отчетов. Нам необходимо рассмотреть переход на использование ревизии 4000 и выше, которая соответствует требованиям стандарта 4.1.

Вариант 1. Модификация XML-пакета и форсирование ревизии 4000

Выясним причину, по которой параметр игнорируется. В типовых конфигурациях 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С может принудительно сбрасывать это значение. В таком случае потребуется вмешательство в модуль МенеджерОборудованияКлиент, чтобы разрешить передачу параметров высокой ревизии.

Вариант 2. Использование прямого JSON-задания (метод ProcessJson)

Если стандартные механизмы БПО не позволяют добиться желаемого результата из-за ограничений версии драйвера, мы можем воспользоваться «обходным путем». Драйверы АТОЛ 10.х позволяют отправлять команды напрямую в кассу в формате JSON. Этот метод игнорирует XML-прослойку 1С и позволяет передать параметр electronically напрямую.

Разберем по шагам, как реализовать закрытие смены без печати через ProcessJson (используйте просмотр JSON с форматированием для удобства отладки):

  1. Получаем объект драйвера из стандартной обработки обслуживания.
  2. Формируем строку JSON с параметром "electronically": true, предварительно выполнив проверку на заполненность обязательных полей.
  3. Вызываем метод ProcessJson.

// Пример формирования JSON для закрытия смены
СтрокаЗадания = "{
|  ""type"": ""closeShift"",
|  ""electronically"": true,
|  ""operator"": {
|     ""name"": ""Иванов И.И."",
|     ""vatin"": ""123456789012""
|  }
|}";

// Вызов метода драйвера
Результат = ОбъектДрайвера.ProcessJson(ПараметрыПодключения.Идустройста, СтрокаЗадания);

Этот способ является наиболее надежным для Платформы 5, так как он работает напрямую с ядром драйвера. Рассмотрим подробнее: параметр electronically в значении true сообщает кассе, что бумажный отчет печатать не нужно, данные должны быть только переданы в ОФД.

Вариант 3. Работа через Web-сервер АТОЛ

Посмотрим на ситуацию со стороны распределенных систем. Если касса используется в режиме самообслуживания, часто применяется Web-сервер АТОЛ. В этом случае взаимодействие идет через HTTP-запросы. В структуре JSON-запроса к Web-серверу также присутствует флаг electronically.

Однако помните о важном нюансе: компания АТОЛ ввела лицензирование для работы с Web-сервером. Для использования этого функционала на постоянной основе требуется наличие действующей подписки (лицензии). Если лицензия отсутствует, касса может игнорировать программные флаги и переходить в режим обязательной печати для обеспечения сохранности данных.

Настройка параметров самой ККТ

Проанализируем возможности настройки оборудования без изменения кода 1С. В некоторых версиях прошивок Платформы 5 (начиная с 5.8.x) в «Тесте драйвера» появилась возможность настройки отчетов по умолчанию. Выполним следующие действия:

  1. Запустим «Тест драйвера ККТ» (версия 10.x).
  2. Перейдем в раздел «Свойства» — «Параметры ККТ».
  3. Найдем категорию «Роли и отчеты» или «Печать».
  4. Проверим наличие пункта «Печать отчета о закрытии смены». Если этот пункт доступен, установим значение «Выключено».

Важно: Учетное ПО (1С) имеет приоритет над внутренними настройками кассы. Если 1С принудительно посылает команду на печать, внутренняя настройка может не сработать. Поэтому комплексное решение всегда требует сочетания правильной настройки ККТ и корректной передачи параметров из кода 1С.

Резюме для разработчика

Для успешного отключения печати на Платформе 5 мы рекомендуем придерживаться следующего алгоритма:

Применяя эти подходы, мы сможем добиться стабильной работы касс в режиме без кассира и существенно сэкономить на расходных материалах (чековой ленте), направляя отчеты только в электронном виде администратору системы или в учетную базу.

← На главную