В процессе автоматизации розничной торговли на базе исторической платформы 1С 7.7 специалисты часто сталкиваются с аппаратными ограничениями современных ККМ. Производители торгового оборудования давно прекратили выпуск и поддержку старых внешних компонент по стандарту COM (ActiveX) для устаревших платформ. Все актуальное программное обеспечение ККТ разрабатывается по технологии Native API, которая изначально ориентирована на платформу 1С 8.3.
Ярким примером является популярная ККМ Пионер 114Ф. Официальная интеграционная библиотека AddInPioneer.dll поставляется именно в формате Native API. При попытке зарегистрировать её стандартным системным установщиком regsvr32 или подключить напрямую в семерке разработчик получает критическую ошибку об отсутствии точки входа в библиотеку, а в худшем случае — аварийное завершение работы (падение) платформы 1С. В данной статье мы подробно разберем, как обойти это ограничение и подружить современную кассу Пионер с платформой 1С 7.7.
Для начала проанализируем ситуацию и разберемся, почему возникает конфликт на уровне операционной системы:
ЗагрузитьВнешнююКомпоненту() платформа ожидает, что библиотека зарегистрирована в системном реестре Windows, имеет уникальный идентификатор класса (CLSID) и программный идентификатор (ProgID), а сама DLL-библиотека содержит стандартную функцию саморегистрации DllRegisterServer.regsvr32 выдает ошибку о невозможности найти точку входа.Чтобы решить эту проблему, нам понадобится специальный программный «мост» — транслятор обращений из COM-среды в Native API. В качестве такого моста мы будем использовать популярную универсальную обертку UniversalNativeWrapper.dll.
Рассмотрим подробнее каждый этап подготовки системы и торгового оборудования к совместной работе.
Для успешной реализации схемы нам понадобятся следующие компоненты:
pioneersoftware), которая будет осуществлять непосредственную передачу пакетов данных на кассу.Разместите файлы UniversalNativeWrapper.dll и AddInPioneer.dll в каталоге исполняемых файлов вашей платформы (например, в C:\1CV77\BIN\) или непосредственно в каталоге базы данных (ИБ).
В отличие от самой библиотеки ККМ, библиотеку-обертку необходимо обязательно зарегистрировать в операционной системе Windows. Для этого выполните следующие действия:
regsvr32 "C:\1CV77\BIN\UniversalNativeWrapper.dll"
В случае успешной регистрации на экране появится системное сообщение: "Успешное выполнение DllRegisterServer в UniversalNativeWrapper.dll". Это означает, что в реестре Windows появился необходимый нам класс с ProgID AddIn.UniversalNativeWrapper.
Поскольку касса «Пионер 114Ф» переходит в режим фискального регистратора при удаленном обращении к ней, нам необходимо организовать канал связи:
Теперь перейдем к реализации алгоритма инициализации оборудования в кодовой базе 1С 7.7. Нам нужно сначала загрузить внешнюю компоненту-обертку, затем инициализировать ее как COM-объект, а после этого через специальный метод передать ей управление над оригинальным Native API драйвером ККМ.
Рассмотрим подробный пример программного кода для реализации этой логики:
// Определяем пути к файлам компонент
ПутьКWrapper = КаталогПрограммы() + "UniversalNativeWrapper.dll";
ПутьКДрайверуПионер = КаталогПрограммы() + "AddInPioneer.dll";
// Попытка загрузки внешней компоненты-обертки
Если ЗагрузитьВнешнююКомпоненту(ПутьКWrapper) = 0 Тогда
Предупреждение("Не удалось загрузить компоненту-обертку UniversalNativeWrapper.dll!");
Возврат;
КонецЕсли;
// Создаем COM-объект обертки
Попытка
ДрайверККМ = СоздатьОбъект("AddIn.UniversalNativeWrapper");
Исключение
Предупреждение("Не удалось создать COM-объект AddIn.UniversalNativeWrapper. Проверьте регистрацию DLL в системе.");
Возврат;
КонецПопытки;
// Подгружаем оригинальный Native API драйвер Пионера через методы обертки
// Первый параметр - полный путь к AddInPioneer.dll
// Второй параметр - внутренний идентификатор типа оборудования
Если ДрайверККМ.УстановитьИмяДрайвера(ПутьКДрайверуПионер, "Pioneer") = 1 Тогда
// Если драйвер успешно подгружен, мы можем обращаться к его методам
РевизияИнтерфейса = ДрайверККМ.ПолучитьРевизиюИнтерфейса();
Сообщить("Связь с компонентой Пионер 114Ф успешно установлена. Ревизия драйвера: " + РевизияИнтерфейса);
Иначе
Предупреждение("Ошибка инициализации оригинального драйвера Пионер в обертке!");
КонецЕсли;
При настройке данной схемы взаимодействия могут возникнуть некоторые нюансы, которые мы проанализируем ниже:
AddInPioneer.dll. Если вы случайно взяли x64-версию драйвера из макета конфигурации 1С 8.3, то 32-битная платформа 1С 7.7 мгновенно завершит работу с ошибкой памяти. Используйте строго x86 версию.AddInPioneer.dll. Обязательно контролируйте совместимость версии внутренней прошивки вашего аппарата "Пионер 114Ф" и версии файла драйвера. При их рассинхронизации ККМ может возвращать ошибки при попытке фискализации чека.УстановитьИмяДрайвера() старайтесь передавать абсолютные пути к файлам, используя функции платформы КаталогПрограммы() или КаталогИБ(). Использование относительных путей часто приводит к тому, что обертка не может найти файл драйвера в текущем рабочем каталоге Windows.Применение связки из универсальной COM-обертки и оригинальной Native API библиотеки позволяет вдохнуть вторую жизнь в системы автоматизации на платформе 1С 7.7, позволяя им полноценно работать с современным фискальным оборудованием без необходимости дорогостоящей и сложной миграции всей учетной системы на новые платформы.