Имя: Пароль:
1C
1C 7.7
v7: Работа с Контекстом формы
,
0 varelchik
 
30.07.13
15:10
Вроде все элементарно и не хочет работать.

    Для н=1 По СписокДокументов.РазмерСписка() Цикл
        Счет=СписокДокументов.ПолучитьЗначение(н);
        ДокументСчет.НайтиДокумент(Счет);
        Расходная=0;
        ОткрытьФорму("Документ.Т_РасходнаяНакладная",Расходная,ДокументСчет);
        ДокументРасходная=СоздатьОбъект("Документ.Т_РасходнаяНакладная");
        ДокументРасходная.Новый();
        глЗаполнитьКопированием(ДокументРасходная,Расходная);
        Расходная.Форма.Закрыть(1);
        глПауза(2);
        ДокументРасходная.АвтоВремяПослеТА();
        ДокументРасходная.Записать();
        ДокументРасходная.Провести();
        
        Расходная=0;
    КонецЦикла;

Это глюк Контекста формы или у меня?
Документ основание разный а расходные создается только по Первому документу списка.
1 cw014
 
30.07.13
15:11
Ужас то какой...
2 cw014
 
30.07.13
15:11
А нафига открывать форму, потом копировать, потом снова закрывать? Еще и паузу вставлять?
3 varelchik
 
30.07.13
15:13
Облом переносить блок ввода на основании из расходной.
4 varelchik
 
30.07.13
15:14
(2) смотри внимательнее там форма не просто так открывается.
5 Попытка1С
 
30.07.13
15:15
Только за создание объекта в цикле, надо бить ссаными тряпками.
6 Ёпрст
 
30.07.13
15:19
7 varelchik
 
30.07.13
15:30
(6)Дык яж тоже самое делаю.
8 varelchik
 
30.07.13
15:42
Уже и так ан все равно заполняет на основании содержимого первого документа.
9 varelchik
 
30.07.13
15:42
Расходная="";
    Для н=1 По СписокДокументов.РазмерСписка() Цикл
        Счет=СписокДокументов.ПолучитьЗначение(н);
        ДокументСчет.НайтиДокумент(Счет);
        ОткрытьФорму("Документ.Т_РасходнаяНакладная",Расходная,ДокументСчет);
        ДокументРасходная=СоздатьОбъект("Документ.Т_РасходнаяНакладная");
        ДокументРасходная.Новый();
        глЗаполнитьКопированием(ДокументРасходная,Расходная);
        ДокументРасходная.АвтоВремяПослеТА();
        ДокументРасходная.Записать();
    КонецЦикла;
10 uno-group
 
30.07.13
16:03
открытьформумодально()
простое открытие не останавливает дальнейшее выполнение оброботки и получается что за те милисикунды что форма открывалась и заполнялась цикл по остальным документам уже заверщился.
11 varelchik
 
30.07.13
16:04
(10)ТОЧНО!
Вот виш какой я тормоз.
Ща проверю.
12 Ёпрст
 
30.07.13
16:07
(11) наивный какой.
Если откроешь модально, то все действия по заполнению придётся переписать в самой форме открываемого документа.
В (6) решение без изменения мд.
13 varelchik
 
30.07.13
16:10
(12) упс.
да действительно.
(6) ну так яж тоже самое и делаю.
14 Ёпрст
 
30.07.13
16:16
(13) ну так смотри готовое.
15 Ёпрст
 
30.07.13
16:17
если грубо, то  Расходная.Форма.Закрыть(1); не сразу закроет твою форму, а цикле и подавно  и.. твоя пауза - как мёртвому припарки, надо отдать управление в другую процу, например, по обработке ожидания или в ложном закрытии или во внешнее событие или текстом на форме, или .. еще способы.
16 varelchik
 
30.07.13
16:29
(13)так я ж и кажу что в готовом делаться тоже что и я.
Интресное явление получается.
Форма открывается лишь раз а Закрыть(0) закрывает форму только после окончания цикла.
17 Ёпрст
 
30.07.13
16:32
(16) так и есть
18 Ёпрст
 
30.07.13
16:33
надо отдать "закрытия формы " в другое событие .
19 varelchik
 
30.07.13
16:33
Все оказалось просто
    Расходная="";
    Для н=1 По СписокДокументов.РазмерСписка() Цикл
        Счет=СписокДокументов.ПолучитьЗначение(н);
        ДокументСчет.НайтиДокумент(Счет);
        ОткрытьФорму("Документ.Т_РасходнаяНакладная",Расходная);
        Расходная.ВводНаОсновании(ДокументСчет.ТекущийДокумент());
        ДокументРасходная=СоздатьОбъект("Документ.Т_РасходнаяНакладная");
        ДокументРасходная.Новый();
        глЗаполнитьКопированием(ДокументРасходная,Расходная);
        Расходная.Форма.Закрыть(0);
        ДокументРасходная.АвтоВремяПослеТА();
        ДокументРасходная.Записать();
    КонецЦикла;
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.