Динамический список: проставление галочки по двойному клику (странное поведение)

1. Arkadag 21.08.24 13:10 Сейчас в теме
Приветствую, Форумчане!
ЕРП 2.5

В динамический список журнала "Журнал продаж" добавил числовое поле "Метка" (поле картинки, картинка значений)

На событие списка "Выбор" повесил простой код:

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	
	Если Поле.Имя = "Метка" Тогда
		Сообщить("ваповап");//(Элемент.ТекущиеДанные.Метка);
		
		Если Элемент.ТекущиеДанные.Метка = 1 Тогда
			Ответ = 0;	
		Иначе
			Ответ = 1;
		КонецЕсли;	
		
		ВыделенныеСтроки = Элементы.СписокДокументыПродажи.ВыделенныеСтроки; //
		ТекущиеДанные    = Элементы.СписокДокументыПродажи.ТекущиеДанные;
		ТекущиеДанные.Метка = Ответ;
		//СписокВыборНаСервере(ВыделенныеСтроки, ТекущиеДанные, Ответ);   
		//Элементы.СписокДокументыПродажи.Обновить();
		//Возврат;
	Иначе
		СтандартнаяОбработка = Истина;
	КонецЕсли;  
	
	
КонецПроцедуры
Показать


Как ни странно код сработал и галочка проставляется. (см. картинку)

Но весь парадокс (для меня) заключается в том, что если я заремачу
Сообщить("ваповап");

То ничего не изменяется. Складывается впечатление, что "Сообщить()" выполняет своего рода обновлением списка.

Никак не могу понять какую роль выполняет вывод этого сообщения, что происходит обновление списка с изменением поля "Метка".

Что сделано не так. Как сделать это обновление формы без этого "Сообщить()"?
Прикрепленные файлы:
Найденные решения
5. Sashares 35 21.08.24 13:44 Сейчас в теме
(1) Не правильно, имхо.
В динамический список добавляется поле:
Выбор Когда Ссылка В (&СписокОтмеченных) Тогда 1 Иначе 0 Конец КАК Метка

Добавляется реквизит формы - список значений - СписокОтмеченных.
Для ячейки устанавливается свойство ГиперссылкаЯчейки - чтобы по одному клику работало.

При создании на сервере устанавливается параметр.

По событию выбор - добавлять/удалять ссылки из выделенных строк в список/из списка, соответственно, и устанавливать параметр ДС еще раз.

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

Например, если надо как-то обработать отмеченные документы, то перед обработкой надо актуализировать список отмеченных по выводимым строкам, чтобы в списке значений не было ссылок, скрытых отбором или поиском.
&НаСервере
Процедура АктуализироватьСписокОтмеченных()
		
	Схема = Элементы.МойДС.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	НастройкиСхемы = Элементы.МойДС.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
	КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиСхемы);
	КомпоновщикНастроек.Восстановить();
	
	КомпоновщикНастроек.Настройки.Структура.Очистить();
	
	ДетальныеЗаписи = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	ДетальныеЗаписи.Имя = "ДетальныеЗаписи";
	ДетальныеЗаписи.Использование = Истина;
	
	ПолеОтчет = ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
	ПолеОтчет.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
	ПолеОтчет.Использование = Истина; 
	
	ОбщегоНазначенияКлиентСервер.ИзменитьЭлементыОтбора(КомпоновщикНастроек.Настройки.Отбор,,"Метка",1,,Истина);
		
			
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(Схема, КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
	ПроцессорВыводаРезультатаОтчета = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	РезультатСхемы = ПроцессорВыводаРезультатаОтчета.Вывести(ПроцессорКомпоновкиДанных);
	
	МассивСсылок = РезультатСхемы.Выгрузить("Ссылка");	
	СписокОтмеченных.Очистить();
СписокОтмеченных.ЗагрузитьЗначения(МассивСсылок );
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. yispepotri 21.08.24 13:14 Сейчас в теме
(1)
ЭтаФорма.ОбновитьОтображениеДанных();
5. Sashares 35 21.08.24 13:44 Сейчас в теме
(1) Не правильно, имхо.
В динамический список добавляется поле:
Выбор Когда Ссылка В (&СписокОтмеченных) Тогда 1 Иначе 0 Конец КАК Метка

Добавляется реквизит формы - список значений - СписокОтмеченных.
Для ячейки устанавливается свойство ГиперссылкаЯчейки - чтобы по одному клику работало.

При создании на сервере устанавливается параметр.

По событию выбор - добавлять/удалять ссылки из выделенных строк в список/из списка, соответственно, и устанавливать параметр ДС еще раз.

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

Например, если надо как-то обработать отмеченные документы, то перед обработкой надо актуализировать список отмеченных по выводимым строкам, чтобы в списке значений не было ссылок, скрытых отбором или поиском.
&НаСервере
Процедура АктуализироватьСписокОтмеченных()
		
	Схема = Элементы.МойДС.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	НастройкиСхемы = Элементы.МойДС.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
	КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиСхемы);
	КомпоновщикНастроек.Восстановить();
	
	КомпоновщикНастроек.Настройки.Структура.Очистить();
	
	ДетальныеЗаписи = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	ДетальныеЗаписи.Имя = "ДетальныеЗаписи";
	ДетальныеЗаписи.Использование = Истина;
	
	ПолеОтчет = ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
	ПолеОтчет.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
	ПолеОтчет.Использование = Истина; 
	
	ОбщегоНазначенияКлиентСервер.ИзменитьЭлементыОтбора(КомпоновщикНастроек.Настройки.Отбор,,"Метка",1,,Истина);
		
			
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(Схема, КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
	ПроцессорВыводаРезультатаОтчета = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	РезультатСхемы = ПроцессорВыводаРезультатаОтчета.Вывести(ПроцессорКомпоновкиДанных);
	
	МассивСсылок = РезультатСхемы.Выгрузить("Ссылка");	
	СписокОтмеченных.Очистить();
СписокОтмеченных.ЗагрузитьЗначения(МассивСсылок );
КонецПроцедуры
Показать
6. Arkadag 21.08.24 16:30 Сейчас в теме
(5) Спасибо, вроде сработало. Но очень медленно. У меня сейчас всего 300 записей, а что будет когда 30000 записей даже представить боюсь...
7. Sashares 35 21.08.24 16:38 Сейчас в теме
(6) Что именно медленно? Покажите код.
У меня работает почти мгновенно на достаточно большом списке документов.
8. SlavaKron 21.08.24 16:50 Сейчас в теме
(5)
чтобы в списке значений не было ссылок, скрытых отбором или поиском.
Сомнительная функциональность, если она автоматическая. То есть я потеряю своё кропотливое протыкивание галочек из-за шального быстрого поиска.
9. Sashares 35 21.08.24 16:54 Сейчас в теме
(8)
То есть я потеряю своё кропотливое протыкивание галочек из-за шального быстрого поиска.

Если пользователь протыкал условно 100 документов, потом изменил отбор - указал другую организацию/контрагента, в списке будут уже другие документы, и прошлые 100 отмеченных, определенно не нужны. Далее если пользователь протыкал еще 10 и нажал обработать, то обработать надо эти 10, а не 110.
С поиском, имхо, также стоит поступать, потому что отделить поиск от отбора мы не можем.
Обрабатываем только те отмеченные строки, которые выводятся в списке.
3. Arkadag 21.08.24 13:33 Сейчас в теме
К сожалению не помогло. Но обратил внимание, что если прокрутить экран, то обновление происходит.
Может это связано с особенностями ДС, который работает с "подкачкой" данных при прокрутке?
4. yispepotri 21.08.24 13:40 Сейчас в теме
(3)
Элементы.Список.Обновить();


возможно что-то из этих двух вариантов поможет
ОповеститьОбИзменении(Ссылка)
user1671936; +1 Ответить
Оставьте свое сообщение

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