УФ обновление элемента на форме списка

1. Rega 08.07.22 11:53 Сейчас в теме
Здравствуйте!

Есть динамический список на форме. На этой же форме есть Реквизит1.

В событии При активации строки в реквизит1 на форме устанавливается ссылка на выделенный документ.

Есть поле на форме, у которого путь к данным Реквизит1.табличнаяЧасть1 корректно отображает все.

Если менять документ в этом сеансе, то все обновляется. И просто при переключении на другую строку ТЧ отображается именно того документа, который выделен.

Далее, в другом сеансе Пользователь2 меняет документ (и табличную часть)

У Пользователя1 в это время на форме ничего не меняется. (Открыта форма списка документов.) При нажатии F5 в самом списке реквизиты шапки измененного документа видно что меняются

А вот элемент хранящий Реквизит1.табличнаяЧасть1 не обновляется.

Почему? Или может я в принципе реализую это неправильно?

Смысл в том чтобы не открывая документ видеть его табличную часть (на котором стоит курсор).

И дальше при F5 или отлавливая изменение документов этого типа в другом сеансе или по таймеру обновлять отображение в открытой форме

Платформа 8.3.18, документ добавлен в расширении
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
7. custer 08.07.22 15:11 Сейчас в теме +1 $m
&НаСервере
Процедура ОбновитьСписокТЗНаСервере()
	
	Если Ссылка = Документы.Документ1.ПустаяСсылка() Тогда
		Если ТЗ.Количество() <> 0 Тогда
			ТЗ.Очистить(); 
		КонецЕсли;
	Иначе 
		ТЗ.Загрузить(Ссылка.ТабличнаяЧасть1.Выгрузить());
	КонецЕсли;
	
КонецПроцедуры 

&НаКлиенте
Процедура ОбновитьСписокТЗ() Экспорт	
	ОбновитьСписокТЗНаСервере();	
КонецПроцедуры

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)  
	Ссылка = Элемент.ТекущаяСтрока;
	ОбновитьСписокТЗ();
КонецПроцедуры
 
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПодключитьОбработчикОжидания("ОбновитьСписокТЗ", 3);
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	ОтключитьОбработчикОжидания("ОбновитьСписокТЗ");
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
9. SlavaKron 08.07.22 15:19 Сейчас в теме
(1)
у которого путь к данным Реквизит1.табличнаяЧасть1
Я бы начал с того, что сделал путь по типу "Элементы.Список.ТекущиеДанные.табличнаяЧасть1" и вообще бы убрал обработчик ПриАктивизацииСтроки.
10. Rega 08.07.22 15:46 Сейчас в теме
(9) я так пробовала, работает. Только мне показалось что медленно при открытии и при F5. Вернула все назад, все равно медленно. Наверное не из-за этого.

Но в Элементе ТабличнаяЧасть1 отображаются строки не по порядку, со случайной сортировкой (может не случайной, но не той что в документе).

Не нашла как задать сортировку в Элементы.Список.ТекущиеДанные.Ссылка.ТабличнаяЧасть1.
2. SvetlanaPavlova 08.07.22 14:27 Сейчас в теме
Для обновления по таймеру можно вызвать команду ПодключитьОработчикОжидания(ИмяЭкспортнойПроцедурыНаКлиенте, ВремяВСекундах).В этой процедуре обновляем динамический список и вызываем процедуру при активизации строки
Элементы.ДинамическийСписок.Обновить();
ДинамическийСписокПриАктивизацииСтроки();
3. custer 08.07.22 14:33 Сейчас в теме
А Оповестить() не подойдет для этих целей?)
6. Rega 08.07.22 14:59 Сейчас в теме
(3) Читала синтакс-помощник, пока не понятно. А оно между сеансами работает?
8. custer 08.07.22 15:13 Сейчас в теме
(6) нет, не работает для сеансов. скинул пример (7) в разных сеансах будет работать.

P.S.:Но не нравится мне реализации через таймеры тянуть данные)))
4. Rega 08.07.22 14:34 Сейчас в теме
(2) я пока не совсем понимаю как это делать (обработчики ожидания), но если первую часть решу, думаю найду пример. Пока не пойму, почему при ручном обновлении через F5 не обновляется табличная часть связанная с ссылкой на документ
5. Rega 08.07.22 14:55 Сейчас в теме
Как будто форма считала до изменения и все, эти данные и показывает и когда переключаю на другую строку или возвращаю на эту, ТЧ меняется, но показывает то что было до изменения.

Если зайти в тот документ или даже в соседний от Пользователя в текущем сеансе и просто перепровести, то тч обновляется и показывает верно.
7. custer 08.07.22 15:11 Сейчас в теме +1 $m
&НаСервере
Процедура ОбновитьСписокТЗНаСервере()
	
	Если Ссылка = Документы.Документ1.ПустаяСсылка() Тогда
		Если ТЗ.Количество() <> 0 Тогда
			ТЗ.Очистить(); 
		КонецЕсли;
	Иначе 
		ТЗ.Загрузить(Ссылка.ТабличнаяЧасть1.Выгрузить());
	КонецЕсли;
	
КонецПроцедуры 

&НаКлиенте
Процедура ОбновитьСписокТЗ() Экспорт	
	ОбновитьСписокТЗНаСервере();	
КонецПроцедуры

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)  
	Ссылка = Элемент.ТекущаяСтрока;
	ОбновитьСписокТЗ();
КонецПроцедуры
 
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПодключитьОбработчикОжидания("ОбновитьСписокТЗ", 3);
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	ОтключитьОбработчикОжидания("ОбновитьСписокТЗ");
КонецПроцедуры
Показать
12. Rega 08.07.22 16:37 Сейчас в теме
(7) похоже что это сработает.

Добавила в реквизиты формы списка новый реквизит с типом "(ТаблицаЗначений)", поместила на форму.

При активации стороки, в него считывает актуальные данные.)

Хотя пока что в самом динамическом списке при этом пока не нажмешь обновить отображает старые данные шапки.

Теперь или по таймеру или по таймеру + с условием по датам попробую.
Недавно, вроде на инфостарте, находила вариант - через регистр сведений с датой.

Попробую создать не периодический регистр сведений с измерениями "пользователь" и ресурсом "ДатаИзменения".
И в форме списка документов реквизит "ДатаИзмененияНаФорме"

В событии ПослеЗаписи в модуле документа можно будет добавлять или изменять запись в этом регистре по автору.

И дальше по таймеру и при активации строки, на сервере сверять наибольшую запись по дате, где пользователь не равен текущему с датой в реквизите формы. И если вторая меньше обновлять список

Спасибо! Кажется все теперь должно работать!
11. mrd_84 08.07.22 16:01 Сейчас в теме
Я бы пробовал реализовать это через Оповестить()
13. custer 08.07.22 17:22 Сейчас в теме
(11) оповестить сработает только в текущем сеансе, а пользователь хочет во всех сеансах)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот