В этой статье мы рассмотрим, как подойти к решению сложной, но распространенной задачи: подключение современного драйвера фискального регистратора АТОЛ версии 10.x к устаревшей или сильно модифицированной конфигурации 1С. Часто такие конфигурации не имеют актуальной Библиотеки Подключаемого Оборудования (БПО), используют старые стандарты или даже жестко прописывают драйверы, что препятствует прямому обновлению. Мы проанализируем различные сценарии и предложим возможные пути решения, включая обновление БПО, работу через COM-объект и использование дополнительных компонентов-посредников.
Исходная ситуация, с которой столкнулся пользователь, заключается в невозможности установить связь между 1С и кассовым аппаратом после перепрошивки ККТ. Это типичная проблема, когда в системе установлен новый драйвер АТОЛ (например, версии 10.10.6.0), но конфигурация 1С ожидает старую версию (например, 9.12.3.6332).
В старых отраслевых конфигурациях, таких как стоматологическая, проблема усугубляется тем, что стандартные механизмы 1С для работы с подключаемым оборудованием могут быть либо устаревшими, либо полностью отсутствовать. Например, вместо современного справочника ДрайвераОборудования, драйвер может быть "хардкодом прописан" в коде или храниться в макетах конфигурации.
Попытка просто обновить макет с новым драйвером, как показал опыт автора, часто оказывается безуспешной. Метод ПодключитьВнешнююКомпоненту() может возвращать Ложь, поскольку сама конфигурация не содержит методов для взаимодействия с новой компонентой или ожидает иную структуру драйвера. Это означает, что даже если мы успешно добавим новый макет, конфигурация просто не "поймет", как с ним работать.
Прежде чем перейти к решениям, давайте разберемся в архитектуре взаимодействия 1С с ККТ АТОЛ.
Современные конфигурации 1С используют Библиотеку подключаемого оборудования (БПО) для унификации работы с торговым оборудованием. БПО предоставляет единый интерфейс и справочники для настройки и управления различными типами устройств, включая ККТ. Она позволяет подключать внешние компоненты драйверов, которые соответствуют определенным стандартам 1С (например, версии 2.x, 3.x).
Однако в старых конфигурациях БПО может быть устаревшей или отсутствовать вовсе, что делает прямое подключение новых драйверов через стандартные механизмы невозможным. Именно с такой ситуацией мы сталкиваемся, когда конфигурация не имеет справочника ДрайвераОборудования.
Драйверы АТОЛ версии 10.x имеют двухкомпонентную структуру. Они состоят из:
.dll или .zip с компонентами), которая поставляется в составе конфигурации 1С или скачивается отдельно. Ее задача — перенаправлять вызовы из 1С к основной поставке драйвера АТОЛ, переводя их на понятный для драйвера язык.
Важно понимать, что для корректной работы требуются обе части, и они должны быть совместимы как между собой, так и со стандартом БПО, используемым в вашей конфигурации 1С. Если конфигурация ожидает устаревший стандарт (например, 2.х), а интеграционная компонента соответствует новому (3.4+), то взаимодействие нарушается.
Это наиболее правильный и поддерживаемый вендором путь, но он часто требует значительных усилий по обновлению самой конфигурации 1С, что не всегда приемлемо для древних или сильно модифицированных решений. Тем не менее, мы рассмотрим его как идеальный сценарий.
НСИ и администрирование -> РМК и оборудование -> Подключаемое оборудование мы сможем выбрать тип ККТ с передачей данных и указать драйвер АТОЛ:ККТ с передачей данных в ОФД (54-ФЗ) 10.Х. Далее необходимо настроить параметры подключения (COM-порт, USB или Ethernet) и провести тест связи.
Когда обновление БПО и конфигурации 1С не представляется возможным или слишком трудозатратно, наиболее гибким и часто применяемым решением является работа с драйвером АТОЛ 10.x через COM-объект. Этот подход позволяет обойти стандартные механизмы БПО 1С и напрямую взаимодействовать с установленным драйвером АТОЛ на уровне операционной системы.
Новый COMОбъект(), передав в него ProgID компоненты драйвера АТОЛ. Для ДТО 10 это обычно "AddIn.Fptr10".
Попытка
fptr = Новый COMОбъект("AddIn.Fptr10");
Сообщить("COM-объект драйвера АТОЛ создан успешно.");
Исключение
Сообщить("Ошибка создания COM-объекта драйвера АТОЛ: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
setSingleSetting с соответствующими константами драйвера, которые можно найти в документации к ДТО АТОЛ.
// Пример настройки подключения по USB
fptr.setSingleSetting(fptr.LIBFPTR_SETTING_PORT, fptr.LIBFPTR_PORT_USB);
// Пример настройки подключения по COM-порту (COM1)
// fptr.setSingleSetting(fptr.LIBFPTR_SETTING_PORT, fptr.LIBFPTR_PORT_COM);
// fptr.setSingleSetting(fptr.LIBFPTR_SETTING_COM_NUMBER, 1); // Номер COM-порта
// fptr.setSingleSetting(fptr.LIBFPTR_SETTING_BAUDRATE, fptr.LIBFPTR_BAUDRATE_115200); // Скорость
// Пример настройки подключения по Ethernet/TCP
// fptr.setSingleSetting(fptr.LIBFPTR_SETTING_PORT, fptr.LIBFPTR_PORT_TCP);
// fptr.setSingleSetting(fptr.LIBFPTR_SETTING_IPADDRESS, "192.168.0.10"); // IP адрес ККТ
// fptr.setSingleSetting(fptr.LIBFPTR_SETTING_IPPORT, 5555); // Порт ККТ
fptr.applySingleSettings(); // Применить настройки
Сообщить("Настройки подключения применены.");
open().
Если НЕ fptr.open() Тогда
Сообщить("Ошибка открытия соединения с ККТ: " + fptr.errorCode() + " - " + fptr.errorDescription());
Возврат;
КонецЕсли;
Сообщить("Соединение с ККТ установлено.");
// Пример снятия X-отчета
Если НЕ fptr.setOperationType(fptr.LIBFPTR_OPERATION_REPORT_X) Тогда
Сообщить("Ошибка установки типа операции (X-отчет): " + fptr.errorDescription());
ИначеЕсли НЕ fptr.report() Тогда
Сообщить("Ошибка снятия X-отчета: " + fptr.errorDescription());
Иначе
Сообщить("X-отчет успешно снят.");
КонецЕсли;
fptr.close();
Сообщить("Соединение с ККТ закрыто.");
Для реализации этого подхода вам потребуется обратиться к документации по Fptr (АТОЛ ДТО 10) для получения полного списка доступных методов, свойств и констант. На сайте Инфостарт можно найти готовые внешние обработки, которые реализуют работу с драйвером АТОЛ 10 через COM-объект, что может послужить отличной отправной точкой для вашей адаптации.
В случаях, когда конфигурация 1С работает на очень старых платформах (например, 7.7, 8.0, 8.1, 8.2) и даже COM-объект напрямую вызывать затруднительно из-за архитектурных ограничений или сложности адаптации, могут применяться специализированные драйверы-посредники.
Например, существует драйвер "Клиент ККТ", реализованный по технологии COM, который через "Сервер ККТ" может взаимодействовать с современными драйверами ККТ (версии 3.х и выше) по технологии NativeAPI. "Сервер ККТ" выступает в роли конвертера, преобразуя команды из старого формата 1С в новый формат, понятный современным драйверам, и обратно. Этот метод позволяет значительно расширить совместимость, но требует установки и настройки дополнительных программных компонентов.
Также сторонние разработчики создают внешние компоненты-оболочки, адаптированные для работы с последними драйверами АТОЛ (начиная с 9.x и 10.x) для старых версий 1С, которые могут быть подключены как внешние компоненты и предоставлять упрощенный набор методов. Этот вариант требует поиска и адаптации сторонних решений, что может быть сопряжено с определенными рисками.
При работе с подключением ККТ и драйверами АТОЛ, обратите внимание на следующие важные моменты:
Решение проблемы подключения драйвера АТОЛ к старой конфигурации 1С требует комплексного подхода и тщательного анализа архитектуры вашей системы. Выбор оптимального пути зависит от степени готовности к изменениям в конфигурации, используемой версии платформы 1С и требуемой функциональности.