0. Spacer 301 23.09.11 00:57 Сейчас в теме

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

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

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Abadonna 3857 23.09.11 00:57 Сейчас в теме
В то время как при работе с локальных компьютеров никаких проблем с подключением внешних компонент нет.

Глубоко ошибаешься. В путних сетках и тут проблемы, потому что в путних сетках и локальных административных прав у юзверя быть не должно. А то они там нарегят/наинсталлируют!
2. icek@w 3 23.09.11 10:32 Сейчас в теме
В путних сетках и тут проблемы...

Там и софт по минимуму, все что нужно - в терминале. :)
Но, если так необходимо, то, думаю, на локальной машине данная методика также будет работать, т.о. "ложка не существует". :)
3. Abadonna 3857 23.09.11 10:55 Сейчас в теме
(2)
Там и софт по минимуму, все что нужно - в терминале. :)

А вот и нет! ;) На фига терминал всякой лабудой грузить? Там только двигун 1С и больше ничего
4. artbear 1180 23.09.11 12:01 Сейчас в теме
Очередной баян для новичков в работе с внешними ВК.
Со времен 77 здесь ничего не изменилось :)
Но за изложение плюсую.
5. Abadonna 3857 23.09.11 12:19 Сейчас в теме
(4)
Со времен 77 здесь ничего не изменилось :)

Артур, а что могло измениться для ком-объектов? ;)
Винде по фиг от кого/для кого этот ком.
И вообще надо юзать http://infostart.ru/public/15861/ и не париться
6. Spacer 301 23.09.11 12:48 Сейчас в теме
(4) artbear,
artbear пишет:
Со времен 77 здесь ничего не изменилось :)

Ничего не изменилось говорите?
Вы хоть в сути описанной в статье проблемы разобрались?
Разве в 77 внешние компоненты хранились в макетах справочников?
Разве 77 сохраняла их во временном каталоге пользователя и пыталась их потом там зарегистрировать?
zaursoft; +1 Ответить
15. artbear 1180 23.09.11 15:08 Сейчас в теме
(6) А если еще подумать?
В 77 также были случаи неверной регистрации ВК - например, Админ в терминале заходит в одну базу и регистрирует ВК из каталога базы, а пользователь, у которого эта ВК юзается, но в другой базе, не может запустить эту ВК, если у него прав на папку с первой базой :(
Поэтому, например, для нормальной работы в 77 и придумано куча решений - тот же вариант с RunAs или загрузка обычных ВК через спец.ВК от Саши Орефкова и т.п.
Я же говорю - по работе с ВК ничего не изменилось!
А описанные проблемы - это проблемы прикладного кода, в частности, кода по работе с торговым оборудованием.
Разработчики этого кода либо не знали о сабжевой проблеме, либо пренебрегли ей :(
ЗЫ кстати, в 77 ВК также можно было хранить в макетах, правда, с использованием доп.ВК :)
ЗЗЫ а еще обрати внимание - плюс-то я тебе все-таки поставил :)
7. Spacer 301 23.09.11 12:48 Сейчас в теме
Abadonna пишет:
И вообще надо юзать http://infostart.ru/public/15861/ и не париться

Вот это по моему мнению как раз и есть "париться" - т.е. разобравшись в сути проблемы только наполовину, искать обходные пути для ее решения.
8. Abadonna 3857 23.09.11 14:02 Сейчас в теме
(7)
Вот это по моему мнению как раз и есть "париться" - т.е. разобравшись в сути проблемы только наполовину

Ага, наполовину... Суть проблемы элементарна - отсутствие прав.
Ссылка раз и навсегда решает проблему того же regsvr32 БлаБла у любого юзверя выполнением RunAs от имени пользователя с админскими правами.
Ну-ка расскажи в чем ты там ПОЛНОСТЬЮ разобрался?
9. cool.vlad4 44 23.09.11 14:15 Сейчас в теме
Это красивое решение -
На терминале у обычных пользователей нет прав на изменение этой ветки реестра, поэтому компонента у них не подключается.
......
Итак, по шагам:
1. Регистрируем внешнюю компоненту утилитой regsvr32.exe на сервере терминалов в папке C:\WINDOWS\SYSTEM32 для 32-разрядной ОС или в папке C:\WINDOWS\SYSWOW64 для 64-разрядной ОС.

Ну в чем профит-то? В том что вы взяли её и зарегистрировали? Явно кто-то в чем-то полностью переразобрался.
10. Medvedik 23.09.11 14:20 Сейчас в теме
Не понял смысл статьи.
Админ и так знает, как зарегистрировать dll-ку, у 1Сника при нормальном распределении обязанностей нет никаких прав на серваке.
11. Spacer 301 23.09.11 14:59 Сейчас в теме
Abadonna пишет:
Ага, наполовину... Суть проблемы элементарна - отсутствие прав

Вот именно - отсутствие прав это вторая половина проблемы.
А первая и основная половина состоит в том, почему 1С пытается перерегистрировать ВК, и как этого избежать.
18. Abadonna 3857 23.09.11 16:10 Сейчас в теме
(11)
почему 1С пытается перерегистрировать ВК

Потому что не надо использовать (в т.ч. и фирме 1С) дебильную ПодключитьВнешнюю.. с разными там синтаксисами,
а надо использовать ЗагрузитьВнешнююКомпоненту(ПолныйПутьКДЛЛ), а либы лучше всего хранить в КаталогПрограммы(), либо (для файлухи и 7.7) в КаталогИБ()
12. Spacer 301 23.09.11 15:02 Сейчас в теме
cool.vlad4 пишет:
Ну в чем профит-то? В том что вы взяли её и зарегистрировали? Явно кто-то в чем-то полностью переразобрался

Не спешите с выводами не разобравшись.
Дело в том, что вы ее хоть сто раз зарегистрируйте, но если вы оставите без изменений типовой код,
1С будет безуспешно пытаться ее перерегистрировать снова и снова.
14. cool.vlad4 44 23.09.11 15:07 Сейчас в теме
(12) Не спешите с выводами, по поводу того, что я спешу с выводами не разобравшись. В типовой так сделано, потому, что ребята делали универсально, они не могут сидеть за вашим компьютером и регистрировать от имени администратора компоненту, не зная пароля тем более. А админы прекрасно об этом знают и ручками зарегят или скрипт напишут(run as). А ваша статья просто кэпство, но самое противное - преподносится как доселе неведомое чудо.
13. Spacer 301 23.09.11 15:06 Сейчас в теме
Medvedik пишет:
Не понял смысл статьи.
Админ и так знает, как зарегистрировать dll-ку

Ну что тут сказать? Значит невнимательно читали статью, или никогда не сталкивались с такими проблемами.
Конечно, админ знает, как зарегистрировать dll-ку.
Он ее и регистрирует. Но потом оказывается что у рядовых пользователей она в терминале не подключается.
Вот в чем суть проблемы то!
16. Spacer 301 23.09.11 15:17 Сейчас в теме
cool.vlad4 пишет:
но самое противное - преподносится как доселе неведомое чудо

У вас видимо патологическое отвращение к чужим разработкам.:)
Конечно, это не чудо. Но тем не менее, я когда столкнулся с этой проблемой, нигде в инете не нашел объяснения причин этой проблемы. Везде освещалась только вторая часть проблемы (недостаток прав на реестр) и способы ее обхода. И нигде не говорилось об основной части проблемы - почему 1С пытается перерегистрировать ВК по новому пути.
17. Spacer 301 23.09.11 15:24 Сейчас в теме
artbear пишет:
ЗЗЫ а еще обрати внимание - плюс-то я тебе все-таки поставил :)

Согласен, не спорю. Спасибо.:)

artbear пишет:
А описанные проблемы - это проблемы прикладного кода, в частности, кода по работе с торговым оборудованием.
Разработчики этого кода либо не знали о сабжевой проблеме, либо пренебрегли ей :(


Совершенно верно. Но рядовому программеру от этого как бы не легче.
А эта статья конечно не претендует на какую-то особенность и гениальность.
Это просто статья человека который столкнулся с проблемой, и не нашел приемлемого для себя метода ее решения в инете.
Это попытка самостоятельно разобраться в проблеме и поделиться своим решением с другими - быть может сэкономив кому то время на решение аналогичных проблем.
19. Spacer 301 23.09.11 16:30 Сейчас в теме
Abadonna пишет:
надо использовать ЗагрузитьВнешнююКомпоненту(ПолныйПутьКДЛЛ)

Здесь есть одно большое НО...

Синтаксис:

ЗагрузитьВнешнююКомпоненту(<ИмяФайла>)

Доступность:

Толстый клиент.

А мне нужно было подключать сканер штрих-кодов в ТОНКОМ клиенте.
PLAstic; LordKim; Voblhned; avatar_xranitel; JohnySC; +5 Ответить
21. fishca 1175 23.09.11 16:33 Сейчас в теме
(19) сканер штрих-кода успешно подключается в тонком клиенте, пример реализации можно посмотреть в УПП 1.3, в последних двух релизах
20. Abadonna 3857 23.09.11 16:32 Сейчас в теме
А мне нужно было подключать сканер штрих-кодов в ТОНКОМ клиенте.

А скажи на милость: на фига в ТЕРМИНАЛЕ еще и тонкий клиент?
Терминал сам по себе уже тонким клиентом является
22. Spacer 301 23.09.11 16:40 Сейчас в теме
Abadonna пишет:
А скажи на милость: на фига в ТЕРМИНАЛЕ еще и тонкий клиент?
Терминал сам по себе уже тонким клиентом является

Ну, тут уж как бы наше руководство так решило для единообразия.
Как пел Высоцкий, "Жираф большой - ему видней".:)
Все работают с 1С в тонком клиенте управляемого приложения.
Чтобы можно было и через терминал подключаться и просто с локальной машины.
23. Spacer 301 23.09.11 16:50 Сейчас в теме
fishca пишет:
сканер штрих-кода успешно подключается в тонком клиенте, пример реализации можно посмотреть в УПП 1.3, в последних двух релизах

Пример реализации я брал из УТ11.
Он то конечно подключается, если у пользователя достаточно прав на запись в ветку реестра.
А вот если у пользователя недостаточно этих прав, тогда и начинаются проблемы которые описаны в этой статье.
24. Abadonna 3857 24.09.11 02:20 Сейчас в теме
(0)Кстати, если ты так уж "полностью разобрался", на фига ты совершаешь в коде лишние телодвижения?
ProgID = "AddIn.Scaner45";
ПодключитьВнешнююКомпоненту(ProgID);
ОбъектДрайвера = Новый (ProgID);


После выполнения regsvr32 весь код укладывается в одну строку:
ОбъектДрайвера = Новый COMОбъект("AddIn.Scaner45");
Чтобы не быть голословным - рис.
Прикрепленные файлы:
36. bulpi 173 28.09.11 14:26 Сейчас в теме
(24)
"После выполнения regsvr32 весь код укладывается в одну строку:
ОбъектДрайвера = Новый COMОбъект("AddIn.Scaner45"); "

А страница свойств компоненты появится при таком подходе ?
25. Spacer 301 24.09.11 02:45 Сейчас в теме
Abadonna пишет:
После выполнения regsvr32 весь код укладывается в одну строку:
ОбъектДрайвера = Новый COMОбъект("AddIn.Scaner45");


Ну, раз говоришь что работает, верю.
Хотя мне это кажется странным. По идее не должно было.:)
26. Abadonna 3857 24.09.11 02:49 Сейчас в теме
(25)
Хотя мне это кажется странным. По идее не должно было.:)

Именно, что должно!!! :)))
Это как раз стандартное обращение к зарегенным в реестре интерфейсам COM, Active-X
В 7.7 это было бы так: Lib=СоздатьОбъект("Miracle.VCL")
В Дельфи: Lib:=CreateOleObject('Miracle.VCL')
И в любой другой виндовой хрени аналогично ;)
27. cool.vlad4 44 24.09.11 02:53 Сейчас в теме
28. Spacer 301 24.09.11 03:09 Сейчас в теме
Abadonna пишет:
В 7.7 это было бы так: Lib=СоздатьОбъект("Miracle.VCL")

Да, но в 7.7 перед этим вызывался метод ЗагрузитьВнешнююКомпоненту("FormEx.dll");
Без этого СоздатьОбъект() не работало.
29. Abadonna 3857 24.09.11 03:19 Сейчас в теме
Да, но в 7.7 перед этим вызывался метод ЗагрузитьВнешнююКомпоненту("FormEx.dll");

Ладно, начнем ликбез по порядку :))))
1. ЗагрузитьВнешнююКомпоненту от 1С - как раз и производит регистрацию в реестре интерфейса соотвествующей либы, написанной по технологии создания внешних компонент от 1С (ТСВК). Вот именно в этом случае, и возникает трабла с правами на запись в реестр, неважно в каком месте: на терминале или локальном компе
2. СоздатьОбъект - уже и создавала (в аналогии 8.2) Новый COMОбъект по указанному progid
В 8.2, как в обычной виндовой программе, все точно так же.
Если ЛЮБАЯ ВК написана по технологии COM и предварительно зарегена через regsvr32 (т.е. уже есть progid), никаких
Подключить/ЗагрузитьВнешнююКомпоненту уже не надо ни в 7.7, ни в 8.2.
В моем примере выше либа для 7.7 писалась не по ТСВК, она обязательно требовала regsvr32, но при этом совершенно не понимала никаких Подключить/ЗагрузитьВнешнююКомпоненту
Процедура ПриНачалеРаботыСистемы()
//………………………………………
   ФайлБиблиотеки=КаталогИБ()+"Miracle.Dll";
   Попытка
      Lib=СоздатьОбъект("Miracle.VCL");
   Исключение
      ЗапуститьПриложение("regsvr32.exe"+Симв(34)+

      ФайлБиблиотеки+Симв(34));
      Для А=1 По 500000 Цикл;КонецЦикла;
      Предупреждение("Была установлена новаябиблиотека"+РазделительСтрок+
      "Программу следует перезагрузить");
      ЗавершитьРаботуСистемы(0);
   КонецПопытки;

Показать
30. Abadonna 3857 24.09.11 03:37 Сейчас в теме
+(29) А FormEx.dll - вообще супер-специфичная либа, там Лёха залез в самое нутро 1С, последние её версии вообще в реестре следов не оставляют, и ЗагрузитьВнешнююКомпоненту("FormEx.dll") пройдет всегда, у любого юзверя, с любыми правами
31. powerpc 219 27.09.11 09:02 Сейчас в теме
УТ 10.3. Платформа 8.2.13.202. У меня при настройке перенаправленого в терминальный сервер торгового оборудования выпадает 1С при тестировании драйвера. Однако если на это не заморачиваться, то Интерфейс Кассира работает и чеки пробиваются. Может кому-то пригодится, т.к. мы очень долго не понимали в чем дело и не пробовали пробить чек из Интерфейса Кассира ))))
32. sound 530 27.09.11 10:49 Сейчас в теме
Использую вот это
http://infostart.ru/public/14418/
А в совокупности вот с этим
http://infostart.ru/public/16713/
вообще больше проблем при работе в ВК практически не ощущаю. Больше ничего и не нужно. Главное не злоупотреблять использованием ВК :)
33. Spacer 301 27.09.11 12:32 Сейчас в теме
sound пишет:
Использую вот это
http://infostart.ru/public/14418/

В описанном мной случае проблемы возникали когда ВК хранится в макете справочника.
При подключении она сохраняется во временный файл временного каталога пользователя.
Поэтому для использования RegsvrEx нужно знать полный путь к этому временному файлу.
Ну а вообще использование нескольких дополнительных разработок вместо стандартного
типового механизма и маленькой правки кода не кажется мне оптимальным.:)
34. sound 530 27.09.11 12:37 Сейчас в теме
(33) Смею заметить, ничего против Вашей публикации не имею :). "стандартный типовой механизм" не всегда вставляет, иногда своя реализация кажется более универсальной :).
35. kiros 51 28.09.11 10:19 Сейчас в теме
Спасибо за просвещение, а то у БиТ купили продукт, а они используют свой сервер лицензий, и для этого пытаются регистрировать внешние компоненты, до сих пор приходилось делать запуск под Админом, теперь попробуем переписать чтобы было по человечески.
37. a_mironov 11.12.11 04:19 Сейчас в теме
Артур, а что могло измениться для ком-объектов? ;)
Винде по фиг от кого/для кого этот ком.
И вообще надо юзать http://infostart.ru/public/15861/ и не париться
38. 1C82 45 19.06.13 22:50 Сейчас в теме
Спасибо за статью. Столкнулся с аналогичным случаем при работе с эмулятором фискального регистратора. Конечно же лучше запускать 1С через тонкий клиент с машины к которой подключено оборудование, но некоторые клиенты настаивают на использовании терминала ( тем более если фискальный регистратор виртуальный - используется эмулятор). Почему-то после обновления УТ11 до 11.1 вдруг 1С стала просить драйвера на эмулятор фискального регистратора, хотя сканнер штрих-кодов продолжает прекрасно работать.
Добавил бы уточнения к алгоритму решения этой проблемы: ( которые кстати подчерпнул из вашего же комментария только в другом форуме )
В общих макетах лежат драйвера различного оборудования. Там собственно и хранилась нужная мне dll.
Щелкаем на этом макете и нажимаем кнопочку "Выгрузить в файл".
Файлу даем любое имя и расширение zip.
Открыв архив видим несколько файлов, в том числе нужный мне FPEmulator1C.dll. Распаковываем и копируем его в зависимости от разрядности windows в папку для 32х - C:\Windows\Sysytem32 , для 64х - C:\Windows\SysWOW64.
Запускаем Пуск/Все программы / Стандартные / Командная строка - только правой кнопкой мыши вибираем "Запуск от имени администратора" . В командной строке переходим в нужную папку (C:\Windows\Sysytem32 или C:\Windows\SysWOW64 ).
В командной строке - cd C:\Windows\Sysytem32
Пробуем регистрировать его с помощью команды regsvr32.exe .
В командной строке - regsvr32 FPEmulator1C.dll
Если все успешно тогда переписываем код в конфигурации в соответствии со статьей.
39. jaroslav.h 06.06.16 16:17 Сейчас в теме
А с тонким клиентом как подключить?
40. Spacer 301 06.06.16 21:00 Сейчас в теме
(39) myr4ik07, Если вы используете тонкий клиент в терминале, то в статье как раз и описано как решить проблемы с подключением.
А если вы используете тонкий клиент просто на удаленной машине, то никаких проблем с подключением быть не должно.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист 1 категории (Методист-аналитик 1С)
Фрязино
зарплата от 100 000 руб.
Полный день

Главный архитектор 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С
Новороссийск
зарплата от 70 000 руб.
Полный день

Ведущий программист 1С
Санкт-Петербург
зарплата от 130 000 руб.
Полный день