Имя: Пароль:
1C
1С v8
СКД. Исключить отрицательные в общих итогах.
,
0 dextermorgan777
 
18.05.15
11:41
Добрый день. Нужен совет. В отчете на скд надо чтобы в сумму в общих итогах не попадали отрицательные числа из верхних уровней. Например таблица такая:
Контрагент 1 -20  (итог по контрагенту)
  запись 1    10
  запись 2    20
  запись 3   -50
Контраген 2   10
  запись 1    10
Контрагент 3  60
  запись 1    30
  запись 2    30
Общий итог    50

на уровне контрагентов должно остаться так же, а вот в общих итогах надо откинуть -20 чтобы стало 70 (т.е. только по контрагентам с положительным итогом выводить)

Спасибо за советы
1 Basilio
 
18.05.15
11:46
еще одну колонку добавь. в ней отрицательные значения заменяй на 0 (выбор когда поле1 < 0 ТОГДА 0 конец).
2 dextermorgan777
 
18.05.15
12:24
Тут дело в том, что цифра в группировке получается на основании двух колонок Сумма(ЕстьNULL(Сальдо,0))-Сумма(ЕстьNull(СуммаОстаток,0))

Для общих итогов я сделал так
ВычислитьВыражение("Выбор Когда (Сумма(ЕстьNULL(Сальдо,0))-Сумма(ЕстьNull(СуммаОстаток,0)))<0 Тогда 0 Иначе (Сумма(ЕстьNULL(Сальдо,0))-Сумма(ЕстьNull(СуммаОстаток,0))) Конец ", ,"ОбщийИтог")

В общем итоге вывело такую же сумму как и изначально. Поправьте меня пожалуйста, не могу понять где ошибку сделал.
3 Basilio
 
18.05.15
12:32
(2) вроде все правильно.... попробуй вынести расчет "без минусов" в отдельную колонку (новый ресурс). Тогда увидишь это ошибка в формуле или СКД не ту формулу применяет для общих итогов...
4 dextermorgan777
 
18.05.15
12:34
(3) я так и сделал. В двух колонках одинаковые цифры в общем итоге.
5 dextermorgan777
 
18.05.15
12:35
Мне кажется что с 0 сравнивает уже итоговое число. Т.е. считает так же как и было, а полученное сравнивает с нулем. А надо как-то сделать чтобы с нулем сравнивало на каждой строке группировки по контрагенту.
6 Basilio
 
18.05.15
12:38
(4)не прав. с 0 сравнивается детали. если конечно ты их в формуле указал. должно работать.
7 Basilio
 
18.05.15
12:39
+(6) покажи скрин ресурсов
8 dextermorgan777
 
18.05.15
12:41
Вычисляемое поле ИтогБезОтрицательных сделал так:

ВычислитьВыражение("Выбор Когда (Сумма(ЕстьNULL(Сальдо,0))-Сумма(ЕстьNull(СуммаОстаток,0)))<0 Тогда 0 Иначе (Сумма(ЕстьNULL(Сальдо,0))-Сумма(ЕстьNull(СуммаОстаток,0))) Конец ", ,"ОбщийИтог")

К оплате остаток в ресурсах написал так :
Сумма(ЕстьNULL(Сальдо,0))-Сумма(ЕстьNull(СуммаОстаток,0))


В о общем итоге по этим колонкам выводит одно и то же.
9 dextermorgan777
 
18.05.15
12:41
http://firepic.org/images/2015-05/18/kyu5bliucmhl.png
вот скрин группировок. сейчас сделаю ресурсы еще.
10 dextermorgan777
 
18.05.15
12:43
11 dextermorgan777
 
18.05.15
12:50
Вот скрин на живом примере

http://firepic.org/images/2015-05/18/sibh9iqg5ypd.png
12 ИС-2
 
naïve
18.05.15
12:53
Попробуй использовать функция ВычислитьВыражениеСГруппировкой для расчета значения именно на уровне контрагента.
Чтобы исключить минусовые значения на общем итоге
Выбор когда Сум < 0 тогда null иначе Сум конец
т.е преобразовывай минуса в null

Как вывести свой общий итог - посмотри примеры в инете
13 dextermorgan777
 
18.05.15
12:53
(12) ок. Спасибо. Сейчас попробую.
14 Basilio
 
18.05.15
13:10
(8) по-мойму в формуле ошибка - Сумму нужно вынести за условие выбора. т.е. сначала разность сравниваешь с 0 а потом суммируешь
15 Basilio
 
18.05.15
13:11
+(8) примерно так - "сумма(выбор когда поле1 - поле2 < 0 тогда 0 иначе поле1 - поле2)"
16 dextermorgan777
 
18.05.15
13:14
Сумма(ВычислитьВыражениеСГруппировкойМассив("Выбор Когда ЕстьNULL(Сальдо,0)-ЕстьNull(СуммаОстаток,0) < 0 Тогда
0
Иначе
ЕстьNULL(Сумма(Сальдо),0)-ЕстьNull(Сумма(СуммаОстаток),0)
Конец","ОсновнойПартнер"))


Так получилась нужная сумма. Сейчас еще потестирую на других данных и проверю.
17 dextermorgan777
 
18.05.15
13:26
Странно. На другом примере вывело итог меньше чем с отрицательными.
18 ИС-2
 
naïve
18.05.15
13:52
(16) что-то смущает что, то используется агрегат сумма, то не используется
19 dextermorgan777
 
18.05.15
14:59
(18) ну да, сейчас с обеда пришел и сам по другому взглянул. Дадут доступ к серверу, перепишу и гляну еще раз.
20 Basilio
 
18.05.15
15:30
(16) ЕстьNULL(Сумма(Сальдо),0) - здесь косяк. Если у тебя в одной из агрегируемых значений будет NULL то и вся сумма 0.
вынеси сумму за естьNULL: Сумма(ЕстьNULL(Сальдо,0))
21 dextermorgan777
 
18.05.15
15:51
(20) та же сумма осталась.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший