Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=4890)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Администратору 1С / системному администратору _ Решение проблем с регистрацией внешних компонент в терминале

Автор: Vofka 28.09.11, 18:58

Зачастую у программистов возникают проблемы с подключением внешних компонент (например, драйверов торгового оборудования), когда пользователи работают с 1С, подключаясь к серверу через терминал.
Это связано с некоторыми особенностями работы функции глобального контекста

ПодключитьВнешнююКомпоненту()
.

Зачастую у программистов возникают проблемы с подключением внешних компонент (например, драйверов торгового оборудования), когда пользователи работают с 1С, подключаясь к серверу через терминал.

При этом пользователи видят, например, такую картинку:



В то время как при работе с локальных компьютеров никаких проблем с подключением внешних компонент нет.

С чем это связано? Это связано с тем, что, когда пользователи работают через сервер терминалов, они имеют меньше прав, чем при работе на локальном компьютере.

В этом легко убедиться, если зайти на сервер терминалов под учетной записью с административными правами.

Причина такой разницы заключается в том, что 1С не может зарегистрировать внешнюю компоненту в реестре, когда пользователь работает в терминале под обычными правами, т.к. у обычного пользователя нет прав на запись в ветку системного реестра HKEY_CLASSES_ROOT.

В публикациях на тему подключения внешних компонент в терминале предлагаются самые разные методы решения этой проблемы.

Например, такие:

1. Запустить первый раз 1С под административными правами.

Этот вариант далеко не всегда срабатывает. Ниже объясню, почему.

2. Дать обычным пользователям терминала права на запись в ветку системного реестра HKEY_CLASSES_ROOT.

Недостаточно "продвинутым" пользователям лучше этого не делать, иначе могут быть проблемы.

3. С помощью различных "примочек" регистрировать ВК от имени пользователя с полными правами.

Тоже не есть хорошо.

Так как же все таки лучше выйти из этой ситуации?

Я предлагаю свой вариант решения этой проблемы. По моему мнению - простой и красивый.

Исследуя эту проблему, я задался вопросом - а зачем 1С вообще пытается зарегистрировать ВК по новому пути? Ведь она уже зарегистрирована в системе.

Дело оказалось в том, что в типовых конфигурациях 1С (например "Управление Торговлей") используется такой синтаксис метода глобального контекста ПодключитьВнешнююКомпоненту():

ПодключитьВнешнююКомпоненту("Справочник.ПодключаемоеОборудование.Макет.ДрайверАТОЛСканерШтрихкода", "АТОЛСканер");

ОбъектДрайвера = Новый ("AddIn.АТОЛСканер.Scaner45");


Как видим, ВК драйвера подключается из макета "ДрайверАТОЛСканерШтрихкода" справочника "ПодключаемоеОборудование".

Что же при этом происходит?

1С сохраняет компоненту во временной папке пользователя, например "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

и пытается зарегистрировать ее в ветке реестра HKEY_CLASSES_ROOT именно по этому пути.

На терминале у обычных пользователей нет прав на изменение этой ветки реестра, поэтому компонента у них не подключается.

Теперь о том, как выйти из этой ситуации.

Метод глобального контекста ПодключитьВнешнююКомпоненту() имеет несколько вариантов синтаксиса. Вот этим мы и воспользуемся.

Итак, по шагам:

1. Регистрируем внешнюю компоненту утилитой regsvr32.exe на сервере терминалов в папке C:\WINDOWS\SYSTEM32 для 32-разрядной ОС или в папке C:\WINDOWS\SYSWOW64 для 64-разрядной ОС.

2. Используем один из двух дополнительных вариантов синтаксиса метода ПодключитьВнешнююКомпоненту():

Вариант 1:

ПодключитьВнешнююКомпоненту("C:\WINDOWS\SysWOW64\Scaner1C.dll", "АТОЛСканер", ТипВнешнейКомпоненты.COM);

ОбъектДрайвера = Новый ("AddIn.АТОЛСканер.Scaner45");


Вариант 2:

ProgID = "AddIn.Scaner45";

ПодключитьВнешнююКомпоненту(ProgID);

ОбъектДрайвера = Новый (ProgID);


На мой взгляд, вариант № 2 предпочтительнее.

При этом 1С не пытается перерегистрировать ВК по новому пути в реестре и таким образом, все проблемы решаются.

Ну вот собственно и все. Успехов в работе!

http://pro1c.org.ua/redirect.php?http://infostart.ru/public/91531/

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua