Здравствуйте!
В ходе разработки столкнулся с такой подзадачей:
Справочник Номенклатура с иерархией
Справочник СпецификацияКДоговору с табличной частью Номенклатура. В табличной части два реквизита - "ВидСравнения"- тип "Перечисление.ВидыСравнения" - "Равно", "Не равно", "ВИерархии" и "НеВИерархии"
и
"Номенклатура" - элементы и группы справочника Номенклатура.
В документе "Заявка" есть реквизит табличной части "Товары" - "СпецификацияКДоговору".
ПередЗаписью документа осуществляется проверка номенклатуры из табличной части причастности к спецификации.
Как запросом это сделать? Допустим кодом в модуле это сделать легко, но какой прием красиво одним запросом.
Учитывая, что в табличной части спецификациикдоговору номенклатура должна соответствовать всем условиям из табличной части одновременно. т.е. если "равно", то понятно - да или нет, а если "неравно" чему-то, "в иерархии" к одной группе и "не в иерархии" к другой группе одновременно.
если хочется запросом, то нужно рядом со справочником номенклатуры положить данные для nested sets, иначе соединения типа "в иерархии" запросом не получить для неограниченного количества уровней.
Для ограниченного можно написать костыль типа ...Родитель.Родитель...
дальше соединяешь со спецификацией, получаешь плоский список с Истина для равно и Ложь для не равно, группируешь по МИНИМУМ или по разнице уровней иерархии в условиях спецификации (для определения если несколько условий на одну номенклатуру через разные уровни иерархии)
этот список соединяешь с товарами и смотришь, где Истина - ОК, где ЛОЖЬ и NULL - косяк.
У тебя документ ещё не записан, ты запросом к номенклатуре документа всё равно не обратишься.. Всё равно придётся ТЧ в запрос через менеджер временных таблиц передавать.
Сделай кодом и не парься.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший