Вход | Регистрация


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      |
|----------------------------------------------------------|

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


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