Как напечатать X-отчет (отчет без гашения) на ККТ АТОЛ и узнать доступные методы драйвера в 1С?

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

При работе с торговым оборудованием разработчики часто сталкиваются с ситуацией, когда при попытке вызвать метод печати X-отчета (например, НапечататьОтчетБезГашения) платформа выдает ошибку о том, что данный метод у объекта драйвера не найден. Рассмотрим подробнее причину этой проблемы и варианты ее решения.

Выясним причину: разница между компонентой БПО и драйвером ДТО

Разберем, почему возникает путаница с методами и свойствами. В 1С подключение онлайн-касс может выполняться двумя разными способами:

  1. Через Библиотеку подключаемого оборудования (БПО) 1С: В этом случае используется интеграционная компонента ДрайверАТОЛККТ54ФЗ. Набор ее методов строго регламентирован стандартом 1С и стандартизирован для всех кассовых аппаратов. Если компонента устарела или в конкретной версии стандарта метод снятия отчета без гашения не был реализован, вызов НапечататьОтчетБезГашения() вызовет ошибку.
  2. Напрямую через COM-объект или Native API низуровневого драйвера АТОЛ (ДТО 8 / ДТО 10): В этом случае обращение идет напрямую к компоненте производителям (например, AddIn.FPrnM8), где методы и свойства называются по-другому: ReportType, SetMode(), Report() и т.д.

Таким образом, попытка вызвать свойство ReportType у объекта БПО или метод НапечататьОтчетБезГашения у низкоуровневого COM-объекта АТОЛ приведет к ошибке отсутствия метода.

Вариант 1. Вызов отчета без гашения через COM-объект АТОЛ ДТО 8

Проанализируем пример кода для работы напрямую с драйвером АТОЛ (объект AddIn.FPrnM8). Для снятия X-отчета необходимо перевести ККТ в соответствующий режим отчетов и вызвать метод печати.

Посмотрим на пример реализации:


// Установка режима ККТ: 2 - режим X-отчетов (отчетов без гашения)
ОбъектДрайвера.Mode = 2;
ОбъектДрайвера.SetMode();

// Создание нового документа
ОбъектДрайвера.NewDocument();

// Регистрация кассира/администратора
ОбъектДрайвера.AttrNumber = 1021;
ОбъектДрайвера.AttrValue = "Администратор";
ОбъектДрайвера.WriteAttribute();

// Установка типа отчета: 2 - суточный отчет без гашения (X-отчет)
ОбъектДрайвера.ReportType = 2;

// Печать отчета
Результат = ОбъектДрайвера.Report();

// Обязательно освобождаем ресурс после выполнения
ОбъектДрайвера.DeviceEnabled = Ложь;
ОбъектДрайвера = Неопределено;

Важное примечание: Переменное свойство ReportType принимает следующие основные значения:

  1. 1 — Суточный отчет с гашением (Z-отчет / закрытие смены).
  2. 2 — Суточный отчет без гашения (X-отчет).
  3. 3 — Краткий фискальный отчет по диапазону дат.
  4. 4 — Краткий фискальный отчет по диапазону смен.
  5. 42 — Отчет о текущем состоянии расчетов.
  6. 43 — Отчет о состоянии связи с ОФД.

Свойство Mode задает режим работы устройства:

  1. 0 — Выбор режима.
  2. 1 — Режим регистрации продаж.
  3. 2 — Режим X-отчетов.
  4. 3 — Режим Z-отчетов.
  5. 4 — Программирование.

Вариант 2. Вызов команды через стандартную подсистему БПО 1С

Если в вашей конфигурации используется подсистема БПО, не рекомендуется обращаться к объекту драйвера напрямую. Правильный подход — использовать функционал менеджера оборудования. Выполним снятие отчета через вызов стандартной команды БПО:


ПараметрыКоманды = Новый Структура;
ИдентификаторУстройства = ЭлементКассы.ИдентификаторУстройства; // Ссылка на подключенное оборудование

Результат = МенеджерОборудованияКлиент.ВыполнитьКоманду(
    "PrintXReport", 
    ПараметрыКоманды, 
    ИдентификаторУстройства
);

Если Не Результат.Результат Тогда
    ВызватьИсключение Результат.ОписаниеОшибки;
КонецЕсли;

Если при выполнении этой команды возникает ошибка отсутствия метода, обновляем драйвер оборудования в справочнике "Драйверы оборудования" в 1С до актуальной версии или обновляем БПО конфигурации.

Как просмотреть список методов внешних компонент?

Так как встроенный язык 1С не поддерживает динамическое считывание состава методов у объектов Native API во время выполнения, узнать актуальный список функций компоненты можно следующими способами:

  1. Изучить требования 1С к разработчикам драйверов: В документации к БПО строго описан интерфейс стандарта (например, методы OpenShift, CloseShift, PrintXReport и т.д.).
  2. Проверить архив внешней компоненты: В ZIP-архиве поставляемого драйвера находится файл manifest.xml, содержащий описание импортируемых типов и классов.
  3. Использовать тестовую утилиту АТОЛ: В дистрибутив ДТО входит утилита DTO8_test (или "Тест драйвера ККТ" для ДТО 10), где можно увидеть все доступные свойства и команды физического устройства.
← На главную