Имя: Пароль:
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)

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

Уведомляет динамические списки на клиенте об изменении одного объекта базы данных или одной записи регистра.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn