Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Решение проблем с регистрацией внешних компонент в терминале          
Vofka Подменю пользователя
сообщение 28.09.11, 18:58
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

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

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

[необходимо зарегистрироваться для просмотра ссылки]

Спасибо сказали: likalim, shurik_shurik,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 19:13
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!