При работе с торговым оборудованием в конфигурации 1С:Управление торговлей 10.3 пользователи часто сталкиваются с проблемой при подключении современных онлайн-касс (ККТ). Типичная ситуация: вы используете свежую обработку обслуживания ShtrihMkkt.epf, пытаетесь зайти в параметры устройства, но система выдает критическую ошибку: "Не удалось загрузить драйвер торгового оборудования". В детальном описании ошибки значится: Тип не определен (AddIn.ИнтеграционнаяКомпонента.SMDrvFR1C22).
В этой статье мы подробно разберем, почему возникает эта ошибка, как платформа 1С взаимодействует с внешними компонентами и какими способами можно восстановить работоспособность драйвера "Штрих-М".
Для начала выясним, на каком этапе происходит сбой. В современных обработках обслуживания (например, в тех, что идут в комплекте с УТ 10.3.47 и выше) механизм подключения драйвера выглядит следующим образом:
Макет = ПолучитьМакет("ИнтеграционнаяКомпонента");
Адрес = ПоместитьВоВременноеХранилище(Макет);
ПодключитьВнешнююКомпоненту(Адрес, "ИнтеграционнаяКомпонента");
Драйвер = Новый("AddIn.ИнтеграционнаяКомпонента.SMDrvFR1C22");
Ошибка Тип не определен означает, что метод ПодключитьВнешнююКомпоненту формально отработал, но объект SMDrvFR1C22 не был зарегистрирован в памяти процесса 1С. Это происходит потому, что платформа пытается использовать старую версию компоненты, которая конфликтует с новой, или не может перезаписать файл компоненты в системном каталоге из-за ограничений прав доступа.
Как показывает практика, наиболее частой причиной проблемы является механизм кэширования внешних компонент платформой 1С. Когда вы вызываете метод ПодключитьВнешнююКомпоненту из макета, 1С распаковывает содержимое макета (библиотеку .dll) в специальную папку на диске. Если там уже лежит файл с таким же именем от старой версии обработки, может возникнуть конфликт.
Рассмотрим пошагово процесс очистки:
%AppData%\1C\1Cv82\ExtCompT (даже если вы используете платформу 8.3, папка может называться 1Cv82 для совместимости).%AppData%\1C\1Cv8\ExtCompT.SMDrvFR).После очистки запустите 1С от имени администратора и попробуйте снова зайти в настройки торгового оборудования. В большинстве случаев этот простой шаг решает проблему.
Если очистка кэша не помогла, проанализируем состояние системных библиотек драйвера "Штрих-М". Интеграционная компонента 1С является "оберткой" над основным драйвером производителя. Для работы версии SMDrvFR1C22 необходимо, чтобы в системе была корректно зарегистрирована библиотека smDrvFR1CLib20.dll.
Выполним регистрацию вручную через командную строку (CMD):
regsvr32 из папки SysWOW64, так как клиент 1С обычно 32-разрядный.
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\Shtrih-M\Drivers15\Bin\smDrvFR1CLib20.dll"
Важный нюанс: Убедитесь, что на компьютере установлены библиотеки Microsoft Visual C++ Redistributable (рекомендуется пакет 2015-2019 x86), так как без них компонента не сможет инициализироваться, даже если она физически присутствует на диске.
Если вы опытный пользователь или программист, можно прибегнуть к более надежному способу — заставить 1С обращаться напрямую к драйверу, установленному в системе, минуя механизм распаковки из макета. Это исключит зависимость от временных папок ExtCompT.
Разберем, как изменить код в функции СоздатьОбъектДрайвера() внутри обработки ShtrihMkkt.epf:
Вместо стандартного блока кода:
Макет = ПолучитьМакет("ИнтеграционнаяКомпонента");
Адрес = ПоместитьВоВременноеХранилище(Макет);
ПодключитьВнешнююКомпоненту(Адрес, "ИнтеграционнаяКомпонента");
Драйвер = Новый("AddIn.ИнтеграционнаяКомпонента.SMDrvFR1C22");
Попробуем использовать прямой вызов зарегистрированного в реестре COM-объекта:
Попытка
ПодключитьВнешнююКомпоненту("AddIn.SMDrvFR1C22");
Драйвер = Новый("AddIn.SMDrvFR1C22");
Исключение
Сообщить("Не удалось загрузить системный драйвер: " + ОписаниеОшибки());
КонецПопытки;
В этом случае 1С будет искать компоненту в реестре Windows. Если драйвер "Штрих-М" установлен штатным инсталлятором, подключение пройдет успешно, и вы больше не будете зависеть от версии библиотеки, зашитой в макет .epf файла.
Выясним еще несколько моментов, которые могут влиять на результат:
AppData и зарегистрировать COM-сервер.ПодключитьВнешнююКомпоненту явно указать тип: ТипВнешнейКомпоненты.Native.Подводя итог, скажем, что наиболее эффективным и быстрым решением является полная очистка папок ExtCompT и повторная регистрация библиотек драйвера через regsvr32. Это устраняет большинство конфликтов, связанных с обновлением версий торгового оборудования в 1С:Управление торговлей 10.3.