Имя: Пароль:
1C
1С v8
Вызвать программно "Перечитать данные объекта".
0 mzelensky
 
01.08.11
13:12
Доброго всем.

Есть форма. В верхней ее части имеется стандартная панель (там где "провести", "отмена проведения"ии т.д. и "Перечитать данные объекта").
Меня интересует эта самая процедура "Перечитать данные объекта", как ее вызвать программно??? Действие стандартное и не цепляется ни к какой процедуре...добработчик "ОбновлениеОтображения()" не прокатывает (не то, что нужно)
1 Maxus43
 
01.08.11
13:18
Кто украл СП? вызывай полицейских
Форма (Form)
Обновить (Refresh)
Синтаксис:

Обновить()
Описание:

Обновляет данные, представленные в форме.

Доступность:

Толстый клиент.
Пример:

Обновить();
2 mikecool
 
01.08.11
13:20
Прочитать()
3 Maxus43
 
01.08.11
13:22
(2) + у объекта
4 mzelensky
 
01.08.11
13:30
(1) просто обновить не прокатывает...вызываетс обработчик - "ОбновлениеОтображения()", при этом данные в ТЧ не обновляются. А сли нажать на форме "Перечитать данные объекта" - данные обновляются.
5 mzelensky
 
01.08.11
14:16
(2) не прокатило. ТАким образом обновляются данные объекта (т.е. переменной которая имеет его тип). А мне нужно чтобы форма обновилась.
6 hhhh
 
01.08.11
14:19
(5) ну намекни нам, чем отличается "перечитать данные объекта" и "обновляются данные объекта"?
7 mzelensky
 
01.08.11
14:21
(6) если бы знал - не создавал эту ветку.

Но кажется уже разобрался в чем косяк.
8 Ненавижу 1С
 
гуру
01.08.11
14:23
это тонкий управляемый форм?
9 mzelensky
 
01.08.11
14:26
(8) нет, обычная 8.1
10 mzelensky
 
01.08.11
14:34
не, нифига не получается.

Смотри. Имеется документ. Из него открываю обработку, указываю форму дока как владелец формы обработки. В обработки произвожу заполнение Таб части документа и записываю сам документ из обработки. После этого открываю этот самый документ (во время всех этих действий форма была не закрыта, а свернута на панели) и там отображаются старые данные табличной части...нажимаю кнопку "Перечитать данные объекта" и только тогда в форме появляются актуальные данные.

Понятно, что это вызвано тем, что я записываю док из обработки и у меня на форме получаются старые данные...но как сделать это самые обновление данных на форме ПРОГРАММНО...чтобы постоянно не нажимать кнопку "Перечитать данные объекта" ?!?!?!

Вот в чем косяк :(
11 kosts
 
01.08.11
14:42
(10) Смотри как в типовых сделано, там через оповещение. и в  зупе и бух в документе зарплата к выплате.
12 mzelensky
 
01.08.11
14:53
(11) а на что там смотреть то хоть? После чего вызывается это оповещение??? после чего данные обновляются эти?!
13 kosts
 
01.08.11
14:55
(12) В обработке изменил. Оповестил. Открытый документ поймает сообщение. И обновится.

Вот так попробуй

ЭтаФорма.Обновить();
14 Axel2009
 
01.08.11
14:56
(12) оповещение вызывается когда вызвал. а вот ловля этого оповещения только если ктото до этого вызвал.
15 mzelensky
 
01.08.11
15:03
(13) Нашел в типовых - сейчас попробую.

(14) "оповещение вызывается когда вызвал" - эт понятно
"а вот ловля этого оповещения только если ктото до этого вызвал" - эта част ьфразы осталась ЗА ГРАНЬЮ ПОНИМАНИЯ.
16 Axel2009
 
01.08.11
15:07
"оповещение вызывается когда вызвал"
при закрытии одной из форм
Оповестить("трохтибидох_обновиться", , ЭтаФорма)

"ловля этого оповещения", но ведь сначала нужно чтобы ктото вызвал.
в форме документа прописать
ОбработкаОповещения(<Имя события>, <Параметр>, <Источник>)
если <Имя события> = "трохтибидох_обновиться" тогда
ЭтаФорма.Обновить();
Конецесли;
17 mzelensky
 
01.08.11
15:12
(16) по СП не совсем пойму как подключить обработчик оповещения. Чтобы потом можно было через "Оповестить("трохтибидох_обновиться", , ЭтаФорма)" сработать
18 Axel2009
 
01.08.11
15:16
(17) ниче не надо.
у формы документа, которая сворачивается, подключи процедуру к форму "ОбработкаОповещения" и зайдет само.
19 Axel2009
 
01.08.11
15:19
(18) то что написано в СП про подключить - чтобы вызывать общую какую либо процедуру для любых оповещений, если таковое надо..
т.е. при вызове Оповестить - отладчик будет скакать по всем формам где заведена обработка оповещения И в процедуру подключенную, если есть.
20 mzelensky
 
01.08.11
15:23
(19) Понял, спасибо!!! Попробую!
21 Mort
 
01.08.11
15:24
(10) нелогично. Если обработка вызывается из формы дока, она должна чисто заполнять док на форме (не записывая). Другое дело если обработка вызывается независимо и в ней указывается один либо перечень доков - тогда она сама должна записывать.
22 Axel2009
 
01.08.11
15:25
(21) ну она и записывает. а вот открытый документ то надо перечитать, чтобы там данные обновились
23 mzelensky
 
01.08.11
15:28
(22) сделал оповещение, все срабатывает как ножно, но данные не обновляются в форме открытого дока :(

В обработке пишу:

Если ДокОб.Товары.Количество()>0 тогда
           ДокОб.Записать(РежимЗаписиДокумента.Запись);
           Оповестить("ОбновлениеИзЗаказа",истина,Этаформа );
       КонецЕсли;


В документе:

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
   // Вставить содержимое обработчика.
   Если ИмяСобытия="ОбновлениеИзЗаказа" тогда
       ЭтаФорма.Обновить();    
   КонецЕсли;
   
   
КонецПроцедуры
24 Axel2009
 
01.08.11
15:30
(23) ага, знакомо
ЭтотОбъект.Прочитать();
25 Mort
 
01.08.11
15:30
(22) Я не о том как решить задачу, а о логике построения пользовательского интерфейса. Она в данном случае некорректная.
26 mzelensky
 
01.08.11
15:32
(25) там корректная цепочка. Просто полностью все расписывать долго...ну, просто поверь ,что так нужно :)
27 Mort
 
01.08.11
15:32
А кривая логика вечно порождает нестандартные задачи.
28 Mort
 
01.08.11
15:34
(26) Если пользователь открыл документ, он должен быть уверен, что пока не нажал конпку "записать" или "ок", он не внесет никаких изменений в базу.
29 mzelensky
 
01.08.11
15:56
(28) А если кнопка "записать" находится в этой самой обработке???

Короче, не парь мозги по поводу логики...тут проблема в другом, а с логикой я разбирусь
30 Axel2009
 
01.08.11
15:58
(29) так сработало?
31 mzelensky
 
01.08.11
16:05
(30) ДА, сделал наверняка:

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
   // Вставить содержимое обработчика.
   Если ИмяСобытия="ОбновлениеИзАнализаЗаказа" тогда
       ЭтотОбъект.Прочитать();
       ЭтаФорма.Обновить();
       ОбновлениеОтображения();
   КонецЕсли;    
КонецПроцедуры
32 Axel2009
 
01.08.11
16:05
(31) Прочитать вызывает следующий 2 строчки автоматом
33 mzelensky
 
01.08.11
16:09
(32) да, верно!