При организации интеграции между базами 1С через COM-соединение разработчики нередко сталкиваются с исключением: -2147221005(0x800401F3): Недопустимая строка с указанием класса. Ошибка проявляется в момент вызова конструктора Новый COMОбъект("V83.COMConnector"). Разберем основные причины этой неполадки и подробно рассмотрим шаги по ее устранению.
Выясним, почему операционная система и среда 1С возвращают ошибку недопустимой строки класса:
regsvr32 или не из той разрядной папки.V83.COMConnector в системном реестре всегда ссылается на ту версию сборки 1С, которая была зарегистрирована последней.V82.COMConnector вместо V83.COMConnector).Проанализируем программный код. Часто ошибка возникает из-за выполнения инициализации в неподходящем контексте (например, на 64-битном сервере без настроенной серверной компоненты) или из-за использования системных имен переменных.
Посмотрим на пример правильной инициализации и вызова подключения:
&НаКлиенте
Процедура ПодключитьсяКВнешнейБазе()
// Формируем параметры подключения
ПараметрыПодключения = "Srvr=""MainServer"";Ref=""TargetBase"";Usr=""ComUser"";Pwd=""SecretPassword"";";
Попытка
// Инициализируем COM-коннектор платформы 8.3
V83COMConnector = Новый COMОбъект("V83.COMConnector");
// Выполняем подключение к информационной базе
СоединениеСБазой = V83COMConnector.Connect(ПараметрыПодключения);
Сообщить("Подключение успешно установлено!");
Исключение
Сообщить("Ошибка при подключении к базе через COM: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Обратите внимание: избегайте использования переменной с именем Параметры в качестве аргумента метода Connect(), так как во многих управляемых формах Параметры является зарезервированным системным свойством формы. Всегда используйте явные имена, например ПараметрыПодключения или СтрокаСоединения.
Разберем, как правильно зарегистрировать библиотеку в операционной системе Windows. Регистрацию необходимо выполнять от имени локального администратора через командную строку (cmd), запущенную с повышенными привилегиями.
Для 32-разрядного клиента 1С на 64-битной версии Windows выполним команду:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
Для 64-разрядного клиента или сервера 1С выполним команду:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
где 8.3.XX.XXXX — точный номер релиза установленной у вас платформы 1С.
Рассмотрим наиболее надежный способ организации доступа через COM+, который позволяет беспрепятственно работать обычным пользователям без предоставления им локальных административных прав, а также соединять 32-битные и 64-битные процессы.
dcomcnfg и нажмем Enter.V83_COMConnector) и установим тип приложения: Серверное приложение (Server Application).comcntr.dll нужной разрядности и версии.Если приложение COM+ не используется, а вызов выполняется напрямую, проверим доступ пользователей к разделам системного реестра. Пользователи без административных прав должны обладать правами на чтение следующих веток:
HKEY_CLASSES_ROOT\V83.COMConnectorHKEY_CLASSES_ROOT\CLSID\{GUID_компонента}HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{GUID_компонента} (для 32-разрядных библиотек на 64-битных ОС).Также в оснастке dcomcnfg в свойствах узла Мой компьютер на вкладке Безопасность COM убедимся, что группа «Прошедшие проверку» (Authenticated Users) имеет разрешения на «Локальный запуск» и «Локальную активацию».
Рассмотрим альтернативные способы интеграции, которые рекомендуются фирмой «1С» для современных решений:
HTTPСоединение: универсальный механизм для передачи данных в форматах JSON и XML между любыми информационными системами.