Футер в разрыве данных

отредактировано 13:19 Раздел: FastReport 4.0
Доброго дня! Возникла такая интересная проблема:
Есть 2 датасета связанных мастер-детайл. Соответсвенно в отчета 2 бенда, для мастера и для детайл. Для мастера вставлен GroupHeader у которого указано каждый раз начинать с новой страницы. Таким образом решается задача что записи детайл для каджого мастера начинаются с новой страницы. Собственно вопрос в том, что надо вставить некий футер, который будет выводиться только в том случае, если для одного мастера не умещаются все данные на одной странице, а переходят на следующую. Но если данные детайл для мастера заканчиваются на странице, в ее конце этого футера быть не должно. Пример:
---- Страница 1
  [Мастер1]
    -- детейл (Мастер1) 1
    -- детайл (Мастер1) 2
    .....
    -- детайл (Мастер1) N
----- Страница 2
  [Мастер 2]
    -- детейл (Мастер2) 1
    -- детайл (Мастер2) 2
    .....
    -- детайл (Мастер2) M
  [тот самый нужный футер]
----- Страница 3
   -- детайл (Мастер2) M+1
   -- детайл (Мастер2) M+2
   .... 
   -- детайл (Мастер2) M+N

ПРичем обычный PageFooter уже есть и используется на каждой странице.

Комментарии

  • отредактировано 13:19
    Создайте MasterData3.
    DataSet = null
    RowCount = 1.
    Stretched = true.
    Туда же добавьте Memo_MasterData3

    Для этого датасета создайте GroupHeader3 и GroupFooter3 (Height=0)

    В обработчике GroupHeader2OnAfterCalcHeight напишите строчку
    MasterData3.RowCount :=Round(abs((Engine.FreeSpace - 20) div Memo_MasterData3.Height));
    (лучше не использовать MasterData3.Height, т.к. эта высота будет различной).

    Эта практика подходит для одинакового размера Memo_MasterData3. Для разного размера - данный способ не подойдёт, т.к. невозможно точно высчитать RowCount и придётся рисовать всё содержимое MasterData3 вручную (где-то в руководстве программиста есть раздел посвящённый прорисовке отчёта вручную).
  • отредактировано 13:19
    Хм ... не очень понял. А может быть не правильно написал я изначально.
    В том блоке, который у меня как пример, под [Мастер1] и [Мастер2] я имел ввиду записи одного бэнда. То есть как отчет формируется, а не как в дизайне.
    А вот Engine.FreeSpace - это сколько сводобного места осталось на странице текущей?
  • отредактировано 13:19
    написал:
    А вот Engine.FreeSpace - это сколько сводобного места осталось на странице текущей?
    Совершенно верно.
    Если проблема разобраться - пришлите шаблон вашего отчёта, гляну структуру.
  • отредактировано 13:19
    Nightmareterrible написал: »
    Совершенно верно.
    Если проблема разобраться - пришлите шаблон вашего отчёта, гляну структуру.
    Спасибо! Попробую сам, если не получится тогда обращусь. Но уже после каникул новогодних. Там структура данных сложная довольно. Надо будет съэмитировать ее, в немного упрощенном виде.
  • отредактировано 13:19
    Вообщем победил. Если кому интересно - сделаю пример и распишу что там и как и почему получилось.

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

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