Имя: Пароль:
1C
1С v8
Обновить форму из другой формы
0 extrim-style
 
09.09.13
09:49
Из второй формы записываю объект, форма которого открыта первой. Необходимо обновить первую форму. Пытаюсь:

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
        //ВладелецФормы.Объект - здесь старые данные ДанныеФормыСтруктура
    тыц(ВладелецФормы.Объект.Ссылка);
       //ВладелецФормы.Объект - здесь старые данные ДанныеФормыСтруктура
    ВладелецФормы.ОбновитьОтображениеДанных();
        //не помогает
КонецПроцедуры

&НаСервере
Процедура тыц(Эл)
    //здесь в Эл - новые данные
    Эл.ПолучитьОбъект().Прочитать();    
    
КонецПроцедуры
1 Нуф-Нуф
 
09.09.13
09:49
оповести! будь мужиком, блеать!
2 zladenuw
 
09.09.13
09:50
поищи. уже на форуме спрашивали решение данной проблемы и в книге о управляемом интерфейсе описано
3 extrim-style
 
09.09.13
09:50
(1) пробовал. не помогает
4 cw014
 
09.09.13
09:52
Мда...
5 extrim-style
 
09.09.13
09:52
+(1)
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    
    ЭтаФорма.ОбновитьОтображениеДанных();
    тыц();
    ЭтаФорма.ОбновитьОтображениеДанных();
    
КонецПроцедуры

&НаСервере
Процедура тыц()
    Эл = Объект.Ссылка.ПолучитьОбъект();
    Эл.Прочитать();
КонецПроцедуры

не помогает
6 zladenuw
 
09.09.13
09:55
(5)

Вызывать в форме после вызова обработки. Должно помочь.
7 extrim-style
 
09.09.13
09:57
(6) вызываю после. В Эл уже новые данные.
8 Нуф-Нуф
 
09.09.13
09:59
что за бред
9 Нуф-Нуф
 
09.09.13
10:00
в обработке послезаписи вызвать Оповестить.
в первой форме в обработке оповещения вызвать ОбновитьОтображениеДанных
10 extrim-style
 
09.09.13
10:03
(9) если в (9) - инструкция к действию, то в (0) и (5) ты видишь как раз то, что ты говоришь в (9)
11 Нуф-Нуф
 
09.09.13
10:04
(10) извини, но в (0) и (5) вижу что-то несвязное...

пройдись поиском по типовым конфигам с Оповестить("ОбновитьФорму"
12 extrim-style
 
09.09.13
10:24
(11) +(10) кроме Оповестить отсутствующей в ПослеЗаписи
(11) поискал по Бух 3.0. Нашел Прочитать() или Элементы.Список.Обновить() или специфичные обработки.
13 extrim-style
 
09.09.13
10:25
(11) что-то еще подразумевалось?
14 extrim-style
 
09.09.13
10:36
Ап
15 Нуф-Нуф
 
09.09.13
10:49
просто вызови оповещение после записи и поймай его в нужной тебе форме
16 extrim-style
 
09.09.13
10:57
(15) форма 2
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    Оповестить("111",,ЭтаФорма);
КонецПроцедуры

форма 1
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)  
    ЭтаФорма.ОбновитьОтображениеДанных();
    тыц();
    ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры

&НаСервере
Процедура тыц()
    Эл = Объект.Ссылка.ПолучитьОбъект();
    Эл.Прочитать();
КонецПроцедуры

не работает. В Эл - новые данные.
17 extrim-style
 
09.09.13
11:08
хелп
18 Нуф-Нуф
 
09.09.13
11:10
форма 2
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    Оповестить("111",,ЭтаФорма);
КонецПроцедуры

форма 1
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)  
    ОбновитьОтображениеДанных();
КонецПроцедуры
19 extrim-style
 
09.09.13
11:44
(18) это тоже самое, что и в (16)
не работает. Протестировал в обработке, не работает:

&НаКлиенте
Процедура Команда1(Команда)
    Спр = ПоискЭлемента();
    Ф = Спр.ПолучитьФорму("ФормаЭлемента");
    Ф.Открыть();
    ИзменитьЭлемент(Спр);
    Ф.ОбновитьОтображениеДанных();    
КонецПроцедуры

&НаСервере
Функция ПоискЭлемента()    
    Возврат Справочники.Контрагенты.НайтиПоКоду("000001978");        
КонецФункции

&НаСервере
Функция ИзменитьЭлемент(Спр)
   СпрОбъект = Спр.ПолучитьОбъект();
   СпрОбъект.Наименование = "ТестовоеНаименование";
   СпрОбъект.Записать();    
КонецФункции
20 Нуф-Нуф
 
09.09.13
11:47
короче тушите свет
21 extrim-style
 
09.09.13
11:49
(20) чё?)) (всмысле почему)
22 Нуф-Нуф
 
09.09.13
11:51
(21)
1. с каких щей в (18) тоже самое что и в (16)?
2. где в (20) оповестить?
3. где код процедуры ОбработкаОповещения в форме элемента справочника Контрагенты?
23 Нуф-Нуф
 
09.09.13
11:53
вообщем соберись! перечитай еще раз всю ветку, потом еще вот это вообщем держи https://www.google.ru/search?as_sitesearch=forum.mista.ru&q=%EE%E1%F0%E0%E1%EE%F2%EA%E0%EE%EF%EE%E2%E5%F9%E5%ED%E8%FF

и оповести! будь наконец мужиком, блеать!
24 Infsams654
 
09.09.13
11:57
(21) обработка оповещения должна отрабатывать в форме, которую оповещаешь. При чем, надо в ней еще проверить параметры самого оповещения: Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник), а не то, она будет обрабатывать всякую ненужную хрень от чего-то другого
25 extrim-style
 
09.09.13
12:00
(23) (24) обработка:
&НаКлиенте
Процедура Команда1(Команда)
    Спр = ПоискЭлемента();
    Ф = Спр.ПолучитьФорму("ФормаЭлемента",ЭтаФорма);
    Ф.Открыть();
    ИзменитьЭлемент(Спр);
    Ф.ОбновитьОтображениеДанных();
    
    Оповестить("Заводись!", ЭтаФорма);   //оповещаю!

КонецПроцедуры

&НаСервере
Функция ПоискЭлемента()    
    Возврат Справочники.Контрагенты.НайтиПоКоду("000001978");        
КонецФункции

&НаСервере
Функция ИзменитьЭлемент(Спр)
   СпрОбъект = Спр.ПолучитьОбъект();
   СпрОбъект.Наименование = "ТестовоеНаименование2";
   СпрОбъект.Записать();    
КонецФункции

форма элемента справочника:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)    
    ОбновитьОтображениеДанных(); //сюда заходит
КонецПроцедуры

Не работает!
26 Нуф-Нуф
 
09.09.13
12:03
у тебя отладчик заходит в

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)    
    ОбновитьОтображениеДанных(); //сюда заходит

КонецПроцедуры

и ничего не обновляет?
27 extrim-style
 
09.09.13
12:06
(26) именно. Данные на форме не меняются.
28 Нуф-Нуф
 
09.09.13
12:07
процедура ОбработкаОповещения - для формы элемента указана как обработчик события?
29 extrim-style
 
09.09.13
12:08
(28) да
30 Infsams654
 
09.09.13
12:09
(26) так у тебя же в Процедура Команда1(Команда) после
ИзменитьЭлемент(Спр);
уже есть
    Ф.ОбновитьОтображениеДанных();

это раз,
во 2-х, повторяю, в обработке оповещения надо проверять параметры
31 extrim-style
 
09.09.13
12:10
+(27) плюс при дальнейшем дозаполнении первой формы вылазит вот эта ошибка v8: Данные были изменены или удалены другим пользователем, где также рекомендовали Оповестить и Прочитать();

но так тоже не работает:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)    
     тыц();
     ОбновитьОтображениеДанных();
КонецПроцедуры

&НаСервере
Процедура тыц()
    Эл = Объект.Ссылка.ПолучитьОбъект();
    Эл.Прочитать();
КонецПроцедуры
32 extrim-style
 
09.09.13
12:11
(30) ну есть, а кули толку? я их уже не знаю куда тыкать.
(наоборот на каждом углу понаставил, чтобы вопросов не было, а тут еще вопросы) ).
33 extrim-style
 
09.09.13
12:12
(30) зачем мне проверять параметры и какие параметры нужно проверить?
34 Infsams654
 
09.09.13
12:19
(33) ИмяСобытия - чтобы обработка оповещения поняла, что это её событие, а не от какой-то хз, Параметр - это могут быть какие-то данные, переданные для обработки оповещения, например, если в оповещающей форме что-то случилось нехорошее или еще что надо передать, Источник - проверка на то, что оповещатель - это тот, от которого нужно оповещение
35 Нуф-Нуф
 
09.09.13
12:21
дело в хешировании объекта
36 Нуф-Нуф
 
09.09.13
12:22
Код тестовой обработки


&НаСервере
Функция ПолучитьСсылкуНаЭлементНаСервере()
    СсылкаНаЭлемент = Справочники.Контрагенты.НайтиПоКоду("654654553");
    Возврат СсылкаНаЭлемент;
КонецФункции

&НаСервере
Процедура ИзменитьОбъектНаСервере(СсылкаНаЭлемент)
    
    ОбъектКонтрагент = СсылкаНаЭлемент.ПолучитьОбъект();
    ОбъектКонтрагент.Наименование = ТекущаяДата();
    ОбъектКонтрагент.Записать();
    
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьИИзменитьФорму(Команда)
    
    СсылкаНаЭлемент = ПолучитьСсылкуНаЭлементНаСервере();
    ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент);
    Форма = ПолучитьФорму("Справочник.Контрагенты.Форма.ФормаЭлементаУправляемая", ПараметрыФормы);
    Форма.Открыть();

    ИзменитьОбъектНаСервере(СсылкаНаЭлемент);
    
    Оповестить();
    
КонецПроцедуры



Код модуля формы элемента

&НаСервере
Процедура ПеречитатьДанныеНаСервере()
    
    ОбъектИзБазы = Объект.Ссылка.ПолучитьОбъект();    
    ЗначениеВРеквизитФормы(ОбъектИзБазы, "Объект");
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    
    ПеречитатьДанныеНаСервере();
    ОбновитьОтображениеДанных();
    
КонецПроцедуры
37 extrim-style
 
09.09.13
12:25
(34) спасибо, кэп
38 extrim-style
 
09.09.13
12:33
(36) да. спс. этот вариант был напоследок, надеялся обойтись без него.

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)    
     тыц();    
КонецПроцедуры

&НаСервере
Процедура тыц()
     ЗначениеВРеквизитФормы(Объект.Ссылка.ПолучитьОбъект(), "Объект");
КонецПроцедуры

ссылка в кучу - http://forum.infostart.ru/forum26/topic59758/
39 extrim-style
 
09.09.13
12:34
(38) вобщем на этом всё. всем спасибо за компетентную помощь)
40 Нуф-Нуф
 
09.09.13
12:47
кстати дело не в хешировании. а в том, что все таки требовалось обращение к серверу через Объект.Ссылка.ПолучитьОбъект(), чтобы обновленные данные объекта пришли в форму, а уже потом обновились через ОбновитьОтображениеДанных
41 extrim-style
 
09.09.13
13:14
(40) обрати внимание, что я не делал ОбновитьОтображениеДанных (я так и не понял как эта штука работает и почему она не работает).
И обращения к ПолучитьОбъект() недостаточно (см. (31)). В данном случае просто принудительная выгрузка объекта в данные формы. А как использовать стандартное обновление я так и не понял...
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.