Имя: Пароль:
1C
1C 7.7
v7: Закрытие формы в цикле
0 Alucard
 
27.10.12
10:12
Всем привет! Ситуация такая есть самописная конфа, где очень сложный пересчет цен, нужно было написать вн обработку которая бы делала пересчет, в документе пересчет реализован (кнопка Пересчет), так вот чтобы все параметры из дока не извлекать решил воспользоваться SendKey,но тут такой подвох что открытая форма закрывается только после исполнения процедуры, в результате польшого количества открытых окон происходит зависание 1С, как закрывать форму при преходе на след. документ????

Процедура ЗакрФорма(Докум);
   Форм="";
   ОткрытьФорму(Докум,Конт);
   Скрипт=СоздатьОбъект("WScript.Shell");
   Скрипт.SendKeys("^{Enter}");
   Форм.Форма.Закрыть(0);        
КонецПроцедуры    

Процедура Сформировать()

Док=СоздатьОбъект("Документ.М_ПоступлениеМатериалов");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);

Пока Док.ПолучитьДокумент()=1 Цикл
   ЗакрФорма(Док.ТекущийДокумент());        
КонецЦикла;
КонецПроцедуры
1 oslokot
 
27.10.12
10:22
офигеть...
а программно вызывать процедуру пересчета трудно что-ли?
2 AlexNew
 
27.10.12
10:23
(0) Ты правда хочешь, чтобы честно сказали?
3 Alucard
 
27.10.12
10:35
Я понимаю что изврат, но описывать все слишком долго, правда
4 Alucard
 
27.10.12
10:36
Как программно вызвать процедуру через внеш обработку ???
5 hhhh
 
27.10.12
10:42
(0) ну если параметров меньше 100, то дешевле всё-таки не связываться с формами, а извлечь из документа напрямую.
6 artist
 
27.10.12
11:44
Лень человеку переписать обработку заполнения... Бывает...
7 artist
 
27.10.12
11:45
Если уж пошла такая петрушка - попробуй открывать форму модально, что бы окна не плодились...
8 Эльниньо
 
27.10.12
11:48
Не открывай следующую форму, пока не отработала текущая.
Подсказать как?
9 Alucard
 
27.10.12
13:37
(8)Подсказать всегда можно
10 КонецЦикла
 
27.10.12
13:40
Можно вызывать и процедуры формы документа, в поиск
11 Эльниньо
 
27.10.12
13:46
Процедура Сформировать()

Док=СоздатьОбъект("Документ.М_ПоступлениеМатериалов");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);

Пока Док.ПолучитьДокумент()=1 Цикл
глПеременная = "СтоятьЯсказал";
    ЗакрФорма(Док.ТекущийДокумент());        
Пока глПеременная = "СтоятьЯсказал" Цикл

КонецЦикла;
КонецЦикла;
// в доке прописать: глПеременная = "Можно";

КонецПроцедуры
12 АЛьФ
 
27.10.12
14:30
2(11) вечный цикл.
13 Эльниньо
 
27.10.12
16:07
(12) Поясни.
14 kosts
 
27.10.12
16:54

Процедура ЗакрФорма(Докум)
   Цикл
       ОткрытьФорму(Докум,Конт, "ВыполнитьПересчет");
   КонецЦикла;
КонецПроцедуры


В форме документе:


Процедура ПередОткрытием()
   Если Параметр = "ВыполнитьПересчет" Тогда
       ВыполнитьПересчет();
       СтатусВозврата = 0;
   КонецЦикла;
КонецПроцедуре
15 Эльниньо
 
27.10.12
19:29
Ксати - можно и так:

Процедура Сформировать()

Док=СоздатьОбъект("Документ.М_ПоступлениеМатериалов");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);

Пока Док.ПолучитьДокумент()=1 Цикл
СтатусВозврата(123456789);
    ЗакрФорма(Док.ТекущийДокумент());        
Пока СтатусВозврата() = 123456789 Цикл

КонецЦикла;
КонецЦикла;
// в доке прописать: глПеременная = "Можно";


КонецПроцедуры
16 kosts
 
27.10.12
19:48
(15) Кстати да в (14) нужно модально открывать форму, тогда нормально все будет.
17 АЛьФ
 
30.10.12
10:06
2(16) При модальном открытии на фиг не нужны все эти извраты.
18 АЛьФ
 
30.10.12
10:06
2(13) Проще будет тебе попробовать запустить свой код.