Проблема с Db-cross Tab

отредактировано October 2010 Раздел: FastReport 4.0
Проблема следующего характера: на странице есть 3 мастер даты, каждая со своим cross-tab-ом (пример одного на скрине вложенного файла), везде свои значения, все строится и отображается нормально. Нужно внизу страницы добавить строку "Итого", чтобы суммировались значения из Grand total каждого Cross-tab-а. Как это сделать? При попытке выдает сумму только последних столбцов каждого из кросс-табов. :)

Комментарии

  • gpigpi
    отредактировано 11:30
    Попробуйте накапливать итоговые значения кроссов в переменных в событиии кросса OnPrintCell
    procedure Cross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
    begin
        if Cross1.IsGrandTotalRow(RowIndex) then ShowMessage(Value);                                                                             
    end;
    
    а затем выводите суму строк всех кроссов на отдельном бэнде
  • отредактировано October 2010
    if Cross1.IsGrandTotalRow(RowIndex) then ShowMessage(Value);
    

    Простите, непонятен смысл этой части кода. Смысл с того, что показывает каждое отдельное значение итоговой строки таблицы в новом окне при построении отчета и каждое надо подтвердить нажатием Ентер? Хотя сумму все равно не считает. Возможно я в функции SUM что-то не то прописываю. Какой примерный текст должен быть при подсчете сумм строк всех кроссов (хотя бы одного кросса)?

    если можно, то подробнее, пожалуйста, а то я с кодам/программированием дружу только поверхностно.

    Заранее спасибо
  • gpigpi
    отредактировано 11:30
    Для подсчёта итогов по трём столбцам:
    var Sum0, Sum1, Sum2: extended;                                                                  
    procedure Cross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
    begin
         if Cross1.IsGrandTotalRow(RowIndex) then
         case ColumnIndex of
          0: Sum0 := Sum0 + Value;
          1: Sum1 := Sum1 + Value;
          2: Sum2 := Sum2 + Value;
         end;                
    
    end;
    
    procedure Cross2OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
    begin
         if Cross2.IsGrandTotalRow(RowIndex) then
         case ColumnIndex of
          0: Sum0 := Sum0 + Value;
          1: Sum1 := Sum1 + Value;
          2: Sum2 := Sum2 + Value;
         end;  
    end;
    
    begin
          Sum0 := 0;
          Sum1 := 0;
          Sum2 := 0;  
    end.
    
  • отредактировано 11:30
    gpi, огромное спасибо за предоставленный код и ответы, немного изменив его добился требуемого результата. Все работает.
  • отредактировано November 2010
    Подскажите еще, пожалуйста:
    1. Возможно ли в кросстабе вставить пустые колонки? Например, у меня кросс рассчитанный на 1 год, столбцы - месяца, строки - сотрудники, выполнявшие определенные объем работ. На пересечении столбец/строка сумма объемов работ за месяц. Так вот, если в одном (или нескольких месяцах), не было выполнено никаких объемов работ, т.е должны быть 0, возможно чтобы этот столбец вставлялся пустым и в итоге внизу был написан этот 0?
    2. Как в коде обратится непосредственно к столбику Grand Total, имеет ли он какое-то фиксированное значение, чтобы данные брались именно оттуда? Т.к я не знаю заранее каким именно он будет по счету (код предоставленный выше не подходит в этом случае), зависит от данных, которые берутся из Query.
  • отредактировано 11:30
    неужели никто не знает ответов на вопросы? :)

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

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