При переходе на современное кассовое оборудование, работающее на Платформе 5.0, разработчики часто сталкиваются с необходимостью миграции с драйверов АТОЛ 8-й версии на 10-ю (DTO 10). В среде 1С 7.7 это создает определенные сложности, так как архитектура 10-го драйвера существенно отличается от предшественников. В данной статье мы подробно разберем, как программно реализовать закрытие смены (Z-отчет) через COM-объект драйвера АТОЛ 10.
Прежде всего, проанализируем ключевое отличие: если в 8-й версии драйвера многие действия выполнялись установкой свойств объекта (например, Объект.ReportType = 1), то в 10-й версии используется механизм установки параметров перед вызовом исполняющего метода. Это означает, что мы сначала «наполняем» объект данными, а затем вызываем команду, которая эти данные обрабатывает.
Рассмотрим по шагам процесс инициализации и выполнения команды закрытия смены.
Поскольку 1С 7.7 является 32-битным приложением, крайне важно убедиться, что в системе зарегистрирована 32-битная версия COM-библиотеки (обычно это fptr10_1c_v6.dll). Выясним, как правильно создать объект в коде 1С 7.7:
// Создание объекта драйвера АТОЛ 10
Попытка
Драйвер = СоздатьОбъект("AddIn.Fptr10");
Исключение
Предупреждение("Не удалось создать объект драйвера! Проверьте регистрацию fptr10_1c_v6.dll");
Возврат;
КонецПопытки;
После создания объекта необходимо установить связь с кассой. Мы предполагаем, что параметры связи (порт, скорость) уже настроены в самой утилите драйвера или передаются программно через applySingleSettings().
Хорошим тоном считается проверка текущего состояния ККТ перед попыткой закрыть смену. Это поможет избежать лишних ошибок драйвера, если, например, смена уже была закрыта вручную или вообще не открывалась. Разберем, как получить статус смены:
// Получаем статус смены
Драйвер.getShiftStatus();
СтатусСмены = Драйвер.getParamInt(Драйвер.LIBFPTR_PARAM_SHIFT_STATE);
// Значения статуса:
// 0 - закрыта, 1 - открыта, 2 - истекла
Если СтатусСмены = 0 Тогда
Сообщить("Смена уже закрыта.");
Возврат;
КонецЕсли;
Для выполнения Z-отчета (закрытия смены) в драйвере 10-й версии используется метод report(). Однако перед его вызовом обязательно нужно указать тип отчета. Для закрытия смены используется константа LIBFPTR_RT_CLOSE_SHIFT, код которой равен 2.
Рассмотрим пример полной процедуры закрытия:
// 1. Устанавливаем тип отчета - Закрытие смены
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_REPORT_TYPE, Драйвер.LIBFPTR_RT_CLOSE_SHIFT);
// 2. Запускаем формирование отчета
Если Драйвер.report() <> 0 Тогда
// Если результат не равен 0, значит произошла ошибка
ОписаниеОшибки = Драйвер.errorDescription();
Сообщить("Ошибка при закрытии смены: " + ОписаниеОшибки, "!");
Иначе
Сообщить("Смена успешно закрыта, Z-отчет распечатан.");
КонецЕсли;
Проанализируем ситуацию с новыми кассами АТОЛ. В сообщениях специалистов часто упоминается Платформа 5.0. Это принципиально новая прошивка ККТ, которая не поддерживает работу со старым драйвером 8-й версии. Если вы пытаетесь подключить новую кассу к старой базе 1С 7.7, использование 10-го драйвера становится обязательным.
Важно помнить: в Платформе 5.0 процесс закрытия смены инициирует не только печать бумажного чека, но и принудительную отправку данных в ОФД. Если у кассы есть проблемы с интернетом, команда report() может выполняться дольше обычного или вернуть ошибку, если буфер документов переполнен.
При работе с COM-объектами в 1С 7.7 важно всегда проверять результат выполнения метода. В DTO 10 практически каждый метод возвращает числовой код. Если он не равен нулю, используйте метод errorDescription() для получения текстового пояснения.
Типичные причины ошибок при вызове report():
Хотя в 1С 7.7 работа со строками JSON может показаться избыточной, драйвер АТОЛ 10 поддерживает передачу заданий в формате JSON через метод processJson(). Это позволяет выполнить закрытие смены одной командой, передав структуру вида:
{ "type": "closeShift" }
Этот метод удобен тем, что драйвер берет на себя всю последовательность установки параметров, однако для простых операций, таких как Z-отчет, прямое использование setParam и report() является более прозрачным и надежным для отладки в среде 1С 7.7.
Резюме: Для успешного закрытия смены в 1С 7.7 через АТОЛ 10 необходимо: зарегистрировать 32-битную DLL, инициализировать объект AddIn.Fptr10, установить параметр LIBFPTR_PARAM_REPORT_TYPE в значение LIBFPTR_RT_CLOSE_SHIFT и вызвать метод report().