Условный промежуточный итог в Crystal Reports - PullRequest
2 голосов
/ 02 ноября 2010

Используя VS 2008 Crystal Reports, я хотел бы получить промежуточную сумму по формуле, которая рассчитывается при смене группы. Когда я нажимаю добавить промежуточную сумму, эта формула не отображается в списке «Доступные таблицы и поля».

Это логика:

Группа изменений группы

if CalculatedValue > 0 then
    ReportRunningTotal1 += CalculatedValue  
else
    ReportRunningTotal2 += CalculatedValue  

Можно ли указать условие в промежуточной сумме? Если нет, как еще я могу это сделать?

Дополнительная информация: я делаю промежуточный итог, называемый GroupRunningTotal значения поля db BillableHours. При смене группы я сравниваю GroupRunningTotal с полем дБ для этой группы MaxHours и отображаю результат MaxHours - GroupRunningTotal на уровне группы.

Уместно сегодня - Думайте об этом как о коллегии выборщиков - человек, победивший на выборах, зависит не от общего числа голосов, а от количества голосов в коллегии выборщиков.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2010

Я интерпретирую ваш вопрос так, что вы хотите сложить все отрицательные значения в одну промежуточную сумму ( RT_Neg ) и все положительные значения в другой ( RT_Pos ) , Как насчет этого:

  1. Сделайте RT_Neg промежуточный итог. В поле Поле для суммирования , сложите сумму {Tbl1}. {Amount}. При оценке введите "{Tbl1}. {Amount} <0" в качестве пользовательской формулы. Никогда не сбрасывать. </p>

  2. Сделайте RT_Pos промежуточный итог. Под Поле для суммирования , сложите сумму {Tbl1}. {Amount}. При оценке введите «{Tbl1}. {Amount}> 0» в качестве пользовательской формулы. Никогда не сбрасывать.

  3. Вставьте оба промежуточных итога в нижний колонтитул группы (если вы поместите их в верхний колонтитул, они могут не суммироваться правильно)

Кроме того, вы можете:

  1. Создайте пользовательскую формулу «If {Tbl1}. {Amount} <0 then {Tbl1}. {Amount} else 0» и сделайте на основе этого промежуточный итог. </li>

Я думаю, что один из этих двух вариантов приведет вас к вашей цели.

1 голос
/ 02 ноября 2010

Скорее всего, вы не можете использовать одно поле RT как условие для другого поля RT. Вы можете использовать формулы, расположенные в нижнем колонтитуле группы и оцененные как whileprintingrecords (); в этих формулах вы можете присваивать / суммировать некоторые переменные и отображать эти переменные в конце отчета. Примерно так же (только общая идея, вам также нужны инициализация и отображение процедур):

numbervar rtcurrent := sum({somefield}, {groupfield});
numbervar rtplus;
numbervar rtminus;
if (rtcurrent > 0)
then rtplus := rtplus + rtcurrent
else rtminus := rtminus + rtcurrent;
...