Ошибка "Поле не найдено" при добавлении группы отборов в СКД

1. Caliban 137 23.08.24 13:39 Сейчас в теме
Всем привет. Вопрос в следующем: когда я пытаюсь добавить в отбор СКД группу отборов, то возникает ошибка "Поле не найдено "СегментНоменклатуры". Если добавляю отбор не в группу, то все отрабатывает на ура. Как можно использовать группы отборов в СКД и чтобы все работало?

	СхемаКомпоновки = Новый СхемаКомпоновкиДанных;

	ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить();
	ИсточникДанных.Имя = "Источник";
	ИсточникДанных.ТипИсточникаДанных = "Local";

	НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
	НаборДанных.Имя = "НаборДанных";
	НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
	НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
	НаборДанных.Запрос = "ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Сегменты.Номенклатура КАК Номенклатура,
	|	ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
	|ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
	|ИЗ
	|	РегистрСведений.НоменклатураСегмента КАК Сегменты
	|{ГДЕ
	|	Сегменты.Сегмент.* КАК СегментНоменклатуры,
	|	Сегменты.Номенклатура.* КАК Номенклатура}
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Номенклатура,
	|	ИспользуетсяОтборПоСегментуНоменклатуры
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	СвободныеОстатки.Склад КАК Склад,
	|	СвободныеОстатки.Номенклатура КАК Номенклатура,
	|	СвободныеОстатки.ВНаличииОстаток КАК Остаток
	|ИЗ
	|	РегистрНакопления.СвободныеОстатки.Остатки(, {(Номенклатура В
	|			    (ВЫБРАТЬ
	|			        ОтборПоСегментуНоменклатуры.Номенклатура
	|			    ИЗ
	|			        ОтборПоСегментуНоменклатуры
	|			    ГДЕ
	|			        ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры))}) КАК СвободныеОстатки";

	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки));
	КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);

	НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
	ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));

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

	ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СегментНоменклатуры");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = СегментДляОтбора;
Показать
По теме из базы знаний
Найденные решения
8. yispepotri 23.08.24 14:40 Сейчас в теме
(7) в группе только Сегмент - применяется к временной таблице, в группе только остаток - применяется к основной таблице, в группе Сегмент и остаток - применяется к основной таблице,

мне кажется так это работает, возможно есть документальное подтверждение) как работает группа отбора в СКД
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. yispepotri 23.08.24 14:00 Сейчас в теме
(1) не уверен конечно, но возможно нужно указать тип группы

 ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;  
3. Caliban 137 23.08.24 14:01 Сейчас в теме
(2) Нет. Не в типе дело. Что указываешь тип, что нет - результат один
4. yispepotri 23.08.24 14:07 Сейчас в теме
(3) а у вас последовательность не нарушена, загрузка настроек не после добавления отборов к настройкам должна быть?

КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);


я тут просто пример смотрю, тут так
Прикрепленные файлы:
5. Caliban 137 23.08.24 14:11 Сейчас в теме
(4) Нет. Говорю же - если не добавлять группу, а отборы добавлять прямо в НастройкиКомпоновки.Отбор.Элементы, то все работает
6. yispepotri 23.08.24 14:29 Сейчас в теме
(5) еще предположение в основном запросе нет СегментНоменклатуры, поэтому и не срабатывает в Группе отбора и пишет поле не найдено. А без группы работает потому что применяется к временной таблице
7. Caliban 137 23.08.24 14:37 Сейчас в теме
(6) Об этом тоже думал, но если в группе оставить только сегмент (убрать отбор по остатку), то тоже срабатывает
8. yispepotri 23.08.24 14:40 Сейчас в теме
(7) в группе только Сегмент - применяется к временной таблице, в группе только остаток - применяется к основной таблице, в группе Сегмент и остаток - применяется к основной таблице,

мне кажется так это работает, возможно есть документальное подтверждение) как работает группа отбора в СКД
9. Caliban 137 23.08.24 14:43 Сейчас в теме
(8) Возможно ) Осталось понять, как это можно обойти
10. yispepotri 23.08.24 14:49 Сейчас в теме
(9) а не вариант во временную собирать без условия по Сегменту все(если конечно там не очень много данных) а в основной таблице уже как раз добавить условия на Сегмент?
11. Caliban 137 23.08.24 15:04 Сейчас в теме
(10) Ну если других вариантов не найдется, то придется что-то такое придумывать...
12. toypaul 63 23.08.24 15:14 Сейчас в теме
Для начала нужно понять как это условие к запросу должно примениться. Ошибка точно из-за (8). Если групп И, то можно отбор и без группы сделать - просто два отбора. Один в одно место применится. Другой в другое
13. Caliban 137 23.08.24 15:20 Сейчас в теме
(12) там отборы собираются из различных настроек - они составные. Могут быть разные группы и разные их комбинации
Оставьте свое сообщение

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