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

18.08.20

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

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

Итак, исходные данные:

Для примера нам понадобится любая конфигурация (хоть созданная с нуля) со справочником "Номенклатура". Остальное не важно.

Подготавливаем галочки. К слову, они могут быть любыми, если вам не нравятся стандартные флажки создайте свои. Главное, чтобы первой стояла картинка с флажком, а потом уже без флажка. У меня получился вот такой файл:

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

Нажимаем на "Открыть" рядом с настройкой списка и устанавливаем запрос. Запрос выглядит следующим образом:

ВЫБРАТЬ
	Номенклатура.Ссылка,
	Номенклатура.Ссылка В (&ВыбраннаяНоменклатура) КАК Пометка
ИЗ
	Справочник.Номенклатура КАК Номенклатура

Добавляем на форму список и его реквизиты "Пометка", "Ссылка"

В поле "Пометка" устанавливаем следующие свойства элемента:

  • Вид - Поле картинки
  • Положение заголовка - Нет
  • Картинка значений - Наша картинка с галочками
  • Гиперссылка ячейки - Да

Для элемента формы "Список" установите событие "Выбор" с названием процедуры "СписокВыбор".

Скопируйте код ниже в модуль формы:

&НаКлиенте
Перем ВыбраннаяНоменклатура; //Массив, хранящий отмеченную галочками номенклатуру для отображения в списке

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

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

&НаКлиенте
Процедура СнятьПометку(Номенклатура)
	Индекс = ВыбраннаяНоменклатура.Найти(Номенклатура);
	Если Индекс >= 0 Тогда
		ВыбраннаяНоменклатура.Удалить(Индекс);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПоставитьПометку(Номенклатура)
	Индекс = ВыбраннаяНоменклатура.Найти(Номенклатура);
	Если Индекс = Неопределено Тогда
		ВыбраннаяНоменклатура.Добавить(Номенклатура);
	КонецЕсли;
КонецПроцедуры

Поздравляю, теперь в вашем динамическом списке есть галочки!

А теперь как всё это работает.

Особенностью динамических списков является невозможность ввода данных непосредственно в список. Когда-то раньше такая возможность была, но нас ее лишили по техническим причинам. Поэтому вся информация, которая отображается в динамическом списке не может редактироваться и получается запросом.

 
 Не совсем так

А поскольку мы не можем менять данные в самом списке, значит они должны отображаться уже с учетом наших изменений. Остается передавать их в запрос через параметры. Делается это через переменную ВыбраннаяНоменклатура. Информацию к отображению можно передавать любым желаемым способом и в любой желаемой форме, главное чтобы запрос динамического списка его принял.

Еще один важный момент, без которого ничего не получится, это картинки флажков. Если вывести в списке обычное булево поле, то возникает ряд трудностей. Мало того, что галочки отрисовываются без чекбоксов, так еще и нажатие не срабатывает. Двойной клик по полю неудобен, а событие ПриАктивацииПоля не срабатывает если поле уже активировано. Для их решения, собственно, и сделаны манипуляции с полем картинки. На него навешивается гиперссылка и выбор будет срабатывать по однократному нажатию. Более того, у нас даже меняется курсор, показывая что чекбокс отзывается на нажатие.

Что имеем в сухом остатке:

  • При нажатии на поле картинки срабатывает событие.
  • В этом событии дополняется (или наоборот) массив ВыбраннаяНоменклатура.
  • ВыбраннаяНоменклатура передается в динамический спискок
  • Динамический список в зависимости от параметра отображает текущее состояние чекбоксов.
  • Теперь снова можно нажимать на поле картинки, цикл замкнулся...

К слову, тот же прием вы можете использовать для ввода полей другого типа. Например прописать в событии "Выбор" для поля с датой процедуру ПоказатьВводДаты(), и вот уже пользователь может вводить дату в динамический список не меняя самих данных, по которым строится запрос. В некоторых случаях может быть удобно сделать реквизит с типом ТаблицаЗначений и хранить в нем сколько угодно временных данных, влияющих на динамический список.

Код разрабатывался для Управляемых форм на платформе 8.3, конфигурация значения не имеет.

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    3556    dsdred    48    

66

Как готовить и есть массивы

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

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5032    YA_418728146    25    

62

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6160    dsdred    36    

110

1С-ная магия

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

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18196    SeiOkami    46    

116

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

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

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

14.09.2023    11766    human_new    27    

72

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

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

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

28.08.2023    8555    YA_418728146    6    

139

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

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

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

20.08.2023    6195    sebekerga    54    

93

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

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

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

27.06.2023    15524    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 7133 05.08.20 10:06 Сейчас в теме
Было бы логично добавить в эту же методику диапазонную (сразу для диапазона строк) установку/снятие пометок.
3. nekit_rdx 210 05.08.20 10:34 Сейчас в теме
(1) Это уже каждый решит для себя, что ему для конкретной задачи нужно :)
Реализовать установку/снятие пометок для нескольких строк сможет любой программист, а вот в статье подобные усложнения отвлекали бы от главного.
awpdnk; marku; Alexion; KRJ; konyavka; Daruma; +6 Ответить
4. seregin_79 05.08.20 11:09 Сейчас в теме
(3) Тут то и начинаются самые "вкусности", например, установки отборов, т.е. ситуации типа:
1. Пользователь отметил, скажем пять строк.
2. Пользователь установил отбор, скрывший две или три отмеченных строки.
3. Т.к. такой механизм делается ради какой-либо последующей обработки, то возникает вопрос: Сколько, с точки зрения пользователя, отмечено строк и сколько строк будет обработано?

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

Механизм любопытный, но использовать стоит с оглядкой на возможные последствия.
ZDmitry83; ixijixi; Dem1urg; +3 Ответить
5. nekit_rdx 210 05.08.20 11:42 Сейчас в теме
(4) Если подходить с точки зрения пользователя, то ему всё равно, таблица это или динамический список. Да, немного удобнее работать, отборы всякие можно ставить, но технические детали его не интересуют.

Представим что пользователь работает с табличной частью в каком-нибудь заказе. Он отмечает нужные строки галочками, прокручивает список вниз, что должно происходить с пометками которые уползли вверх? Существует ли Луна, когда на нее никто не смотрит?)

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

Но я при этом абсолютно согласен, что последствия стоит учитывать. Если последствия необратимы, то наверняка стоит предупреждать об этом, желательно со списком изменяемых объектов. А если что-то очень важное, то может стоит подумать над созданием мастера с несколькими шагами.
11. qwinter 671 06.08.20 15:37 Сейчас в теме
(4) так ничего не мешает получать ссылки, что с отборами, что без отборов. А какой вариант нужен надо с пользователями согласовывать.
13. seregin_79 06.08.20 16:51 Сейчас в теме
(11) Тут вопрос в том, что получение ссылок и расстановка отметок может быть проведена далеко не с теми отборами, с которыми пользователь будет проверять список перед тем как запустить обработку выбранных объектов и, соответственно будет видеть далеко не то же самое, что уйдет в обработку, а после этого расскажет разработчику все, что о нем думает, т.к. "программа мне показала вот это, а сделала вот то".
14. qwinter 671 06.08.20 19:36 Сейчас в теме
(13) В смысле "может быть проведена далеко не с теми отборами"? А если кто то вместо плюса минус поставит, то тоже будете рассказывать, что таких алгоритмов не надо писать? Я совершенно не понимаю какое это отношение имеет к обсуждаемой статье, тем более, что метод получение настроек списка один единственный, и ничего другого кроме настроек списка со всеми отборами из него не получишь.
16. seregin_79 07.08.20 08:59 Сейчас в теме
(14)
1.
то тоже будете рассказывать, что таких алгоритмов не надо писать?

Я совершенно не понимаю какое это отношение имеет к обсуждаемой статье

Вы внимательно читали написанное?

Если пользователь в процессе установки отметок или после установки отметок изменит отборы списка, то "картинка" изменится, соответственно, нужно при реализации механизма это учитывать. Наиболее простые варинты: при изменении отборов сбрасывать список отмеченных элементов или запрещать отборы.
18. qwinter 671 07.08.20 10:30 Сейчас в теме
(16) Я внимательно читал написаное.
Наиболее простые варинты: при изменении отборов сбрасывать список отмеченных элементов или запрещать отборы.
А вы в курсе существования функции ПолучитьИсполняемыеНастройкиКомпоновкиДанных() и программного вывода СКД в таблицу? Дополнительно создаем СКД с тем же запросом что и в списке, грузим туда отборы списка и отбор по помеченным, и получаем реальные видимые отмеченные элементы. Код элементарный.
19. seregin_79 07.08.20 10:40 Сейчас в теме
(18) А как существование этой функции опровергает мое утверждение, что это нужно учитывать при разработке?
2. frkbvfnjh 785 05.08.20 10:20 Сейчас в теме
Гениальное решение! Спасибо, что по делились. Я не знал что для ячейки можно выставить признак гиперссылки.
nekit_rdx; +1 Ответить
6. simonovich 05.08.20 13:00 Сейчас в теме
Решение крайне простое, но помогает решить многие задачи.
Большое спасибо за идею.
7. Andry.Boris 59 06.08.20 08:39 Сейчас в теме
Проверил, все отлично работает! Автор молодец!
Большое спасибо за идею.
8. XSlava 157 06.08.20 11:45 Сейчас в теме
Вопрос: в каких прикладных задачах необходимы "галочки" при использовании динамического списка?
9. nekit_rdx 210 06.08.20 11:59 Сейчас в теме
(8) Просто примеры:
1) Различные АРМ закупок, продаж, складские и т.д. Отмечаем галочками заказы, нажимаем кнопку "Можно отгружать", заказы пошли другому отделу
2) Форма выбора из справочника. Можно будет выбирать несколько элементов. Может заменить типовую обработку подбора в документ во всяких УТ, КА, ЕРП.
3) Любая внешняя обработка объектов, в которой перед обработкой может потребоваться их анализ. В динамическом списке, в отличии от обычной таблицы, пользователь может выводить новые колонки, отбирать по ним, сортировать и т.д. В общем, если у вас таблица больше, скажем, 100 элементов в ней уже можно запутаться, особенно если разработчик догадался вывести только наименование.
10. XSlava 157 06.08.20 15:29 Сейчас в теме
(9)По моему мнению у динамического списка для этого есть свойство "ВыделенныеСтроки". У выделенных строк есть выделение цветом на уровне платформы.
12. Dem1urg 386 06.08.20 16:41 Сейчас в теме
(10) Да есть, но с его помощью можно только выделить строки, и больше ничего. А описанный в статье прием позволяет реализовать любую логику. И любое количество состояний объекта, а не только "выделен" или "не выделен".
nekit_rdx; +1 Ответить
15. XSlava 157 07.08.20 08:05 Сейчас в теме
(12)Не совсем понятно "реализовать любую логику", выделение строк позволяет реализовать все то что было перечислено ранее. Назначение флага аналогично выделению строк и указывает на "выделен" или "не выделен".
17. пользователь 07.08.20 09:47
Сообщение было скрыто модератором.
...
20. EvgeniuXP 07.08.20 19:35 Сейчас в теме
(15) случайно щелкнул в другую строку и выбор пропал - начинай всё заново :)
pr_woland; mrsmrv; +2 Ответить
21. XSlava 157 10.08.20 08:01 Сейчас в теме
(20)Это исключительно вопрос навыка работы с программой. Зато единообразно, во всех конфигурациях, флаг ко всем спискам не приделаешь.
22. SlavaKron 10.08.20 08:23 Сейчас в теме
Наверно, подобие альтернативного выделения строк можно сделать и через условное оформление и через упомянутое событие ПриПолученииДанных, но решение автора мне нравится больше. Оно простое и понятное. Следовало бы указать минус подобного решения - изменение текста запроса динамического списка "небезопасно" при программной реализации.
Замечания по поводу неопределенности при использовании отборов, по-моему, не обоснованы - поведение точно такое же как с отборами в таблице формы.
23. Бубузяка 62 10.08.20 18:04 Сейчас в теме
Хорошее решение, но мне не понравилось перечитывание данных списка.

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

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

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Поле = Элементы.СписокПоле1 ИЛИ Поле = Элементы.СписокПоле2 Тогда
		Ссылка = Элементы.Список.ТекущаяСтрока;
		СтандартнаяОбработка = Ложь;
		Запись = Карзина.НайтиПоЗначению(Ссылка);
		Если Запись = Неопределено Тогда
			Карзина.Добавить(Ссылка);
		Иначе
			Карзина.Удалить(Карзина.Индекс(Запись));
		КонецЕсли;
		УстановитьСписокВыбранныхДокументов();
	КонецЕсли;
	
КонецПроцедуры
Показать
34. GAlexis 5 24.11.21 15:53 Сейчас в теме
(23)
В одной колонке (СписокПоле1, СписокПоле2) картинка флаг

У меня не отображает 2 картинки если группировка "в ячейке" проверено на 8.3.17.1851 и 8.3.15.1830
36. GAlexis 5 13.12.21 13:54 Сейчас в теме
(34) Разобрался сам. Создается "Группа колонок" Группировка - Горизонтальная. У колонок в группе отключаем ОтображатьВШапке и ОтображатьВПодвале.
24. Yashazz 4707 19.08.20 21:32 Сейчас в теме
Собрался было написать почти такую же публикацию, ан нет, опередили) Да, раскрыт один из возможных способов. Равно как и игры с СКД, и всякие эмуляции, и использование ПриПолученииДанныхНаСервере. Что ж, годно. Хорошо.
Dansur; Drivingblind; +2 Ответить
25. KRJ 19.11.20 10:33 Сейчас в теме
Может кто-нибудь кинуть в меня обработкой в котором реализованы флажки в динамическом списке?
27. Terabaytus 01.03.21 15:24 Сейчас в теме
(25)Держи не жалко )
Прикрепленные файлы:
ЧекБоксы.epf
ramze1C; vanya_1c; Teplotrassamen; marku; +4 Ответить
26. Aleksandr_prof 189 12.02.21 13:29 Сейчас в теме
Добавил данную доработку в форму выбора.
Галка устанавливается только при двойном щелчке.
Не совсем понятно, как меняется картинка с пустой на галку (это же обычная системная картинка 32х16). Она просто сдвигается? Или это какая-то уникальная картинка, которая реагирует на выбор?
Ну и в принципе механизм не работает - когда установил галки и нажал на кнопку выбрать, в параметрах передаётся только выделенный объект, а не те, на которых я установил галки.
28. EVinLa 17.03.21 09:36 Сейчас в теме
не пойму каким образом меняется вид флажка на заполненный? тыкал-тыкал, все равно всегда пустой
29. siniy_sahar 26.03.21 16:48 Сейчас в теме
(26)Вероятнее всего, вы установили для картинки "Гипперссылка", а надо "ГиперссылкаЯчейки". Тогда будет достаточно одного щелчка. Но с тем, что механизм не работает, согласна - у меня тоже только одно значение передаётся
30. gusevalex007 28.06.21 09:22 Сейчас в теме
Большое спасибо! Компактное универсальное решение, можно брать за основу во многих других задачах по гибкому выбору элементов для обработки.

Для иерархических справочников пометка/снятие переделывается за 20 минут
31. Funtik90 25.09.21 09:59 Сейчас в теме
что-то как то не работает, выбирается первый элемент галкой, а все последующие галочку не проставляют. Почему?
32. Jeka44 01.11.21 10:49 Сейчас в теме
(31)точно такое же поведение. Вам удалось решить проблему?
33. Funtik90 10.11.21 21:11 Сейчас в теме
(32) я сделал список значений кажется, а у него есть поле со значением булево как раз таки.
37. mr_sav 91 14.01.22 17:11 Сейчас в теме
(33)
(32) Вот тут есть продолжение банкета: https://infostart.ru/public/1584125 - пример реализации флажков в ДС.
35. VadimTer 27.11.21 16:02 Сейчас в теме
В качестве варианта удобно использовать не массив отмечаемых флагом элементов справочника или документов, а список значений, который можно создать в реквизитах управляемой формы и использовать его хоть на сервере, хоть на клиенте при необходимости. Ниже приведен сокращенный запрос динамического списка (ДС) ( с основной таблицей ДС - Документы.РеализацияТоваровУслуг в БП 3.0):

ВЫБРАТЬ
	ДокументРеализацияТоваровУслуг.Ссылка КАК Ссылка,
	ДокументРеализацияТоваровУслуг.ПометкаУдаления КАК ПометкаУдаления,
	ДокументРеализацияТоваровУслуг.Номер КАК Номер,
	ДокументРеализацияТоваровУслуг.Дата КАК Дата,
	ВЫБОР
		КОГДА ДокументРеализацияТоваровУслуг.Ссылка В (&НеОтмеченныеФлажкамиДокументы)
			ТОГДА истина
		ИНАЧЕ ложь
	КОНЕЦ КАК Флажок
ИЗ
	Документ.РеализацияТоваровУслуг КАК ДокументРеализацияТоваровУслуг
ГДЕ
	ДокументРеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
	И ВЫБОР
			КОГДА &КоличествоСтрокСЗКонтрагентов = 0
				ТОГДА ИСТИНА
			ИНАЧЕ ДокументРеализацияТоваровУслуг.Контрагент В (&КонтрагентРеализации)
		КОНЕЦ
	И ВЫБОР
			КОГДА &КоличествоВыбранныеДокументыРеализацииСЗ = 0
				ТОГДА ИСТИНА
			ИНАЧЕ ДокументРеализацияТоваровУслуг.Ссылка В (&ВыбранныеДокументыРеализацииСЗ)
		КОНЕЦ

Для  указанных  в запросе параметров указываем значения в  как, например, в следующей процедуре:

&НаСервере
Процедура ПерезаполнитьВыбранныеДокументыРеализацииСЗ()

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

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

КонецПроцедуры // ПерезаполнитьВыбранныеДокументыРеализацииСЗ()

Данный метод, в моем случае, вызывается из события "Создание на сервере", а тажке  в  событиях при изменении для реквизитов формы "НачалоПериода", "КонецПериода" и "КонтрагентРеализации". Посредством данного метода обновляется ДС в соответствии с измененными реквизитами, а также в актуальном состоянии поддерживается список значений "НеОтмеченныеФлажкамиДокументы" (аналог массива в примере, данном первым автором данной заметки). 

Следующий метод отрабатывает кликанье мышкой по полю флажка ДС:

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

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

	Элементы.ЖурналДокументовРеализации.Обновить();
	
КонецПроцедуры
Показать


Часть кода последнего метода практически идентичен коду первого автора заметки, за исключением использования списка значений вместо массива, а также использовано больше параметров (что полезно будет для наглядности).

Код может немного некорректно отработать с флажками, приведенных автором первой заметки, так как мной были использованы пиктограммы с крестиками. Но достаточно будет просто заменить Ложь на истину в соответствующем месте запроса, чтобы все отработала нормально.

К данному комментарию также прикрепляю пиктограмму флажка, который приведен первым автором заметки.

В комментариях есть вопросы, что отрабатывает только первое нажатие на поле флажка, а на последующие программа не реагирует. Это, в первую очередь, может быть связано с тем, что используется одинарный значок, а не двойной, который прикреплен к моему комментарию.
Прикрепленные файлы:
ФлажокБЭД.zip
38. mr_sav 91 14.01.22 17:15 Сейчас в теме
Всех категорически приветствую. Вот здесь есть рабочий пример реализации флажков в ДС: https://infostart.ru/public/1584125
39. Angel_19 6 19.07.22 15:35 Сейчас в теме
Автору спасибо!
Работает по двойному клику мышкой, а не по одинарному (ГиперссылкаЯчейки - Истина). Не понял как сделать по одинарному - возможно поведение платформы такое.
40. пользователь 17.10.23 10:47
Сообщение было скрыто модератором.
...
41. mamadakki 22.11.23 09:14 Сейчас в теме
Прошу подсказать а как все снять пометки с динамического списка ?
42. AnPet 2 25.11.23 16:52 Сейчас в теме
Вот здесь та же идея оформленная на одной картинке:

И, что хорошо, работает без дополнительных пиктограмм.
Возможно, это зависит от версии платформы. У меня - 8.3.22.2239
Оставьте свое сообщение