Обновление списков при интерактивных действиях пользователя

#std558

Область применения: управляемое приложение, мобильное приложение.

1. Платформа 1С:Предприятие по умолчанию обновляет содержимое динамических списков при выполнении пользователем стандартных команд по изменению элементов этого списка (Записать, Провести, Пометить на удаление и т.п.) и при добавлении новых элементов. Но в ряде ниже перечисленных случаев такое обновление следует предусмотреть явно в прикладном коде.

2. Команды, которые изменяют объекты и размещаются в форме списка, должны заботиться об обновлении списка объектов после своего выполнения. Например, после изменения одного объекта рекомендуется вызывать метод ОповеститьОбИзменении:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

ОбъектСсылка = ПараметрКоманды;
 // Меняем объект
 // ...
ОповеститьОбИзменении(ОбъектСсылка);

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

При изменении нескольких объектов целесообразно обновлять список однократно, в конце операции:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

Для Каждого ОбъектСсылка Из ПараметрКоманды Цикл
  // Меняем объект
  // ...
КонецЦикла; 

ОповеститьОбИзменении(ТипЗнч(ПараметрКоманды[0]));

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

3. Также должно быть обеспечено обновление данных в динамическом списке, у которого не назначена основная таблица. Такие динамические списки могут отображать данные из нескольких таблиц.

3.1. Если данные добавляются или изменяются командой, расположенной в форме динамического списка, то необходимо обновить список явно после выполнения команды.

3.2. Если данные изменяются в какой-либо другой форме (например, в форме объекта), то необходимо организовать обновление списка через оповещение. Для этого в каждой форме объекта, данные которого выводятся в динамическом списке, следует реализовать обработчик события ПослеЗаписи с использованием метода Оповестить:

Оповестить ("Запись_<ИмяОбъекта>", ПараметрыОповещения, ОбъектСсылка);

где 

Пример:

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

Затем в обработчике события Оповещение в форме динамического списка разместить код по обновлению динамического списка вида:

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

 Если Врег(ИмяСобытия) = Врег("Запись_РасходнаяНакладная")
   Или Врег(ИмяСобытия) = Врег("Запись_НакладнаяНаПеремещение") Тогда
   Элементы.СписокНакладных.Обновить();
 КонецЕсли;

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

При этом имена событий следует проверять явным образом, чтобы исключить неоправданное обновление списка.

3.3. При изменении сразу нескольких объектов в параметре ОбъектСсылка метода Оповестить следует передавать значение Неопределено.

Пример:

Оповестить("Запись_РасходнаяНакладная", ПараметрыЗаписи, Неопределено);

См. также