gifts2017

[Генератор внешних событий] Внешняя компонента для 1С

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

Компонента генерирует внешние события с заданным интервалом и с заданными значениями.

*** Для работы компоненты потребуется установленный Microsoft .NET Framework 2.0, который можно скачать отсюда.


Чтобы зарегистрировать компоненту в Windows - запустить reg.bat


*** Подключение:

Перем ВК;

ПОДКЛЮЧЕНИЕ КОМПОНЕНТЫ В 1С 7.7:

  ИмяВК="AddIn.ExtEventGen";
 
  Попытка
      ПодключитьВнешнююКомпоненту(ИмяВК);
  Исключение
      Сообщить("Не удалось подключить компоненту "+ИмяВК);
  КонецПопытки;

  Попытка
      ВК = СоздатьОбъект(ИмяВК);
  Исключение
      Сообщить("Ошибка создания объекта внешней компоненты: "+ ИмяВК);
  КонецПопытки;

ПОДКЛЮЧЕНИЕ КОМПОНЕНТЫ В 1С 8.x:

  ИмяВК="AddIn.ExtEventGen";
  
  Попытка
      ПодключитьВнешнююКомпоненту(ИмяВК);
  Исключение
      Сообщить("Не удалось подключить компоненту " + ИмяВК);
  КонецПопытки;
  
  Попытка
      ВК = Новый(ИмяВК);
  Исключение
      Сообщить("Ошибка создания объекта внешней компоненты: " + ИмяВК);
  КонецПопытки;

*** Методы:

  • Добавить(ИмяСобытия, Данные, Интервал) //интервал в милисекундах
                                                                    //при 0 интервале событие сгенерируется 1 раз и станет не активным
  • ДобавитьПоВремени(ИмяСобытия, Данные, ДатаВремя) //ДатаВремя - строка, вида "Дата Время"  - Старт(ИмяСобытия)
  • Стоп(ИмяСобытия)
  • Удалить(ИмяСобытия)
  • УдалитьВсе()
  • ПолучитьСписокВсехСобытий()
  • ПолучитьСписокАктивныхСобытий()

*** Внешнее событие:

  • Источник - "ExtEventGen"
  • Событие -  ИмяСобытия
  • Данные - Значение события, переданное методом "Добавить"

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

Наименование Файл Версия Размер
- 795
.1236320992 15,49Kb
25.09.09
795
.1236320992 15,49Kb Бесплатно

См. также

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

Комментарии

1. Василий Демидов (Душелов) 06.03.09 09:30
Написана по просьбе Че...
Для каких целей это используется, я не представляю :)
2. Александр Рытов (Арчибальд) 06.03.09 09:58
А что, потом ОбработкаВнешнегоСобытия сработает? Если так, то мне как раз это надо!
3. Василий Демидов (Душелов) 06.03.09 09:59
(2) Конечно, для этого и сделано.
4. Александр Рытов (Арчибальд) 06.03.09 10:01
Большое ЧЕ ловеческое спасибо!
5. Василий Демидов (Душелов) 06.03.09 10:02
При добавлении события с уже существующим именем происходит остановка раннего события и замещения его на новое, с новыми параметрами.
6. Александр Рытов (Арчибальд) 06.03.09 10:05
(5) Ну прямо в точку, чего хотелось. В декабре. Но и сейчас не поздно.
7. Аркадий Кучер (Abadonna) 06.03.09 10:07
Оно, конечно, круто отдельную ВК для внешних событий, но осмелюсь заметить
(и Арчибальду тоже), что в http://infostart.ru/projects/3142/ (лежит с декабря)
есть метод DoEvent(Событие,Данные)
8. Василий Демидов (Душелов) 06.03.09 10:08
(7) Ну эт как бы не просто сгенерить, а с заданным интервалом ;))))
9. Аркадий Кучер (Abadonna) 06.03.09 10:09
(8) бе-бе-бе ;) а 1С никак нисся по таймеру вызывать? ;)))
10. Василий Демидов (Душелов) 06.03.09 10:12
(9) Не комильфо! :)
Арчибальд; +1 Ответить
11. Александр Рытов (Арчибальд) 06.03.09 10:19
(7)А я скачал. Правда, тогда забыл плюсик поставить. Исправился. Но таки не сообразил, как смоделировать несколько параллельных ОбработокОжидания.
12. Аркадий Кучер (Abadonna) 06.03.09 10:45
(11)>не сообразил, как смоделировать несколько параллельных ОбработокОжидания.
Уговорил ;) В новой версии Miracle таймеров можно насоздавать, как у дурака махорки. Хотя можно обойтись и одной ОбработкойОжидания, достаточно в качестве процедуры подцепить что-нибудь типа "ДиспетчерОбработок", а уж в нем рулить как хошь
13. Василий Демидов (Душелов) 06.03.09 10:48
(12) Обработка ожидания не наш метод! По-моему в 1С-ке только один экземпляр обработки ожидания можно создавать (в 7-ке точно так было)?
14. Аркадий Кучер (Abadonna) 06.03.09 10:52
(13) Ну дык я про то же:
"достаточно в качестве процедуры подцепить что-нибудь типа "ДиспетчерОбработок", а уж в нем рулить как хошь"
Я еще в младенчестве так выполнял разные и с разным интервалом ;)
15. Александр Рытов (Арчибальд) 06.03.09 10:52
(12)Да выкрутиться-то всегда можно. Даже на машине Тьюринга. Я и выкрутился уже, но коряво получилось - таблица состояний системы, варианты переходов - черт ногу сломит. Душа красоты просит...
16. Александр Рытов (Арчибальд) 06.03.09 10:57
(13) Именно не наш. Мало того, что один экземпляр, он еще и полсекунды не понимает.
17. vip (vip) 06.03.09 11:10
(13) Обработка ожидания наш метод.
FormEx (и класс Таймер в 1С++) позволяют создавать сколько угодно таймеров с интервалом от 1мс (это и для (16) и для (12) ответ).
Работают и в модальном окне, и при свернутом окне 1С.
Процессор не грузят, так как их обработка идет в idle-time.
А тов. Че, как всегда, идет своим путем.
18. Аркадий Кучер (Abadonna) 06.03.09 11:12
(16)>он еще и полсекунды не понимает.
Из хэлпа ВК всех времен и народов (Formex ;))
ОбработкаОжидания(<?>,)
Синтаксис:
ОбработкаОжидания(<Имя>,<Интервал>)
Назначение:
Вызывает глобальную процедуру с заданным интервалом в милисекундах.
Параметры:
<Имя> - строка с именем глобальной процедуры (если в качестве параметра передается
'пустая строка', то ранее запущенный процесс прекращается);
<Интервал> - интервал вызова в миллисекундах (если в качестве параметра передается
'пустая строка' или 0, то ранее запущенный процесс прекращается).
Пример:
Сервис = СоздатьОбъект("Сервис");
Сервис.ОбработкаОжидания("глПолучитьНовыеЗаявки",200);
19. vip (vip) 06.03.09 11:19
(18) > Из хэлпа ВК всех времен и народов (Formex ;))

Ё!!! Как согласуется с "Программы бывают двух видов - мои и куевые"?
20. Аркадий Кучер (Abadonna) 06.03.09 11:22
(19) Исключения только подтверждаю правила, чи ты не в курсе? :))))
21. Василий Демидов (Душелов) 06.03.09 11:27
Вот придет Че и все расставит на свои места :)))
22. vip (vip) 06.03.09 11:29
(20) А вообще приятно слышать (видеть) такое от мэтра ;)
ЗЫ. Ты для меня тоже входишь в первую тройку исключений.
А фраза "Программы бывают..." должна быть аксиомой для настоящего неперенумератора.
23. Аркадий Кучер (Abadonna) 06.03.09 11:30
(21) Если кто и изобретет вечный двигатель, так это тот, кто физику не учил, и не знает, что нельзя;)
24. Василий Демидов (Душелов) 06.03.09 11:32
А может я API расширил, в отличии от FormEx'а, типа управлять можно событиями и статусы ловить :)
25. Аркадий Кучер (Abadonna) 06.03.09 11:35
(24) А мы разве про тебя? :)))
Ты тут с какого бока? Мы про Че ;))))))))
26. vip (vip) 06.03.09 11:38
(24) Статусы в смысле обрабатываешь очередь событий?
27. Василий Демидов (Душелов) 06.03.09 11:40
(26) Да и это можно добавить при желании-то :)
28. vip (vip) 06.03.09 11:41
(27) А сейчас, без добавления, что ты имел ввиду?
29. Василий Демидов (Душелов) 06.03.09 11:43
Как бы посмотреть активные или нет хотя бы ;)
30. Александр Рытов (Арчибальд) 06.03.09 11:45
(18)Я в 16 об 1С говорил. Мне что, хелп от 1С процитировать?
31. vip (vip) 06.03.09 12:12
(30) А для меня давно уже 1С без 1С++ и FormEx это не 1С.
(29) Тов. Че похоже идет опять своей дорогой. Подозреваю, что он рассчитывает на юзера, сканирующего что-то с космической скоростью.
Так вроде сам механизм асинхронной обработки событий предполагает очередь.
32. Александр Рытов (Арчибальд) 06.03.09 13:09
(31)Похоже, 1С существует вне Вашего сознания. Ничего, они за это поплатятся!
33. Артур Аюханов (artbear) 06.03.09 13:12
Для 77 мой Таймер позволяет работать асинхронно и в качестве обработчика назначать почти все что угодно :) - процедуру глобальника, процедуру модуля формы, метод любого объекта, в т.ч. и объектов классов 1С++, и т.д.
34. Александр Рытов (Арчибальд) 06.03.09 13:44
(21)Воистину без Че не разберешься.
Мне такая фишка нужна была, чтобы смоделировать асинхронный поток событий от внешних устройств (в том числе, пока что физически не существующих), на этой основе оценить защищенность будущей системы "от дурака" и сделать вывод о работоспособности в онлайновом режиме. Сама система работает с 2001 г., т.е. без формекса, миракля и ++. Другие решения, как приведенные в обсуждении, так и не приведенные, тоже способны решить задачу. Решение Душелова - подходит сразу.
35. Сhe Burashka (CheBurator) 06.03.09 13:48
(17) Товарищ Че идет своим путем только потому, что не имеет в "доступном" виде репозитарий материалов по 1С++, а шарить по форуммам месяц, чтобы самому все сделать как оно должно быть по уму - у меня хватает пока работы и без этого ;-)
Попавший ко мне в руки около года назад репозитарий классов и обработок 1С++ - редкостное гуано (сорри!) - валится на синтакисческих ошибках и представляет из себя именно "кучу"... может с тех пор что-то и изменилось...? сорри, мне как больше прикладнику - необходимы готовые и относительно вылизанные инструментарии... Василий готовую к работе ВК сваял по моему запросу практически мгновенно - вот в чем преимущество... И! очень большой вес имеет то, что контакт с разработчиком - живой!
36. Сhe Burashka (CheBurator) 06.03.09 13:52
Угумс, мне это нужно было для решения некоторых специфических задач:
- ввиду того, что складская база не разнесена от менеджерской - представляется нецелесообразным каждое сканирование писать в базу сразу - могут быть клинчи из-за нагрузок;
- обработку ожидания, которая могла бы решить проблемы периодического слива сканов в базу - применить не удалось из-за особенностей работы с формой (на тот момент);
- юзеры сканирую с приличной скоростью (с расчетом того, что сервер - это и не сервер вообще)...
37. Сhe Burashka (CheBurator) 06.03.09 13:53
Ну не доходят у меня руки до 1С++ в полной мере - не доходят...
38. Сhe Burashka (CheBurator) 06.03.09 13:55
На данный момент у меня, например, есть весьма востребованная для меня задача (обсуждал я ее уже):
- требуется одному терминальному сеансу 1Ски получить "сообщение" о событии из другого терминального сеанса 1Ски, при этом: минимум исправлений в структуре конфиги; запрет на использование ОбработкиОжидания.. ну и еще по мелочи...
39. Сhe Burashka (CheBurator) 06.03.09 13:56
(34) > Решение Душелова - подходит сразу.
потому что оно - жизненно! т.е. решает явную задачу...
40. Аркадий Кучер (Abadonna) 06.03.09 13:59
(35-39) А где плюс-то твой? ;)
41. Сhe Burashka (CheBurator) 06.03.09 14:06
(40) мне вот непонятна эта ваша тяга к регалиям...
;-)
42. Аркадий Кучер (Abadonna) 06.03.09 14:09
(41) А я тут при чем? Сделано для тебя, быстро, устраивает - поощряй.
Пиво, ктр. ты поставишь Василию, никто не увидит, а плюсик - все ;)
43. Сhe Burashka (CheBurator) 06.03.09 14:11
как это "пиво никто не увидит" - а сам Василий???
44. Василий Демидов (Душелов) 06.03.09 14:11
45. Артур Аюханов (artbear) 06.03.09 14:22
(35) Ты различай прикладные решения по 1С++ и саму ВК 1С++ - это разные вещи.
Проблемы прикладных решений не являются проблемами 1С++ !
Сама ВК 1С++ достаточно документирована и отлажена/проверена/протестирована.
А вот у прикладных решений, например, тот же репозитарий классов 1С++, могут быть и есть проблемы, к моему сожалению.

Юзай 1С++ в чистом виде, пиши свои классы и нет никаких проблем.
46. Аркадий Кучер (Abadonna) 06.03.09 14:25
(45)>пиши свои классы и нет никаких проблем.
Сейчас Серега спросит:
"пап, а ты с кем разговаривал?" ;)
47. Игорь Белышев (biv75) 06.03.09 14:31
Ну вы ещё подеритесь, настоящие финские парни )))
48. Сhe Burashka (CheBurator) 06.03.09 14:42
(45) спок! я различаю! ;-)
смысл в том, что 1С++ и прикладные решения на этой основе можно рассматривать по аналогии как 1С и типовые конфигурации. Соответственно, голая "платформа" сама по себе мало что дает, точно так же мало что дает набор кривых ублюдочных решений (я утрирую, так что не обижайтесь ;-)
49. Артур Аюханов (artbear) 06.03.09 14:51
(48) Вот как раз подобная аналогия и не очень верна :(
Тем более, что все-таки существует огромная куча решений сторонних разработчиков, не 1С, в коде 1С, никак не связанных с типовыми конфами.
Еще - эта ВК Василия также идет без доп. решений, примеров и т.д. Если утрировать (при этом никому не нагрубив), ты ее также не можешь применять.

ЗЫ прошу больше не применять утрированных выражений типа "ублюдочных, гуано" и т.д. к решениям, которые ты не юзаешь, а многие другие успешно и не первый год юзают :( - например, 1С++ и т.п.
Иначе обижусь сильно :)
50. Сhe Burashka (CheBurator) 06.03.09 14:58
(49) спакуха! я 1с++ тоже юзаю, и помогает иногда очень сильно.
так что не обижайтесь!
А Василий, кстати, все свои ВК иллюстрирует содержательными показательными примерами!
..а
аналогия, в какой-то мере, не очень верна, но весьма похожа. В том числе и в плане "в коде 1С, никак не связанных с 1С" - как раз в том плане, что ряд разработок всяких контор уже можно считать "типовыми", а остальное - одноразовые решения, которые для использования в другом месте - или надо драчевым енапильником обрабатывать, или проще сразу пристрелить и свое написать.. ;-)
51. Александр Рытов (Арчибальд) 06.03.09 15:55
(39)И я ж о том. МОЮ задачу решает - от меня плюс. Это при том, что в системе использоваться не будет - только при оценке рисков.
Жаль, что с пивом для Василия у меня проблемы...
52. Сhe Burashka (CheBurator) 11.03.09 00:35
(51) деньги на пиво для Василия можешь кинуть мне на вебмани (в профиле), а я уже при встрече Василию проставлюсь
53. Александр Рытов (Арчибальд) 11.03.09 09:09
(52)Смотрел профиль, не нашел ничего. Кинь номер в личку что ли. Ну бестолковый я, может быть...
54. Александр Левнёв (alevnev) 15.03.09 01:10
(34) > Решение Душелова - подходит сразу.

Подтверждаю! Хотя применял и для другой задачи! ;)
55. Василий Демидов (Душелов) 21.03.09 01:25
Добавил:

- ДобавитьПоВремени(ИмяСобытия, Данные, ДатаВремя) //ДатаВремя - строка, вида "Дата Время"
Срабатываеп единожды по таймеру.
56. Cthulhu (Cthulhu) 12.08.09 17:43
(55): Строка ДатаВремя (д/77 интересуюсь) в каком формате?.. неплохо бы ГГГГММДДhhmmss, а?.. ну или в настраиваемом?..
а "ДобавитьПоТаймауту(ИмяСобытия,Данные,ТаймаутМилисекунд)" - не было мыслей?..
57. Cthulhu (Cthulhu) 12.08.09 17:45
ЗЫ: и в (7) ссылка в никуда...
58. dushelov (Душелов) 12.08.09 17:55
(56) Формат сейчас "20.09.2009 12:59:27".
Настраиваемое - все можно. Но не считаю нужным, да и времени нет свободного.
(57) У Абадонны все разработки удалены.
59. Аркадий Кучер (Abadonna) 13.08.09 03:20
(58)> Но не считаю нужным, да и времени нет свободного.
Одобряю! ;) Хотельщики пусть сами пишут.
Поэтому "У Абадонны все разработки удалены."
60. Сергей Калистратов (skalistratov) 24.11.09 17:41
Доброго времени суток.

Пробовал использовать ВК для передачи событий из одного сеанса ИБ в другой - не сработало. У кого-нибудь получалось?
61. Сергей (Che) Коцюра (CheBurator) 16.06.10 21:20
(60) и не сработает, но решения - есть
62. Сергей (Che) Коцюра (CheBurator) 16.06.10 21:21
Василий, установлена мелкая трабла в компоненте:
глГенераторСобытий.Добавить("WMSЗАКРЫТЬПОНЕАКТИВНОСТИ","wms_ПАРОЛЬ",600000); //10 мин
глГенераторСобытий.Старт("WMSЗАКРЫТЬПОНЕАКТИВНОСТИ");
- вот так не срабатывает, если интервал уменьшить до 300000 - т.е. 5 мин - то ок. Типа где-то что-то "переполняется".
.
настоятельно призываю вернуть компоненту к жизни - с меня угощение на тусняке!
63. dushelov (Душелов) 16.06.10 21:31
(60) http://infostart.ru/public/19355/
(62) Это уже мне придется писать заново, так что как время появится, с коим у меня пока проблема...
64. Сергей (Che) Коцюра (CheBurator) 16.06.10 21:35
(63) по (60) у Садовникова сделано можно без серверного приложения - но надо заниматься "поддержкой" - пример на РиКцентре есть.. на NetaInet сделано.
65. Сергей (Che) Коцюра (CheBurator) 16.06.10 21:37
(63) по (62) - я в курске, я ж не задарма! - пиво с закусем по-любому обломится ;-) по факту готовности сабжа (когда время будет) - готов даже красивую доку написать, еще бы конечно без привязки a фреймворку это все работало (но это уже сверхотелка)
66. dushelov (Душелов) 16.06.10 21:39
(64) С серверном лучше, проще и дешевле всего, ибо не нужен инет.
(65) Без фреймворка - неее, C# основан на нем, на другом принципиально не пишу, а по остальному - вполне.
67. Сергей (Che) Коцюра (CheBurator) 16.06.10 21:57
(66) ну так короче - я побежал пиво в холодильник ставить?
68. dushelov (Душелов) 16.06.10 22:21
69. Сергей Карташев (Elisy) 16.07.10 15:17
(62) Посмотрите http://infostart.ru/public/60232/
Весь код включен в обработку и легко настраивается через 1С.
70. Сергей (Che) Коцюра (CheBurator) 16.07.10 16:19
(69) я не сторонник тянуть слона если нужен всего его хвостик ;-) но спасибо, посмотрю поплдробнее...
71. dimasavangard (dimasavangard) 05.08.10 14:41
Объясните, на уровне “ЦерковноПриходскойШколы“ как сгенерить внешнее событие в одной базе ,дабы другая его восприняла?
72. Алексей Азов (unknown181538) 02.07.11 05:18
А можно ли заставить ее работать на Упр.формах?
Вызываю весь код на клиенте, выдает ошибку "Ошибка создания объекта внешней компоненты: "
73. Владимир Насыров (Spacer) 23.08.11 22:25
unknown181538 пишет:
А можно ли заставить ее работать на Упр.формах?
Вызываю весь код на клиенте, выдает ошибку "Ошибка создания объекта внешней компоненты: "


У меня тоже возник такой вопрос. И вот как я его решил:
1. Делаем управляемую форму (описывать процесс не буду, думаю вы в курсе что и как);
2. Добавляем макет типа "Двоичные данные";
3. В макет загружаем zip-архив, в котором должны быть 2 файла:
- внешняя компонента Dushelov.ExtEventGen.dll
- файл манифеста manifest.xml
4. В форме обработки в процедуре "ПриОткрытии" пишем примерно такой код:

&НаКлиенте
Перем ГенераторСобытий;

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ИмяВК="AddIn.ExtEventGen";
	
	Попытка
		УстановитьВнешнююКомпоненту("ВнешняяОбработка.Тест.Макет.ExtEventGen");
		ПодключитьВнешнююКомпоненту("ВнешняяОбработка.Тест.Макет.ExtEventGen", "ГенераторВнешнихСобытий", ТипВнешнейКомпоненты.COM);
	Исключение
		Сообщить("Не удалось подключить компоненту " + ИмяВК);
	КонецПопытки;
	
	Попытка
		ГенераторСобытий = Новый(ИмяВК);
	Исключение
		Сообщить("Ошибка создания объекта внешней компоненты: "+ИмяВК);
	КонецПопытки;
	
КонецПроцедуры
...Показать Скрыть


Обратите внимание на объявление переменной в модуле управляемой формы.
В прикрепленном файле образец переделанной мной обработки.
Ну вот собственно и все.
Прикрепленные файлы:
Тест82.epf
EvsO; builovalexey; ZhAmAn; unknown181538; +4 Ответить
74. Владимир Насыров (Spacer) 23.08.11 22:50
Еще вопрос к автору разработки -
можно ли как то устанавливать свое имя источника события в этой внешней компоненте?
Подозреваю что пока что нельзя. Но было бы очень здорово если бы вы сделали такую возможность.
75. Алексей (KokAN) 19.09.11 17:06
76. timofey dudarev (dudarev) 14.10.11 09:52
классика , очень занимательно
77. Алексей Миронов (a_mironov) 11.12.11 03:46
Скачал, прокомментирую после анализа. Надеюсь, поможет. Вообще, я ищу шаблон внешней компоненты для c#, чтобы форма c# вызывалась как дочерняя 1С, а не как отдельное окно
78. Иванов Алексей (acrk) 10.01.13 12:24
Нужна такая обработка.
Попробовал зарегистрировать в Windows 7, получил ошибку
RegAsm : Error RA0000 " Не удалось найти входную сборку "Dushelov.ExtEventGen.dll" или одну из ее зависимых сборок

Через regsvr32 выдает что "Модуль ... загружен, но точка входаDLLRegisterServer не найдена. Проверьте, что ... является правильным DLL или OCX и повторите попытку

Windows 7 Prof 64 Bit

Соответственно при запуске Тест.epf из 1С выдает
Ошибка создания объекта внешней компоненты: AddIn.ExtEventGen

Что делать?
zergey128; realchel; strannik1982; beshen11; GSA3D; treedo; lisov; Arc; hotey; +9 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа