При попытке самостоятельной интеграции торгового оборудования «Штрих-М» через внешние библиотеки smDrvFR1CLib.dll и smDrvFR1CLib20.dll разработчики часто сталкиваются с ошибками инициализации объекта. Платформа 1С выбрасывает исключение при попытке создания драйвера через конструктор Новый, либо метод загрузки компоненты завершается с ошибкой. Разберем по шагам, как устроен механизм взаимодействия с этими библиотеками, выясним причины сбоев и рассмотрим правильные варианты подключения фискального регистратора.
Проанализируем типичную последовательность действий, которая приводит к ошибке:
smDrvFR1CLib20.dll регистрирует в реестре операционной системы объект с именем AddIn.SMDrvFR1C20, а не AddIn.smDrvFR1CLib20. Перепутав регистр или имя класса, разработчик получает аварийное завершение по исключению «Класс не зарегистрирован».HKEY_CLASSES_ROOT).Выясним, как правильно зарегистрировать DLL-файлы драйвера в современных 64-разрядных операционных системах (Windows 8, 8.1, 10, 11). Для 32-разрядных COM-серверов необходимо использовать специальную версию утилиты regsvr32.exe, расположенную в системном каталоге SysWOW64.
Разберем по шагам процесс регистрации:
cmd.exe) и запустите его от имени Администратора.
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\smDrvFR1CLib20.dll"
После успешного выполнения на экране появится диалоговое окно с подтверждением успешной регистрации точки входа DllRegisterServer. Теперь запись AddIn.SMDrvFR1C20 появится в реестре Windows.
Рассмотрим подробнее, как обратиться к объекту драйвера из кода 1С:Предприятия. Метод ЗагрузитьВнешнююКомпоненту() является устаревшим и использовался в более ранних версиях платформы. Для управляемого приложения рекомендуется использовать современные конструкции.
Вариант 1. Инициализация через зарегистрированный COM-объект:
Если библиотека успешно зарегистрирована в реестре, создаем экземпляр объекта напрямую через ProgID:
Попытка
// Создаем объект фискального регистратора по точному ProgID
Драйвер = Новый COMОбъект("AddIn.SMDrvFR1C20");
Исключение
Попытка
// Резервный вызов базового COM-объекта драйвера Штрих-М
Драйвер = Новый COMОбъект("AddIn.DrvFR");
Исключение
ВызватьИсключение "Не удалось инициализировать драйвер ККТ: " + ОписаниеОшибки();
КонецПопытки;
КонецПопытки;
Вариант 2. Прямое подключение библиотеки без предварительной регистрации в реестре:
Платформа 1С позволяет динамически подключить DLL-файл в сеансе пользователя с помощью метода ПодключитьВнешнююКомпоненту(), указав тип компоненты:
ПутьКБиблиотеке = "C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\smDrvFR1CLib20.dll";
Если ПодключитьВнешнююКомпоненту(ПутьКБиблиотеке, "ShtrihDriver", ТипВнешнейКомпоненты.COM) Тогда
Попытка
Драйвер = Новый("AddIn.ShtrihDriver.SMDrvFR1C20");
Исключение
Сообщить("Ошибка создания объекта драйвера: " + ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Не удалось загрузить внешнюю компоненту из файла!");
КонецЕсли;
При использовании устаревших версий библиотек (например, из поставки драйвера 4.13) часто возникает проблема невозможности оформить операцию «Возврат чека». Проанализируем причину этой ошибки.
В фискальных регистраторах старого образца использовался классический механизм чеков продажи и возврата продажи. В современных онлайн-ККТ, работающих с фискальными накопителями по форматам фискальных данных (ФФД 1.05, 1.1, 1.2), операция классифицируется как «Возврат прихода» и требует передачи обязательных реквизитов (тегов), которые драйвер версии 4.13 формировать не умеет. Попытка вызова устаревших команд приводит к аппаратной ошибке кассы: «Команда не поддерживается в данном режиме».
Для корректного пробития возвратов чеков необходимо обновить драйвер производителя «Штрих-М» до актуальных версий (линейка 4.14, 4.15 или единый драйвер версии 5.x) и выполнить обновление прошивки ККТ под актуальные требования законодательства.
В таких типовых конфигурациях, как «1С:Управление нашей фирмой» (1С:УНФ), ручное написание кода инициализации низкоуровневых COM-библиотек не требуется и не рекомендуется. В конфигурацию уже встроен механизм БПО, берущий на себя всю рутину по управлению драйверами.
Разберем стандартный алгоритм подключения кассы:
При использовании БПО платформа автоматически распаковывает и подключает необходимые компоненты (включая современные компоненты Native API, которые не требуют регистрации через regsvr32 и корректно работают как в 32-разрядных, так и в 64-разрядных версиях клиента 1С).