Повторная печать страницы по условию

отредактировано 16:32 Раздел: FastReport 3.0
Есть ли возможность повторной генерации (либо сразу печати) страницы по условию.
Т.е. изначально формируется, к примеру 5 страниц. Как сделать так, чтобы в зависимости от условия генерировалось 2 шт ПЕРВОЙ страницы, 6шт Второй и т.д.. Либо при печати автоматом печаталось нужное кол-во каждой из страниц???

Комментарии

  • отредактировано 16:32
    У страницы есть св-во Dataset, ему можно присвоить датасет с нужным числом записей. Страница будет повторена N раз.
  • отредактировано 16:32
    ДатаСет уже присвоен, на его основе и строится отчет. Вот и нужно уже некоторые записи в этом ДС дублировать.
    Может это можно с помощью SQL сгенерировать? СУБД FB 1.0
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 16:32
    RESEt написал:
    ДатаСет уже присвоен, на его основе и строится отчет. Вот и нужно уже некоторые записи в этом ДС дублировать.
    Может это можно с помощью SQL сгенерировать? СУБД FB 1.0
    1) На главной странице отчета размещаете бэнд MasterData1, к которому привязывате DataSet.
    2) На этот MasterData1 помещаете SubReport;
    3) На SubReport поместите MasterData2 с мемками для данных вашего датасета. Для MasterData2 датасет задавать НЕ НАДО.
    4) В обработчике OnBeforePrint для MasterData1 в зависимости от данных задаете нужное количество строк для MasterData2.

    Пример:
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
      if <line#> mod 2= 0 then
        MasterData2.RowCount := 5
      else
        MasterData2.RowCount := 10;
    end;
    
  • отредактировано 16:32
    Спасибо за ответ. Попробую приспообить.
    Но проблема в том, что куждая запись выводится на отдельной стринице разменом 10*10см (для принтера этикеток).
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 16:32
    RESEt написал:
    Спасибо за ответ. Попробую приспообить.
    Но проблема в том, что куждая запись выводится на отдельной стринице разменом 10*10см (для принтера этикеток).
    Для MasterData2 в вышеприведенном мной примере ставите "Формировать новую страницу" (StartNewPage=true), задаете нужный формат бумаги для страниц и все. Какие здесь проблемы?
  • отредактировано 16:32
    Проблемы в нехватке опыта. Для этого у меня есть такие, как Вы!
    Спасибо!!!
  • gpigpi
    отредактировано 16:32
    А я сделал так:
    в проект добавил frxUserDataSet1
    frxUserDataSet1.RangeEnd:=reCount
    frxUserDataSet1.RangeEndCount:=2
    в отчёте для свойств нужной страницы задал Page.Dataset:=frxUserDataSet1, предварительно добавив его к данным отчёта
  • отредактировано 16:32
    Оказалось гораздо проще все!
    Завести счетчик, проверять по событию количество копий, и делать DataSet.Prior.

    Я почему-то думал, что курсор однонаправленный, и перемещение возможно только вперед...
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 16:32
    RESEt написал:
    Оказалось гораздо проще все!
    Завести счетчик, проверять по событию количество копий, и делать DataSet.Prior.

    Я почему-то думал, что курсор однонаправленный, и перемещение возможно только вперед...
    Вам выбирать конечно, но если есть Master-Detail связка датасетов, то при таком подходе будут выполняться лишние запросы к БД.

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

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