Имя: Пароль:
1C
1С v8
Не обновляется представление ссылки в форме документа
,
0 Invis91
 
22.08.13
14:20
Всем добрый день!

Есть 2 документа, напр., документ1, документ2. И в эти документы ссылаются друг на друга, т.е. документ1.реквизит1 = документ2, документ2.реквизит2 = документ1.

При записи нового документа1 должен автоматически создаться документ2 и перекрестные вышеперечисленные ссылки должны проставиться. Что собственно делаю я:

Документ 1. Модуль объекта:


перем СсылкаНаДокумент2;

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

СсылкаНаДокумент2= Документы.Документ2.ПолучитьСсылку(Новый УникальныйИдентификатор);
Реквизит1 = СсылкаНаДокумент2;

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

Процедура ПриЗаписи(Отказ)

Документ2 = Документы.Документ2.СоздатьДокумент();
Документ2.Дата = Дата;
Документ2.Реквизит2 = Ссылка;
Документ2.УстановитьСсылкуНового(СсылкаНаДокумент2);
Документ2.Записать();

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




И вот в чем беда: на форме документа1 в поле реквизит1 указано след.: "<Объект не найден> (608:8b24bb620c3bc86040d492ee186db145)".
На самом деле объект создан и записан (см. при записи), если нажать на лупу у поля реквизит1, то открывается документ2. Все как надо, но ссылка отображается как "объект не найден". Если закрыть и открыть документ заново - то представление ссылки обновляется и в реквизите1 мы видим "документ2 N123 от..." ЭтаФорма.Обновить() и ЭтаФорма.Прочитать() не помогает.
1 Infsams654
 
22.08.13
15:17
(0) а зачем так-то ?

проще

Процедура ПослеЗаписи(Отказ)

Документ2 = Документы.Документ2.СоздатьДокумент();
Документ2.Дата = Дата;
Документ2.Реквизит2 = Ссылка;
Документ2.Записать();

Реквизит1 = Документ2.Ссылка;

Записать();

КонецПроцедуры
2 Infsams654
 
22.08.13
15:20
(1) + сорри, тут еще надо проверить, не пустой ли Реквизит1, а то зациклит
3 Infsams654
 
22.08.13
15:49
(0) ну что, смысл понятен, как дела ? Да еще в ПослеЗаписи параметра нет, это я скопипастил ненароком
4 Invis91
 
22.08.13
15:59
Ну так тоже можно сделать, я об этом тоже думал, но это уже костыли напоминает) чисто с эстетической точки зрения не хочется документ дважды записывать,ведь все что надо уже есть, необходимо всего-лишь обновить представление ссылки, а как этот сделать - ума не приложу)
5 luns
 
22.08.13
16:14
этаформа.обновить()?
6 Infsams654
 
22.08.13
16:18
(4) не знай, УстановитьСсылкуНового больший костыль. По крайней мере, как-то давно в 8.1 тоже с этим парился. В типовых крайне редко встречается. Не знай, может в новых платформах это должно и работать, сомневаюсь, однако...
7 Infsams654
 
22.08.13
16:20
(6) + даже, если сделал УстановитьСсылкуНового, как форма без записи в базе достанет эту ссылку ?
8 Infsams654
 
22.08.13
16:22
(7) + вернее объект, которого по этой ссылке в базе нет
9 Invis91
 
22.08.13
16:31
(5) это было первое, что попробовал - не помогает

(7) если я перезапишу документ хоть 100 раз интерактивно, не закрывая формы, все равно будет отображаться <объект не найден>. Вообщем, представление ссылки не обновляется, пока форму  не закроешь-откроешь.

Как мне кажется, что что-то подобное я в типовых видел, но где - сейчас не вспомню
10 Infsams654
 
22.08.13
16:37
(9) "если я перезапишу документ хоть 100 раз интерактивно, не закрывая формы" - вот тут ты не прав, если объект в базе, то по (5).этаформа.обновить() - точно отобразит
11 Invis91
 
22.08.13
16:42
(10) повторюсь, этаформа.обновить() - это было первое, что я попробовал. Не обновляет эта процедура представление ссылки никак. Даже если я нажму в панели документа типовую кнопку "перечитать" - тоже ничего не произойдет, как был объект не найден, так и останется.
12 Infsams654
 
22.08.13
16:43
(9) плюнь ты на УстановитьСсылкуНового. Запиши Документ1, в событии ПослеЗаписи создай Документ2, назначив в его реквизите ссылку на Документ1, запиши Документ2. После чего, перезапиши Документ1 с реквизитом на Документ1.
И все будет в шоколаде
этаформа.обновить()
13 Infsams654
 
22.08.13
16:44
(12) перезапиши Документ1 с реквизитом на Документ2
14 Infsams654
 
22.08.13
16:46
(11) ОбновитьОтображениеДанных()
15 Invis91
 
22.08.13
16:51
(12) да просто самому уже интересно, можно ли это вообще реализовать

(14) у меня обычные формы, не уф, так что этаформа.обновить()
16 Kayen
 
22.08.13
16:58
ОповеститьОбИзменении(<Ссылка>) - где ссылка это документ который был изменён.
17 Invis91
 
22.08.13
17:03
(16) у меня обычное поле ввода на совершенно обычной форме документа, причем не уф.

ОповеститьОбИзменении (NotifyChanged)

Описание варианта метода:

Уведомляет динамические списки на клиенте об изменении одного объекта базы данных или одной записи регистра.
Закон Брукера: Даже маленькая практика стоит большой теории.