Имя: Пароль:
1C
1С v8
Как закрыть таб док при повторном вызове отчета?
,
0 Soul771
 
24.09.14
10:38
Доброго дня.
При проведении документа вызываю отчет, результат формируется в табличный документ. Все хорошо, только каждый раз при проведении документа появляется новый табличный документ, т.е. предыдущий результат не закрывается. Подскажите, пожалуйста, как сделать, чтобы при обращении к отчету закрывался предыдущий его результат, и уже потом формировался новый?

код сейчас такой:
в модуле документа, откуда вызываю отчет:

ФормаОтчета = Отчеты.ОтчетПоДоставкеНаБлижайшиеДни1.ПолучитьФорму();
ФормаОтчета.Открыть();
ФормаОтчета.ПолучитьДействие("ПриПовторномОткрытии");


в самом отчете в "ПриПовторномОткрытии" :

ТабДок = Поехали();
ТабДок.ТолькоПросмотр =истина;
ТабДок.Показать();


поехали()- это процедура, где, собственно, и происходит выбор данных и вывод в ТабДок.
1 ДенисЧ
 
24.09.14
10:39
А ты этот ТабДок сохрани куда-нибудь...
2 Defender aka LINN
 
24.09.14
10:39
(0) А ты никогда не обращал внимания, что в 1С 8.х отчеты делаются несколько более иначе по-другому?
3 PR
 
24.09.14
10:40
(0) Так закрывай отчет
4 Ёпрст
 
24.09.14
10:40
ну храни ссылку на открытую форму в глоб переменной, и проверяй - если открыта - закрыть.. усё.
5 ДенисЧ
 
24.09.14
10:40
+(1) а потом немного почитай СП про методы табличного документа...
6 Soul771
 
24.09.14
10:40
(1) - тогда он будет открываться вне 1С?.. Нужно, чтобы инфа маячила у менеджеров перед глазами, т.е. чтобы в самой 1С-ке висело окошко, от которого нельзя легко избавиться)
7 Ёпрст
 
24.09.14
10:40
или в параметрах сеанса запоминай.. или еще хде
8 ДенисЧ
 
24.09.14
10:41
9 Defender aka LINN
 
24.09.14
10:42
(6) О_о
10 Soul771
 
24.09.14
10:42
(2) - можно чуток поподробнее, в чем я накосячила?)) опыта пока мало, если что, это для УТ 10.3
11 PR
 
24.09.14
10:42
(4) (7) Что за бред? Там нужно среди существующих форм искать как-то.
12 Легат
 
24.09.14
10:43
(10) Фотку прикрепи. и будет тебе счастье)
13 Soul771
 
24.09.14
10:44
Ребята, спасибо всем большое, что откликнулись!
Ёпрст, а можно пример, если не сложно..С параметрами сеанса или как сохранить ссылку на открытую форму...
14 Defender aka LINN
 
24.09.14
10:45
(10) Ну так открой любой отчет и посмотри
15 Ёпрст
 
24.09.14
10:45
(11) в каком месте бред ?
Запомнил ссылку на открытую форму в переменной при первом проведении и привет, при следующем проведении , глядишь в переменную - если в переменной ссылка на форму, то закрываешь её и всё по новой..
16 Ёпрст
 
24.09.14
10:46
(13) ФормаОтчета  свою сохраняй.. потом можешь проверить, открыта ли она или нет.
17 Ёпрст
 
24.09.14
10:50
если.. табдок не на форме отчета, то запоминай ссылку на открытый моксель, и его закрывай потом.
18 Soul771
 
24.09.14
10:53
Ёпрст, ТабДок не на форме отчета, отдельным документом открывается. Пробую....
19 trad
 
24.09.14
10:54
(17) можно и не закрывать. очищать и использовать повторно
20 Ёпрст
 
24.09.14
10:57
(18) запоминай ссылку на ТабДок тогда
(19) ну да, как в типовых клюшках сделано
21 Soul771
 
24.09.14
11:09
(20) не пойму, как вытащить ссылку на ТабДок......
Попробовала объявить глобальную переменную ОткрытаДоставка, и после формирования ТабДок присвоить ей значение истина..
Перед формированием вот такое условие:

Если  ОткрытаДоставка<>Истина тогда
    ТабДок = Новый ТабличныйДокумент;
    иначе
    
    ТабДок.Очистить();
    КонецЕсли;

Не работает... И вроде понимаю, что строка
ТабДок = Новый ТабличныйДокумент;
в любом случае нужна, это же объявление типа.... Где хранится в базе результат ТабДок, после того, как он уже сформирован?..Как к нему обратиться?..
22 Ёпрст
 
24.09.14
11:26
ОткрытаДоставка = ТабДок

дальше проверяешь, что в ОткрытаДоставка , если там табличный документ, то закрыть его или очистить, ежели там дырка от бублика, то создать новый табличный документ
23 bolobol
 
24.09.14
11:32
Сделай уже обработку с формой с табдоком. Демоническое обновление и одна форма по-любому. Будь мужиком уже!
24 Ёпрст
 
24.09.14
11:34
(23) вообще-то это она..
и врят ли согласится на смену пола
25 Soul771
 
24.09.14
12:14
(24) чувствую себя такой блондинистой блондинкой :-(  когда уже мой скилл станет хоть чуток выше лузера....

после формирования отчета пишу

ОткрытаДоставка = ТабДок;


перед формированием:

Если  ТипЗнч(ОткрытаДоставка)<>Неопределено тогда
        а =ОткрытаДоставка.ПолучитьОбъект();
        а.закрыть();
    иначе
        
    ТабДок = Новый ТабличныйДокумент;

    ТабДок.Очистить();
    КонецЕсли;

дальше работаю с ТабДок...
1С-ка матерится, что не видит объекта, и залазит в ветку
а =ОткрытаДоставка.ПолучитьОбъект(); когда еще не было ни одного запуска.....



не кидайтесь помидорками, пожалуйста....
26 Soul771
 
24.09.14
12:16
(23) - я на форму еще ни разу не выводила таб док, попробую, но хочется сначала понять вариант, который предлагает Ёпрст
27 Ёпрст
 
24.09.14
12:22
ТабДок = ОткрытаДоставка;
      ТабДок.Очистить();
    иначе
        ТабДок = Новый ТабличныйДокумент;
    КонецЕсли;
28 Soul771
 
24.09.14
13:01
не понимаю, ну почему не работает.......
"Значение не является значением объектного типа (Очистить)"...
появляется при первом запуске, еще до момента формирования отчета в первый раз....
Может быть, я не туда затолкала ОткрытаДоставка?..Я ее засунула в МодульОбычногоПриложения.... Первый раз вызываю отчет из этого модуля, из процедуры ПриНачалеРаботыСистемы(), далее из обработки проведения документа.
29 Ёпрст
 
24.09.14
13:24
(28) смотри, что у тебя в ОткрытаДоставка в отладчике и какого оно типа.
Нам отсюда не видно, где ты е1ё присваиваешь
30 Ёпрст
 
24.09.14
13:25
ну и это, лучше в параметры сеанса пихать, имхо
31 Soul771
 
24.09.14
13:55
О, чудо произошло!! Вот что осталось в итоге:

        ТабДок = ОткрытаДоставка;
    Если  (ТабДок<>Неопределено)      тогда
        ТабДок.Очистить();
    иначе
        ТабДок = Новый ТабличныйДокумент;
    КонецЕсли;



В обработку проведения добавила еще строку

ФормаОтчета.Закрыть();

чтобы оставался только сам таб док.


Огромное спасибо всем, особенно Ёпрст, за терпение и помощь!!!! :-)
Буду изучать новые няшки))))

Подскажите еще, пожалуйста, можно ли этот табдок как-то закрепить где-нибудь сбоку, чтобы он не прятался под другими окнами, и защитить от закрытия?
32 Ёпрст
 
24.09.14
14:11
(31) табдок врят ли, а вот саму форму можно прикрепить.. а в ней уже - табдок на форме будет
33 Soul771
 
24.09.14
15:06
Ёпрст, спасибо, буду пробовать)
34 trad
 
24.09.14
15:27
я не спец по 8x, но разве всякие окошки открывать в обработке проведения стало правильным?
есть же всякие "форменные" события, типа Перед/ПослеЗаписи
35 bolobol
 
24.09.14
15:39
а я не зануда, но даже если взлетело, то без фотки - всё равно упадёт...
36 Soul771
 
24.09.14
16:03
Trad, я не знаю, правильно или нет. А как это может помешать проведению?..
37 Soul771
 
24.09.14
16:06
Trad, я могу только предположить, что при проведении таблица БД блокируется, т.е. пока один документ проводится, другие пользователи не смогут работать с той таблицей, куда идет запись, а вызов отчета из обработки проведения замедлит процесс проведения?....Так ли это?..
38 trad
 
24.09.14
17:16
(37) ну да, ненужное замедление проведения, которое блокирует, конечно далеко не всю бд, но все равно что-то.
кроме того, как 'красиво' будет выглядеть программное перепроведение таких документов, если вдруг понадобится таковое
да и вообще, кмк, всякие интерактивные штуки должны работать там где форма, а не объект
но предупреждаю, что я не знаток феншуя по 8х
39 Soul771
 
24.09.14
17:26
Trad, спасибо большое! Про "танцующие картинки" при групповом перепроведении я не подумала)) Кодик переезжает в "ПослеЗаписи"))
40 Soul771
 
24.09.14
17:30
Поместила в "ПриЗаписи" в модуле объекта..
41 bolobol
 
24.09.14
17:32
(40) ПриЗаписи в модуле Объекта - та же хрень, что и в ПриПроведении. Вам же про интерактивный контекст намекают!
42 bolobol
 
24.09.14
17:33
(40) Понятно, что из журнала проведение и его перепроведение не вызовут открытие отчёта, но, зато и проверок всяких меньше. Вслепую провёл - слепым к отчёту и остался)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан