Для обновления динамического списка после добавления объекта, который должен попасть в этот список, можно выполнить процедуру ОповеститьОбИзменении(<Ссылка>) или ОповеститьОбИзменении(<ИзмененныйТип>). В первом случае создается оповещение для динамического списка для обновления по объекту, во втором по типу объектов
Например ОповеститьОбИзменении(Тип("ДокументСсылка.ИнвентаризацияРасчетовСАбонентами"));
Данный метод работает для динамических списков, у которых назначена основная таблица. Если основная таблица не назначена, например когда данные берутся из нескольких таблиц, то надо задать механизм вручную.
Если данные добавляются или изменяются командой, расположенной в форме динамического списка, то необходимо обновить список явно после выполнения команды.
Если данные изменяются в какой-либо другой форме (например, в форме объекта), то необходимо организовать обновление списка через оповещение. Для этого в каждой форме объекта, данные которого выводятся в динамическом списке, следует реализовать обработчик события ПослеЗаписи с использованием метода Оповестить:
Оповестить ("Запись_<ИмяОбъекта>", ПараметрыОповещения, ОбъектСсылка);
где
Запись_<ИмяОбъекта> - имя события, в котором <ИмяОбъекта> - имя объекта, как оно задано в метаданных. Например, для документа "Расходная накладная" имя события будет "Запись_РасходнаяНакладная".
ПараметрыОповещения – как правило, это параметр события ПослеЗаписи формы объекта. Состав свойств структуры может быть расширен исходя из потребностей прикладной логики.
ОбъектСсылка – ссылка на записываемый объект.
Пример:
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("Запись_РасходнаяНакладная", ПараметрыЗаписи, Объект.Ссылка);
КонецПроцедуры
Затем в обработчике события Оповещение в форме динамического списка разместить код по обновлению динамического списка вида:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Врег(ИмяСобытия) = Врег("Запись_РасходнаяНакладная")
Или Врег(ИмяСобытия) = Врег("Запись_НакладнаяНаПеремещение") Тогда
Элементы.СписокНакладных.Обновить();
КонецЕсли;
КонецПроцедуры
При этом имена событий следует проверять явным образом, чтобы исключить неоправданное обновление списка.
При изменении сразу нескольких объектов в параметре ОбъектСсылка метода Оповестить следует передавать значение Неопределено.
Пример:
Оповестить("Запись_РасходнаяНакладная", ПараметрыЗаписи, Неопределено);
ВНИМАНИЕ!
Событие ОбработкаОповещения у формы может не сработать, если метод Оповестить() вызывается в форме, которая открыта методом ОткрытьФорму(,,Владелец) с параметром "Владелец" = Форма. В этом случае обработка оповещения сработает только в форме, которая указана в качестве владельца. В других формах это событие не сработает. Чтобы обработка оповещения срабатывала во всех открытых (созданных) формах, указывать владельца не надо.
В расширении табличного поля есть настройки, которые отвечают за периодическое обновление списка: Автообновление и ПериодАвтообновления.
Автообновление позволяет включить или выключить автоматическое обновление списка, а Период автообновления задает периодичность обновления данных в списке.
Для интерактивного управления периодом обновления динамического списка используются значения, устанавливаемые через меню табличного поля Настройка списка – Прочее.
Следует учитывать, что это дополнительная нагрузка на 1С и это может привести к подтормаживанию.
Для не динамических списков можно задать периодическое обновление следующим образом: подключается обработчик ожидания и запускается необходимая процедура. Например:
Процедура ПриОткрытии()
ПодключитьОбработчикОжидания("ОбновитьСписокДокументов",60);
КонецПроцедуры
Процедура ОбновитьСписокДокументов()
ЭтаФорма.Обновить();
КонецПроцедуры
|