Установка внешней компоненты. Установка внешних компонент и расширений платформы 1с отчетность установка внешней компоненты не выполнена
/
Разработка пользовательских интерфейсов
Установка внешних компонент и расширений платформы
1.1. Установка внешних компонент и расширений платформы должна быть интерактивной. Пользователь должен самостоятельно принять решение об установке. В диалоге установки должно быть указано, для чего нужна компонента (расширение) и что не будет работать, если ее не устанавливать.
Например, неправильно использовать конструкции вида
Если Не ПодключитьВнешнююКомпоненту(…) Тогда УстановитьВнешнююКомпоненту(…)Правильно задавать пользователю вопрос в явном виде:
Для продолжения работы требуется установить внешнюю компоненту. Внешняя компонента позволит работать с отчетностью. Для установки компоненты нажмите "Установить". После завершения установки нажмите "Продолжить".
- Пользователь воспользовался командой «Отправить отчет»
- Для этого конфигурации необходимо, чтобы была установлена какая-либо внешняя компонента.
- Конфигурация проверяет, установлена ли компонента.
- Если компонента не установлена, отображает пользователю информацию о том, что для отправки отчета нужно установить компоненту и кнопку , вызывающую установку компоненты.
- Пользователь нажимает на кнопку, выполняется установка.
- После установки пользователь нажимает на кнопку «Продолжить отправку отчета»
- Программа продолжает отправлять отчет.
Такой сценарий позволит обеспечить, чтобы компоненты (расширения) устанавливались без проблем на всех поддерживаемых браузерах, в том числе, в браузере FireFox .
2. В прикладном решении должны быть предоставлены инструменты для установки пользователем внешних компонент и расширений в любой момент работы. Таким образом, их можно установить не только в ходе решения какой-то задачи, но и в виде отдельного действия (из некоторого административного режима).
При использовании в конфигурации Библиотеки стандартных подсистем для установки расширения для работы с файлами предназначена общая команда УстановитьРасширениеРаботыСФайлами , которую рекомендуется размещать в форме персональных настроек пользователя (см. общую форму _ДемоМоиНастройки в демонстрационной конфигурации). В этой же форме рекомендуется размещать команды по установке внешних компонент, которые могут потребоваться пользователю при его работе. |
Зачастую у программистов возникают проблемы с подключением внешних компонент (например, драйверов торгового оборудования), когда пользователи работают с 1С, подключаясь к серверу через терминал.
Это связано с некоторыми особенностями работы функции глобального контекста ПодключитьВнешнююКомпоненту().
При этом пользователи видят, например, картинку представленную в анонсе статьи.
В то время как при работе с локальных компьютеров никаких проблем с подключением внешних компонент нет.
С чем это связано? Это связано с тем, что, когда пользователи работают через сервер терминалов, они имеют меньше прав, чем при работе на локальном компьютере.
В этом легко убедиться, если зайти на сервер терминалов под учетной записью с административными правами.
Причина такой разницы заключается в том, что 1С не может зарегистрировать внешнюю компоненту в реестре, когда пользователь работает в терминале под обычными правами, т.к. у обычного пользователя нет прав на запись в ветку системного реестра HKEY_CLASSES_ROOT .
В публикациях на тему подключения внешних компонент в терминале предлагаются самые разные методы решения этой проблемы.
Например, такие:
1. Запустить первый раз 1С под административными правами.
Этот вариант далеко не всегда срабатывает. Ниже объясню, почему.
2. Дать обычным пользователям терминала права на запись в ветку системного реестра HKEY_CLASSES_ROOT .
Недостаточно "продвинутым" пользователям лучше этого не делать, иначе могут быть проблемы.
3. С помощью различных "примочек" регистрировать ВК от имени пользователя с полными правами.
Тоже не есть хорошо.
Так как же все таки лучше выйти из этой ситуации?
Я предлагаю свой вариант решения этой проблемы. По моему мнению - простой и красивый, не предлагавшийся на лансере ранее.
Исследуя эту проблему, я задался вопросом - а зачем 1С вообще пытается зарегистрировать ВК по новому пути? Ведь она уже зарегистрирована в системе.
Дело оказалось в том, что в типовых конфигурациях 1С (например "Управление Торговлей") используется такой синтаксис метода глобального контекста ПодключитьВнешнююКомпоненту() :
ПодключитьВнешнююКомпоненту("Справочник.ПодключаемоеОборудование.Макет.ДрайверАТОЛСканерШтрихкода", "АТОЛСканер");
Как видим, ВК драйвера подключается из макета "ДрайверАТОЛСканерШтрихкода" справочника "ПодключаемоеОборудование".
Что же при этом происходит?
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С не пытается перерегистрировать ВК по новому пути в реестре и таким образом, все проблемы решаются.
Ну вот собственно и все. Успехов в работе!
Это связано с некоторыми особенностями работы функции глобального контекста ПодключитьВнешнююКомпоненту()
.
Зачастую у программистов возникают проблемы с подключением внешних компонент (например, драйверов торгового оборудования), когда пользователи работают с 1С, подключаясь к серверу через терминал.
При этом пользователи видят, например, такую картинку:
В то время как при работе с локальных компьютеров никаких проблем с подключением внешних компонент нет.
С чем это связано? Это связано с тем, что, когда пользователи работают через сервер терминалов, они имеют меньше прав, чем при работе на локальном компьютере.
В этом легко убедиться, если зайти на сервер терминалов под учетной записью с административными правами.
Причина такой разницы заключается в том, что 1С не может зарегистрировать внешнюю компоненту в реестре, когда пользователь работает в терминале под обычными правами, т.к. у обычного пользователя нет прав на запись в ветку системного реестра HKEY_CLASSES_ROOT .
В публикациях на тему подключения внешних компонент в терминале предлагаются самые разные методы решения этой проблемы.
Например, такие:
1. Запустить первый раз 1С под административными правами.
Этот вариант далеко не всегда срабатывает. Ниже объясню, почему.
2. Дать обычным пользователям терминала права на запись в ветку системного реестра HKEY_CLASSES_ROOT .
Недостаточно "продвинутым" пользователям лучше этого не делать, иначе могут быть проблемы.
3. С помощью различных "примочек" регистрировать ВК от имени пользователя с полными правами.
Тоже не есть хорошо.
Так как же все таки лучше выйти из этой ситуации?
Я предлагаю свой вариант решения этой проблемы. По моему мнению - простой и красивый.
Исследуя эту проблему, я задался вопросом - а зачем 1С вообще пытается зарегистрировать ВК по новому пути? Ведь она уже зарегистрирована в системе.
Дело оказалось в том, что в типовых конфигурациях 1С (например "Управление Торговлей") используется такой синтаксис метода глобального контекста ПодключитьВнешнююКомпоненту():
ПодключитьВнешнююКомпоненту("Справочник.ПодключаемоеОборудование.Макет.ДрайверАТОЛСканерШтрихкода", "АТОЛСканер");
Как видим, ВК драйвера подключается из макета "ДрайверАТОЛСканерШтрихкода" справочника "ПодключаемоеОборудование".
Что же при этом происходит?
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С не пытается перерегистрировать ВК по новому пути в реестре и таким образом, все проблемы решаются.
Ну вот собственно и все. Успехов в работе!
[необходимо зарегистрироваться для просмотра ссылки]