ПользовательскиеНастройкиКомпоновкиДанных = Новый ПользовательскиеНастройкиКомпоновкиДанных;
//*** ...
НовыйОтбор = ПользовательскиеНастройкиКомпоновкиДанных.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
НовыйОтбор.ИдентификаторПользовательскойНастройки = "Отбор";
ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры", текДоговор);
//*** ...
Процедура ЗаполнитьЭлементОтбораКомпоновкиДанных(ОтборНастройкиКомпоновкиДанных,Использование,ВидСрав,ИмяПоля,ЗначениеОтбора)
НовыйЭлемент = ОтборНастройкиКомпоновкиДанных.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйЭлемент.Использование = Использование;
НовыйЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
НовыйЭлемент.ВидСравнения = ВидСрав;
Если ВидСрав = ВидСравненияКомпоновкиДанных.ВСписке Тогда
НовыйЭлемент.ПравоеЗначение = НОВЫЙ СписокЗначений;
НовыйЭлемент.ПравоеЗначение.ЗагрузитьЗначения(ЗначениеОтбора);
Иначе
НовыйЭлемент.ПравоеЗначение = ЗначениеОтбора;
КонецЕсли;
КонецПроцедуры
Показать
Всё отрабатывает нормально, но если я меняю вид сравнения на "ВСписке" и передаю Список договоров (Пробовал СписокЗначений и Массив) отбор в отчёте остаётся пустым (Выводятся все значения).
Что не так? Чего не хватает?
З.Ы. Процедура "ЗаполнитьЭлементОтбораКомпоновкиДанных" в обоих случаях возвращает нормальные данные:
- Если "Равно" то "Правое значение" = СсылкаДоговор
- Если "ВСписке" то "Правое значение" = СписокЗначений, в котором Ссылки на договора.
(11) Левое значение – обычно это поле данных, а не константное значение, как у вас. То есть слева у вас ссылка на предопределенное значение видов субконто "Договоры", а справа список ссылок справочника Договоры. Такое сравнение всегда вернёт Ложь. Повторюсь, где-то ошибка с определением левого значения в отборе.
(11) Левое значение – обычно это поле данных, а не константное значение, как у вас. То есть слева у вас ссылка на предопределенное значение видов субконто "Договоры", а справа список ссылок справочника Договоры. Такое сравнение всегда вернёт Ложь. Повторюсь, где-то ошибка с определением левого значения в отборе.
Да, был невнимателен, прошу извинить.
Покопался в своих архивах, нашел вот такую конструкцию:
Процедура УстановитьОтборСКД(ИмяПоля, ВидОтбора, Значение)
ОтборПоле = Новый ПолеКомпоновкиДанных(ИмяПоля);
ОтборыКомп = КомпоновщикНастроек.Настройки.Отбор.Элементы;
Для Каждого Отбр Из ОтборыКомп Цикл
Если Отбр.ЛевоеЗначение = ОтборПоле Тогда
Отбор = Отбр;
Прервать;
КонецЕсли;
КонецЦикла;
Если Отбор = Неопределено Тогда
Отбор = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = ОтборПоле;
КонецЕсли;
Если Значение <> Неопределено Тогда
Отбор.ВидСравнения = ВидОтбора;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = Значение;
Иначе
Отбор.Использование = Ложь;
КонецЕсли;
КонецПроцедуры
Показать
Работает с любыми видами отбора, как "равно", так и "в списке".