При разработке или доработке конфигураций 1С часто возникает задача интеграции торгового оборудования, в частности кассовых аппаратов (ККТ) «Штрих-М». Несмотря на наличие готовых библиотек в типовых решениях (БСП), в самописных конфигурациях разработчики нередко сталкиваются с трудностями при подключении внешних компонент. Ошибки типа «Тип не определен» или «Недопустимая строка с указанием класса» могут поставить в тупик даже опытного программиста. Разберем детально, почему возникают эти проблемы и как их решить двумя основными способами.
Проанализируем типичную ситуацию. Разработчик берет драйвер из типовой конфигурации (например, «Бухгалтерия предприятия 3.0»), упаковывает его в архив с манифестом, загружает в макет и пытается подключить через УстановитьВнешнююКомпоненту. Система сообщает об успешной установке, файл DLL появляется в папке AppData, но при попытке создания объекта Новый("AddIn.FR") возникает ошибка.
Выясним причину такого поведения. Основная сложность заключается в смешивании двух разных технологий: COM и Native API. Если компонента написана по технологии COM, она требует обязательной регистрации в реестре Windows. Если же используется Native API, регистрация не нужна, но крайне важно соблюсти структуру манифеста и правильно обращаться к внутренним именам классов компоненты.
Рассмотрим наиболее надежный для самописных конфигураций способ, который помог автору темы. Этот метод основан на использовании объекта COMОбъект. Важно понимать, что для работы этого метода драйвер должен быть физически установлен в операционной системе с помощью штатного инсталлятора от производителя.
Выполним следующие шаги:
DrvFR.dll в реестре вручную через regsvr32, если это не произошло автоматически.Посмотрим на пример кода, который инициализирует объект драйвера:
// Попытка прямого создания COM-объекта
Попытка
ФР = Новый COMОбъект("AddIn.DrvFR");
// Если объект создан успешно, можно вызывать его методы
ФР.Password = 30; // Пароль администратора по умолчанию
ФР.Connect();
Если ФР.ResultCode <> 0 Тогда
Сообщить("Ошибка подключения: " + ФР.ResultCodeDescription);
КонецЕсли;
Исключение
Сообщить("Не удалось создать объект драйвера: " + ОписаниеОшибки());
КонецПопытки;
Важный нюанс: Ошибка «Недопустимая строка с указанием класса» с кодом 0x800401F3 однозначно указывает на то, что ProgID AddIn.DrvFR не найден в реестре Windows. Это происходит либо из-за отсутствия регистрации DLL, либо из-за конфликта разрядности.
Теперь разберем более современный подход, который не требует ручной регистрации библиотек в системе. Этот способ предпочтителен для распределенных систем, так как 1С сама доставляет нужные файлы на компьютер пользователя из общего макета.
Проанализируем последовательность действий для этого метода:
manifest.xml и файлы DLL для разных архитектур (x86 и x64).ПодключитьВнешнююКомпоненту, указывая путь к макету и локальный псевдоним.Рассмотрим правильный код подключения:
// 1. Устанавливаем компоненту из макета в профиль пользователя
РезультатУстановки = УстановитьВнешнююКомпоненту("ОбщийМакет.ДрайверШтрихМ");
Если РезультатУстановки Тогда
// 2. Подключаем компоненту. Вторым параметром задаем имя группы (псевдоним)
РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверШтрихМ", "Shtrih", ТипВнешнейКомпоненты.Native);
Если РезультатПодключения Тогда
// 3. Создаем объект. Обратите внимание на синтаксис обращения!
// "AddIn.Псевдоним.ИмяКлассаИзМанифеста"
Попытка
ФР = Новый("AddIn.Shtrih.ShtrihMDRV");
// Имя класса ShtrihMDRV должно быть прописано в манифесте
Исключение
Сообщить("Тип не определен: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЕсли;
Выясним причину, по которой даже при РезультатПодключения = Истина создание объекта через Новый() может завершаться ошибкой.
Во-первых, это несоответствие имен в манифесте. Откроем файл manifest.xml внутри архива. Найдем узел component. Атрибут object в этом узле — это и есть то самое имя, которое нужно указывать после псевдонима. Если в манифесте написано object="Driver", а вы пишете Новый("AddIn.Shtrih.FR"), система выдаст ошибку.
Во-вторых, это структура архива. Платформа 8.3 крайне чувствительна к расположению файлов. Все DLL и манифест должны лежать в корне ZIP-архива, без лишних вложенных папок.
Рассмотрим несколько приемов, которые помогут вам быстрее найти неисправность:
HKEY_CLASSES_ROOT\AddIn.DrvFR. Если её нет — regsvr32 вам в помощь.УстановитьВнешнююКомпоненту файлы копируются в %AppData%\Roaming\1C\1cv8\ExtCompT. Посмотрите, появился ли там ваш файл DrvFR.dll и правильно ли он прописан в registry.xml этой папки.Подводя итог, можно сказать, что для стабильной работы с кассами «Штрих-М» в самописных конфигурациях проще всего установить официальный драйвер в систему и использовать Новый COMОбъект("AddIn.DrvFR"). Если же требуется автономность и установка из макета, необходимо тщательно выверить содержимое manifest.xml и использовать технологию Native API с корректным указанием программного идентификатора.