новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Решение проблем с регистрацией внешних компонент в терминале

  • Добавить свою публикацию
  • для этого требуется регистрация
Изображение

      Зачастую у программистов возникают проблемы с подключением внешних компонент (например, драйверов торгового оборудования), когда пользователи работают с 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С не пытается перерегистрировать ВК по новому пути в реестре и таким образом, все проблемы решаются.

 

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

 
0
Еще от автора
≡ к списку статей