Имя: Пароль:
1C
1С v8
Неверная иерархия, если в запросе есть соединение
0 Steini
 
30.05.14
13:22
Добрый день, всем вкусного пятничного светлого пива с минимум горчинки и нежное сочное свежее филе русской сёмги!

Есть запрос, результат которого хочется вывести в дерево с иерархией по группировкам:

ВЫБРАТЬ
    ВТ_Номенклатура.Номенклатура,
    ЕСТЬNULL(ВТ_Группировка.Группировка, ЗНАЧЕНИЕ(Справочник.Группировки.ПустаяСсылка) КАК Группировка
ИЗ
    ВТ_Номенклатура КАК ВТ_Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Группировка КАК ВТ_Группировка
    ПО ВТ_Номенклатура.Номенклатура = ВТ_Группировка.Номенклатура
ИТОГИ ПО
    Группировка ИЕРАРХИЯ

При
дрвРезультат = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
где справочник группировок иерархический с группами и элементами.

Такая конструкция выдает в результате не полную иерархию по всем папкам, а всего лишь до первого родителя.
Подскажите, пожалуйста, почему выдается не по всей иерархии, ну и, следовательно, как исправить, если знаете.

Варианты исправления ситуации:
1) завернуть соединение таблиц во временную таблицу, а потом брать иерархию уже с этой временной таблицы - НЕ РАБОТАЕТ
2) использовать ВЫРАЗИТЬ(ЕСТЬNULL(ВТ_Группировка.Группировка, ЗНАЧЕНИЕ(Справочник.Группировки.ПустаяСсылка) КАК Справочник.Группировка) - НЕ РАБОТАЕТ
3) использовать ОбходРезультатаЗапроса.ПоГруппировкамСИерархией - НЕ РАБОТАЕТ

На СКД проблема повторяется, но решается путем указания у поля группировки (именно в СКД) его типа явно.
1 Steini
 
30.05.14
13:56
Проблема, мне кажется, заключается в том, что система не корректно определяет тип поля, несмотря на мои попытки указать его в запросе с помощью конструкции ВЫРАЗИТЬ.
Глюк какой-то, описание этой проблемы нигде не нахожу, ровно как и нарушения правил языка запросов в данном примере тоже.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший