Имя: Пароль:
1C
 
Программно открытая форма документа в цикле - как закрыть её сразу
0 NastyFrog
 
25.03.04
15:18
Профи, подскажите, почему, если один док открывать 1)- он закрывается сразу, а если в цикле перебирать 2)- то все документы норовят открыться и вешаются.
1)ОткрытьФорму(Док, Конт);
...
Конт.Форма.Закрыть();
2)
Пока Док.ПолучитьДокумент()=1 Цикл
ОткрытьФорму(Док, Конт);
...
Конт.Форма.Закрыть();
КонецЦикла;
1 Рупор абсурда
 
25.03.04
15:20
Настя, а скажи пожалуйста, зачем ты так делаешь?
2 NastyFrog
 
25.03.04
15:25
В некоторых формах не сами реквизиты - а механизмы их получения в зависимости от действий на форме, опять же некоторые функции - а-ля пересчитать что-нить. Пользователю либо все доки вручную перебирать, либо обработать всё программно.
3 Рупор абсурда
 
25.03.04
15:28
(2) Зачем открывать форму? Что происходит при её открытии?
4 327
 
25.03.04
15:30
ОткрытьМодально.....

Но когда перед мордой юзера хлопнет формой сотня доков .... юзер придет бить морду программисту ....
5 Рупор абсурда
 
25.03.04
15:33
(4) Нечто не умное сказал ...
Мож тебе отдохнуть надо?
6 gr13
 
25.03.04
15:34
(4) а как можно модально открыть несколько доков?
7 NastyFrog
 
25.03.04
15:36
(4)Юзер доков не увидит, мне их обрабатывать. Сейчас попробую модально.
(3) Например галочку в форме поставить, или до процы какой-нить достучаться.
8 NastyFrog
 
25.03.04
15:38
Можно конечно ПриОткрытии() кривить - но тогда конфой туда сюда надо егозить - не всегда возможно.
9 Рупор абсурда
 
25.03.04
15:40
(7) Галочка на форме - реквизит дока? Как "стучишься" к процедуре?
Колись, девочка, я честно хочу помочь ...
И могу!
10 NastyFrog
 
25.03.04
15:42
(4) Модально оно и есть модально. Интересно, а закрытьмодально бывает?
11 NastyFrog
 
25.03.04
15:46
К процедуре через СтрокуДействий стучусь. А как надо?
При установке галочки выполняется какой-нить алгоритм. Соответственно - галочку ставим, Форма.обновить()
12 Дмитрий
 
25.03.04
15:50
(0) Хоть и неясно зачем это все, но смею предположить, что задержку надо делать после Конт.Форма.Закрыть().

Помню еще в 7.5. на тормозном компе пытался программно записать документ и сразу открыть его форму. Так он сволочь не успевал записываться. Пришлось пустой цикл впендюривать - помогло...
13 Рупор абсурда
 
25.03.04
15:53
(11) Что ж там за алгоритм такой? Что ж там за процедура такой?
Почему их не переписать в той форме, в которой ты цикл свой крутишь?
14 NastyFrog
 
25.03.04
16:04
(13)Алгоритм лазает по всяким глФункциям, глПроцедурам и в своем модуле взаимовызовы. Переписывать всё в обработку?
(12)А в цикле не успевается с открытой формой всё сделать - следующую открывает? Задержку секудную организовывать?
15 Рупор абсурда
 
25.03.04
16:09
(14) Проблемы твои от лени ... :))
Кстати, просто прокрутить цикл для задержки тебе не подойдёт ...
Придётся с извращениями делать задержку ...
16 NastyFrog
 
25.03.04
16:16
(15)А чьи не от неё? 8)
17 Рупор абсурда
 
25.03.04
16:21
(16) Мой совет: Перепиши, будет и правильней, и надёжней ...
18 NastyFrog
 
25.03.04
16:26
(17) Спасибо за совет. К сожалению не смогу ему последовать. Буду организовывать "задержку с извращениями".
19 Рупор абсурда
 
25.03.04
16:29
(18) Я и прогнал про "задержку с извращениями" ...
Достаточно будет цикла ...
20 NastyFrog
 
25.03.04
16:36
(18)Надо организовать задержку цикла с извращениями?
Будем стараться.
Цикла может и достаточно, но так нехочется от извращений отказываться. 8)
21 Рупор абсурда
 
25.03.04
16:37
(20) А говорила, что лентяйка ... :))
22 NastyFrog
 
25.03.04
16:47
Не помогает ни-фига - все доки норовит открыть - с циклами, задержками. Увы мне, увы. Может всё-таки знает кто.
23 NastyFrog
 
25.03.04
16:49
(21) Кто говорила? Ты говорила? (см. 15)
24 Рупор абсурда
 
25.03.04
16:56
(22) Эх, блин, точно нужна задержка с извратом ...
Хоть и нехорошо несколько раз менять мнение, но ... :))
(23) Ты ж согласилась :))
25 NastyFrog
 
25.03.04
17:03
(24)Ты сказала,я согласилась.
Каких видов извращений надо придерживаться? Просто минутку подождать не помогает. Всё равно все доки открываются. С задержкой. Дай листинг самого абсурдного извращения. Увести в другую процу? Не помогло.
26 Рупор абсурда
 
25.03.04
17:09
(25) Я - мужчина! Ты второй раз ошиблась ...
А "Увести в другую процу" это как?
Штатными средствами можно только ч/з Форма.ОбработкаОжидания() получить такую задержку ...
27 Дмитрий
 
25.03.04
17:23
Тут еще надо подумать, где именно эту задержку впихнуть.
Я бы попробовал в двух местах: после ОткрытьФорму и после Конт.Форма.Закрыть.

ЗЫ. Последний раз на тему задержек так долго общался лет 7 назад )
28 NastyFrog
 
25.03.04
17:25
(26) Ну и что, что ты - мужчина. Сказала, значит сказала.
А в другую процу увести - в смысле позвать её из основной, а ней(другой) чё-нить потворить. Всё равно сначала все доки открывает.
А чем ОбработкаОжидания круче какого-нибудь цикла, кот. минуту крутится?
29 NastyFrog
 
25.03.04
17:26
(27) После ОткрытьФорму надо попробовать, после закрыть точно не помогает.
30 Рупор абсурда
 
25.03.04
17:27
(27) После ОткрытьФорму() смысла нет ... Пока ПриОткрытии() в ней не выполнится продолжаться ничего не будет ...
Зависит от того, что в ней написано, конечно ...
Мож там свои какие-то обработки ожидания ...

ЗЫ: А я 15 лет назад :))
31 Дмитрий
 
25.03.04
17:34
Есть хороший способ посмотреть, поможет ли тут задержка - прокрутить пару циклов построчно в отладчике. Если все будет нормально открываться и закрываться - дело точно в ней
32 NastyFrog
 
25.03.04
17:45
Даже в доке ПриОткрытии() Закрыть() срабатывает после открытия всех доков
33 Дмитрий
 
25.03.04
17:58
Нда, думаю за это время можно было уже ручками все доки подправить )) Надо идти другим путем значит
34 NastyFrog
 
25.03.04
18:12
Всем спасибо за старания.
35 Рупор абсурда
 
25.03.04
18:12
(28) Упс ... Что-то сразу прощёлкал я этот твой пост ...
Пока идёт цикл он не дает другим процессам возможности работать ... Развести их реально можно только ч/з обработку ожидания ...
36 NastyFrog
 
25.03.04
18:40
(35) Спасибо, завтра поковыряюсь с ожиданием. Или действительно придется всё в обработку переносить - это точно варикозка на анус.
37 Рупор абсурда
 
25.03.04
19:03
(36) >>варикозка на анус.
Грубая ты какая ...
Но я почему то именно таких и люблю :))
38 Дмитрий
 
26.03.04
09:50
Странно, но я вечером вчера эту фигню покрутил, так вроде все открывалось и закрывалось.
       Док=СоздатьОбъект("Документ.Приходная");
       Док.ВыбратьДокументы('01.01.2004','31.01.2004');
       Пока Док.ПолучитьДокумент()=1 Цикл
           Конт=0;
           ОткрытьФорму(Док.ТекущийДокумент(),Конт);
           Сообщить("Открыт "+ТекстДок(Конт.ТекущийДокумент()));
           Конт.Форма.Закрыть();
           Сообщить("ЗАКРЫТ "+ТекстДок(Конт.ТекущийДокумент()));
       КонецЦикла;
39 NastyFrog
 
26.03.04
11:19
(38)Не работает, в том смысле, что сначала все доки открывает, потом все по очереди закрывает. Если док-тов не много - всё нормально, иначе 1С вешается из-за обилия открытых форм. Зато появилась идея по периодам доки выбирать -тогда сработает.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс