Условная промежуточная сумма в Crystal Reports

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

Это логика:

При изменении группы группы

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

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

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

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


person Lill Lansey    schedule 02.11.2010    source источник
comment
Это не полностью отвечает на ваш вопрос (я вас не совсем понимаю), но да, вы можете указать условие для вашей промежуточной суммы. В меню Изменить поле промежуточного результата поэкспериментируйте с разделом Оценить.   -  person PowerUser    schedule 02.11.2010
comment
Я понимаю, что задал вопрос неправильно. Я хотел бы сделать промежуточный итог по формуле, которая рассчитывается при смене группы. Когда я нажимаю «Добавить промежуточную сумму», эта формула не отображается в списке «Доступные таблицы и поля».   -  person Lill Lansey    schedule 02.11.2010
comment
Я делаю промежуточный итог под названием GroupRunningTotal значения поля db BillableHours. При смене группы я сравниваю GroupRunningTotal с полем db для этой группы MaxHours и отображаю результат MAxHours - GroupRunningTotal на уровне группы. Вы имеете в виду, что хотите сделать это, но не можете, или что вы делаете это и хотите сделать что-то еще? Если второе, что вы на самом деле хотите делать?   -  person    schedule 03.11.2010
comment
@Отметка . В настоящее время в разделе заголовка группы я показываю разницу между MaxHours (константа, зависящая от группы) и ActualHours. Это будет положительно или отрицательно. В конце отчета я хочу показать две суммы - количество сверхурочных и количество неполных часов, как показано на уровне группы. Т.е. group1: 3; группа2: -2; группа3: 1. В нижнем колонтитуле отчета я хочу показать больше: 4, меньше: -2. Промежуточный итог на уровне поля просто покажет: Больше: 2   -  person Lill Lansey    schedule 03.11.2010


Ответы (2)


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

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

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

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

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

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

В качестве альтернативы вы можете:

  1. Создайте собственную формулу «If {Tbl1}. {Amount}‹ 0 then {Tbl1}. {Amount} else 0 »и на ее основе сделайте промежуточную сумму.

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

person PowerUser    schedule 02.11.2010