Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

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

СКД + Иерархия элементов + Итоги показателей по иерархии
Я
   Tiger_MDR
 
04.10.17 - 13:41
Добрый день, форумчане!

Много лазил по форумам, читал вумные книжки, но так и не нашёл для себя решения задачи, описанной ниже. Очень надеюсь, что среди Вас найдутся более знающие и более опытные люди, чем я.

Итак, в базе есть справочник контрагентов с иерархией ЭЛЕМЕНТОВ, есть регистр накопления с показателями продаж этих контрагентов. Задача: вывести контрагентов в иерархическом виде, для каждого контрагента вывести показатель продаж, а также итоговый показатель продаж тех контрагентов, которые находятся "под ним" в структуре справочника НА ВСЕХ НИЖНИХ УРОВНЯХ.

Всю эту кухню надо реализовать на СКД, чтобы иметь возможность строить отчёт с произвольным отбором по реквизитам контрагентов, а также, чтобы можно было менять период продаж.

Например, это выглядеть должно так:

|----------------------------------------------------------|
| Уровень | Контрагент | Код | Сумма продаж | Сумма продаж |
|         |            |     | контрагента  | подчинённых  |
|         |            |     |              |    + свои    |
|----------------------------------------------------------|
|    1    | Пупкин     |  5  |     100      |     5100     |
|----------------------------------------------------------|
|    2    |   Иванов   |  7  |     1000     |     5000     |
|----------------------------------------------------------|
|    2    |   Петров   |  56 |     500      |     4000     |
|----------------------------------------------------------|
|    3    |     Ухов   |  3  |     3500     |     3500     |
|----------------------------------------------------------|

Бьюсь уже пару недель :(

Отдельно иерархию контрагентов получается сделать, показатель продаж достать по конкретному контрагенту нет проблемы. Вся проблема найти сумму по иерархии. Была бы иерархия групп и элементов справочника "Контрагенты", вопросов бы вообще не было.

Вроде, кажется, простой вопрос, а ставит в тупик.

Подбросьте идею, пожалуйста. Спасибо заранее всем откликнувшимся.
 
 
   Happy Bear
 
1 - 04.10.17 - 13:44
ВычислитьВыражение пробовал?
   DmitrO
 
2 - 04.10.17 - 13:48
по Пупкину Сумма продаж + свои вероятно должна быть 9100?
   Tiger_MDR
 
3 - 04.10.17 - 13:58
(1) Пробовал, но как-то безуспешно. Работало только когда действительно выводил иерархически, но тогда появлялись двойные записи, т.е. под Пупкиным ещё один раз Пупкин был, а мне так не нужно.
(2) В таблице всё верно. 5100 = 3500+500+1000+100
   DrShad
 
4 - 04.10.17 - 13:59
СУММА(ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ("СуммаПродаж", "Контрагент", "Иерархия"))

как-то так
   Tiger_MDR
 
5 - 04.10.17 - 14:07
(4) Про такую штуковину думал, но так и не понял, в каком месте её лучше прикрутить. Ведь выводить дерево "без лишних строк" можно двумя способами:
1. Соединять набор с самим собой по полям "Ссылка"-"Родитель" на вкладке "связи наборов данных", но тогда в результат выводятся ДЕТАЛЬНЫЕ записи, где итогов иерархии нет.
2. Выводить иерархично, но определять пользовательское поле с условием отбора, но тогда выводятся не все записи: либо без "листиков", либо вообще лажа какая-то.
   DrShad
 
6 - 04.10.17 - 14:15
(5) не знаю что и как ты там соединяешь, но у меня все работает
   DrShad
 
7 - 04.10.17 - 14:15
а прикрутить ее в ресурс
   YAGolova
 
8 - 04.10.17 - 14:22
(0) Я примерно с подобной задачей бьюсь постоянно. И ниразу ничего адекватного у меня не выходило))) Поэтому буду очень внимательно следить за этой темой. По своим изысканиям: делал и ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ и вычислитьвыражение, предварительно в запросе как то ставив метку на нужную мне запись, и экспортными функциями как то делал, иногда забиваю на скд и делаю макетом)))) Во общем все мои варианты мне не нравятся самому - поэтому каждый раз нахожусь в поиске нового варианта)
   DrShad
 
9 - 04.10.17 - 15:18
http://SSMaker.ru/a31174bf/

вот вам пример в УПП, иерархия контрагентов построена через реквизит ГоловнойКонтрагент
   mistеr
 
10 - 04.10.17 - 15:18
(0) > справочник контрагентов с иерархией ЭЛЕМЕНТОВ

У вас там МММ что ли?
 
 Рекламное место пустует
   DrShad
 
11 - 04.10.17 - 15:23
(10) тебе действительно интересно или выпендриться решил? у нас не МММ
   Tiger_MDR
 
12 - 04.10.17 - 15:56
(10) Не МММ, но задача есть и я её хочу решить. :)
(9) Т.е. если, к примеру, попытаться не использовать стандартную иерархию по родителю, а сделать свою, но тоже по родителю, то будет нужный результат? Фокус-то как раз в иерархии ЭЛЕМЕНТОВ. Завтра попробую замострячить. :)
   Tiger_MDR
 
13 - 04.10.17 - 15:59
(9) Кстати, суммы в Вашем скриншоте не так рассчитываются, как мне нужно. Думаю, вряд ли получится. Но попробую.
   DrShad
 
14 - 04.10.17 - 16:03
(13) уверен что не так? если что пиши на мыло
   DmitrO
 
15 - 04.10.17 - 16:06
(3)а, ну да, ок..
Но тогда почему по Иванову 5000, подчиненных нет, а своих только 1000.
   Tiger_MDR
 
16 - 04.10.17 - 16:14
(15) Уууу... Это да. Напротив Иванова в последней колонке должна быть 1000. Остальное, вроде, нормально. Спасибо за поправочку.
   ДемонМаксвелла
 
17 - 04.10.17 - 16:15
колонку справа можно посчитать и без скд, чисто в запросе.
   Tiger_MDR
 
18 - 04.10.17 - 16:16
(17) С трудом представляю себе такой запрос.
   ДемонМаксвелла
 
19 - 04.10.17 - 16:19
(18) соединить табличку с самой собой по условию, что поле1.Родитель=Поле1 или поле1.родитель.родитель=поле1 ...
   Tiger_MDR
 
20 - 04.10.17 - 16:20
(19) Количество уровней справочника "Контрагенты" не ограничено.
   ДемонМаксвелла
 
21 - 04.10.17 - 16:20
(20) в конце концов, для универсальности, запрос можно собрать кодом
   DrShad
 
22 - 04.10.17 - 16:21
(19) давай запрос, ща проверим твои расчеты )))
   DrShad
 
23 - 04.10.17 - 16:21
(21) вот как раз для универсальности и сделано на СКД
   ДемонМаксвелла
 
24 - 04.10.17 - 16:22
(22) мне такое не надо, спасибо.

нужно правда учесть, что при большом справочнике такой запрос будет очень долго выполняться
   DrShad
 
25 - 04.10.17 - 16:24
(24) замеры показать?
   Tiger_MDR
 
26 - 04.10.17 - 16:24
Я простых вопросов не задаю. Это уже крайняя мера для меня - идти на форум и задавать вопрос. Это мой первый вопрос. Обычно, решение нахожу достаточно быстро, но это не тот случай. :(

(24) а справочник очень большой. Может достигать 100000 контрагентов и уровней ой-ёй-ёй сколько...
   ДемонМаксвелла
 
27 - 04.10.17 - 16:24
(25) давай
   DrShad
 
28 - 04.10.17 - 16:25
   ДемонМаксвелла
 
29 - 04.10.17 - 16:27
(28) сколько элементов и уровней?
   Tiger_MDR
 
30 - 04.10.17 - 16:27
(28) DrShad, можешь схему СКД выложить?
   DrShad
 
31 - 04.10.17 - 16:29
(29) 546 элементов, вложенность не ограничена, но в данном примере у меня 5
   ДемонМаксвелла
 
32 - 04.10.17 - 16:31
(31) не, это детсад. на 100 000 элементов и скд будет долго считать, хотя и быстрее, имхо, чем запрос с соединением таблицы самой на себя.
   DrShad
 
33 - 04.10.17 - 16:32
(32) один хрен быстрее чем даже составной запрос собранный программно
 
 
   ДемонМаксвелла
 
34 - 04.10.17 - 16:34
(33) пожалуй, да.
   Tiger_MDR
 
35 - 04.10.17 - 16:36
Программно запрос составлять тоже непонятно, как, т.к. пользователь может выбрать любой элемент из этих 100000, а отчёт должен будет вывести ему данные только по этой иерархии. Вышестоящие контрагенты ему в отчёте будут не нужны. Это, кстати, ещё один гемор, который надо лечить.
   Tiger_MDR
 
36 - 04.10.17 - 16:38
Любит СКД выводить вышестоящие уровни, если использовать стандартную группировку по иерархии.
   DrShad
 
37 - 04.10.17 - 16:43
http://my-files.ru/yd9dnd

тут схема
   Tiger_MDR
 
38 - 04.10.17 - 16:44
(37) Спасибо! Поковыряюсь. ;)
   DrShad
 
39 - 04.10.17 - 16:45
(38) удачи
   ДемонМаксвелла
 
40 - 04.10.17 - 16:46
(35) лично мне непонятно, что вам может быть тут непонятно. при сборке запроса вычисляется существующее количество уровней иерархии справочника и в зависимости от вычисленного числа уровней собирается условие соединения таблиц
   Tiger_MDR
 
41 - 04.10.17 - 16:55
(40) Не приходилось ни разу менять текст запроса СКД после нажатия пользователем кнопочки "Сформировать". Попробую и этот вариант. Спасибо.
   DrShad
 
42 - 04.10.17 - 16:57
(41) вот не нужно этим извращаться
   Tiger_MDR
 
43 - 04.10.17 - 16:59
(42) А вдруг я ещё тот извращенец? )))))))))
   Tiger_MDR
 
44 - 04.10.17 - 17:03
Мне это может пригодиться в следующем отчёте, который по своей сути является следующей стадией извращения над этим отчётом. Там надо будет эти же показатели, только за несколько периодов и ещё с отбором по значениям этих самых показателей (+ нулевые тоже будут нужны!).
   mistеr
 
45 - 04.10.17 - 20:24
(11) Мне действительно интересно. Я такое встречал только в двух местах: в МММ-подобных схемах и у терминальщиков-обнальщиков.
   Tiger_MDR
 
46 - 05.10.17 - 08:03
DrShad, спасибо за выражение:

ВЫЧИСЛИТЬВЫРАЖЕНИЕ("СУММА(СуммаПродажи)", "Контрагент", "ГруппировкаНеРесурса")

Вот именно в таком синтаксисе у меня заработал ресурс так, как надо.

Но в целом компоновку пришлось переделать, т.к. группировка по реквизиту мне не подходит.
   Tiger_MDR
 
47 - 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      |
|----------------------------------------------------------|

В параметрах отчёта пользователь указал, что выводить нужно по тем контрагентам, которые под Шишкиным.
Вопрос: как избавиться от Сухова, Лапина и самого Шишкина, которых в отчёт не просили выводить. :)
Можно даже оставить Шишкина - это не будет проблемой или ошибкой.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует