СКД + Иерархия элементов + Итоги показателей по иерархии #805980


#0 by Tiger_MDR
Добрый день, форумчане! Много лазил по форумам, читал вумные книжки, но так и не нашёл для себя решения задачи, описанной ниже. Очень надеюсь, что среди Вас найдутся более знающие и более опытные люди, чем я. Итак, в базе есть справочник контрагентов с иерархией ЭЛЕМЕНТОВ, есть регистр накопления с показателями продаж этих контрагентов. Задача: вывести контрагентов в иерархическом виде, для каждого контрагента вывести показатель продаж, а также итоговый показатель продаж тех контрагентов, которые находятся "под ним" в структуре справочника НА ВСЕХ НИЖНИХ УРОВНЯХ. Всю эту кухню надо реализовать на СКД, чтобы иметь возможность строить отчёт с произвольным отбором по реквизитам контрагентов, а также, чтобы можно было менять период продаж. Например, это выглядеть должно так: Бьюсь уже пару недель :( Отдельно иерархию контрагентов получается сделать, показатель продаж достать по конкретному контрагенту нет проблемы. Вся проблема найти сумму по иерархии. Была бы иерархия групп и элементов справочника "Контрагенты", вопросов бы вообще не было. Вроде, кажется, простой вопрос, а ставит в тупик. Подбросьте идею, пожалуйста. Спасибо заранее всем откликнувшимся.
#1 by Happy Bear
ВычислитьВыражение пробовал?
#2 by DmitrO
по Пупкину Сумма продаж + свои вероятно должна быть 9100?
#3 by Tiger_MDR
Пробовал, но как-то безуспешно. Работало только когда действительно выводил иерархически, но тогда появлялись двойные записи, т.е. под Пупкиным ещё один раз Пупкин был, а мне так не нужно. В таблице всё верно. 5100 = 3500+500+1000+100
#4 by DrShad
#5 by Tiger_MDR
Про такую штуковину думал, но так и не понял, в каком месте её лучше прикрутить. Ведь выводить дерево "без лишних строк" можно двумя способами: 1. Соединять набор с самим собой по полям "Ссылка"-"Родитель" на вкладке "связи наборов данных", но тогда в результат выводятся ДЕТАЛЬНЫЕ записи, где итогов иерархии нет. 2. Выводить иерархично, но определять пользовательское поле с условием отбора, но тогда выводятся не все записи: либо без "листиков", либо вообще лажа какая-то.
#6 by DrShad
не знаю что и как ты там соединяешь, но у меня все работает
#7 by DrShad
а прикрутить ее в ресурс
#8 by YAGolova
Я примерно с подобной задачей бьюсь постоянно. И ниразу ничего адекватного у меня не выходило))) Поэтому буду очень внимательно следить за этой темой. По своим изысканиям: делал и ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ и вычислитьвыражение, предварительно в запросе как то ставив метку на нужную мне запись, и экспортными функциями как то делал, иногда забиваю на скд и делаю макетом)))) Во общем все мои варианты мне не нравятся самому - поэтому каждый раз нахожусь в поиске нового варианта)
#9 by DrShad
вот вам пример в УПП, иерархия контрагентов построена через реквизит ГоловнойКонтрагент
#10 by mistеr
> справочник контрагентов с иерархией ЭЛЕМЕНТОВ У вас там МММ что ли?
#11 by DrShad
тебе действительно интересно или выпендриться решил? у нас не МММ
#12 by Tiger_MDR
Не МММ, но задача есть и я её хочу решить. :) Т.е. если, к примеру, попытаться не использовать стандартную иерархию по родителю, а сделать свою, но тоже по родителю, то будет нужный результат? Фокус-то как раз в иерархии ЭЛЕМЕНТОВ. Завтра попробую замострячить. :)
#13 by Tiger_MDR
Кстати, суммы в Вашем скриншоте не так рассчитываются, как мне нужно. Думаю, вряд ли получится. Но попробую.
#14 by DrShad
уверен что не так? если что пиши на мыло
#15 by DmitrO
а, ну да, ок.. Но тогда почему по Иванову 5000, подчиненных нет, а своих только 1000.
#16 by Tiger_MDR
Уууу... Это да. Напротив Иванова в последней колонке должна быть 1000. Остальное, вроде, нормально. Спасибо за поправочку.
#17 by ДемонМаксвелла
колонку справа можно посчитать и без скд, чисто в запросе.
#18 by Tiger_MDR
С трудом представляю себе такой запрос.
#19 by ДемонМаксвелла
соединить табличку с самой собой по условию, что поле1.Родитель=Поле1 или поле1.родитель.родитель=поле1 ...
#20 by Tiger_MDR
Количество уровней справочника "Контрагенты" не ограничено.
#21 by ДемонМаксвелла
в конце концов, для универсальности, запрос можно собрать кодом
#22 by DrShad
давай запрос, ща проверим твои расчеты )))
#23 by DrShad
вот как раз для универсальности и сделано на СКД
#24 by ДемонМаксвелла
мне такое не надо, спасибо. нужно правда учесть, что при большом справочнике такой запрос будет очень долго выполняться
#25 by DrShad
замеры показать?
#26 by Tiger_MDR
Я простых вопросов не задаю. Это уже крайняя мера для меня - идти на форум и задавать вопрос. Это мой первый вопрос. Обычно, решение нахожу достаточно быстро, но это не тот случай. :( а справочник очень большой. Может достигать 100000 контрагентов и уровней ой-ёй-ёй сколько...
#27 by ДемонМаксвелла
давай
#28 by DrShad
#29 by ДемонМаксвелла
сколько элементов и уровней?
#30 by Tiger_MDR
DrShad, можешь схему СКД выложить?
#31 by DrShad
546 элементов, вложенность не ограничена, но в данном примере у меня 5
#32 by ДемонМаксвелла
не, это детсад. на 100 000 элементов и скд будет долго считать, хотя и быстрее, имхо, чем запрос с соединением таблицы самой на себя.
#33 by DrShad
один хрен быстрее чем даже составной запрос собранный программно
#34 by ДемонМаксвелла
пожалуй, да.
#35 by Tiger_MDR
Программно запрос составлять тоже непонятно, как, т.к. пользователь может выбрать любой элемент из этих 100000, а отчёт должен будет вывести ему данные только по этой иерархии. Вышестоящие контрагенты ему в отчёте будут не нужны. Это, кстати, ещё один гемор, который надо лечить.
#36 by Tiger_MDR
Любит СКД выводить вышестоящие уровни, если использовать стандартную группировку по иерархии.
#37 by DrShad
тут схема
#38 by Tiger_MDR
Спасибо! Поковыряюсь. ;)
#39 by DrShad
удачи
#40 by ДемонМаксвелла
лично мне непонятно, что вам может быть тут непонятно. при сборке запроса вычисляется существующее количество уровней иерархии справочника и в зависимости от вычисленного числа уровней собирается условие соединения таблиц
#41 by Tiger_MDR
Не приходилось ни разу менять текст запроса СКД после нажатия пользователем кнопочки "Сформировать". Попробую и этот вариант. Спасибо.
#42 by DrShad
вот не нужно этим извращаться
#43 by Tiger_MDR
А вдруг я ещё тот извращенец? )))))))))
#44 by Tiger_MDR
Мне это может пригодиться в следующем отчёте, который по своей сути является следующей стадией извращения над этим отчётом. Там надо будет эти же показатели, только за несколько периодов и ещё с отбором по значениям этих самых показателей (+ нулевые тоже будут нужны!).
#45 by mistеr
Мне действительно интересно. Я такое встречал только в двух местах: в МММ-подобных схемах и у терминальщиков-обнальщиков.
#46 by Tiger_MDR
DrShad, спасибо за выражение: Вот именно в таком синтаксисе у меня заработал ресурс так, как надо. Но в целом компоновку пришлось переделать, т.к. группировка по реквизиту мне не подходит.
#47 by Tiger_MDR
Ладно. Результат я получил примерно такой: В параметрах отчёта пользователь указал, что выводить нужно по тем контрагентам, которые под Шишкиным. Вопрос: как избавиться от Сухова, Лапина и самого Шишкина, которых в отчёт не просили выводить. :) Можно даже оставить Шишкина - это не будет проблемой или ошибкой.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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