Работа с Dbcross
Добрый вечер.
Изначально проблема была в следующем:
есть два связанных набора данных в отчете (абоненты и начисленные суммы). На Форме отчете размещаю Masterdata и связываю его с первым набором данных (абоненты), DetailData и связываю его со вторым набором (начисления), а на него DbCross-tab. Все более-менее нормально пока ширина перекрестника не превышает ширину листа. в этом случае информация о следующем абоненте (данные из Masterdata) идёт сразу под перекрестником, а продолжение перекрестника появляется только на следующей странице.
Сделал проще:
разместил на форме Masterdata, привязал к набору данных (начисления), положил на бэнд DbCross-tab. Добавил на форму бэнд "Подвал отчета". Если ширина перекрестника превышает ширину страницы, то его продолжение появится на следующей странице, но подвал отчета опять появляется сразу после первой части перекрестника.
То есть проблема заключается в том, что следующий бэнд выводится не за всем перекрестником, а только сразу за первой частью.
Изначально проблема была в следующем:
есть два связанных набора данных в отчете (абоненты и начисленные суммы). На Форме отчете размещаю Masterdata и связываю его с первым набором данных (абоненты), DetailData и связываю его со вторым набором (начисления), а на него DbCross-tab. Все более-менее нормально пока ширина перекрестника не превышает ширину листа. в этом случае информация о следующем абоненте (данные из Masterdata) идёт сразу под перекрестником, а продолжение перекрестника появляется только на следующей странице.
Сделал проще:
разместил на форме Masterdata, привязал к набору данных (начисления), положил на бэнд DbCross-tab. Добавил на форму бэнд "Подвал отчета". Если ширина перекрестника превышает ширину страницы, то его продолжение появится на следующей странице, но подвал отчета опять появляется сразу после первой части перекрестника.
То есть проблема заключается в том, что следующий бэнд выводится не за всем перекрестником, а только сразу за первой частью.
Комментарии
Это совершенно нормальное поведение.
Все горизонтальные бэнды выводятся в горизонтальной плоскости и конец данных для них характеризуется высотой.
Т.е. независимо от кол-ва страниц сгенерированных кросс таблицей когда она расширяется в ширину, для горизонтальных бендов последняя страница будет та, на которой закончился вывод последней части кросс таблицы при расширении в высоту или последнего бэнда(т.е. последней горизонтальной строки).
Можно сделать так :
- добавить вторую страницу в отчет и установить св-во PrintOnPreviousPage в true.
- переместить ReportSummary на новую страницу.
- в OnAfterPrint мастер бэнда (на котором расположен кросс) сохранить текущую координату Y движка и свободное место на странице.
- в OnAfterCalcHeight бэнда ReportSummary проверять свободное место для бэнда которое сохранили в OnAfterPrint, если бэнд помещается выводить его с корректировкой координаты Y(которую так же сохранили в OnAfterPrint) иначе выводить бэнд на новой странице.
Корректировка координаты нужна, т.к. при расширении кросса в ширину движок не сохраняет ни свободное пространство для этой страницы, ни ее координаты.
Скрипт:
А так же приложил пример отчета(открывается из MainDemo).