![]() |
![]() |
![]() |
|
Возможен ли асинхронный запуск задач через COM-соединение? | ☑ | ||
---|---|---|---|---|
0
Лойфер
15.02.07
✎
11:29
|
Объяснюсь. Моя программа создает COM-соединение с внешним 1С:Предприятием:
V8 = Новый COMОбъект("V8.Application"); V8.Connect(СтрокаСоединения) Через созданное подключение мне надо запустить процесс и все. Мне не нужно дожидаться его завершения. То есть дал команду и занимаюсь своими делами и время от времени, по таймеру, проверяю - закончилась ли внешняя задача. Можно ли это осуществить средствами 1С? |
|||
1
vde69
15.02.07
✎
11:46
|
можно, но для этого у тебя должен быть запущен дочерний процесс который и будет обрабатывать ожидание.
короче средствами 1с это нельзя, для реализации надо написать exe файл... |
|||
2
avmlvm
15.02.07
✎
11:52
|
(0) Можно.. И даже легко :-)
Просто в своей задаче под 1С должно быть "завершающее" EXIT т.е. если процесс "сам себя убивает", то о нём можно и не заботиться :-) |
|||
3
Лойфер
15.02.07
✎
11:56
|
(2) Извольте объясниться - это как же? Ведь внешняя задача должна отработать, и пока она не отработает - она не вернет управление запустившей ее программе. А что это за "EXIT" - что он делает и как его запустить?
|
|||
4
avmlvm
15.02.07
✎
12:04
|
(3) Не-е.. подожи...
"пока она не отработает - она не вернет управление запустившей ее программе" Где ты видишь в приведённом коде "синхронность"? V8 = Новый COMОбъект("V8.Application"); Это типичная "ассинхронная команда".. Ты дал команду на создание ком-объекта и у тебя твоя программа будет выполняться ДАЛЬШЕ вне зависимости от времени "жизни" созданного тобой объекта... V8.Connect(СтрокаСоединения); Тоже тебя никак не "напрягает"... То что ты передал в объект какую-либо "строку" - это тоже "ассинхронно"... Короче... Объясни.. Суть.. В чём именно "твои тараканы"? :-) |
|||
5
Лойфер
15.02.07
✎
12:17
|
Ах вон ты о чёёёёёёёёёём.... Хм...
В общем, знакомьтесь: Таракан №1: После того как я создал соединение, я получаю доступ к обработкам внешней программы (это или объект базы или ВнешниеОбработки или обработка из файла epf) и запускаю ее командой Выполнить(СтрокаЗапуска+"("+ПараметрыПроцедуры+")"); И вот, пока внешний объект не отработает следующая строка не получит управление. |
|||
6
Лойфер
15.02.07
✎
12:20
|
(4) Насколько я понял ты предлагаешь повесить процедуру, которая будет запускать внешнюю задачу на событие "ВнешнееСоединение" или "ПриНачалеРаботыСистемы", некоей третьей конфигурации. Так?
Агаааа... Должно получиться. |
|||
7
Лойфер
15.02.07
✎
12:22
|
(4) А как отслеживать, что процесс отработал? По некоему файлу на диске? Типа, если в нем строка "Ок", то процесс отработал. Так? Или есть более продвинутые способы?
|
|||
8
avmlvm
15.02.07
✎
12:27
|
(5) Хм-м-м... Давай сначала :-)
Через V8 = Новый COMОбъект("V8.Application"); Ты создаёшь ком-объект с платформой 1С... А в "рамках" этой платформы могут выполняться задачи как "синхронные", так и "асинхронные"... Это ну никак не "отражается" на твоём приложении, которое этот ком-объект создало... И если в рамках твоего ком-объекта будут "пораждаться" асинхронные процессы, то это будет происходить до тех пор пока либо ком-объект "внутри себя" не получит EXIT либо ты сам не "уничтожишь" данный ком-объект... (7) Вопрос семафоров - вопрос религии... Как вариант... Этот ком-объект сам присоединяется к твоей конфигурации и сам меняет значение некой константы с ТРУ на ФАЛС :-) |
|||
9
Лойфер
15.02.07
✎
12:36
|
(8) Ну, насчет семафоров - проще, имхо, в файл - и главное спокойнее на душе :)
А вот уточнить хочется - какое событие происходит при создании COM-объекта - "V8" (куда код класть?) ? И еще - как свернуть объект? ЗавершитьРаботуСистемы - написано в синтаксиспомощнике - "Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения. ". То есть у меня не получится этой командой убить объект? |
|||
10
avmlvm
15.02.07
✎
12:48
|
(9) Да не парься ты с событиями ком-объектов "как таковыми"... Тебя собственно должно интересовать события самой 1Ски.. Например "при начале работы системы".. :-)
>"ЗавершитьРаботуСистемы - написано в синтаксиспомощнике - "Недоступен на сервере 1С:Предприятие" А зачем тебе "завершать работу" у сервера 1С Предприятия? Тебе нужно "завершить работу" у "клиента" (у того приложения которое "живёт" на сервере 1С предприятия) Короче... Не путай ком-объект "сервер 1С предприятия" и тот ком-объект который ты сам породил через V8 = Новый COMОбъект("V8.Application"); |
|||
11
Лойфер
15.02.07
✎
13:06
|
Ага, пасибки всем! Дальше попробую сам разрулиться :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |