Как исправить ошибку Тип не определен (AddIn.ИнтеграционнаяКомпонента.SMDrvFR1C22) в 1С:УТ 10.3

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

При работе с торговым оборудованием в конфигурации 1С:Управление торговлей 10.3 пользователи часто сталкиваются с проблемой при подключении современных онлайн-касс (ККТ). Типичная ситуация: вы используете свежую обработку обслуживания ShtrihMkkt.epf, пытаетесь зайти в параметры устройства, но система выдает критическую ошибку: "Не удалось загрузить драйвер торгового оборудования". В детальном описании ошибки значится: Тип не определен (AddIn.ИнтеграционнаяКомпонента.SMDrvFR1C22).

В этой статье мы подробно разберем, почему возникает эта ошибка, как платформа 1С взаимодействует с внешними компонентами и какими способами можно восстановить работоспособность драйвера "Штрих-М".

Проанализируем причину возникновения ошибки

Для начала выясним, на каком этапе происходит сбой. В современных обработках обслуживания (например, в тех, что идут в комплекте с УТ 10.3.47 и выше) механизм подключения драйвера выглядит следующим образом:


Макет = ПолучитьМакет("ИнтеграционнаяКомпонента");
Адрес = ПоместитьВоВременноеХранилище(Макет);
ПодключитьВнешнююКомпоненту(Адрес, "ИнтеграционнаяКомпонента"); 
Драйвер = Новый("AddIn.ИнтеграционнаяКомпонента.SMDrvFR1C22");

Ошибка Тип не определен означает, что метод ПодключитьВнешнююКомпоненту формально отработал, но объект SMDrvFR1C22 не был зарегистрирован в памяти процесса 1С. Это происходит потому, что платформа пытается использовать старую версию компоненты, которая конфликтует с новой, или не может перезаписать файл компоненты в системном каталоге из-за ограничений прав доступа.

Решение 1: Очистка локального кэша внешних компонент (ExtCompT)

Как показывает практика, наиболее частой причиной проблемы является механизм кэширования внешних компонент платформой 1С. Когда вы вызываете метод ПодключитьВнешнююКомпоненту из макета, 1С распаковывает содержимое макета (библиотеку .dll) в специальную папку на диске. Если там уже лежит файл с таким же именем от старой версии обработки, может возникнуть конфликт.

Рассмотрим пошагово процесс очистки:

  1. Полностью закройте все сеансы 1С:Предприятия.
  2. Перейдите в каталог данных приложений пользователя. Обычно он находится по пути: %AppData%\1C\1Cv82\ExtCompT (даже если вы используете платформу 8.3, папка может называться 1Cv82 для совместимости).
  3. Проверьте также путь: %AppData%\1C\1Cv8\ExtCompT.
  4. Найдите внутри этих папок файлы, связанные с драйвером Штрих-М (например, библиотеки с именами, содержащими SMDrvFR).
  5. Удалите содержимое папки ExtCompT. Не бойтесь удалять эти файлы — при следующем запуске 1С автоматически пересоздаст их из макета обработки обслуживания.

После очистки запустите 1С от имени администратора и попробуйте снова зайти в настройки торгового оборудования. В большинстве случаев этот простой шаг решает проблему.

Решение 2: Ручная регистрация библиотек в операционной системе

Если очистка кэша не помогла, проанализируем состояние системных библиотек драйвера "Штрих-М". Интеграционная компонента 1С является "оберткой" над основным драйвером производителя. Для работы версии SMDrvFR1C22 необходимо, чтобы в системе была корректно зарегистрирована библиотека smDrvFR1CLib20.dll.

Выполним регистрацию вручную через командную строку (CMD):

  1. Запустите командную строку от имени администратора.
  2. Если у вас 64-разрядная Windows, используйте версию regsvr32 из папки SysWOW64, так как клиент 1С обычно 32-разрядный.
  3. Введите команду:
    
    C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\Shtrih-M\Drivers15\Bin\smDrvFR1CLib20.dll"
    
    (Путь к файлу может отличаться в зависимости от версии установленного драйвера Штрих-М).
  4. Должно появиться сообщение об успешной регистрации модуля.

Важный нюанс: Убедитесь, что на компьютере установлены библиотеки Microsoft Visual C++ Redistributable (рекомендуется пакет 2015-2019 x86), так как без них компонента не сможет инициализироваться, даже если она физически присутствует на диске.

Решение 3: Изменение кода инициализации в обработке обслуживания

Если вы опытный пользователь или программист, можно прибегнуть к более надежному способу — заставить 1С обращаться напрямую к драйверу, установленному в системе, минуя механизм распаковки из макета. Это исключит зависимость от временных папок ExtCompT.

Разберем, как изменить код в функции СоздатьОбъектДрайвера() внутри обработки ShtrihMkkt.epf:

Вместо стандартного блока кода:


Макет = ПолучитьМакет("ИнтеграционнаяКомпонента");
Адрес = ПоместитьВоВременноеХранилище(Макет);
ПодключитьВнешнююКомпоненту(Адрес, "ИнтеграционнаяКомпонента"); 
Драйвер = Новый("AddIn.ИнтеграционнаяКомпонента.SMDrvFR1C22");

Попробуем использовать прямой вызов зарегистрированного в реестре COM-объекта:


Попытка
    ПодключитьВнешнююКомпоненту("AddIn.SMDrvFR1C22");
    Драйвер = Новый("AddIn.SMDrvFR1C22");
Исключение
    Сообщить("Не удалось загрузить системный драйвер: " + ОписаниеОшибки());
КонецПопытки;

В этом случае 1С будет искать компоненту в реестре Windows. Если драйвер "Штрих-М" установлен штатным инсталлятором, подключение пройдет успешно, и вы больше не будете зависеть от версии библиотеки, зашитой в макет .epf файла.

Дополнительные рекомендации

Выясним еще несколько моментов, которые могут влиять на результат:

Подводя итог, скажем, что наиболее эффективным и быстрым решением является полная очистка папок ExtCompT и повторная регистрация библиотек драйвера через regsvr32. Это устраняет большинство конфликтов, связанных с обновлением версий торгового оборудования в 1С:Управление торговлей 10.3.

← На главную