Имя: Пароль:
1C
1С v8
СКД: Отчет с иерархией
0 Digger
 
28.06.16
08:50
Нужно сделать отчет на СКД  план-факт по продажам.
Отчет типа
----------------план факт
группа 1         0    20
- группа 11      20    20
----  номен 1   0     10
----- номен 2   0      10

Проблема,  что план устанавливается на конкретную группу и не должен отображаться выше по иерархии,  а факт только по номенклатуре, и наоборот по иерархии суммируется вверх.

Можно конечно вручную для каждого элемента рассчитать в запросе и план и факт,  но это будет долго,  и наверное есть какое то более красивое решение с помощью СКД.

Вообщем уже сломал всю голову и СКД,   помогите кто чем может.  )
1 aleks_default
 
28.06.16
09:08
В ресурсах, одно и то же поле ресурса добавляешь столько раз сколько тебе нужно и через "рассчитывать по" указываешь по каким группировкам как считать, сумму там или максимум.
2 aleks_default
 
28.06.16
09:10
И еще почитай раздел справки "Функции языка выражений системы компоновки данных".
3 Digger
 
28.06.16
09:15
(1) Группировка всего одна.  Максимум для "плана" заполнит значение вверх по всей иерархии,  а нужно для конкретной группы.
4 aleks_default
 
28.06.16
09:15
Ты не пиши, ты читай
5 aleks_default
 
28.06.16
09:54
Вернее "рассчитывать по" тут не поможет, но можно использовать функцию языка "Уровень()".

В поле "выражение" ресурса План пиши так
ВЫБОР КОГДА Уровень() > 1 ТОГДА 0 ИНАЧЕ СУММА(План) КОНЕЦ

Номер уровня сам определяй какой тебе нужно

Для факта походу вообще ничего не нужно, обычная функция СУММА(Факт).
6 Digger
 
28.06.16
11:01
(5) Все не так просто.  План может быть задан на любом уровне иерархии, и явно уровнем его не выделишь.   Сумма(ПЛАН) использовать не получиться,  потому как он тогда сложит все значения подчиненных планов,  что неверно.
План гр 1 <>  гр1.1+гр1.2
7 aleks_default
 
28.06.16
11:07
Ну не используй вообще агрегатную функцию. Напиши просто План в выражении ресурса.
8 Digger
 
28.06.16
11:20
(7) Какая разница.  План уходит вверх по иерархии.
Получается не
гр 1  0
гр 11 20
гр 12 0

а
гр 1 20
гр 11 20
гр 12 0
9 DrShad
 
28.06.16
11:24
Делай собственную иерархию
10 aleks_default
 
28.06.16
11:48
(8) Че-то ты меня лечишь. Откуда возьмется сумма вверх по иерархии, если выражение суммирования в ресурсе не прописано? Может у тебя в запросе уже эта сумма посчитана?

Выведи таблицу без группировок (только детальные записи) и посмотри как план заполнен по группам. Считается ли там сумма?
11 Rokford
 
28.06.16
11:52
В настройках отчета для группировки, где не нужен план можно вообще убрать поле "План" на закладке "выбранные поля", и выводить их только в группировке.
12 aleks_default
 
28.06.16
11:55
(11)У него группировка одна (иерархия) просто несколько уровней.
13 Rokford
 
28.06.16
12:17
(12) Понял, невнимательно читал. Полностью согласен с (7). Ждем ответа на (10).
14 Digger
 
28.06.16
13:49
(10) Не знаю откуда.  
В ресурсе у Плана  стоит просто План  без суммирования. У "Факта" Сумма()
Запрос простой.
ВЫБРАТЬ
  ТП,
  ПланКолВо
ИЗ
ПланПродажи
ОБЪЕДИНИТЬ
ВЫБРАТЬ
  ТП,
  ФактКолВо
ИЗ
Продажи

В итоге вот такое выводит в результате
http://clip2net.com/s/3zEJohn
15 nasik90
 
28.06.16
14:07
Попробуй план убрать из ресурсов и группировку сделать по торговому представителю(группировка по иерархии) и плану.
16 Digger
 
28.06.16
14:39
(15) Не получится,  тогда останется значение плана только в нижней строке.
17 kittystark
 
28.06.16
14:42
была такая заморочка, решалась через прописание в ресурсе ГрупповаяОбработка(...) с вызовом своей функции из нее
18 aleks_default
 
28.06.16
14:53
Добавь в запрос СГРУППИРОВАТЬ ПО чтобы у тебя и план и факт были в одной строке, тогда по идее (7) должно сработать.
19 Digger
 
28.06.16
15:04
(18) Они не могут быть в одной строке.  факт всегда на нижнем уровне иерархии(ТП),  планы на верхних(филиал).

(17) Ну, если не получится настройками,  то конечно допилю кодом.  )
20 aleks_default
 
28.06.16
15:20
Я говорю, сделай сначала запросом нормальную "плоскую" таблицу, де ТП сгруппированы и план и факт выведены в разные колонки ОДНОЙ строки. Для того чтобы потом когда будешь делать структуру группировок не нужно было использовать агрегатную функцию.
21 kittystark
 
28.06.16
15:21
(19) там того кода... пихаешь в общий модуль:

Функция ВернутьЗначениеПоИерархии(Данные) Экспорт    
    Если Данные = Null Тогда
        Возврат Null;
    КонецЕсли;
    рез = "";
    Попытка
        рез = Данные.ТекущийЭлемент.КолвоПлан;
    Исключение
    КонецПопытки;
    
    Возврат рез;    
КонецФункции
22 kittystark
 
28.06.16
15:25
ресурс:

МойОбщийМодуль.ВернутьЗначениеПоИерархии(ГрупповаяОбработка("КолвоПлан КАК КолвоПлан, Номенклатура КАК Номенклатура",,"Номенклатура"))

пока дошли до этого решения ушло несколько дней со всякими другими извратами через запросы и другие выражения ресурсов