Работа с Dbcross

отредактировано 06:20 Раздел: FastReport 4.0
Добрый вечер.
Изначально проблема была в следующем:
есть два связанных набора данных в отчете (абоненты и начисленные суммы). На Форме отчете размещаю Masterdata и связываю его с первым набором данных (абоненты), DetailData и связываю его со вторым набором (начисления), а на него DbCross-tab. Все более-менее нормально пока ширина перекрестника не превышает ширину листа. в этом случае информация о следующем абоненте (данные из Masterdata) идёт сразу под перекрестником, а продолжение перекрестника появляется только на следующей странице.
Сделал проще:
разместил на форме Masterdata, привязал к набору данных (начисления), положил на бэнд DbCross-tab. Добавил на форму бэнд "Подвал отчета". Если ширина перекрестника превышает ширину страницы, то его продолжение появится на следующей странице, но подвал отчета опять появляется сразу после первой части перекрестника.
То есть проблема заключается в том, что следующий бэнд выводится не за всем перекрестником, а только сразу за первой частью.

Комментарии

  • отредактировано 06:20
    Здравствуйте,

    Это совершенно нормальное поведение.
    Все горизонтальные бэнды выводятся в горизонтальной плоскости и конец данных для них характеризуется высотой.
    Т.е. независимо от кол-ва страниц сгенерированных кросс таблицей когда она расширяется в ширину, для горизонтальных бендов последняя страница будет та, на которой закончился вывод последней части кросс таблицы при расширении в высоту или последнего бэнда(т.е. последней горизонтальной строки).

    Можно сделать так :
    - добавить вторую страницу в отчет и установить св-во PrintOnPreviousPage в true.
    - переместить ReportSummary на новую страницу.
    - в OnAfterPrint мастер бэнда (на котором расположен кросс) сохранить текущую координату Y движка и свободное место на странице.
    - в OnAfterCalcHeight бэнда ReportSummary проверять свободное место для бэнда которое сохранили в OnAfterPrint, если бэнд помещается выводить его с корректировкой координаты Y(которую так же сохранили в OnAfterPrint) иначе выводить бэнд на новой странице.

    Корректировка координаты нужна, т.к. при расширении кросса в ширину движок не сохраняет ни свободное пространство для этой страницы, ни ее координаты.

    Скрипт:
    var
      PageFreeSpace: Extended;
      CurY: Extended;         
                                  
    procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
    begin
      PageFreeSpace := Engine.FreeSpace;
      CurY := Engine.CurY;                               
    end;
    
    procedure ReportSummary1OnAfterCalcHeight(Sender: TfrxComponent);
    begin
      if ReportSummary1.Height > PageFreeSpace then
        Engine.NewPage
      else
        Engine.CurY := CurY;                                                                                             
    end;
    

    А так же приложил пример отчета(открывается из MainDemo).
  • отредактировано 06:20
    Спасибо большое)) буду пробовать.

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

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