При работе с торговым оборудованием разработчики часто сталкиваются с ситуацией, когда при попытке вызвать метод печати X-отчета (например, НапечататьОтчетБезГашения) платформа выдает ошибку о том, что данный метод у объекта драйвера не найден. Рассмотрим подробнее причину этой проблемы и варианты ее решения.
Разберем, почему возникает путаница с методами и свойствами. В 1С подключение онлайн-касс может выполняться двумя разными способами:
ДрайверАТОЛККТ54ФЗ. Набор ее методов строго регламентирован стандартом 1С и стандартизирован для всех кассовых аппаратов. Если компонента устарела или в конкретной версии стандарта метод снятия отчета без гашения не был реализован, вызов НапечататьОтчетБезГашения() вызовет ошибку.AddIn.FPrnM8), где методы и свойства называются по-другому: ReportType, SetMode(), Report() и т.д.Таким образом, попытка вызвать свойство ReportType у объекта БПО или метод НапечататьОтчетБезГашения у низкоуровневого COM-объекта АТОЛ приведет к ошибке отсутствия метода.
Проанализируем пример кода для работы напрямую с драйвером АТОЛ (объект AddIn.FPrnM8). Для снятия X-отчета необходимо перевести ККТ в соответствующий режим отчетов и вызвать метод печати.
Посмотрим на пример реализации:
// Установка режима ККТ: 2 - режим X-отчетов (отчетов без гашения)
ОбъектДрайвера.Mode = 2;
ОбъектДрайвера.SetMode();
// Создание нового документа
ОбъектДрайвера.NewDocument();
// Регистрация кассира/администратора
ОбъектДрайвера.AttrNumber = 1021;
ОбъектДрайвера.AttrValue = "Администратор";
ОбъектДрайвера.WriteAttribute();
// Установка типа отчета: 2 - суточный отчет без гашения (X-отчет)
ОбъектДрайвера.ReportType = 2;
// Печать отчета
Результат = ОбъектДрайвера.Report();
// Обязательно освобождаем ресурс после выполнения
ОбъектДрайвера.DeviceEnabled = Ложь;
ОбъектДрайвера = Неопределено;
Важное примечание: Переменное свойство ReportType принимает следующие основные значения:
Свойство Mode задает режим работы устройства:
Если в вашей конфигурации используется подсистема БПО, не рекомендуется обращаться к объекту драйвера напрямую. Правильный подход — использовать функционал менеджера оборудования. Выполним снятие отчета через вызов стандартной команды БПО:
ПараметрыКоманды = Новый Структура;
ИдентификаторУстройства = ЭлементКассы.ИдентификаторУстройства; // Ссылка на подключенное оборудование
Результат = МенеджерОборудованияКлиент.ВыполнитьКоманду(
"PrintXReport",
ПараметрыКоманды,
ИдентификаторУстройства
);
Если Не Результат.Результат Тогда
ВызватьИсключение Результат.ОписаниеОшибки;
КонецЕсли;
Если при выполнении этой команды возникает ошибка отсутствия метода, обновляем драйвер оборудования в справочнике "Драйверы оборудования" в 1С до актуальной версии или обновляем БПО конфигурации.
Так как встроенный язык 1С не поддерживает динамическое считывание состава методов у объектов Native API во время выполнения, узнать актуальный список функций компоненты можно следующими способами:
OpenShift, CloseShift, PrintXReport и т.д.).manifest.xml, содержащий описание импортируемых типов и классов.DTO8_test (или "Тест драйвера ККТ" для ДТО 10), где можно увидеть все доступные свойства и команды физического устройства.