Использование флажков в динамических списках 2.0

13.01.22

Разработка - Механизмы платформы 1С

Пример реализации динамического списка с пометками в режиме множественного и единичного выбора.

Скачать файлы

Наименование Файл Версия Размер
Динамический список с пометками
.epf 18,16Kb
36
.epf 1.1 18,16Kb 36 Скачать

На момент решения опубликовать данный материал на инфостарте была найдена уже существующая подобная тема, а точнее некий "Зародыш". Посему, решил назвать публикацию аналогично, как бы продолжением этой эпопеи связанной с прикручиванием флажкового функционала к ДС. И вот теперь здесь и сейчас, вашему чуткому вниманию, представлена реализация уже более полноценного и наглядного примера работы динамического списка с пометками в режиме множественного и единичного выбора. Изменение значения пометки строки происходит по двойному клику мышки (событие "Выбор"). Также, можно помечать только выделенные строки (кнопками: [v] "Установить пометки" или [ ] "Снять пометки"). Событие ДС ПриПолученииДанныхНаСервере реализовано в версии платформы 8.3.10.2168, а потому начиная именно с этой версии можно пользоваться данным приёмчиком. Больше пояснять думаю ничего и необязательно, остальное немного пройдясь по коду думаю и так всё понятно станет, но если что, спрашивайте в комментах.

Внесённые в код изменения:

  • 18.01.2022 - Пофиксил существенный недочёт: когда при выборе (Процедура СписокВыбор) отключалась &ОбщаяПометка и попадался большой и не до конца пролистанный список, то в ВыбранныеДокументы соответственно не могли попадать непрочитанные порции строк ДС (Процедура СписокПриПолученииДанныхНаСервере). Благодарю dhurricane за наводку на ошибку. Выход нашел такой: добавил в пару мест список значений НевыбранныеДокументы, теперь всё отлично! Очень извиняюсь, если кто-то и куда-то уже применил код данной публикации без этой доработки, обязательно доделайте как теперь.

Запрос динамического списка с пометками и реквизиты формы подбора:

Код формы подбора:

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	Если Параметры.Свойство("РежимЕдиничногоВыбора") Тогда
		РежимЕдиничногоВыбора = Параметры.РежимЕдиничногоВыбора;
	КонецЕсли;
		
	Если Параметры.Свойство("ИсключаемыеДокументы") Тогда
		ИсключаемыеДокументы.ЗагрузитьЗначения(Параметры.ИсключаемыеДокументы);
	КонецЕсли;
	Список.Параметры.УстановитьЗначениеПараметра("ИсключаемыеДокументы", ИсключаемыеДокументы);
	
	Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Истина);
	Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", Новый СписокЗначений);
	Список.Параметры.УстановитьЗначениеПараметра("НевыбранныеДокументы", Новый СписокЗначений);
	АдресХранилищаВыбранныхДокументов = ПоместитьВоВременноеХранилище(Новый СписокЗначений, УникальныйИдентификатор);
	Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("АдресХранилищаВыбранныхДокументов", АдресХранилищаВыбранныхДокументов);
	Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("РежимЕдиничногоВыбора", РежимЕдиничногоВыбора);
		
	Если Параметры.Свойство("ТекущийДокумент") Тогда
		Элементы.Список.ТекущаяСтрока = Параметры.ТекущийДокумент;
	КонецЕсли;
	
	Если РежимЕдиничногоВыбора Тогда
		Элементы.Список.МножественныйВыбор = Ложь;
		Элементы.ГруппаПометки.Видимость = Ложь;
		Элементы.СписокПометка.Видимость = Ложь;
	КонецЕсли;
	
КонецПроцедуры
	
#КонецОбласти

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

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	
	Если Настройки.ДополнительныеСвойства.РежимЕдиничногоВыбора Тогда
		Возврат;
	КонецЕсли;
	
	ВыбранныеДокументы = ПолучитьИзВременногоХранилища(Настройки.ДополнительныеСвойства.АдресХранилищаВыбранныхДокументов);
		
	Для Каждого СтрокаСписка Из Строки Цикл
		Если СтрокаСписка.Значение.Данные.Пометка И ВыбранныеДокументы.НайтиПоЗначению(СтрокаСписка.Ключ) = Неопределено Тогда
			ВыбранныеДокументы.Добавить(СтрокаСписка.Ключ);
		КонецЕсли;
	КонецЦикла;

	ПоместитьВоВременноеХранилище(ВыбранныеДокументы, Настройки.ДополнительныеСвойства.АдресХранилищаВыбранныхДокументов);
	
КонецПроцедуры

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если РежимЕдиничногоВыбора Тогда
		Выбрать(Неопределено);
		Возврат;
	КонецЕсли;
	
	ТекущиеДанные = Элементы.Список.ТекущиеДанные;
	ВыбранныеДокументы = ПолучитьИзВременногоХранилища(АдресХранилищаВыбранныхДокументов);
	Если ТекущиеДанные.Пометка Тогда
		СтрокаСписка = ВыбранныеДокументы.НайтиПоЗначению(Элементы.Список.ТекущаяСтрока);
		Если СтрокаСписка <> Неопределено Тогда
			ВыбранныеДокументы.Удалить(СтрокаСписка);
		КонецЕсли;
		НевыбранныеДокументы.Добавить(Элементы.Список.ТекущаяСтрока);
	Иначе
		СтрокаСписка = НевыбранныеДокументы.НайтиПоЗначению(Элементы.Список.ТекущаяСтрока);
		Если СтрокаСписка <> Неопределено Тогда
			НевыбранныеДокументы.Удалить(СтрокаСписка);
		КонецЕсли;
		ВыбранныеДокументы.Добавить(Элементы.Список.ТекущаяСтрока);
	КонецЕсли;	
	
	ПоместитьВоВременноеХранилище(ВыбранныеДокументы, АдресХранилищаВыбранныхДокументов);
	
	Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", ВыбранныеДокументы);
	Список.Параметры.УстановитьЗначениеПараметра("НевыбранныеДокументы", НевыбранныеДокументы);
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура УстановитьПометки(Команда)
	
	ИзменитьПометки(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьПометки(Команда)
	
	ИзменитьПометки(Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьПометки(Значение)
	
	Если Элементы.Список.ВыделенныеСтроки.Количество() > 1 Тогда
		
		ВыбранныеДокументы = ПолучитьИзВременногоХранилища(АдресХранилищаВыбранныхДокументов);
		
		Для Каждого СтрокаСписка Из Элементы.Список.ВыделенныеСтроки Цикл
			
			СтрокаВыбранных = ВыбранныеДокументы.НайтиПоЗначению(СтрокаСписка);
			Если Значение Тогда
				Если СтрокаВыбранных = Неопределено Тогда
					ВыбранныеДокументы.Добавить(СтрокаСписка);
				КонецЕсли;
			Иначе
				Если СтрокаВыбранных <> Неопределено Тогда
					ВыбранныеДокументы.Удалить(СтрокаВыбранных);
				КонецЕсли;
			КонецЕсли;
			
		КонецЦикла;
		
		ПоместитьВоВременноеХранилище(ВыбранныеДокументы, АдресХранилищаВыбранныхДокументов);
		
		Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Ложь);
		Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", ВыбранныеДокументы);
		
	Иначе
		
		ПоместитьВоВременноеХранилище(Новый СписокЗначений, АдресХранилищаВыбранныхДокументов);
		
		Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Значение);
		Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", Новый СписокЗначений);
		
	КонецЕсли;	
	
КонецПроцедуры

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

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

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

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

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

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

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

 

 

События интеграции для открытия формы подбора:

Код интеграции для работы с формой подбора:

#Область ОбработчикиКомандФормы

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

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

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

&НаКлиенте
Процедура ПодобратьПослеВопроса(Результат, ДополнительныеПараметеры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.ДокументыЗаказов.Очистить();
	КонецЕсли;
	
	Если Результат <> КодВозвратаДиалога.Отмена Тогда
		ОткрытьФормуПодбора();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ВыбранноеЗначение = Неопределено Тогда
		Возврат;
	КонецЕсли;
		
	Если ИсточникВыбора.ИмяФормы = "ВнешняяОбработка.ДинамическийСписокСПометками.Форма.ФормаПодбора" Тогда
		
		Для Каждого ВыбранныйДокумент Из ВыбранноеЗначение.ВыбранныеДокументы Цикл
			НоваяСтрока = Объект.ДокументыЗаказов.Добавить();
			НоваяСтрока.Документ = ВыбранныйДокумент.Документ;
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ОткрытьФормуПодбора(ПараметрыОткрытия = Неопределено)
	
	Если ПараметрыОткрытия = Неопределено Тогда
		ПараметрыОткрытия = Новый Структура;
	КонецЕсли;
	
	//++ Необязательное: для случаев когда нужно исключить уже подобранные
	ИсключаемыеДокументы = Новый Массив;
	Для Каждого СтрокаТаблицы Из Объект.ДокументыЗаказов Цикл
		Если ЗначениеЗаполнено(СтрокаТаблицы.Документ) Тогда
			ИсключаемыеДокументы.Добавить(СтрокаТаблицы.Документ);
		КонецЕсли;
	КонецЦикла;
	ПараметрыОткрытия.Вставить("ИсключаемыеДокументы", ИсключаемыеДокументы);
	//--
	
	ОткрытьФорму("ВнешняяОбработка.ДинамическийСписокСПометками.Форма.ФормаПодбора", 
		ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

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

З.Ы.: Ну а если вдруг, у кого-то возникнет непреодолимое желание очень поблагодарить автора, то он может скачать обработку с примером, лично я не против :). Там задействованы ссылки на типовой документ ЗаказКлиента. По идее, подойдет для любой конфигурации, где есть такой документ, и даже если его не окажется, всегда можно на любой другой переназначить.

Пользуйтесь на благо! Всем Радости и Добра!

Флажки флажок пометка пометки динамический список подбор выбор заполнение выделение

См. также

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    6600    human_new    21    

57

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    3245    YA_418728146    3    

87

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    3740    sebekerga    47    

85

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    8875    SeiOkami    24    

88

Методы работы с универсальным отчетом в подсистеме "Варианты отчетов" на БСП

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье рассмотрим типовую подсистему "Варианты отчетов" БСП на примере применения в универсальном отчете любой современной конфигурации.

30.05.2023    3522    quazare    4    

81

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    5486    SeiOkami    10    

129

Версионирование объектов VS История данных

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    10258    dsdred    48    

144

Идентификатор объекта в запросе. Вы этого хотели?

Запросы Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

В платформе 8.3.22 появилась возможность получать идентификатор в запросе. Лично я ждал этого давно, но по итогу ждал большего. Что не так?

12.01.2023    22626    dsdred    24    

83
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. o.nikolaev 208 16.01.22 01:18 Сейчас в теме
Если 1 млн. записей пометить, то что произойдет?
kser87; maksa2005; +2 Ответить
3. ActionBlog 17.01.22 09:19 Сейчас в теме
(1) Палец устанет галочки нажимать 100% :)
rovenko.n; +1 Ответить
6. VKislitsin 915 17.01.22 10:35 Сейчас в теме
(3) Так там ведь для выделенных строк ставятся. Один раз ctrl-a, второй раз согласиться с выделением больше тыщи. Дождаться когда "отлипнет" и тынц в кнопку :)
А если серьезно, у нас такой подход реализован в продуктиве. Записей не миллион, а несколько тысяч всего лишь. Но бизнес-процесс не предусматривает большого количества галочек - ставятся только поштучно. Работает.
8. o.nikolaev 208 17.01.22 12:34 Сейчас в теме
(6) :) Ну если с таким предусловием-то, то конечно. Нет, я понимаю что у примера сценарий использования "с ограничениями". Только это как-то не указано. И на больших базах, если кто-то хлопнет выделение очень большого количества записей можно столкнуться с проблемами я так понимаю.
9. VKislitsin 915 17.01.22 12:54 Сейчас в теме
(8) Олег, ладно тебе придираться :)
Не у всех есть большие базы. А у кого есть, тот сам подумает об ограничениях.

если кто-то хлопнет выделение очень большого количества записей

Да просто не дождется окончания выделения - будет писать в техподдержку "база висит" :)
rovenko.n; o.nikolaev; mr_sav; +3 Ответить
5. SnubbyAston 51 17.01.22 09:38 Сейчас в теме
(1) Главное в статье необычный подход =) А минусы можно найти почти всегда. Для определенных задач точно можно использовать. Для справочника в тысячу значений максимум, например.
А можно еще и таблицу подобранного снизу прикрутить аналогично.
2. user1067792 17.01.22 08:46 Сейчас в теме
У вас опечатка в наименовании второго параметра в процедуре ПодобратьПослеВопроса(): ДополнительныеПарамтеры -> ДополнительныеПараметры.
11. mr_sav 86 17.01.22 18:07 Сейчас в теме
(2) Благодарю, поправлю, но особо это ничего не улучшит, кроме навыков правописания русского языка.
4. ixijixi 1547 17.01.22 09:20 Сейчас в теме
Зачем флажки в ДС? Зачем вообще эта публикация, если в исходной и так всё описано, причем даже лучше.
Прикрепленные файлы:
nekit_rdx; kuzyara; 7OH; Revachol; Yashazz; 0x00; +6 1 Ответить
12. mr_sav 86 17.01.22 18:21 Сейчас в теме
(4) Ну если там для тебя лучше - так лучше, я и не соревнуюсь за крутое описание, странный ты). И мне, например, в некоторых случаях быстрее и удобнее работать с ДС (и с его КомпоновщикомНастроек) чем с ТЗ. По-моему тебе просто внимания не хватает и видимо по большей части хотелось просто картинку котика поюзать)).
Obertone; starik-2005; +2 2 Ответить
15. ixijixi 1547 18.01.22 10:07 Сейчас в теме
(12) Ну то есть ты фактически скопировал отлично оформленную исходную публикацию, ухудшив качество подаваемого материала, а странный я. Окей. Про ТЗ я вообще ни слова не сказал, откуда претензия? Котик да, давно просился погулять.
nekit_rdx; starik-2005; 0x00; +3 Ответить
20. mr_sav 86 18.01.22 16:25 Сейчас в теме
(15) Взял тот же принцип работы с ДС, на его основе захотелось сделать пофункциональнее форму выбора. Сделал для задачи заказчика. Потом решил в качестве примера опубликовать, может кому пригодится, поискал и нашел уже подобную тему, но как по мне, пример из той публикации менее функционален, там нет множественного выбора. Присмотрись внимательнее и уверен ты обязательно найдешь отличия, иначе зачем бы я тратил своё драгоценное время и тоже самое публиковал, тем более в свободный доступ. Добра тебе, внимательности и радостного котика)
Obertone; +1 Ответить
7. dhurricane 17.01.22 11:51 Сейчас в теме
Тоже есть пара вопросов:
1. Зачем в обработчике "ПриПолученииДанныхНаСервере" обновляется список выбранных документов по данными пометки, если сама пометка зависит от этого списка?
2. Зачем для возврата списка ссылок используется СКД, если уже есть коллекция ВыбранныеДокументы?
3. Немного непредсказуемо на мой взгляд работает установка всех флажков. При нажатии на кнопку помечаются все документы, а уже при завершении выбора возвращаются ссылки с учетом пользовательских отборов.
ixijixi; mr_sav; RustIG; +3 Ответить
13. mr_sav 86 17.01.22 18:48 Сейчас в теме
(7)
1. Для того, что, если ты не все строки будешь выбирать, то тебе надо их куда-то собирать. ДС построчно ты просто так не обойдешь, а в ПриПолученииДанныхНаСервере всё для этого имеется.
2. Затем, чтобы получить все выбранные строки со всеми колонками выведенными на форму, а не только "ключ строки". Если для твоих задач это не надо, то и используй только список значений ВыбранныеДокументы, никто не запрещает.
3. Не понял тебя, попонятнее поясни?

А вообще, я тебе советую, прежде чем подобные вопросы задавать, взять самому да попробовать набросать обработку на основе предоставленного кода, и там уже что-нибудь убрать тебе непонятное и посмотреть результат, сразу наглядно поймешь что лишнего здесь ничего нет. Код и скрины в свободном доступе, не поленись.
16. dhurricane 18.01.22 10:53 Сейчас в теме
(13) 1. Я как раз и спросил, зачем их "собирать"? Они же собираются в обработчике события "СписокВыбор". Зачем дополнительная работа? Это нужно для обновления списка выбранных после нажатия на кнопку "Выбрать все"? Если так, то такой финт не сработает, ведь в обработчике данные появляются порциями. И если какие-то порции не прогрузились (пользователь не пролистал список), то и в список выбранных они не попадут.
2. Точно, не обратил внимание.
3. У пользователя настроен свой собственный отбор в списке. Он жмет "Выбрать все". Если он снимет свой отбор, то увидит помеченными и те документы, что ранее были невидимы из-за отбора. Но если отбор не снимать, а завершить выбор в форме, то будут возвращены лишь данные по видимым документам. Эта разница между выбранными и возвращаемыми и кажется не очевидной.

В дополнение желаю Вам спокойнее принимать критику в адрес своей работы. Я вполне неплохо умею читать код, и здесь мне не зачем что-то смотреть в отладчике. То, что Вы в своих тестах своими глазами не видите ошибок, не значит, что их нет. Также, как и не значит, что другие не могут их увидеть глядя на код, без просмотра результата воочию.
nekit_rdx; mr_sav; +2 Ответить
24. mr_sav 86 18.01.22 17:37 Сейчас в теме
(16)
1. Точно, не обратил внимание, что, если список не малый и без ОбщаяПометка и не пролистано, то в СписокВыбора попадут только из прочитанной порции в ПриПолученииДанныхНаСервере. Буду щас думать как пофиксить это упущение. Благодарю за полезную критику, такое в наше время редко бывает).
3. Ну не знаю насколько эти моменты значимы для кого-то, что:
1) Если будет сделан пользовательский отбор (в том числе и через Найти) и он не будет снят, то, то что видишь, то и попадет
2) Если будет сделан пользовательский отбор (в том числе и через Найти) и нажать кнопку "Пометить всё" без выделенных строк, то такой отбор не учитывается. Здесь как аналоги использую: Отбор + Ctrl+A + "Пометить всё" + "Снятие отбора"
Если честно, на счет этого пока не думал, но если кто-то раньше возьмется это проработать и поделится, буду рад информации о результатах.
25. dhurricane 18.01.22 17:44 Сейчас в теме
(24) Предполагаю, что неоднозначность из пункта 3 уйдет сама собой вместе с решением проблемы из пункта 1. Видится, что корень у этих проблем один и тот же.
26. mr_sav 86 19.01.22 00:30 Сейчас в теме
(25)
1. Доработал. Ещё раз благодарю, что обратил на это внимание.
3. Пока решил не заморачиваться, как по мне, так пока вполне хватает и удобно работать с отобранными строками через выделение строк: Отбор (в том числе через Найти) -> (Ctrl+A либо выделение нужных строк с зажатым Shift) -> Кнопка "Установить пометки" или "Снять пометки" -> Снятие отбора
10. coollerinc 178 17.01.22 17:09 Сейчас в теме
Делал нечто подобное. Но двойной клик для установки флажка это непривычно и пользователи всегда непонимали, почему флажок не ставится. Привычно флажки ставить одним кликом. И обычно когда нужно где то ставить флажки, обычно строк не так много, максимум пару тысяч. Делал с помощью обычной таблицы значений.
18. RustIG 1736 18.01.22 16:13 Сейчас в теме
(10) у меня получилось через динамический список
https://youtu.be/8P9iH4AddfQ
19. coollerinc 178 18.01.22 16:19 Сейчас в теме
(18) На видео у вас же двойным кликом ставится флажок? Я просто не понял ваше сообщение, что у вас получилось? Или это не мне
21. RustIG 1736 18.01.22 16:40 Сейчас в теме
(19) сообщение для вас и других - мне казалось, что флажок реально сделать только через таблицу значений, как вы и сказали, и что двойной клик будет помехой. Но я попробовал реализовать на динамическом списке и мне показалось, что двойной клик не так ужасен. просто поделился с вами.
22. mr_sav 86 18.01.22 16:58 Сейчас в теме
(21) И я про тоже... например, чтобы просто сфокусироваться на поле, для того чтобы отбор поставить, либо скопировать данные из поля, параллельно будет срабатывать событие пометки. Мне такое не удобно, поэтому тут вот так, но это дело вкуса, не думаю что есть смысл спорить на этот счет, как говорится "на вкус и цвет..."
23. RustIG 1736 18.01.22 16:59 Сейчас в теме
(22) я проникся вашим решением, плюс поставил
27. mr_sav 86 19.01.22 00:33 Сейчас в теме
(23) Благодарю.
28. RustIG 1736 19.01.22 07:50 Сейчас в теме
(27) я тестировал и пробовал реализовать флажки в дин. списке - в итоге пришел к тому, как у вас, и к еще одному способу - написал тут https://infostart.ru/public/1587487/
пусть будет для истории - программистам, думаю, пригодится
14. avd74 4 18.01.22 07:58 Сейчас в теме
Насколько я понял, процедура ДокументОбработкаВыбора основной формы остаётся за бортом. Процедура ДокументНачалоВыбора открывает форму подбора, а из неё данные получаются через ОповеститьОВыборе / ОбработкаВыбора. Или я не прав?
17. qwinter 667 18.01.22 11:09 Сейчас в теме
(14) Угу, при том, что сделать отметку по одному клику плевое дело.
29. kirill_sh 1 19.01.22 23:14 Сейчас в теме
Интересное решение можно брать на вооружение
30. Dimkis 13.02.23 14:32 Сейчас в теме
Спасибо. Взял себе в копилочку). Только в процедуре СписокВыбор установил СтандартнаяОбработка = Ложь, иначе не срабатывала установка флажка, а завершался подбор.
sen_black; +1 Ответить
31. sen_black 22.05.23 15:12 Сейчас в теме
Странно. В запросе динамического списка анализируете на вхождение ссылки документа в ВыбранныеДокументы, а в коде добавляете ключ списка документа в этот же список...
Оставьте свое сообщение