Проблема с SubReport

BenBen
отредактировано 03:46 Раздел: FastReport 2.xx VCL
Есть MasterData1 на нём есть Memo1- отображает какое-то поле из таблички Master. Так же на этом бэнде есть SubReport - он в свою очередь состоит из одного бэнда -MasterData2, на нём находятся поля из подчинённой таблички Details. Допустим SubReport внутри MasterData1 выводит несколько строк. Как растянуть Memo1 (находящийся на MasterData1) соответственно общей высоте SubReport-а?

Комментарии

  • sskssk
    отредактировано 03:46
    Хороший вопрос! Меня тоже это очень интересует, особенно в контексте с вертикальными линиями...
  • BenBen
    отредактировано 03:46
    Что я выяснил:
    Можно изменить высоту MasterData1 в событии OnEndBand если отчёт двухпроходный. А вот как вычислить высоту SubReport-а ?
    Пробовал складывать высоту Memo2, находящегося на SubRepor-е в том же событии OnEndBand (конечно в случаях, когда событие вызывается для MasterData2) и- ничего. Memo2 растягивается, я свойство Memo2.dy не меняется.
    Вообще в какой момент и как надо смотреть высоту Memo?

    Кину, пожалуй, этот вопрос отдельно...
  • sskssk
    отредактировано 03:46
    Ага, я тотже так пробовал. Но в том-то и дело, что размер мемки не меняется при ее растягивании.
  • BenBen
    отредактировано 03:46
    А вот и нет:-)
    В моём примере размер Memo1 (расположенного, как мы знаем, на MasterData1)
    Стал реальным (растянутым) в событии OnBeginBand для MasterData2, т.е. когда начали печататься строки SubReport-а, и снова стал обычным в событии OnEndBand для MasterData1.

    События происходят так:

    OnBeginBand для MasterData1
    OnBeginBand для MasterData2 \ повторяется столько раз сколько строк в
    OnEndBand для MasterData2 / Subreport-е
    OnEndBand для MasterData1

    а вот изменений размера мемок, лежащих на MasterData2 мне обнаружить не удалось :-(.
  • BenBen
    отредактировано 03:46
    Решил я свою задачку, только немного другим способом- без использования SubReport-а. Бэнд один - MasterData1 показывает по прежнему записи из таблицы Master, только теперь Master кроме своих данных (наименование, код) содержит так же и информацию из Details (тип модификации, например). У тех Memo, которые отображают наименование и код включено "Скрывать повторяющиеся", таким образом, наименование отображается только один раз- для первой модификации. Если нужна сетка, придётся её нарисовать самостоятельно, из объектов Line. Чтобы включать-выключать некоторые элементы сетки (верхнюю линию, например), а так же чтобы сделать правильную нумерацию (Line# здесь не подходит, будет считать все строки) написан скрипт :

    begin
    Memo10.Lines.Clear; <-мемка отображает порядковый номер записи
    if [qrLst."CD_M"]=cdm then begin
    Memo10.Lines.Add(' '); <-это то же наименование. не показываем ничего
    Line3.Visible:=false; <-верхняя гряница ячейки не нужна
    end
    else begin <- другое наименование
    cdm:=[qrLst."CD_M"];
    rnum:=rnum+1; <-нумеруем
    Memo10.Lines.Add([RNUM]);
    Line3.Visible:=True; <-отделяем линией от верней ячейки.
    end;
    end

    Скрипт принадлежит мемке, которая порядковый номер показывает.
    Переменные cdm и rnum должны уже существовать к началу работы скрипта. Их можно задать, скажем редакторе скрипта для MasterHeader например:
    cdm:=0;
    rnum:=0;

    Получилось как мне кажется не очень красиво, есть ограничения (нельзя расположить наименование по высоте по центру (своей группы модификаций), например, но, вобщем работает.

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

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