При интеграции 1С с внешними программами и сервисами разработчики часто сталкиваются с ситуацией, когда метод ПодключитьВнешнююКомпоненту возвращает Ложь, а попытки предварительной установки через УстановитьВнешнююКомпоненту приводят к ошибкам модальности или сообщениям о сбое установки. Разберем по шагам, почему возникают подобные проблемы в тонком клиенте на управляемых формах, и рассмотрим правильные варианты подключения внешних библиотек.
Проанализируем технические нюансы взаимодействия платформы 1С:Предприятие с внешними динамическими библиотеками:
ПодключитьВнешнююКомпоненту в этом случае без дополнительных сообщений об ошибке возвращает Ложь.УстановитьВнешнююКомпоненту вызывает исключение «Использование модальных окон в данном режиме запрещено!».УстановитьВнешнююКомпоненту и НачатьУстановкуВнешнейКомпоненты платформы 1С требуют, чтобы в макете находился не «сырой» файл DLL, а специальный ZIP-архив с манифестом MANIFEST.xml, описывающим модули, архитектуру и типы внешних компонент (Native API или COM). Если передать путь к обычному файлу DLL, платформа вернет ошибку «установка внешней компоненты не выполнена».ПодключитьВнешнююКомпоненту предназначен исключительно для библиотек, реализующих специализированные интерфейсы 1С (IInitDone, ILanguageExtender). Если библиотека является классическим Automation/COM-сервером Windows, ее не нужно подключать как компоненту 1С — работа с ней выполняется через создание COM-объекта.regsvr32.Убедимся, что разрядность клиентского приложения 1С совпадает с разрядностью DLL-файла. Если библиотека 32-битная, тонкий клиент необходимо запускать из каталога 32-разрядных программ:
C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\1cv8c.exe
Также проверим свойства файла DLL в Проводнике Windows. Если в нижней части окна свойств отображается предупреждение «Этот файл был получен с другого компьютера и, возможно, был заблокирован с целью защиты», установим флажок Разблокировать (Unblock) и нажмем кнопку Применить.
Для работы с библиотекой по технологии COM выполним ее регистрацию в системном реестре Windows. Запустим командную строку от имени Администратора и выполним команду:
regsvr32 "c:\ProgramData\Medoc\Medoc\medoc1c.dll"
В случае успешной регистрации появится системное сообщение об успешном выполнении DllRegisterServer.
Если библиотека разработана по стандарту внешних компонент 1С и уже зарегистрирована в системе, ее можно подключить напрямую из файловой системы на клиенте:
&НаКлиенте
Процедура ПодключитьКомпонентуКлиент()
ПутьКФайлу = "c:\ProgramData\Medoc\Medoc\medoc1c.dll";
// Подключаем зарегистрированную COM-компоненту
Подключено = ПодключитьВнешнююКомпоненту(ПутьКФайлу, "Medoc1C", ТипВнешнейКомпоненты.COM);
Если Подключено Тогда
Попытка
ОбъектКомпоненты = Новый("AddIn.Medoc1C");
// Работа с методами компоненты
Исключение
Сообщить("Ошибка создания объекта компоненты: " + ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Не удалось подключить внешнюю компоненту по указанному пути.");
КонецЕсли;
КонецПроцедуры
Если используется асинхронный вызов для работы в режиме без модальных окон:
&НаКлиенте
Асинх Процедура ПодключитьКомпонентуАсинхронно()
ПутьКФайлу = "c:\ProgramData\Medoc\Medoc\medoc1c.dll";
Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх(ПутьКФайлу, "Medoc1C", ТипВнешнейКомпоненты.COM);
Если Подключено Тогда
Попытка
ОбъектКомпоненты = Новый("AddIn.Medoc1C");
// Вызов методов компоненты
Исключение
Сообщить("Ошибка инициализации объекта: " + ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Не удалось асинхронно подключить компоненту.");
КонецЕсли;
КонецПроцедуры
Если библиотека представляет собой стандартный COM-сервер автоматизации (Automation Server), подключать ее через ПодключитьВнешнююКомпоненту не требуется. Достаточно зарегистрировать библиотеку в Windows и обращаться к ней напрямую через конструктор Новый COMОбъект по ее программному идентификатору (ProgID):
&НаКлиенте
Процедура РаботаСCOMОбъектом()
Попытка
// Создание экземпляра зарегистрированного COM-объекта
ОбъектИнтеграции = Новый COMОбъект("MEDOC.ZApplication");
// Вызов методов объекта
// ОбъектИнтеграции.Открыть();
Исключение
Сообщить("Не удалось создать COM-объект: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Если перевод пользователей на 32-разрядный тонкий клиент невозможен, а библиотека существует только в 32-битном исполнении, настроим запуск библиотеки через службу компонентов Windows (COM+):
dcomcnfg в командной строке).При такой настройке операционная система будет запускать 32-битную компоненту в изолированном системном процессе dllhost.exe, а 64-битный тонкий клиент 1С сможет прозрачно обращаться к ней через интерфейс COM без конфликта разрядностей.