gifts2017

Использование визуальных (ActiveX) компонент в тонком клиенте 1С 8.2

Опубликовал Василий Демидов (Душелов) в раздел Программирование - Внешние компоненты

В данной статье рассматривается вопрос использования визуальных компонент (ActiveX) на форме тонкого клиента 1С 8.2 и веб-клиента на базе MS Internet Explorer.

Возможности новой платформы 1С 8.2 все продолжают радовать, многие начали переводить свои конфигурации с 8.1 (а может и 7.7) на управляемые формы для использования в тонком и веб-клиентах, но уже существует множество визуальных компонент для 1С, которые используются в промышленной эксплуатации.

И так...

Как известно, MS Internet Explorer прекрасно работает с ActiveX-объектами, чем мы и воспользуемся.

Публикация компоненты.

 1. На веб-сервере выкладываем файлы компоненты и html-страницу для инициализации объекта компоненты. (примеры файлов приложены к статье)

<object id="vk"
classid="http://s0740/components/Dushelov.VectorDrawing1C.dll#Душелов.VectorDrawing"
width="100%" height="100%">
</object>

Где id - имя элемента, по которому потом будет получен объект компоненты,

и classid - идентификатор класса компоненты в формате "<полный путь к файлу компоненты на веб-сервере>#<имя класса компоненты>

2.  На клиентских машинах данный веб-сервер добавляем в список "надежных узлов"

(В IE - меню "Сервис" - "Свойства обозревателя" - закладка "Безопасность" - зона "Надежные узлы")

и проверяем уровень безопасности для этой зоны (должно быть разрешено использование ActiveX)

+ для компонент на .Net Framework'е выставляем нужные разрешения:

Жмем mmc, выбираем оснастку .NET 2.0 Framework Configuration - C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorcfg.msc (если ее нет, то скачиваем из файлов статьи), выбираем в дереве "Runtime security policy", жмем Adjust Zone Security и дальше выбираем Full Trust (возможно и с меньшим доверием будет работать) для зоны, в которую внесен сайт с нашим ActiveX.

3. После проделанных действий на клиентской машине можно открыть страницу инициализации компоненты и на ней должен появиться объект компоненты.

Использование на форме тонкого клиента

Контейнером для компоненты будем использовать элемент формы с типом "Поле HTML-документа", в котором открываем страницу инициализации компоненты

Пример:

Элементы.ВК.Документ.URL = "http://s0740/components/vector.html";

После загрузки страницы ищем элемент по идентифиатору, написанному выше, получаем объект и подписываем нужные события компоненты.

(вот с событиями только 1 нюанс - русские названия событий IE не видит, как побороть - пока не знаю)

Пример:

ЭлементВК = Элементы.ВК.Документ.getElementById("vk");
Если
ЭлементВК = Неопределено Тогда
   
Сообщить("Не найден объект компоненты!");
    Возврат;
КонецЕсли;

Элементы.ВК.ТолькоПросмотр = Ложь;
ОбъектВК = ЭлементВК.contentDocument;
ДобавитьОбработчик ОбъектВК.OnShapeMouseDoubleClick, ПриДвойномЩелчкеМышкойПоФигуре;

После этого можно работать с объектом компоненты, как с обычным ком-объектом.

Пример использования визуальной компоненты 

К статье приложен пример использования компоненты "VectorDrawing"

Соответственно, для работы компоненты на клиентских машинах должен быть установлен .Net Framework 2.0

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Файлы примера использования компоненты VectorDrawing
.zip 91,88Kb
19.11.09
355
.zip 91,88Kb 355 Бесплатно
.NET 2.0 Framework Configuration Tools
.zip 443,15Kb
23.03.10
78
.zip 443,15Kb 78 Бесплатно

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. dushelov (Душелов) 19.11.09 12:48
Слушаю идеи и предложения ;)
2. Alexandr_P (Русский) 20.11.09 04:50
(1) А реально будет: редактирование mxl средствами Excel?
3. dushelov (Душелов) 20.11.09 07:37
4. Alexandr_P (Русский) 20.11.09 08:29
(3) Можно ли сделать редактирование табличных документов 1С при помощи Excel? Ну, скажем, макетов для отчетов?
5. dushelov (Душелов) 20.11.09 10:29
(4) К теме данной статьи это не относится, но конверторы mxl2xls и обратно существуют.
6. kadr (kadr) 20.11.09 11:06
В статье рассмотрен вопрос об управлении ВК из 1С.
А есть ли наработки по управлению приложением из ВК на базе ActiveX?

Ну к примеру получить Контрагентов текущей БД и вывести их в форму html.
7. Кирилл Коновалов (akkvamarin) 20.11.09 11:35
8. dushelov (Душелов) 20.11.09 15:48
(6) А что там сложного? Обычное ком-соединение.
9. kadr (kadr) 20.11.09 16:00
Можно испросить пример как получить контекст приложения, загрузившего ВК из ВК?
10. dushelov (Душелов) 20.11.09 16:56
(9) В шаблонах 1С реализовано через указатель на интерфейс 1С: http://www.asd-dnepr.com/v82vkomponent.html#_cpp_intf_comp

В ActiveX-ах только новым com-соединением к базе.
11. kadr (kadr) 20.11.09 17:17
Спасибо.
Реально помогли.
12. Dmitry Afanasyev (afanasko) 23.11.09 11:27
Интересно.
А что насчет файрфокса? Слышал что у 1С новый метод реализации внешних компонент: не АктивИкс, а NativeAPI. Не ковырял еще?
13. Олег Никоноров (nikolega) 23.11.09 12:43
Обратите внимание как автор себя любит :)
Dushelov.VectorDrawing1C.dll#Душелов.VectorDrawing
14. vip (vip) 23.11.09 12:51
(13) Обращаем.
Любит себя вполне заслуженно.
Абсолютно нормально. Ненормально #nikolega.ОчереднойПеренумератор
cleaner_it; +1 Ответить 1
15. dushelov (Душелов) 23.11.09 13:09
(12) >не АктивИкс, а NativeAPI
Не верно сказано ;), правильнее не COM, а NativeAPI.
Это всего лишь технология подключения ВК к 1С, не визуальная (пример - формирование штрихкода, на макете в 8.2 уже нет объекта компоненты, как было в 8.1, а ВК формирует картинку и вставляется на форму).

А визуально - только ActiveX

(13) А в чем проблема?
16. larissa builova (larisab) 23.11.09 13:09
(14) Ха, любить себя можно и незаслуженно, как и вообще любить ;)
(13) Мало того, мы его тоже любим :)
17. vip (vip) 23.11.09 13:22
(14+) Программеру добиться признания в среде программеров (я не об адынэснегах) практически невозможно. Каждый считает себя творцом, единственным и неповторимым.
В данном случае г-н Душелов этого заслуженно добился.
Чего и вам искренне желаем.
18. Аркадий Кучер (Abadonna) 25.11.09 06:48
(0)
русские называния событий IE не видит, как побороть - пока не знаю

А я знаю! :D У меня ни в одной ВК нет русского названия
19. dushelov (Душелов) 25.11.09 18:09
(18) Я делал русскими, чтобы на форме в конфигураторе были "нормальные" (привычные) названия свойств и событий ;) Видимо, придется дублировать...
Abadonna; +1 Ответить
20. Дмитрий Богданов (eiffil) 25.12.09 22:57
1. На веб-сервере выкладываем файлы компоненты и html-страницу для инициализации объекта компоненты. (примеры файлов приложены к статье)


А без вэб-сервера нельзя обойтись??? Это IIS???
21. dushelov (Душелов) 25.12.09 23:17
А какой смысл в тонком клиенте без вебсервера?
22. Дмитрий Богданов (eiffil) 28.12.09 19:17
может смысла и не много, хотя где-то прочитал в 1С-ной литературе, что предпочтительней выбирать тонкий клиент. Но вся проблема в том, что в управляемом приложении (хоть даже толстый клиент) так просто не кинешь элемент управления ActiveX на форму...

М.б. пойти другим путем, и сделать контрол, который будет программно выводиться на форму без оболочки IE, но пока что я не знаю, как такое сделать.... Если есть мысли или ссылки по поводу последнего предложения, то их очень интересно было бы увидеть
23. dushelov (Душелов) 28.12.09 20:59
(22) Такого сделать не возможно.
24. dushelov (Душелов) 28.12.09 21:07
+(23)

А в чем проблема настроить вебсервер или расшарить папку в сети и грузить html вида \\192.168.0.1\components.html ?
25. Дмитрий Богданов (eiffil) 28.12.09 21:08
какая-то запара с вэб-сервером, не хочет страница показывать компонент. Вместо него как-будто в страницу вставлен фрейм с двумя полосами прокрутки...

Не похоже, что это так и должно быть :| . В чем может быть косяк?
26. dushelov (Душелов) 28.12.09 21:13
(25) Не хватает прав. Эксплорер блокирует активикс.

"На клиентских машинах данный веб-сервер добавляем в список "надежных узлов"

(В IE - меню "Сервис" - "Свойства обозревателя" - закладка "Безопасность" - зона "Надежные узлы")

и проверяем уровень безопасности для этой зоны (должно быть разрешено использование ActiveX)."
27. Дмитрий Богданов (eiffil) 28.12.09 21:30
не помогло... м.б. что-то в настройках веб-сервера надо сделать???
28. dushelov (Душелов) 28.12.09 21:41
(27) Если есть возможность скачать dll по ссылке, то с веб-сервером все нормально. А у эксплорера стот еще указать разрешение на выполнение .Net кода. вообщем, ради эксперимента стоит вообще поставить все в "разрешено" и поиграться настройками.
29. Дмитрий Богданов (eiffil) 28.12.09 21:49
В эксплорере уже выставил се по максимуму. При попытке сохранить с сервера файл Dushelov.VectorDrawing1C.dll он выдает ему такое содержимое:

<html><head><title>Error</title></head><body>Не найдена указанная процедура. </body></html>

Отсюда и получался фрейм, как на скриншоте
30. dushelov (Душелов) 28.12.09 21:51
(29) А в 8.1 эта компонента работает?
31. Дмитрий Богданов (eiffil) 28.12.09 22:01
сделал обычную (неуправляемую 8.2) форму, туда кинул контрол активХ - работает.
Что-то мне подсказывает, что в вэб-сервере настройки безопасности не дают выполниться dll-ке... Эх, как любят центральные 1С-ники усложнять жизнь...
32. dushelov (Душелов) 28.12.09 22:23
(31) Это не 1С-ники, это технология. Как же еще та же компонента будет работать в веб-клиенте? Там на форму ничего не кинешь.

А настройки безопасности не в веб-сервере, а именно в эксплорере, от веба главное отдать файл и все.
33. Дмитрий Богданов (eiffil) 28.12.09 23:17
прогресс наступил (мало ли кому пригодится). по материалам похожего вопроса на gotdotnet выяснил, что если для папки в которой лежит dll в настройках стоит
Execute Permissions: Scripts and Executables
при этом dll интерпретируется как ISAPI dll, поэтому при обращении к ней она пытается выполниться и в результате выдается ошибка 404: ресурс не найден.
Для решения проблеммы достаточно убрать разрешение на выполнение для папки в которой лежит контрол...

Однако контрол всё равно не отоборажается, хотя скачать уже его можно... Буду копать дальше...
Душелов; +1 Ответить 1
34. dushelov (Душелов) 28.12.09 23:32
(33) Ну вот, уже набирается материал для собственной статьи ;)
35. Роман Осадченко (cleaner_it) 13.01.10 04:33
(34) А на обычной форме в "толстом" клиенте пробовал визуальные актив-икс компоненты располагать? Что-то поиск молчит по этому поводу, такое чувство что все актив-икс придется располагать в тонких клиентах, и толстые совсем не у дел останутся
36. dushelov (Душелов) 13.01.10 08:09
(34) В управляемых формах? Точно так же.
37. dushelov (Душелов) 23.03.10 12:09
Спасибо sgeneralov за дополнение к статье по настройкам безопасности для .Net Framework'а.
38. dushelov (Душелов) 23.03.10 14:11
Добавил видео, демонстрирующее работу визуальной компоненты в тонком клиенте.
39. sergling (sergling) 28.05.10 15:42
подскажите почему у меня не работает конструкция
ОбъектВК = ЭлементВК.contentDocument;
а работает
ОбъектВК = ЭлементВК;

при этом почему то в отладчике не видно реальных методов и свойств объекта, хотя использовать их получается? Основная же моя беда - не находятся события объекта.
40. dushelov (Душелов) 28.05.10 16:09
(39) Вебклиент? Версия платформы какая?
41. dushelov (Душелов) 28.05.10 16:27
(39) и еще, события "не находятся" еще потому, что они могут быть с русскими названиями
И в отладчике не всегда видны свойства и методы ком-объектов.
42. sergling (sergling) 28.05.10 16:43
Тонкий клиент, 8.2.10.82, 8.2.11.229
пробовал свою компоненту, не из статьи
43. sergling (sergling) 28.05.10 16:46
(41) имена латинскими, мне почему-то кажется что как-то связано с contentDocument, может быть новая версия платформы иначе работает.
44. dushelov (Душелов) 28.05.10 16:58
contentDocument - это ActiveX-объект InternetExplorer'a
45. sergling (sergling) 16.06.10 11:40
Запустил таки это чудо через тонкий клиент (свой компонент), но вот при попытке старта через web-клиент получаю от браузера "...ФормаУправляемая.Форма(418)}: Поле объекта не обнаружено (url)". Соответственно 418 строка это
Элементы.ВьюверПоле.Документ.url = "http://localhost/agro.html";
как тут быть? У меня IE 8.0.6001.18702, может версия не подходящая?
46. kiba Ковальчук (kiba) 18.06.10 16:49
У кого-нибудь получилось таким же образом подключить компоненту WebCam.dll тоже от Dushelovа? Все делал по аналогии. Но не работает - черный квадрат и все...
47. Павел Рудаков (minister2007) 19.06.10 21:16
dushelov, подскажи, что может быть при web-клиенте "Поле объекта не обнаружено (URL)"? В тонком все "как по маслу".
48. sergling (sergling) 21.06.10 11:30
У меня и его компонента и моя отлично работают в тонком клиенте. Обновил ИЕ до 8 версии, поставил фреймверк 2 версии, добавил хост в доверенную зону, разрешил для доверенной зоны все.
49. sergling (sergling) 21.06.10 12:11
Получается что свойство "Документ" поля вида "Поле html Документа" не работает в веб-клиенте, во всяком случае его тип не определен, по документации такое св-во доступно только в толстом клиенте. Однако успешно использует в тонком.
50. sergling (sergling) 22.06.10 13:34
св-во "документ" не доступно в обработчике при открытии формы в веб-клиенте, после открытия пожалуйста...
51. dushelov (Душелов) 22.06.10 13:51
Скорее всего при открытии его еще нет, этого документа, точнее его значение равно Null
52. sergling (sergling) 23.06.10 11:08
Вот это очень сбило с толку, сейчас пытаюсь понять почему в веб-клиенте не работает
ОбъектВК = ЭлементВК.contentDocument; Нету св-ва contentDocument, т.е. работает такая конструкция ОбъектВК = ЭлементВК, но при этом не получается использовать события активХ элемента.
53. Виктор Даниленко (yastreb_220) 23.09.10 16:38
а вообще таким образом можно с любой dll -кой работать чтоли??? кто нить пробовал??? напрмер в УТ 11 можно будет покдлючить оборудование ???
54. Сергей (seermak) 05.11.10 09:46
Для заторможенных - на примере: http://infostart.ru/public/16446/ - как такое сделать в 8.2 на если несложно, то на пальцах :)
55. L_Oleg (l_oleg) 10.01.12 05:48
(54) seermak,
также интересует этот вопрос.
Уточню: в 8.2 на ТОНКОМ клиенте
56. Сергей Писларь (serpisal) 10.03.12 15:37
Интересно, пришлось чутка повозитья ,чтобы разобраться и прикрутить, но это того стоило
57. Валерий Іванович (firma-modul) 19.06.13 11:16
Зарегистрировал Active-X компонент в системе. На форму документа добавил Поле HTML документа.
При создании на сервере присваиваю переменной даного поля следующий текст:

<HTML>
<OBJECT id=ThermalLib classid=clsid:904511D2-5407-4033-8DAD-07B33EC7317E width=0 height=0><PARAM NAME=""_Version"" VALUE=""65536""><PARAM NAME=""_ExtentX"" VALUE=""26"">
<PARAM NAME=""_ExtentY"" VALUE=""26"">
<PARAM NAME=""_StockProps"" VALUE=""0"">
</OBJECT>
</HTML>



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

Иду в свойства обозревателя. Для зоны "Интернет" Включаю всевозможные настройки Active-X и сценарии.

Запускаю форму - вуаля, ни на что не ругается, компонента Active-X отлично работает.

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

Нужно все те настройки включить только для надежных узлов. Но самый сложный вопрос: Какой адрес добавить в надежные узлы??? Промучался. Что только не добавлял. И 904511D2-5407-4033-8DAD-07B33EC7317E добавлял, и clsid:904511D2-5407-4033-8DAD-07B33EC7317E добавлял не работает. Открываю форму - все те же сообщения и 1С виснет намертво.
58. Валерий Іванович (firma-modul) 19.06.13 11:17
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа