Как программно снять Z-отчет на ККМ АТОЛ или Штрих-М из 1С 7.7?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

В процессе автоматизации розничной торговли на базе платформы 1С:Предприятие 7.7 (например, в конфигурации «Торговля и Склад») часто возникает необходимость минимизировать действия кассира при закрытии смены. Стандартный сценарий, при котором продавцы вручную заходят в тест драйвера ККМ для снятия Z-отчета, неудобен, замедляет работу и увеличивает риск ошибок. В этой статье мы подробно разберем, как программно отправить команду закрытия смены на кассовые аппараты АТОЛ и Штрих-М непосредственно из кода 1С.

Мы рассмотрим несколько вариантов решения: от классических методов для старых драйверов до современных механизмов работы через ДТО 10 (с учетом требований 54-ФЗ), а также использование встроенных возможностей типовой конфигурации.

---

Решение 1. Использование методов старых драйверов АТОЛ (ДТО 6 / ДТО 8)

Если на вашем предприятии до сих пор используются старые версии драйверов АТОЛ (например, ДТО 8 или ДТО 6), взаимодействие с ККМ строится на строгой последовательности смены режимов работы кассового аппарата. Чтобы касса позволила снять отчет с гашением (Z-отчет), ее необходимо перевести в режим отчетов. Рассмотрим этот процесс по шагам.

Для программного закрытия смены нам понадобятся свойства драйвера Mode (режим ККМ) и ReportType (тип отчета), а также методы SetMode() и Report(). Напишем и проанализируем фрагмент кода:


// 1. Входим в режим отчетов с гашением (Режим 3)
Объект.Mode = 3; 
Объект.SetMode();

// 2. Настраиваем тип отчета (1 — Z-отчет, отчет с гашением)
Объект.ReportType = 1; 

// 3. Запускаем формирование и печать отчета
Объект.Report();

Важный нюанс: возвращение в режим обычной печати. После выполнения Z-отчета устройство остается в режиме работы с отчетами. Если сразу попытаться пробить обычный чек, касса вернет ошибку. Чтобы вернуть ККМ в рабочий режим (режим регистрации чеков), необходимо принудительно переключить режим обратно:


// Возврат в режим регистрации (Режим 1)
Объект.Mode = 1; 
Объект.SetMode();

В качестве альтернативы для сброса текущего режима и возврата в состояние ожидания можно использовать метод драйвера ResetMode():

Объект.ResetMode(); ---

Решение 2. Программное закрытие смены на фискальных регистраторах Штрих-М

Если торговая точка оснащена оборудованием от компании «Штрих-М», логика работы с драйвером выглядит проще. В драйверах Штрих-М предусмотрен прямой метод, который самостоятельно переключает нужные режимы и инициирует печать отчета с обнулением операционных регистров. Нам достаточно вызвать один метод:


// Снятие отчета с гашением (Z-отчет) для ККМ Штрих
Объект.PrintReportWithCleaning();

Этот метод выполняет всю необходимую последовательность операций на стороне кассы без необходимости вручную управлять свойством Mode.

---

Решение 3. Использование встроенных механизмов «Торговли и Склада 7.7»

Разработчики типовой конфигурации 1С 7.7 «Торговля и Склад» (ТиС) уже предусмотрели встроенные механизмы для работы с торговым оборудованием. Чтобы не изобретать велосипед и не писать код взаимодействия с OLE-объектом драйвера с нуля, мы можем использовать стандартные обработки обслуживания.

Для этого в системе присутствует специализированная обработка fr_comm.ert (или ее модификации для онлайн-касс, например frATOL54_comm.ert). Внутри этой обработки определена готовая процедура ЗакрытьСмену(). Давайте проанализируем, как ее задействовать:

  1. Откройте глобальный модуль вашей базы или обработку закрытия кассовой смены.
  2. Найдите обращение к обработке обслуживания фискального регистратора.
  3. Вызовите штатную процедуру закрытия смены, которая автоматически проверит подключение, авторизует пользователя и отправит нужную команду на ККМ.

Также стоит обратить внимание на встроенную обработку «ЗакрытиеКассовойСмены». В типовом сценарии она не только снимает Z-отчет, но и сворачивает чеки ККМ в документ «Отчет о розничных продажах». Если вам требуется только снять физический Z-отчет на кассе без изменения данных в 1С (например, у вас сильно переписанная конфигурация), вы можете открыть код этой обработки и отключить блок сворачивания чеков, оставив только вызов печати отчета.

---

Решение 4. Современный подход — закрытие смены через АТОЛ ДТО 10 (ФФД 1.2 и 54-ФЗ)

Если вы обновили кассовое оборудование под современные требования законодательства (54-ФЗ, маркировка «Честный Знак», формат фискальных документов ФФД 1.2) и используете современный драйвер АТОЛ ДТО 10 (AddIn.Fptr10), старый код со свойствами ReportType и Mode работать не будет. В ДТО 10 архитектура драйвера была полностью переписана.

Рассмотрим, как правильно реализовать закрытие смены программно в 1С 7.7 с использованием современной библиотеки addin_fptr10_x86.dll (ее необходимо предварительно зарегистрировать в операционной системе через утилиту regsvr32).

Давайте разберем по шагам рабочий пример интеграции:


// Шаг 1. Создание объекта драйвера АТОЛ 10-й версии
Попытка
    Объект = СоздатьОбъект("AddIn.Fptr10");
Исключение
    Предупреждение("Не удалось загрузить драйвер АТОЛ ДТО 10! Проверьте регистрацию DLL.");
    Возврат;
КонецПопытки;

// Шаг 2. Настройка параметров связи с кассой (в примере используется COM-порт)
Объект.setSingleSetting(Объект.LIBFPTR_SETTING_MODEL, Строка(Объект.LIBFPTR_MODEL_ATOL_AUTO));
Объект.setSingleSetting(Объект.LIBFPTR_SETTING_PORT, Строка(Объект.LIBFPTR_PORT_COM));
Объект.setSingleSetting(Объект.LIBFPTR_SETTING_COM_FILE, "COM3"); // Номер вашего COM-порта
Объект.setSingleSetting(Объект.LIBFPTR_SETTING_BAUDRATE, Строка(Объект.LIBFPTR_PORT_BR_115200));
Объект.applySingleSettings();

// Шаг 3. Соединение с ККТ
Если Объект.open() <> 0 Тогда
    Сообщить("Ошибка подключения к ККТ: " + Объект.errorDescription());
    Возврат;
КонецЕсли;

// Шаг 4. Требование 54-ФЗ: Перед формированием фискальных документов передаем данные кассира
Объект.setParam(1021, "Иванова И.И."); // Тег 1021 - ФИО Кассира
Объект.setParam(1203, "123456789012"); // Тег 1203 - ИНН кассира (12 цифр)
Объект.operatorLogin();

// Шаг 5. Настройка параметров отчета закрытия смены
Объект.setParam(Объект.LIBFPTR_PARAM_REPORT_TYPE, Объект.LIBFPTR_RT_CLOSE_SHIFT);

// Флаг печати бумажной ленты: 0 — напечатать бумажный чек, 1 — отправить только в электронном виде в ОФД
Объект.setParam(Объект.LIBFPTR_PARAM_REPORT_ELECTRONICALLY, 0); 

// Шаг 6. Запуск формирования отчета
Объект.report();

// Шаг 7. Контролируем завершение процесса печати документа
Результат = Объект.checkDocumentClosed();
Если Результат <> 0 Тогда
    Сообщить("Ошибка при снятии Z-отчета: " + Объект.errorDescription());
Иначе
    Сообщить("Смена успешно закрыта. Z-отчет распечатан.");
КонецЕсли;

// Шаг 8. Обязательно закрываем соединение с кассой
Объект.close();

Обратите внимание, что в ДТО 10 концепция жестких режимов («режимов ККМ») упразднена. Драйвер работает бессистемно в плане ручного переключения — вы просто посылаете нужную команду, и ККТ сама переключает внутреннее состояние. Возвращать устройство в режим регистрации после выполнения метода report() не требуется.

---

Дополнительные аппаратные настройки ККТ АТОЛ для автоматизации

Иногда вместо написания сложного кода в среде 1С гораздо проще переложить задачу закрытия смены на логику самого кассового аппарата. Современные прошивки ККТ АТОЛ позволяют автоматизировать эти процессы через «Тест драйвера ККТ» (раздел «Свойства» -> «Параметры ККТ»):

Использование комплексного подхода — интеграции через код 1С и тонкой настройки параметров самого фискального регистратора — позволит вам создать отказоустойчивую систему работы розничной точки.

← На главную