Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Подскажите пожалуйста в следующем. Нужно запросом получить номенклатуру, родитель которой (или родитель родителя, или родитель родителя родителя и т.д.) имеет установленную галка (некий признак). В инете много тем есть о получении всех родителей номенклатуры (через Итоги по только иерархия), но как наложить условие (отбор)?
Bon Jovi @ Сегодня, 13:37
,
https://pro1c.org.ua/redirect.php?https://infostart.ru/public/102086/
https://pro1c.org.ua/redirect.php?https://forum.mista.ru/topic.php?id=807163
Добавить в условии что - то типа того
|ГДЕ
| Номенклатура.Признак = &ТекущийЭлементНоменклатуры";
Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", Признак);
denis84 @ Сегодня, 14:31
,
Мне признак нужен не как параметр, а как Истина (всегда). А если его задать в условии как вы написали, то он будет фильтровать только по прямому родителю номенклатуры и поэтому не покажет номенклатуру, у которой (грубо говоря) родитель.родитель.родитель имеет признак истина.
Плюс мне также не подходит вариант, где количество уровней иерархии ограничено (не подходит вариант: номенклатура.родитель.родитель.родитель и т.д.)
Вариант с "Итоги по только иерархия" показывает очень подробно что я хочу:
1 - Л
1.1 - И
1.1.1
1.1.2
1.2 - Л
1.2.1
2 - И
2.1 - Л
2.1.1
И если правильно наложить условие (отбор), то должны остаться:
1.1.1
1.1.2
2.1.1
Обычно уровень вложенности номенклатуры заранее известный, поэтому можно в запросе сразу выбрать всех родителей и сделать соответствующее условие.
|ВЫБРАТЬ
| Номенклатура.Ссылка
| Номенклатура.Родитель,
| Номенклатура.Родитель.Родитель,
| Номенклатура.Родитель.Родитель.Родитель
|ГДЕ
| Номенклатура.Родитель.МойПризнак = 1
| ИЛИ Номенклатура.Родитель.Родитель.МойПризнак = 1
| ИЛИ Номенклатура.Родитель.Родитель.Родитель.МойПризнак = 1
Vofka @ Сегодня, 16:10
,
Согласен. Уровень заранее известен, но нужно сделать универсально и не программно, а сразу запросом. На сколько я знаю, это возможно и довольно просто. Вот только прийти к этому не получается.
Получилось решить следующим образом:
1) отбираю все существующие родители с признаком Истина и помещаю их в ВТ
2) во втором пакете задаю условие : КакойТоОбъект.Родитель В ИЕРАРХИИ (Выбрать ВТ.Родитель Из ВТ)
ВсегоУровней=99999;
Если Метаданные.Справочники.МойСправочник.ОграничиватьКоличествоУровней тогда
ВсегоУровней= Метаданные.Справочники.МойСправочник.КоличествоУровней;
КонецЕсли;
// запрос
|ГДЕ
| Номенклатура.Родитель.МойПризнак = 1";
ДобавкаЗапроса="| ИЛИ Номенклатура.";
Суфикс="";
Если ВсегоУровней>1 тогда
Для уровней=2 по ВсегоУровней цикл
Суфикс=Суфикс+"Родитель.";
Запрос.Текст = Запрос.Текст + Символы.ПС+"
ДобавкаЗапроса+Суфикс+"МойПризнак = 1 ";
КонецЦикла;
КонецЕсли;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua