Имя: Пароль:
1C
 
Проблема с OLE
0 Новичок
 
13.03.09
12:52
1. Запускаю первую 1с, а из нее подключаюсь в к другой 1с через OLE - запускаю отчет.
2. Через 3-4 минуты выходит сообщение:
Сервер занят
Действие не может быть завершено,
так как другая программа занята.
Для перехода к этой программе
воспользуйтесь кнопкой "Переключиться".

После этого 1С - которая OLE, не отключается никакой командой (ЗавершитьРаботуСистемы(0); СтатусВозврата(0), Возврат)

С уважением, Ильдар
1 Нуф-Нуф
 
13.03.09
12:54
тезка!
2 Ёпрст
 
гуру
13.03.09
12:55
(0) выходит по таймауту в 2 минуты...
3 big
 
13.03.09
13:00
Я оптимизировал отчет по скорости работы, выбирал меньшие периоды и т.п. Либо сидеть и ждать пока оно там само по себе всё сделает. А если надо просто отключить, то где-то была приблудка, делающая окно ОЛЕ-базы видимым.
4 Cthulhu
 
13.03.09
13:00
(2): причем таймаут этот не забороть никак, олина специфика..
5 DrZombi
 
гуру
13.03.09
13:47
(4)Не знаю, но олешнные базы отпадывают на ура :)

(0)Ты хоть ссылки на объекты зануляешь? (документы, справочники - созданные командой CreateO...)
Так же, если ты попробуешь выйти из 1С, то оно выдаст такое сообщение типо, прес "Да" или "Нет" для подтверждения выхода.
Дак вот это сообщение отрабатывает и в оле. В сущьности олешная база - это полноценная база, но невидимая для юзора и управляемая другим приложением. Т.е. все ошибки и т.д. оно отрабатывает, но ты это не видишь, но чувствуешь по времени застоя :)
Так же если ты открываешь слишком много ОЛЕ баз и так же при этом других баз, то это тоже негативно скажится на оле базе :)
6 Новичок
 
13.03.09
15:15
Объектов я никаких не создаю, просто запускаю отчет:
Оле.EvalExpr("ОткрытьФорму(""Отчет.АнализЦенообразованияПериодики"",1)");
ЗавершитьРаботуСистемы(0);
7 Ёпрст
 
гуру
13.03.09
15:16
(6) А нафига его по Оле запускать вообще ?
8 Valery
 
13.03.09
15:20
Так просит типа период открыть. По Alt-Tab переключись и нажми на кнопку
9 Новичок
 
13.03.09
15:40
Запускать отчет в 1с, через пользователя, это неинтересно и криво.
Что под каждую задачу создавать нового пользователя или выдумывать какие-то параметры?
10 Новичок
 
13.03.09
15:41
Про Alt-Tab не понял. Все это происходит ночью - роботом.
11 Ёпрст
 
гуру
13.03.09
15:43
(9) Чем криво то?
Оле - мега тормоз в принципе..
А под одним пользователем-роботом можно поназапускать всё что угодно.
12 Новичок
 
13.03.09
15:44
Как под одним пользователем запустить несколько процессов? Пример?
13 Ёпрст
 
гуру
13.03.09
15:45
(12) зачем ?
а так, не прописывай ему рабочий каталог...и хоть обзапускайся.
14 Ёпрст
 
гуру
13.03.09
15:46
+13 тем более, что по оле ты один хрен делаешь тоже самое - т.е указываешь юзверя!
:)
15 Новичок
 
13.03.09
15:55
с 12 и 13 - можно долго объяснять. Предлагаю вернуться к решению проблемы, рано или поздно все с ней столкнемся.
16 Valery
 
13.03.09
15:55
(10) Так может ругается на смену дат? Тогда поставить "не изменять"
17 Новичок
 
13.03.09
15:56
Нет на смену дат не ругается. Проверял днем тоже самое: Сервер занят.
18 Ёпрст
 
гуру
13.03.09
15:56
(15) оптимизировать отчет, не запускать его по оле..
19 Valery
 
13.03.09
15:57
(18) Так посмотри на что ругается?
20 Новичок
 
13.03.09
15:59
Ошибки то нет. Когда нажмешь кнопку Переключиться, то 1С закрывается - и все в порядке.
Может кто знает как сделать прогу, чтобы без участия Пользователя нажималась кнопка Переключиться.
21 Ёпрст
 
гуру
13.03.09
16:00
(20) скриптом нажимать через сендкей, например.. только лучше вообще отказаться от оле.
22 Новичок
 
13.03.09
16:03
Не могли бы Вы привести пример скрипта, а то я не силен в программировании. Только в 1с балуюсь.
23 Torquader
 
13.03.09
21:23
Если любой OLE-сервер долго не отвечает на запрос, его вызвавший (долго, это более 2 минут - настраивается где-то в реестр - говорят, что можно сделать 30 дней, так как параметр в миллисекундах, но я его так и не нашёл).
Если время ответа истекло (а 1С в это время формирует запрос), то подсистема OLE возвращает ошибку, что сервер не отвечает.
Заставить сервер отвечать можно только путём разбития запроса на части, которые выполняются меньше 2 минут, но это сильно сказывается на производительности.
Если у вас "клюшкодром", то всё можно сделать без ОЛЕ - просто запустить базу под определённым пользователем, чтобы она открыла окно (желательно с интерфейсом, из которого ничего нельзя сделать), а потом по DDE "пихнуть" ей команду "ОткрытьФормуМодально( ... и т.д.
В этой форме последним действием должно быть сохранение результата в файл и создание специального файла-флага, который из запустившего приложения мы будем отслеживать в фоновом режиме, если случиться что-то страшное (Какая-то ошибка), то надо написать модуль выполнения отчёта так, чтобы он в файл-флаг складывал сообщение об ошибке.
Удачи.
24 Cthulhu
 
14.03.09
00:57
(23): см.(5), нигде это не настраивается...
(15): сталкивание с проблемой приводит к отказу от оли в случаях таймаутов, а практика показывает что случаев когда это (отказ от оли и достижение нужной цели без не1) нужно - это всегда возможно.. после такого сталкивания рецидивов не возникает.
25 timgan
 
14.03.09
07:17
Кстати официальный ответ 1с:

При использовании работы ИБ через OLE выдается сообщение: "Действие не может быть завершено, так как другая программа занята. (сервер занят)
Для перехода к этой программе воспользуйтесь кнопкой "Переключиться"."

Время до появления диалога "зашито" в 1С:Предприятие и не может быть изменено из встроенного языка или внешними средствами. Однако согласно документации Микрософт данное сообщение появляется только в случае, если пользователь использовал кливиатуру или мышь во время работы OLE-сервера - поэтому можно посоветовать после запуска обработки дождаться ее завершения, и лишь затем продолжить работу.
26 timgan
 
14.03.09
07:18
Если задачи происходят ночью, кто интересно дергает клавиатуру и мышь!
27 kvk
 
14.03.09
13:06
(20) Вот вариант: http://infostart.ru/projects/645/
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший