Событие обновления динамического списка на клиенте

29.01.26

Разработка - Работа с интерфейсом

Описание способа отловить событие обновления динамического списка в клиентском контексте.

Введение

Единственное событие элемента формы, привязанного к динамическому списку, которое позволяет поймать момент обновления данных в списке - это "ПриПолученииДанныхНаСервере". Но он должен иметь директиву "&НаСервереБезКонтекста". Есть способы передать в это событие данные формы, а вот наоборот - нет. Например: при каждом обновлении динамического списка мы хотим делать нечто с данными формы.

 

Решение

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

При открытии формы мы подписываемся на определенное уведомление, а в событии ПриПолученииДанныхНаСервере посылаем это самое уведомление, тем самым оповещая клиент о том, что динамический список был обновлен.

В качестве примера поставим задачу: показывать пользователю количество строк в динамическом списке. Ниже приведен код модуля формы списка.

 
 Модуль формы списка

 

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	// Сохраняем УникальныйИдентификатор для использования в СписокПриПолученииДанныхНаСервере()
	Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("УникальныйИдентификаторФормы", УникальныйИдентификатор);
	ДелаемНечто();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ОписаниеОповещения = Новый ОписаниеОповещения("СписокПослеПолученияДанных", ЭтотОбъект);
	УведомленияКлиента.ПодключитьОбработчик(КлючУведомленияПослеПолученияДанных(УникальныйИдентификатор), ОписаниеОповещения);
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	Адресаты = Новый Массив;
	Адресаты.Добавить(НомерСеансаИнформационнойБазы());
	КлючУведомления = КлючУведомленияПослеПолученияДанных(Настройки.ДополнительныеСвойства.УникальныйИдентификаторФормы);
	// Второй параметр обязательный и при передачи в него Неопределено уведомление не отправляется.
	// Поэтому заполняем его любым значением.
	УведомленияКлиента.ОтправитьУведомление(КлючУведомления, 1, Адресаты);
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиентеНаСервереБезКонтекста
Функция КлючУведомленияПослеПолученияДанных(УникальныйИдентификатор)
	// Сделаем ключ уведомления уникальным среди открытых форм пользвателя, 
	// что бы текущая форма не воздействовала на другую, в которой используется этот же метод.
	Возврат "СписокПослеПолученияДанных" + УникальныйИдентификатор;
КонецФункции

&НаКлиенте
Процедура СписокПослеПолученияДанных(Данные, ДополнительныеПараметры) Экспорт
	// Тут главное не делать ничего, что может спровоцировать обновление дин. списка.
	// Иначе получим бесконечный цикл.
	ДелаемНечто();
КонецПроцедуры

&НаСервере
Процедура ДелаемНечто()
	
	// Мы поймали событие обновления дин. списка, и нам доступен контекст. 
	// Что делать с этим дальше - на ваше усмотрение.
	// Код ниже исключительно для примера.
	Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	// КоличествоСтрок - это реквизит формы
	КоличествоСтрок = Результат.Количество();
	
КонецПроцедуры

#КонецОбласти

 

 

Итог

С помощью механизма уведомлений клиента мы добились, что клиентский код "узнает" о событии "ПриПолученииДанныхНаСервере".

Но важно понимать: это событие вызывается не только при изменении данных (смене отбора, добавлении элемента, сортировке), но и при обычном динамическом считывании. Иной единой точки входа, увы, нет.

Забавно: клиент сам инициирует обновление списка - через кнопку обновления, изменение параметров, запись объектов. Все это происходит на его стороне, сервер никогда не присылает на клиент команду "Надо обновить дин. список". Но при этом в платформе так и не появилось единого события, которое сообщало бы клиенту: "Список только что обновился".

На данный момент это единственное решение, которое мне удалось найти для обхода этой особенности платформы.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

29280 руб.

27.03.2025    67530    41    29    

54

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36600 руб.

28.08.2025    5258    2    2    

5

Консолидация данных Работа с интерфейсом Программист Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)

Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.

6088 руб.

17.10.2025    1377    3    0    

2

Работа с интерфейсом Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

Расширение «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

6100 руб.

14.01.2016    59231    21    25    

46

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами (виджетами) в 1С.

5246 руб.

29.06.2020    23535    33    6    

52

Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    46153    mrXoxot    44    

138

Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    25625    smielka    38    

113

Инструментарий разработчика Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    16965    180    acces969    31    

132
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1937 29.01.26 11:03 Сейчас в теме
"Делаем нечто" на сервере? с контекстом формы? параметр КоличествоСтрок не надо отдельно передавать на клиент?
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);

форма по идее сама вывела результат, а вы еще раз его выводите программно?

Распишите, пож-та, порядок вызова процедур и функций - кто первый , кто второй и т.д.
2. RustIG 1937 29.01.26 11:09 Сейчас в теме
https://its.1c.ru/db/v8std/content/558/hdoc

Поиск - это стандартная команда динамического списка? Если так, то ее можно обработать в обработчике команды - затем используем процедуру Оповестить(...) , далее в обработчике Оповещения формы динамического списка "делаем что нужно"....

ПС. Не тестил, но рассуждаю....
3. PowerBoy 3489 29.01.26 12:37 Сейчас в теме
(2) нет обработчика поиска
Для отправки сообщения требуется регистрация/авторизация