Как правильно подключить внешнюю компоненту драйвера Штрих-М в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Торговля и дистрибуция
← На главную

При попытке самостоятельной интеграции торгового оборудования «Штрих-М» через внешние библиотеки smDrvFR1CLib.dll и smDrvFR1CLib20.dll разработчики часто сталкиваются с ошибками инициализации объекта. Платформа 1С выбрасывает исключение при попытке создания драйвера через конструктор Новый, либо метод загрузки компоненты завершается с ошибкой. Разберем по шагам, как устроен механизм взаимодействия с этими библиотеками, выясним причины сбоев и рассмотрим правильные варианты подключения фискального регистратора.

Анализ причин сбоя при вызове драйвера

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

  1. Неверный программный идентификатор (ProgID). Библиотека smDrvFR1CLib20.dll регистрирует в реестре операционной системы объект с именем AddIn.SMDrvFR1C20, а не AddIn.smDrvFR1CLib20. Перепутав регистр или имя класса, разработчик получает аварийное завершение по исключению «Класс не зарегистрирован».
  2. Отсутствие регистрации COM-объекта в системе. Динамические библиотеки стандарта COM требуют обязательной записи информации о сервере автоматизации в системный реестр Windows (ветка HKEY_CLASSES_ROOT).
  3. Разрядность процесса 1С и библиотек. Большинство старых драйверов «Штрих-М» (включая ветку 4.13) являются 32-разрядными (x86). Если клиентское приложение 1С запущено в 64-битной версии (x86-64), оно физически не может загрузить 32-битную DLL внутри своего адресного пространства.
  4. Ограничения прав доступа в современных ОС. Начиная с Windows 8 и выше, служба контроля учетных записей (UAC) блокирует автоматическую регистрацию библиотек при установке или ручном запуске без прав администратора.

Шаг 1. Корректная регистрация 32-битной библиотеки в Windows

Выясним, как правильно зарегистрировать DLL-файлы драйвера в современных 64-разрядных операционных системах (Windows 8, 8.1, 10, 11). Для 32-разрядных COM-серверов необходимо использовать специальную версию утилиты regsvr32.exe, расположенную в системном каталоге SysWOW64.

Разберем по шагам процесс регистрации:

  1. Откройте меню «Пуск», найдите приложение «Командная строка» (cmd.exe) и запустите его от имени Администратора.
  2. Выполните команду регистрации, указав точный путь к 32-разрядному серверу регистрации и целевой библиотеке:

C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\smDrvFR1CLib20.dll"

После успешного выполнения на экране появится диалоговое окно с подтверждением успешной регистрации точки входа DllRegisterServer. Теперь запись AddIn.SMDrvFR1C20 появится в реестре Windows.

Шаг 2. Программное подключение и инициализация в коде 1С

Рассмотрим подробнее, как обратиться к объекту драйвера из кода 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-библиотек не требуется и не рекомендуется. В конфигурацию уже встроен механизм БПО, берущий на себя всю рутину по управлению драйверами.

Разберем стандартный алгоритм подключения кассы:

  1. Перейдите в раздел «Настройки» (или «Администрирование») -> «Подключаемое оборудование».
  2. Откройте список «Драйверы оборудования» и загрузите актуальный архив сертифицированного драйвера «Штрих-М:ККТ с передачей данных».
  3. В разделе «ККТ с передачей данных» добавьте новый экземпляр устройства, выбрав установленный драйвер.
  4. Нажмите кнопку «Настроить» и укажите параметры связи (порт, скорость обмена, пароли доступа).

При использовании БПО платформа автоматически распаковывает и подключает необходимые компоненты (включая современные компоненты Native API, которые не требуют регистрации через regsvr32 и корректно работают как в 32-разрядных, так и в 64-разрядных версиях клиента 1С).

← На главную