Имя: Пароль:
1C
1С v8
СКД расчет итогов с отбором значений группировок
,
0 ShurikSoft1C
 
08.04.16
11:12
Добрый день!
Платформа: 8.3.7
Имеется отчет с произвольной иерархией элементов (справочника) и расчетом итогов для групп средствами СКД.

Статья|СуммаОборот|ИспользуетсяДля

СтатьяРодитель1 ........ 30 (Рассчитывается автоматом итоги в СКД)
   СтатьяРебенок11 ..... 10 (Собирается с оборотов)
   СтатьяРебенок12 ..... 20 (Собирается с оборотов)
СтатьяРодитель2 ........ 70 ИспользуетсяДля - СтатьяРодитель3 (Рассчитывается автоматом итоги в СКД)
   СтатьяРебенок21 ..... 50
   СтатьяРебенок22 ..... 20
СтатьяРодитель3 ........ 70 Должно суммировать показатели определенных статей (здесь к примеру только СтатьиРодителя2), показатели которых в свою очередь являются итоговой суммой их детей.

У СтатьиРодитель3 имеется таблица с перечнем статей, которые он должен суммировать.
При формировании очета в таблицу добавил колонку (маркер ИспользуетсяДля), он указывает для расчета какой статьи используется текущий показатель.
Как видно из таблицы СтатьяРодитель2 Должна суммироваться в СтатьюРодитель3.

Пробую функцию в ресурсе:

ВычислитьВыражение("ВЫБОР КОГДА Представление(ИспользуетсяДля) = """ + Представление(СтатьяФинансовогоОтчета) + """ ТОГДА Сумма(СуммаОборот) ИНАЧЕ Сумма(Един) КОНЕЦ", "СтатьяФинансовогоОтчета", "ОбщийИтог")

Но она не пробегает по всему отчета, а обработывает только детей СтатьиРодителя3

Подскажите пожалуйста, может кто сталкивался с такой ситуацией.
Второй день мучаю гугл, результат NULL.
1 Игорь Коломойский
 
08.04.16
11:13
(0) Ставь множитель 0 либо 1 по своим признакам и суммируй результаты. Соответственно, при умножении на 0 будет нулевой результат, который не войдёт в сумму, а по 1 - войдёт.
2 ShurikSoft1C
 
08.04.16
11:28
Вот что сделал
ВычислитьВыражение("Сумма(СуммаОборот) * ВЫБОР КОГДА Представление(ИспользуетсяДля) = """ + Представление(СтатьяФинансовогоОтчета) + """ ТОГДА 1 ИНАЧЕ 0 КОНЕЦ", , "ОбщийИтог")

Если я устанавливаю параметр функции ОбластьВычисления, группировку по которым выполняется расчет, я так СКД пробегает только по детям текущей группировки и не просматривает весь отчет
3 ShurikSoft1C
 
08.04.16
11:29
Если я убираю область расчета, СКД ругается что не можен найти поле СуммаОборот, хотя оно указано в выбранных полях отчета
4 ShurikSoft1C
 
08.04.16
11:41
(1) Может я не там поставил, подскажи пожалуйста, то ты имел ввиду?
5 ShurikSoft1C
 
08.04.16
12:19
up
6 AceVi
 
08.04.16
12:25
(5) ВычислитьВыражение("ВЫБОР КОГДА Представление(ИспользуетсяДля) = """ + Представление(СтатьяФинансовогоОтчета) + """ ТОГДА Сумма(СуммаОборот) ИНАЧЕ Сумма(Един) КОНЕЦ", "СтатьяФинансовогоОтчета", "ОбщийИтог")

Может не ОбщийИтог а СтатьяФинансовогоОтчетаГруппировка?
СтатьяРодитель3 Это что? это группировка сформированная запросом? или это строка полученная выборкой в запросе?
7 ShurikSoft1C
 
08.04.16
12:40
(6) СтатьяРодитель3 - это группировка.
8 ShurikSoft1C
 
08.04.16
12:52
(6) +
Синтаксис (на всякий случай)
ВычислитьВыражение(<Выражение>, <Группировка>, <ОбластьВычисления>.....

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

Если не указывать "ОбщиеИтоги" или указать в параметре "Группировка" - "СтатьяФинансовогоОтчета" он не видит своих соседей по уровню, а выбирает только среди детей.
9 ShurikSoft1C
 
08.04.16
13:51
up
10 AceVi
 
08.04.16
14:23
Кстати что за глупость - у тебя СтатьяРодитель2  и СтатьяРодитель3 имеют один и тот же уровень в группировке? ну вот потому и не считает. он сумму элемента родителя собирает только по подчиныным элементам а не по всему отчету идет.

Если у тебя уровень одинаковый но тебе НУЖНО что бы один родитель был в иерархии другого то делай "вирутальные группировки" в запросе. Типа такого
ВЫБОР КОГДА СтатьяРодитель2 ТОГДА "Уровень2" КОГДА СтатьяРодитель3 ТОГДА "Уровень2" КОНЕЦ КАК  ВиртГруппировка
и т.д.
В СКД затем делай группировку не по иерархии а по этому новому полю. т.е. в скд будет 2 группировки ВиртГруппировка и ей подчиненная СтатьяФинансовогоОтчета(только элементы)
11 AceVi
 
08.04.16
14:30
(10) Плохой совет)
он же не построит дерево группировки по этим данным. связи между уровнями то нету.

Значит сделай справочник где отобразишь нужную тебе группировку(каждый элемент справочника будет иметь ссылку на СтатьяРодитель и точно такое же название, просто измениться их взаимное подчинение), а затем точно так же 2 группировки в СКД Группировка из Справочника(ТолькоИерархия) и группировка СтатьяФинансовогоОтчета(толькоЗлементы)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший