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