Открытие формы отчёта (на СКД) с установленными отборами

1. AnryMc 849 12.01.22 13:20 Сейчас в теме
Есть рабочий код открытия отчета на СКД
	ПользовательскиеНастройкиКомпоновкиДанных = Новый ПользовательскиеНастройкиКомпоновкиДанных;
//*** ...
	НовыйОтбор                                        = ПользовательскиеНастройкиКомпоновкиДанных.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
	НовыйОтбор.ИдентификаторПользовательскойНастройки = "Отбор";    
	ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры", текДоговор);
	
	
	//*** ...
Процедура ЗаполнитьЭлементОтбораКомпоновкиДанных(ОтборНастройкиКомпоновкиДанных,Использование,ВидСрав,ИмяПоля,ЗначениеОтбора)
	
	НовыйЭлемент = ОтборНастройкиКомпоновкиДанных.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	
	НовыйЭлемент.Использование  = Использование;
	НовыйЭлемент.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных(ИмяПоля);
	НовыйЭлемент.ВидСравнения   = ВидСрав;
	Если ВидСрав = ВидСравненияКомпоновкиДанных.ВСписке Тогда
		НовыйЭлемент.ПравоеЗначение = НОВЫЙ СписокЗначений;
		НовыйЭлемент.ПравоеЗначение.ЗагрузитьЗначения(ЗначениеОтбора);
	Иначе
		НовыйЭлемент.ПравоеЗначение = ЗначениеОтбора;
	КонецЕсли;
	
КонецПроцедуры
Показать


Всё отрабатывает нормально, но если я меняю вид сравнения на "ВСписке" и передаю Список договоров (Пробовал СписокЗначений и Массив) отбор в отчёте остаётся пустым (Выводятся все значения).

Что не так? Чего не хватает?

З.Ы. Процедура "ЗаполнитьЭлементОтбораКомпоновкиДанных" в обоих случаях возвращает нормальные данные:
- Если "Равно" то "Правое значение" = СсылкаДоговор
- Если "ВСписке" то "Правое значение" = СписокЗначений, в котором Ссылки на договора.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. SlavaKron 12.01.22 13:39 Сейчас в теме +1 $m
(1)
"ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры"
Сомневаюсь что это корректное имя поля компоновки данных.
AnryMc; andy_zhav; +2 Ответить
12. SlavaKron 12.01.22 14:19 Сейчас в теме
(11) Левое значение – обычно это поле данных, а не константное значение, как у вас. То есть слева у вас ссылка на предопределенное значение видов субконто "Договоры", а справа список ссылок справочника Договоры. Такое сравнение всегда вернёт Ложь. Повторюсь, где-то ошибка с определением левого значения в отборе.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. SlavaKron 12.01.22 13:39 Сейчас в теме +1 $m
(1)
"ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры"
Сомневаюсь что это корректное имя поля компоновки данных.
AnryMc; andy_zhav; +2 Ответить
6. AnryMc 849 12.01.22 13:50 Сейчас в теме
(5)
Сомневаюсь что это корректное имя поля компоновки данных.


Но при ВидСравненияКомпоновкиДанных.Равно - РАБОТАЕТ!!!
11. AnryMc 849 12.01.22 14:15 Сейчас в теме
(5) Договоры - это предопределенное
Прикрепленные файлы:
12. SlavaKron 12.01.22 14:19 Сейчас в теме
(11) Левое значение – обычно это поле данных, а не константное значение, как у вас. То есть слева у вас ссылка на предопределенное значение видов субконто "Договоры", а справа список ссылок справочника Договоры. Такое сравнение всегда вернёт Ложь. Повторюсь, где-то ошибка с определением левого значения в отборе.
14. AnryMc 849 12.01.22 14:35 Сейчас в теме
(12) Почему работает при РАВНО?
15. AnryMc 849 12.01.22 14:42 Сейчас в теме
(12) Стандартный отчет ("на замочке" из https://www.bas-soft.eu/soft/bas-mass/bas-accounting-korp/) "Анализ субконто". Субконто: Контрагенты, Договора.
Всё работает (Контрагенты и договора) если "Равно", если ставишь "ВСписке" не работает.
Прикрепленные файлы:
АнализСубконто.erf
16. AnryMc 849 12.01.22 16:18 Сейчас в теме +1 $m
(12)
Пторюсь, где-то ошибка с определением левого значения в отборе.


Сбило что с Равно работало...
А работало т.к. этот отбор устанавливается при выборе состава субконто для анализа, а я его просто заполнял значением...
2. andy_zhav 197 12.01.22 13:29 Сейчас в теме
(1) а видСрав какой тип? точно ВидСравненияКомпоновкиДанных?
3. AnryMc 849 12.01.22 13:32 Сейчас в теме
(2)
ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры", текДоговор);
4. user5300 1010 12.01.22 13:36 Сейчас в теме
ЗначениеОтбора - Массив? Не пустой ?

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


Показать
7. AnryMc 849 12.01.22 13:52 Сейчас в теме
(4) Не пустой
Ссылки на Договора
9. AnryMc 849 12.01.22 14:11 Сейчас в теме
(4) Ваш вариант тоже не срабатывает...
В обеих случаях см. рис.

Вся разница:
Если "РАВНО" - то 1 Ссылка
Если "ВСПИСКЕ" - Список Значений в котором несколько Ссылок
Прикрепленные файлы:
8. vadim.semyonov.rzn 12.01.22 14:09 Сейчас в теме
А БСПшный "ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка" тоже не работает?
10. AnryMc 849 12.01.22 14:12 Сейчас в теме
(8)
БСПшный "ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка" тоже не работает?


Это не динамический список а СКД
13. vadim.semyonov.rzn 12.01.22 14:32 Сейчас в теме
(10)
Это не динамический список а СКД
Да, был невнимателен, прошу извинить.
Покопался в своих архивах, нашел вот такую конструкцию:
Процедура УстановитьОтборСКД(ИмяПоля, ВидОтбора, Значение)
	ОтборПоле = Новый ПолеКомпоновкиДанных(ИмяПоля);
	ОтборыКомп = КомпоновщикНастроек.Настройки.Отбор.Элементы;
	Для Каждого Отбр Из ОтборыКомп Цикл
		Если Отбр.ЛевоеЗначение = ОтборПоле Тогда
			Отбор = Отбр;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	Если Отбор = Неопределено Тогда
		Отбор = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		Отбор.ЛевоеЗначение  = ОтборПоле;
	КонецЕсли;
	Если Значение <> Неопределено Тогда
		Отбор.ВидСравнения   = ВидОтбора;
		Отбор.Использование  = Истина;
		Отбор.ПравоеЗначение  = Значение;
	Иначе
		Отбор.Использование  = Ложь;
	КонецЕсли;
КонецПроцедуры
Показать

Работает с любыми видами отбора, как "равно", так и "в списке".
17. AnryMc 849 12.01.22 16:21 Сейчас в теме
Запутался с постами и забрал вознаграждение...
Добавляю снова и отдаю в (5)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот