Дубли итогов при выборке по Иерархии #736265


#0 by ssserg
Добрый день. Задача такая: получить иерархически весь справочник с его элементами и группами, а также с итогами прицепленными из другой таблицы по каждому элементу, но при этом чтобы не было дублей. Если бы у меня не было числовых итогов, то всё решалось просто, в запросе написал бы: и вывелась бы идеальная иерархия, вот как пример на скриншоте: Сам справочник при этм выглядит так: Но так как мне нужны ещё и итоги, то вместо "Упорядочить"  использую конструкцию ГДЕ Ссылка.ЭтоГруппа = ЛОЖЬ ... ИТОГИ СУММА(СуммаОстаток) ПО Ссылка ТОЛЬКО ИЕРАРХИЯ Выглядит запрос следующим образом: ПО    Ссылка ТОЛЬКО ИЕРАРХИЯ но в результате получаю, что в дереве значений в группах могут лежать эти же самые группы, содержащие при этом в себе элементы, которые должны быть вложены в корень группы. получается как на скриншоте: а должны быть так По ссылка маааленькая база с данными, где можно посмотреть как выполняется запрос: P.S. Эту тему смотрел а также статью к ней Но тамошняя функция по удалению дублей мне не подходит, т.к. она удаляет группу-дубль вместе с нужным элементом, который в неё вложен
#1 by ssserg
парсер блин, дублирую ссылки:
#2 by ssserg
твоюж медь :)
#3 by Simod
ИЗ ПО     Ссылка ТОЛЬКО ИЕРАРХИЯ
#4 by ssserg
эту статью тоже читал. от моего запроса этот отличается только тем, что у меня ещё есть секция "Упорядочить" в запросе, а также условие "Где", но от их удаления из запроса результат НЕ ПОМЕНЯЛСЯ, как были дубли так и остались (получится ли на этот раз ссылку выложить аккуратно))
#5 by Simod
Где и как используется результат запроса?
#6 by D_E_S_131
У тебя нет условия, что группы не будут выбираться, вот они и выходят в отчет. А еще иерархия добавляется.
#7 by ssserg
вы потеряли нить повествования. Я его убрал, потому что товарищ в предложил мне запрос без условия "где ЭтоГруппа = Ложь", а первоначально запрос выглядит так: ВЫБРАТЬ    СУММА(СуммаОстаток) ПО Ссылка ТОЛЬКО ИЕРАРХИЯ
#8 by D_E_S_131
Видимо суть в . Построитель (который использует например "Консоль отчетов") нормально выводит иерархию при задании вывода группировки тип "Иерархия".
#9 by ssserg
используется при заполнении фиксированного макета, в котором каждой строке соответствует строка из дерева значений как на картинке из первого поста, а также имеются строки-группы, содержимое которых должно суммировать в себе несколько позиций по обычным строкам. Грубо говоря мне бы достаточно было в запросе просто получать адекватную иерархию с суммами и без дублей групп. Дерево значений то бишь. Та самая картинка из первого поста:
#10 by ssserg
Нет, он не выводит нормально в том случае который описал я. Вот он скриншот результат ещё раз:
#11 by D_E_S_131
А ты попробуй это сделать в консоли ОТЧЕТОВ и увидишь разницу. Консоль запросов не все "умеет".
#12 by ssserg
сори, был невнимателен, но мне от того, что в консоли отчетов оно может быть выводится правильно не легче. Я засунул запрос в код, и поставил точку останова, затем выгрузил его результат в дерево значений и вызвал метод выбрать строку: после этого имею следующего вида окно: в котором видно, что всё таки дублируется группа в самой структуре дерева значений. То есть то, что в консоли отчетов может быть даже дубль группы не выводится - это прекрасно, но мне на выходе нужно Дерево значений, а не результат компоновки данных или что там получается на выхлопе у консоли.
#13 by D_E_S_131
Нормально построить иерархию можно только с условием иерархии групп и элементов. При выводе данных куда-либо в любом случае придется отличать группировку от детальных записей. Поэтому можешь делать это самостоятельно (работая с выборкой запроса), а можешь доверить работу Построителю или СКД.
#14 by Simod
Сделай пакетный запрос: Перебирай Иерархию и соединяй с итогами в процессе выборки.
#15 by ssserg
Попробовал следующий способ через Построитель запроса и точку останова, текст запроса отрабатывал как надо в консоли отчетов и давал нужный вид отчета, но при пытке засунуть в код, он ведет себя опять не так как нужно и получается такой же результат как и обычном запросе Построитель = Новый ПостроительОтчета;
#16 by ssserg
Не получится, т.к. проблема в том, что Иерархия не может использоваться во временной таблице
#17 by Simod
Не временная таблица, а пакетный запрос. Разницу понимаешь?
#18 by ssserg
ни разу не приходилось ими пользоваться без помещениях оных во временные таблицы. Так ну ладно, взял я иерархию(действительно не ругается) - это запрос пакета 1 взял я итоги - это запрос пакета 2, а что с ними потом делать то? Как я могу обратиться к пакету 2 из результата пакета 1?? Не совсем понятно что имелось ввиду. Или имелась ввиду ситуация, что выполняем отдельно два запроса. результат первого - это иерархия с элементами, а результат второго просто итоги по каждой позиции? и в цикле по результату иерархии делаем вложенный цикл в котором перебираем элементы в поисках подходящего из второго результата запроса?
#19 by ssserg
Решить проблему четко как я писал в заглавном посте так и не удалось. Но зато добился требуемого мне результата другим путём: 1) Переделал запроса так, чтобы он получал суммовые итоги ТОЛЬКО по элементам, группы же при этому сумм не имели. Вывод элементов так и оставил в иерархии 2) Выгружаю запрос в дерево значений 3) В цикле прохожу по всем заглавным веткам дерева значений, в них если встречаю группу, то рекурсивно вызываю функцию, которая возвращает мне сумму по вложенным элементам(если снова попадается папка, то функция снова себя вызывает). В результате такого обхода заполняю таблицу значений вида то есть ДЕРЕВО значений вида: я преобразовываю в ТАБЛИЦУ значений:
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С