Имеется таблица вида:
| время | минимальное | максимальное | максимальное-минимальное |
| 12:00 | 50 | 150 | 100 |
4 столбец содержит выражение {(double)Данные.Максимальное - (double)Данные.Минимальное} Как просуммировать 4 столбец и вывести как итог на каждой странице и в конце отчета?
Можно обойтись без рассчитываемой колонки, просто в ячейке итога вписать сумму для разности двух колонок, например:
{SumD(DataДанные, (Данные.Температура - Данные.Уровень))}
sakhref, выделите ячейку в бэнде "Данные" (которая отвечает за вывод минимального значения). Нажмите на верхней панели кнопку "Условия". Далее "Добавить условие -> Условное выделение". И задайте следующие параметры выделения: Значение - > Числовой -> Данные.Минимальное -> равно -> 0, флажок "Присвоить выражение" и выражение Previous(Данные,"Максимальное") . Теперь вместо нулей в колонке "Минимальное" будет отображаться предыдущее максимальное значение.
Во вложении пример для другого отчета, но суть та же.
Сделал как вы написали и еще в ячейку разности сделал условие с присвоением выражения Данные.Максимальное - Previous(Данные,"Максимальное")
считает правильно(за исключением, когда в первом интервале 0, а появляются они из-за отсутствия предыдущих значений), только теперь итог считается не верно, так как он суммирует значения независимо от условий.
{SumD(DataДанные, (Данные.Температура - Данные.Уровень))} Подскажите какое условие добавить или выражение изменить.
В таком случае проще всего проверять условия через свой код. Т.е. удалить Условное выделение с присвоением значения, которое Вы добавили ранее. Затем:
- переходим на вкладку "Словарь" и в разделе "Переменные" создаём новую переменную с типом Double и значением "0". Назовём её vrTotal;
- в бэнде "Данные" на странице отчета выделяем ячейку по которой нам нужно посчитать итог (у Вас это ячейка с минимальным значением "Данные.Минимальное");
- на панели в правой части Редактора отчетов переходим на вкладку "Свойства" и нажимаем кнопку "События" (кнопка с иконкой молнии);
- на событие "Взять значение" назначаем следующий код:
/* если текущее значение равно 0, то подменяем его предыдущим максимальным */
if (Round(double.Parse(e.Value)) == 0)
if (!PreviousIsNull(Данные, "Максимальное"))
e.Value = Previous(Данные, "Максимальное").ToString();
/* прибавляем значение в переменную vrTotal */
vrTotal += double.Parse(e.Value);
Теперь при построении отчета в переменную vrTotal будут просуммированы все значения по колонке "Данные.Минимальное" c учетом условия подмены 0. Значение переменной vrTotal можно вынести в любое место отчета, например в итог отчета. Применять функции вычисления итогов (как SumD и др.) не требуется.
Аналогично можно подсчитать любые итоги с учетом условий. Т.е. условия и подмена значений переносятся в код. Расчет суммы также делается в коде и суммируются значения уже после выполнения условий.