Штатный SUM и NULL поле

vitaly_lvitaly_l Винница, Украина
отредактировано 16:10 Раздел: FastReport 3.0
FastReport 3.22
У отчета EngineOptions ConvertNulls - false.

В таблице имеется поля CATEGORY (integer) и PERIOD_VAL (double)

В отчете, в бенде GroupFooter идет суммирование по категории с использованием полученной суммы в моей ф-ции:

Общее время по категории , (чч:мм:cc)
[Hours(SUM(<SysArc."PERIOD_VAL">,MasterData))]

Моя ф-ция Hours преобразует double в строку времени типа "12:30:59"

Передача подсчитанного агрегатной ф-цией SUM значения происходит в
событии отчета OnUserFunction:

MyReportUserFunction( const AnsiString MethodName, Variant &Params)
{
if(MethodName == "HOURS")
{
Variant Value = Params.GetElement(0);
if(Value.IsNull() || Value.IsEmpty())
return "Нет данных"; // при NULL значениях сюда не заходит. А надо!
else
{
double PeriodVal = Value;
return HoursToTimeStr(PeriodVal, true);
}
}
}
Все работает хорошо, если значения поле PERIOD_VAL не NULL. Но если NULL,
то моей ф-ции Hours передается 0. Т.е. Params.GetElement(0) не пустой.
Как узнать что SUM вернул NULL?
Заменить штатный SUM на свой? Или есть какой-то способ?

Комментарии

  • vitaly_lvitaly_l Винница, Украина
    отредактировано 16:10
    vitaly_l написал:
    MyReportUserFunction( const AnsiString MethodName, Variant &Params)
    {
    if(MethodName == "HOURS")
      {
      Variant Value = Params.GetElement(0);
      if(Value.IsNull() || Value.IsEmpty())
        return "Нет данных"; // при NULL значениях сюда не заходит. А надо! 
      else
        {
          double PeriodVal = Value;
          return HoursToTimeStr(PeriodVal, true);
        }
      }
    }
    Все заработало! А все из-за незнания Variant
    Вместо
    if(Value.IsNull() || Value.IsEmpty())
    Поставил
    if(Value == NULL)
    Теперь на NULL значениях пишет "нет данных" как того хотелось.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.