FrreSpace and NewPage

отредактировано 14:40 Раздел: FreeReport
Народ, убиваю уже третий день. Да как же все таки сделать перенос бэнда в Free Report 2.33 на другую страницу при небольшом оставшемся месте на странице. Уже весь инет перелапатил. Код типа:
If FreeSpace<500 then NewPage;
не катит, ну просто этот дол...й fast ругается и все тут.
Чтоб я еще на нем отчеты писал...
;)

Комментарии

  • отредактировано 14:40
    Абсолютно та же проблема.
    Причем, строка скрипта взята из справки!

    Хотелось, бы услышать человеческий ответ разработчиков.
    Хотя, похоже, шансов нет...

    Чуть бы побольше активности поддержки на форуме...
    А ведь по коммерческим версиям ответы не быстрее.
    Также висят вопросы в воздухе годами...
    Деньги не супер, однако где гарантия, что Вы поможете?
    Активацию на мой аккаунт прислали всего-то через полгода.
    Ну не хочу я десять репортостроителей изучать!
    Похоже придется...
    А, все-равно никто не читает.
  • отредактировано September 2008
    Требовалось исключить отрыв РепортСуммари с картинкой (печать) от строк с данными.
    Частично проблему решил так.

    Вместо NewPage заставляю одно из полей увеличить свою высоту. ДатаБэнд и поле должны быть растягиваемые.

    Поскольку простой вариант ДатаБэнд.Height=xxx, а также Memo26.Height=xxx (одно из полей датабэнда) не удовлетворили, добавил пустое поле Memo27, сделал его очень узким, невидимым, растягиваемым с переносом по словам, и в цикле добавлял нужное число строк (букв).

    А разработчики сюда не заходят.
    :)
  • отредактировано 14:40
    Да уж, столько лет прошло :) Даже не ожидал получить сообщение в этой теме. Спасибо Маркетолог за решение проблемы, хоть и частичное.

    Это уж точно, что разработчикам на проблемы пользователей откровенно наср..ь!!!

    Не помню уже как, но проблему переноса я как то решил, скорее всего договорился с заказчиком о другом варианте вывода отчета.

    С программированием я уже завязал и тем более с этим генератором отчетов.

    Желаю всем удачи!
  • отредактировано 14:40
    Engine.NewPage;
  • отредактировано 14:40
    Я решил эту задачу не так, хотя тоже черз попеньку:

    отчет - оборотка по контрагентам, в подвале отчета - суммы по всем строкам, подвал - Band4
    procedure TfrmCustomerBalans.frReportBeginBand(Band: TfrBand);
    var
      FooterHeight: integer;
      v: TfrView;
    begin
      if (Band.Typ=btMasterData) then
      begin
        if Balans.RecNo=Balans.RecordCount then
        begin
          v:=frReport.FindObject('Band4');
          if Assigned(v)
            then FooterHeight:=v.dy
            else FooterHeight:=180;
    
          if (CurPage.CurBottomY-CurPage.CurY)<FooterHeight then
          begin
            Band.ForceNewPage:=true;
          end;
        end;
      end;
    end;
    

    Этот код переносит последнюю строку отчета на следующую страницу, если на странице места меньше, чем требуется для вывода подвала отчета.
    Единственный ньюанс: если отчет строится не по локальным датасетам, если после открытия датасета фактический RecordCount неизвестен точно, придется сделать FetchAll... я это делаю в OnAfterOpen
    Код взят из реально работающего проекта
  • отредактировано May 2010
    Обнаружилась маленькая неточность - ниже так, как должно быть
    procedure TfrmCustomerBalans.frReportBeginBand(Band: TfrBand);
    var
      FooterHeight: integer;
      v: TfrView;
    begin
      if (Band.Typ=btMasterData) then
      begin
        // Проверяем последняя ли строка отчета
        if Balans.RecNo=Balans.RecordCount then
        begin
          // Ищем бенд, в котором выводятся итоги
          v:=frReport.FindObject('Band4');
          // Получаем высоту итогового бенда
          if Assigned(v)
            then FooterHeight:=v.dy
            else FooterHeight:=180;
    
          // Проверяем хватает ли места на странице для вывода итогового бенда и последней строки отчета
          if (CurPage.CurBottomY-CurPage.CurY)<(FooterHeight+Band.dx)
          begin
            Band.ForceNewPage:=true;
          end;
        end;
      end;
    end;
    

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

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