При попытке внедрить поддержку формата фискальных документов (ФФД) 1.05 в старых конфигурациях 1С (например, Управление торговлей 10.3 на платформе 1С 8.1 или решение на 1С 7.7) разработчики сталкиваются с аппаратными и программными ограничениями. Попытка перенести обновленный модуль работы с торговым оборудованием из свежих релизов 1С 8.3 приводит к ошибкам работы с кассой.
Рассмотрим подробно причины возникновения этой проблемы и разберем проверенные способы её решения.
Проанализируем, почему типовой модуль печати чеков 1.05 отказывается работать со стандартными компонентами под 1С 8.1:
Native API (функция AttachAddIn / ПодключитьВнешнююКомпоненту) появилась только в платформах 1С 8.2 и 8.3. В современных драйверах АТОЛ (ДТО 9 и ДТО 10) основной упор сделан именно на Native API.FprnM1C82_54FZ.dll в составе ДТО 8.16) метод ПолучитьПараметрыККТ возвращает РевизияИнтерфейса = 2001 и не заполняет свойства FFDVersionFN и FFDVersionKKT.Наиболее надежный вариант, позволяющий избежать ограничений библиотек-прокладок от 1С, — прямое взаимодействие с COM-объектом, предоставляемым разработчиком оборудования. В этом случае мы отказываемся от использования стандартного механизма «1С:Торговое оборудование» и обращаемся к методам АТОЛ напрямую.
Посмотрим на алгоритм реализации прямого вызова:
addin_fptr10_x86.dll).regsvr32.exe.
// Для платформы 1С 8.1:
ДрайверККТ = Новый COMОбъект("AddIn.Fptr10");
// Для платформы 1С 7.7:
// ДрайверККТ = СоздатьОбъект("AddIn.Fptr10");
Пример прямого формирования чека через методы драйвера:
ДрайверККТ.setParam(ДрайверККТ.LIBPTR_PARAM_RECEIPT_TYPE, ДрайверККТ.LIBPTR_RT_CLOSED);
ДрайверККТ.openReceipt();
// Добавление позиции с требованиями ФФД 1.05
ДрайверККТ.setParam(ДрайверККТ.LIBPTR_PARAM_POSITION_NAME, "Товар 1");
ДрайверККТ.setParam(ДрайверККТ.LIBPTR_PARAM_PRICE, 100.00);
ДрайверККТ.setParam(ДрайверККТ.LIBPTR_PARAM_QUANTITY, 1);
ДрайверККТ.setParam(ДрайверККТ.LIBPTR_PARAM_TAX_TYPE, ДрайверККТ.LIBPTR_TAX_NO);
ДрайверККТ.registration();
// Закрытие чека
ДрайверККТ.closeReceipt();
Если нет возможности полностью переписывать логику формирования чека на низкоуровневые команды драйвера, можно применить промежуточную COM-обертку (например, специализированную DLL-библиотеку atolwrapper).
Суть этого метода заключается в том, что 1С 8.1 или 7.7 обращается к обертке как к стандартному COM-объекту. Обертка перехватывает эти вызовы и транслирует их во внутренний интерфейс Native API актуального драйвера АТОЛ 9.х или 10.х. Это позволяет сохранить структуру типового кода УТ 10.3 при минимальных точечных изменениях.
Выясним еще один альтернативный вариант работы, который исключает проблемы с DLL-библиотеками и разрядностью платформ. В современные версии ДТО 10 входит служба локального веб-сервера кассового оборудования.
HTTPСоединение и HTTPЗапрос на адрес http://localhost:16732.Если инфраструктура строго ограничена использованием ДТО 8.16, вы можете адаптировать перенесенный из УТ 10.3 код вручную:
РевизияИнтерфейса = 2002.FFDVersionFN и FFDVersionKKT в структуре ответа (эмуляция параметров 1.05).Важно: При использовании этого способа учитывайте ограничения драйвера ДТО 8.16. При работе с некоторыми специфическими операциями (предоплаты, агентские услуги, передача отдельных признаков способа расчета) устаревший драйвер может некорректно передавать теги в ФН, что приводит к ошибкам регистрации чека.