растягивание Subreport
Имеется отчёт вида:
У SubReport установлено свойство "Печать на бэнде" (PrintOnParent) в true. Проблема в том, что если те поля, которые идут после SubReport, растягиваются на большую высоту, нежели сам сабрепорт (или те поля, которые идут перед ним), то высота сабрепорта уже не пересчитывается и он не растягивается так, как нужно.
Пример:
Как заствить SubReport растягиваться на всю высоту MasterData?
У SubReport установлено свойство "Печать на бэнде" (PrintOnParent) в true. Проблема в том, что если те поля, которые идут после SubReport, растягиваются на большую высоту, нежели сам сабрепорт (или те поля, которые идут перед ним), то высота сабрепорта уже не пересчитывается и он не растягивается так, как нужно.
Пример:
Как заствить SubReport растягиваться на всю высоту MasterData?
Комментарии
Cоздаю 2 массива (условно a и и переменные i, RowCount. Для MasterData6 кинул Child-бэнд и сделал ему высоту 0.
Делаю отчёт двухпроходным.
На событии OnBeforePrint для Page устанавливаю i и RowCount в 0;
На событии OnAfterCalcHeight для MasterData6 прописываю код:
На событии OnBeforePrint для Child-бэнда прописываю код:
На событии OnBeforePrint для MasterData, который лежит на SubReport, прописываю код:
Для всех Memo, лежащих на MasterData из SubReport прописываю код:
То есть по сути на первом проходе отчёта запоминаю общую высоту и количество строк в SubReport, а на втором проходе каждой строке отчёта присваиваю высоту, равную общая/кол-во строк.
Если кто-то предложит более красивое решение, буду признателен)
Может кто-то подробнее объяснить или предложить "более красивое решение"
Эврика. См. первую картинку в посте. На MasterData6 поверх Subreport1 ложим пустые Memo по количеству и ширине повторяющие колонки Subreport1. Фреймы этих Memo будут имитировать вертикальные разделители полей Subreport'а. А также имитировать нижнюю границу Subreport'а (это нужно для последней строки данных MasterData6). Кто ещё не понял общий замысел - погнали дальше. Устанавливаем свойство новым пустым Memo StretchMode=MaxHeight. Остальные объекты в MasterData6 также должны иметь StretchMode=MaxHeight. У самого Subreport'а устанавливаем PrintOnParent=True, и каждому Memo убираем нижнюю границу. А впрочем, можно убрать и боковые. (StretchMode у объектов Subreport1 регулирует только их высоту внутри одной строки Subreport, поэтому отрегулируйте так, чтобы данные показывались без "обрезок"). Ну в принципе и всё. При печати многострочного Subreport'а верхняя граница у них собственная, нижняя граница - это верхняя граница следующей строки. Нижняя граница последней строки Subreport'а - это верхняя граница следующего Subreport'а (со следующей строки MasterData6), и она же - нижняя граница пустого Memo с MasterData6 (крайне необходима для самой последней строки самого последнего Subreport'а). Таким образом, объекты в Subreport'е могут быть вообще разной высоты, их нижнюю границу очерчивают другие объекты. А вертикальные границы перекрываются границами пустых Memo с родительского бенда MasterData6.