Каталог решений - Использование флажков в динамических списках

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

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

В наличии

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

Категория:

Описание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

has been added to your cart:
Оформление заказа