Параметр – список значений с пустым значением

Нашёл такие грабли – когда делаешь параметр списком значений, СКД зачем-то сама в этот список вставляет строку с пустым значением.
Я этот параметр передаю в запрос, и если тип параметра является иерархическим справочником, это пустое значение похоже отбирает любого родителя в иерархии, и как следствие, все значения справочника. Кстати, такой же косяк можно увидеть в отборах, если сделать вид сравнения “в группе из списка” и в список добавить строку с пустым значением.
А так как юзер тупо заполняет этот список подбором, то ему по фигу, что там какие-то пустые значения. Объяснять, что пустых значения в списке надо удалять – бесполезно. Виноват-то программист!
Нашёл, как это лечить, может кому-то пригодится.

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

Первоисточник здесь.

Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
DrMabuzo
DrMabuzo
13 лет назад

а как такие вещи делать с отборами?

DrMabuzo
DrMabuzo
13 лет назад

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