Имя: Пароль:
1C
 
Возможен ли асинхронный запуск задач через 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
Ага, пасибки всем! Дальше попробую сам разрулиться :)