У меня есть справочник Номенклатура 5-ту уровней и есть справочник Скидки, скидка может быть как на отдельную номенклатуру , так и на группу. Как мне сделать запрос , чтобы если нет скидки на номенклатуру то , искалось по родителю , если нет по родителю , то по родителю родителя. Надеюсь вы меня поняли .
Запрос.Текст =
"ВЫБРАТЬ
| Скидки.Номенклатура КАК Номенклатура,
| Скидки.Номенклатура.ЭтоГруппа КАК НоменклатураЭтоГруппа,
| Скидки.Номенклатура.Родитель КАК НоменклатураРодитель,
| Скидки.РазмерСкидки КАК РазмерСкидки
|ИЗ
| Справочник.Скидки КАК Скидки
|ГДЕ
| Скидки.Номенклатура В ИЕРАРХИИ(&Номенклатура)";
(1)Например, можно составить таблицу с колонками Номенклатура и ПорядокСкидки, где в колонке Номенклатура в первой строке будет ссылка на номенклатуру с порядком скидки 1, во второй строке родитель номенклатуры с порядком скидки 2, и тд.
Далее засунуть эту таблицу в запрос и соединиться (внутреннее соединение) со справочником скидок и упорядочить по полю ПорядокСкидки. Первая строка результата запроса - эта нужная скидка.
(1) нужно для номенклатуры получить все данные транзитивным замыканием в запросе https://infostart.ru/1c/articles/158512/, а замтем уже соединить со справочником скидки и выбрать заполненные значения.
Выбрать первые 100
таб.ссылка как Номенклатура,
ЕстьNull(Скидка0.РазмерСкидки,
ЕстьNull(Скидка1.РазмерСкидки,
ЕстьNull(Скидка2.РазмерСкидки,0)
))как РазмерСкидки,
//это для наглядности, потом можно убрать
Скидка0.РазмерСкидки как РазмерСкидкиТовара,
Скидка1.РазмерСкидки как РазмерСкидкиГруппы1,
Скидка2.РазмерСкидки как РазмерСкидкиГруппы2
//и так далее
из
Справочник.Номенклатура Таб
левое соединение Справочник.Скидки как Скидка0
по Таб.Ссылка = Скидка0.Номенклатура
левое соединение Справочник.Скидки как Скидка1
по Таб.Родитель = Скидка1.Номенклатура
левое соединение Справочник.Скидки как Скидка2
по Таб.Родитель.Родитель = Скидка2.Номенклатура
//и так далее
Где
Таб.Ссылка = &Номенклатура //можно убрать, получим таблицу