Где найти методы драйвера ККТ Атол и почему метод ЗакрытьСмену отсутствует в документации производителя

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При адаптации старых и нетиповых конфигураций 1С для работы с современными онлайн-кассами (например, Атол 55Ф) разработчики часто сталкиваются с путаницей в API. Пытаясь найти документацию по методу вида ОбъектДрайвера.ЗакрытьСмену(...) в официальных руководствах интегратора от компании Атол, программисты не находят таких вызовов. Выясним причину этой проблемы, разберем архитектурные уровни взаимодействия 1С с кассовой техникой и рассмотрим правильные способы отправки команд на ККТ.

Архитектурные различия: стандарт 1С (БПО) и прямой драйвер производителя (ДТО)

Проанализируем структуру взаимодействия 1С и кассового аппарата. Существуют два принципиально разных подхода к интеграции:

  1. Уровень стандарта 1С (Библиотека подключаемого оборудования — БПО): метод ЗакрытьСмену, а также ОткрытьСмену, СформироватьЧек и НапечататьОтчетБезГашения являются методами унифицированного программного интерфейса, разработанного фирмой 1С («Требования к разработке драйверов подключаемого оборудования»). В этом случае 1С обращается к внешней компоненте-обертке, которая транслирует высокоуровневые вызовы и XML-пакеты в низкоуровневые команды конкретного фискального регистратора.
  2. Уровень нативного драйвера Атол (ДТО 10 / fptr10): если обращение к оборудованию происходит напрямую через объект драйвера производителя (например, AddIn.Fptr10), в нем нет высокоуровневого метода ЗакрытьСмену с сигнатурой 1С. В зависимости от поколения драйвера управление сменой и печать отчетов выполняются либо вызовом специализированных методов (openShift, fnReport), либо передачей структурированных JSON-заданий через метод processJson.

Вариант 1. Использование интерфейса стандарта 1С (БПО)

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


Результат = ОбъектДрайвера.ЗакрытьСмену(ИДУстройства, Кассир, НомерСмены, НомерДокумента);

Разберем назначение передаваемых параметров:

  1. ИДУстройства — строковый или числовой идентификатор подключенного экземпляра оборудования, полученный при открытии сессии с устройством.
  2. Кассир — строка с ФИО и должностью ответственного лица, выполняющего операцию закрытия смены (тег 1021).
  3. НомерСмены — выходной параметр, в который драйвер возвращает номер закрытой смены.
  4. НомерДокумента — выходной параметр, принимающий номер фискального документа (Z-отчета) из фискального накопителя.

Посмотрим на практический пример вызова метода закрытия смены с обработкой результата:


НомерСмены = 0;
НомерДокумента = 0;
ИмяКассира = "Иванов И.И., Администратор";

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

Если Результат Тогда
    Сообщить("Смена успешно закрыта. Номер смены: " + Строка(НомерСмены) + ", Номер ФД: " + Строка(НомерДокумента));
Иначе
    ОписаниеОшибки = "";
    ОбъектДрайвера.ПолучитьОшибку(ОписаниеОшибки);
    ВызватьИсключение "Ошибка закрытия смены: " + ОписаниеОшибки;
КонецЕсли;

Вариант 2. Прямая работа через нативный драйвер Атол ДТО 10 (JSON-задания)

Если старая конфигурация не содержит механизмов БПО и вы интегрируете кассу напрямую через драйвер Атол 10-й версии (ДТО 10), самым надежным и современным способом является передача заданий через метод processJson. Драйвер самостоятельно формирует реквизиты в соответствии с ФФД и управляет протоколом обмена с кассой.

Разберем пример прямого закрытия смены через объект AddIn.Fptr10:


Драйвер = Новый COMОбъект("AddIn.Fptr10");

// Устанавливаем соединение с кассой
Драйвер.setSingleSetting(Драйвер.LIBFPTR_SETTING_MODEL, Строка(Драйвер.LIBFPTR_MODEL_ATOL_55F));
Драйвер.setSingleSetting(Драйвер.LIBFPTR_SETTING_PORT, Строка(Драйвер.LIBFPTR_PORT_USB));
Драйвер.applySingleSettings();
Драйвер.open();

Если Драйвер.isOpened() Тогда
    // Формируем JSON-задание на закрытие смены (Z-отчет)
    ТекстJSON = 
    "{" +
    "  ""type"": ""closeShift""," +
    "  ""operator"": {" +
    "    ""name"": ""Иванов И.И.""," +
    "    ""vatin"": ""123456789012""" +
    "  }" +
    "}";
    
    // Передаем задание в метод драйвера
    Драйвер.setParam(Драйвер.LIBFPTR_PARAM_JSON_DATA, ТекстJSON);
    Драйвер.processJson();
    
    // Проверяем результат выполнения
    Если Драйвер.errorCode() = 0 Тогда
        Сообщить("Смена на ККТ Атол успешно закрыта.");
    Иначе
        Сообщить("Ошибка ККТ: " + Драйвер.errorDescription());
    КонецЕсли;
    
    Драйвер.close();
КонецЕсли;

Возможные ошибки и практические рекомендации при адаптации

Проанализируем ключевые моменты, на которые необходимо обратить внимание при доработке конфигурации:

  1. Несоответствие разрядности платформы 1С и драйвера: разрядность клиента 1С (32-bit или 64-bit) должна строго совпадать с разрядностью установленной библиотеки драйвера ККТ. Попытка вызвать 32-битный COM-объект из 64-битного сеанса 1С приведет к ошибке инициализации компоненты.
  2. Блокировка COM/USB-порта: если порт ККТ занят утилитой «Тест драйвера ККТ» или другой запущенной сессией, попытка открытия соединения вернет ошибку недоступности порта.
  3. Требования форматов фискальных данных (ФФД): при прямой печати документов нельзя смешивать произвольные нефискальные команды с открытым фискальным чеком. Все служебные данные (например, печать штрихкодов или маркировки) должны передаваться строго по спецификации ФФД в соответствующих реквизитах чека.
  4. Выбор способа подключения внешней компоненты: для исключения зависимости от регистрации COM-объектов в реестре Windows рекомендуется использовать кроссплатформенный механизм Native API платформы 1С с помощью функции ПодключитьВнешнююКомпоненту.
← На главную