Проблема с Resetpagenumbers

vnrvnr
отредактировано September 2009 Раздел: FastReport 4.0
У GroupHeader установил ResetPageNumbers, в EngineOptions включил DoublePass. Вывожу в бэнде PageHeader переменные [Page]/[TotalPages] и всегда вижу сплошную нумерацию, сброса номеров страниц нет.

Структура отчета такая:

PageHeader
MasterData
GroupHeader
DetailData
GroupFooter
Footer

Ожидаю следующей реакции: каждый новый GroupHeader сбрасывает счетчик текущей страницы Page в 1. Что ждать от TotalPages - не знаю, если честно.

Помогите разобраться, плиз.

P.S. Попробовал насильно менять ее - никакой реакции:

procedure GroupHeaderOnBeforePrint(Sender: TfrxComponent);
begin
Set('Page', 1);
end;

Как сбрасывать счетчик страниц в моем случае? И как сделать так, чтобы TotalPages на каждой странице показывал именно кол-во страниц в диапазоне между сбросами в 1, а не кол-во всех страниц отчета?

Комментарии

  • gpigpi
    отредактировано 14:46
    У GroupHeader установите ещё и StartNewPage
  • vnrvnr
    отредактировано September 2009
    StartNewPage стоит у MasterData, т.к. он должен начинать страницу.
    Соответственно, установка StartNewPage для GroupHeader не начинает новую страницу, т.к. MasterData короткий по высоте и он уже начал новую страницу. Тем не менее, я его поставил - никакого влияния на проблему это не оказало - в отчете все-равно не сбрасываются страницы.

    Вообще, интересно, если у двух подряд идущих бэндов поставить StartNewPage, то они создадут 2 страницы или одну. У меня получается, что одну.

    ---
    А почему насильно из скрипта переменная Page не меняется? В документации написано, что можно менять любые переменные, в т.ч. и системные. Проверял в отладчике - до этого места доходит, но переменную не меняет.
  • vnrvnr
    отредактировано 14:46
    Господа, кто из официальной поддержки - помогите плиз. Если я решу все проблемы с вашим софтом, то официально куплю его до Нового Года.
    Если проблема будет нерешабельна, то я не знаю что делать - придется тратить время на поиски другого продукта. Я использую 1% от его возможностей и напоролся на такой баг.
  • gpigpi
    отредактировано 14:46
    написал:
    StartNewPage стоит у MasterData, т.к. он должен начинать страницу.
    Соответственно, установка StartNewPage для GroupHeader не начинает новую страницу, т.к. MasterData короткий по высоте и он уже начал новую страницу. Тем не менее, я его поставил - никакого влияния на проблему это не оказало - в отчете все-равно не сбрасываются страницы.
    Вообще, интересно, если у двух подряд идущих бэндов поставить StartNewPage, то они создадут 2 страницы или одну. У меня получается, что одну.
    Выложите тестовый проект или хотя бы шаблон отчёта (fr3) и сохранённые страницы превью (fp3)
  • vnrvnr
    отредактировано 14:46
    Версия дельфи: Embarcadero® Delphi® 2010 Version 14.0.3513.24210.
    Версия FastReport 4.7.182 из официального дистирибутива Дельфи, третий диск (партнерский софт).

    Проблемы описаны в самом отчете.
  • gpigpi
    отредактировано September 2009
    Закомментируйте
    procedure TForm103.MasterNext(Sender: TObject);
    var
      GH: TfrxGroupHeader;
    begin
      dsDetail.RangeEndCount := TMasterData(MasterData[dsMaster.RecNo]).DetailData.Count;
    
      {GH := TfrxGroupHeader(Report.FindObject('GroupHeader'));
      if Assigned(GH) then
        GH.Condition := IntToStr(dsMaster.RecNo);
    
      GH := TfrxGroupHeader(Report.FindObject('GroupHeader1'));
      if Assigned(GH) then
        GH.Condition := IntToStr(dsMaster.RecNo)}
    end;
    
    Изменённый шаблон в аттаче сообщения #9
  • vnrvnr
    отредактировано 14:46
    Не могу понять, в присланном отчете на момент его старта уже есть 2 датасета. А я ему даю еще 2, получается 4. При этом при старте он не пользуется моими датасетами, поэтому ругается:

    DataSet "D" does not exist
    DataSet "M" does not exist

    и не строит отчет.
    Report              := AReport;  // после выполнения этой строчки Report.DataSets.Count уже равен 2, а должен быть 0.
      Report.DataSets.Add(dsMaster);
      Report.DataSets.Add(dsDetail);
    

    В дизайнере отчета, в окне, вызываемом из меню Report/Data пусто. Все значения DataSet у разных компонентов "(Not assigned)".
    Откуда там 2 датасета и как их удалить?

    Поначалу я думал, что дело в моем коде - подгрузил свой отчет - проблемы нет, в нем Report.DataSets.Count=0 на момент старта.
  • gpigpi
    отредактировано September 2009
    Я выгружал шаблон из run-time дизайнера. В аттаче почищенный от датасетов шаблон
  • vnrvnr
    отредактировано 14:46
    Запускается. Но теперь содержимое Header печатается на каждой странице, а в моем варианте он печатался не ниже последней строки DetailData (иногда так получается, что на странице уже нет строк DetialData, но Header продолжает висеть, что абсурд). Я ради интереса повесил вот такой обработчик для Header:
    procedure Header1OnBeforePrint(Sender: TfrxComponent);
    begin
      Header1.Visible := <Line> < <COUNT(DetailData)>
    end;
    

    в надежде, что заголовок не будет печататься, если все строки DetailData уже выведены. В результате заголовок вообще никогда не виден. Какого типа Line и Count, я думал целочисленного?

    Я перечитал доку (Руководство пользователя), но видать я плохо понимаю философию построения отчета. В частности, я так и не понял, почему не сбрасывались номера в моем варианте.
  • gpigpi
    отредактировано 14:46
    написал:
    Но теперь содержимое Header печатается на каждой странице, а в моем варианте он печатался не ниже последней строки DetailData (иногда так получается, что на странице уже нет строк DetialData, но Header продолжает висеть, что абсурд).
    Тогда переместите содержимое Header на GroupHeader2 с Condition = True
    написал:
    Какого типа Line и Count, я думал целочисленного?
    Целочисленного. Но для заголовка данных <COUNT(DetailData)> вычисляться не будет
  • vnrvnr
    отредактировано 14:46
    Мда, работает! Отлично, до НГ мы завершим сам клиент и сбегаем в softkey за Вашей софтиной :)

    Но чтобы не дергать никого больше, не могли бы Вы ткнуть поточнее в статьи документации (DeveloperManual-ru.chm, FR4.6.ProgrammerManual-ru.chm, FR4.6.UserManual-ru.chm, FR4.HLP), где можно точно и однозначно почерпнуть информацию о:
    1. разнице между ожидаемым и реальным: редактор позволяет ставить компоненты почти "как хочешь", задавать их свойствам осмысленные значения, но результат получается далеко не такой, как можно было бы ожидать на основе формального изучения свойств;
    2. том, где и какие функции работают и не работают (встречное предложение - нельзя ли генерить ошибку, хотя бы в runtime для нерабочей функции);
    3. использовании вертиальных бендов. В другом отчете я много раз пытался его "привинтить", но, почитав форум просто понял, что лучше отказаться от идеи. Проблема таже - разница между ожидаемым и реальным.

    Предложения по совершенствованию:
    1. а нельзя ли завести просто "Band", не несущий никакой дополнительной семантики - ни заголовок, ни подвал, ни футер, ни дочерний, а просто бэнд, который можно поставить под каким-либо другим бэндом и от него "растить" дочерние бенды и т.д.;
    2. в редакторе очень бы помогло обозначение зон действия некоторых "волшебных" бендов, например:
    2a. GroupHeader...GroupFooter - обозначить пространство между ними (и с учетом вложенности тоже), например, на полях;
    2b. отношения "родитель - дочерний" бэнд. Сейчас только по свойствам можно это понять, но визуально было бы неплохо их "вкладывать" друг в друга или цепочку изображать стрелочками на полях;
    2c. область действия MasterData. Хорошо видно на моем отчете - ведь область действия моего MasterData не только прямоугольник с названием MasterData, но и то, что ниже (до следующего MasterData). А вот куда входит область выше MasterData - это вообще не понятно - текущему или предыдущему MasterData она принадлежит - хз;
    3. Очень не хватает поддержки прозрачности PNG, GIF и ICO для разукрашивания отчетов. Например, в одном отчете мне нужно было нарисовать стрелочку мыши над текстовым линком - никак. Вместо альфа-канала вокруг стрелки рисуется белый фон, который перкрывает сам текст. Пришлось отказаться.

    Вообще, прикольный движок отчетов, очень понравился, но уж больно неочевидно в нем все. Это сужает сферу применения для тех, кто не готов разбираться "до бита" в нем.
  • отредактировано May 2010
    Товарищи, добрый день.
    У меня проблемка немного проще: мне просто нужно сбросить счётчик страниц и начать его сначала в определённом месте документа. Подскажите, пожалуйста, как организовать.
    Заранее благодарен.

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

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