Разные page footer для разных страниц
Столкнулся с проблемой и не могу придумать как ее решить.
В общем делаю отчет (спецификацию). На первой странице штамп должен быть одного вида, на второй и последующих - другого (меньше ячеек).
Так вот не могу придумать, как реализовать.
Несколько страниц делать вроде как не подходит, т.к. как такового титульного листа нет. Обычный master-detaildata отчет. Есть band overley для создания основной рамки линиями, есть мастер header, master data, page header, page footer. Все.
С разными шапками для первой и последующих страниц разобрался (выводится на первой master header без page header, на остальных - только page header), а вот с разными подвалами никак
Delphi - 6.0
FR - 2.50
P.S. Программно че-та не прет создавать page footer, хотелось бы дизайнером иметь возможность править в рантайме такие вещи.
В общем делаю отчет (спецификацию). На первой странице штамп должен быть одного вида, на второй и последующих - другого (меньше ячеек).
Так вот не могу придумать, как реализовать.
Несколько страниц делать вроде как не подходит, т.к. как такового титульного листа нет. Обычный master-detaildata отчет. Есть band overley для создания основной рамки линиями, есть мастер header, master data, page header, page footer. Все.
С разными шапками для первой и последующих страниц разобрался (выводится на первой master header без page header, на остальных - только page header), а вот с разными подвалами никак
Delphi - 6.0
FR - 2.50
P.S. Программно че-та не прет создавать page footer, хотелось бы дизайнером иметь возможность править в рантайме такие вещи.
Комментарии
на одном 1 тип футера
на 2 - второй
pagefooter.child -> child1
child1.child -> child2
проперти showchildifinvisible = true
pagefooter.visible := false
В onbeforeprint pagefooter
child1.visible := [page#] = 1;
child1.visible := [page#] <> 1;
Не получается
pagefooter.child -> child1
Где это прописать??? У PageFooter нету свойства childband и showchildifinvisible, а когда пишу в программе непосредственно PageFooter1.Child:=Child1 - компилятор ругается
Вроде как понимаю, что писать надо в скрипте непосредственно в дизайнере, но не до конца...
все остальное делалось в дизайнере
сорри что ввел в заблуждение...
сейчас ломаю голову - ничего не получается....
единственный вариант, который заработал... поместить оба варианта футера на один бэнд... а потом показывать нужное....
но это муть
Буду размещать оба варианта на page footer и в onbeforeprint footer'а прописывать видимость нужных полей...
Прописал у pagefooter в onbeforeprint, какие элементы отображать на первой, какие - на остальных страницах
Возникает проблема Как теперь у pagefooter на первой странице сделать высоту 198 пикселей, а на остальных - 108.
Прописываю у страницы в onbeforeprint
if ([PAGE#]>1) then pagefooter1.height:=108;
Пробовал и у pagefooter в onbeforeprint то же самое прописывать, но не хочет обрабатывать FastReport Может есть какая заморочка? Отчет двухпроходный...
заморочек у фаста много, но ругать его я не буду... слишком много вкусного...
пока проверял варианты, пробовал использовать ColumnFooter вместо PageFooter
работает не совсем так... выводится в конце каждой страницы, но сразу за последней записи... pagefooter в конце страницы, но лепится не к записи а к концу листа
сейчас пришла мысль как его можно пристроить..
закинь его (ColumnFooter) в отчет
на него закинь штамп для первой страницы
в onbeforeprint
visible := [page#] = 1;
на pagefooter - второй штамп
выключаешь свойство "Печатать на первой странице"
получаешь следующее... на первой странице columnFooter со штампом 1
на остальных pagefooter со штампом 2
изменять высоту не надо
скритов минимум...
попробуй... авось что-то путное из этого выйдет
на OverleyBand выложил вариант штампа для первой страницы, включаю видимость объектов, как ранее было описано, только на первой странице.
PageFooter печатаю на второй и последующих страницах.
Теперь возникает такая проблемка: оверлей печатается нормально, но! объекты detaildata на него залазют.
Как ограничить область для detaildata, чтобы на первой странице они заканчивали формироваться, оставляя внизу пустое пространство размером примерно 200 пикселей, а на второй и последующих формировались до pagefooter.
В общем искусственно сказать, что область печати на первой странице обрезана снизу на 200 пикселей, а на остальных - до pagefooter...
Вроде даже понимаю, что через freespace и onbeforeprint у detaildata... Но не до конца.
Вот уж беда так беда
В FRDemo скрипт у MasterData в onberoprint
begin
i := i + 1;
BandHeight := Height;
if FinalPass then
if FreeSpace < BandHeights then
NewPage;
end
работает нормально (причем и компилировал в своем же дельфи).
Пишу у себя в отчете скрипт у MasterData в onbeforeptint
begin
if FinalPass then
if FreeSpace < 200 then
NewPage;
end
выдает ошибку: 'Could not convert variant of type (String) into type (Double)'.
Может чего подскажете???
Fr 2.52 с некоторыми фиксами описанными на форуме
попробуй вместо overlay использовать columnfooter со скриптом visible := [page#]=1;
полагаю это решит проблему со штампом на первой странице..
что касается скрипта... попробуй использовать [freespace]... авось поможет.. у фаста есть заморочки с форматом переменных
С проблемой несовместимости типов разобрался - оказывается FR при разборе скрипта обращается к ongetvalue, а там у меня для freespace возвращалось пустое значение... Вот и ругался.
Счас переделал, написал скрипт у мастердата на онбефорепринт
if (FinalPass) then
if ([PAGE#]=1) and (FreeSpace<200) then
NewPage;
Новая страница стала создаваться.
Но другая проблема блина возникла.
Когда создается пустая страница (через newPage) первая строка на новой странице получается хрен знает какая (должно браться значение из стрингрида, а он пихает Memo4 - названия memo-поля).
Т.е. у меня на мастердате в мемо4 написано [NAME], в мемо5 - [TYPE], в ongetvalue
для [NAME]
ParValue := SpecTable.Cells[2,frUserDataset1.RecNo+1];
для [TYPE]
ParValue := DictionarySQL.FieldByName('NAME').AsString;
и при создании новой страницы в мемо4 появляется надпись Memo4, а на мемо5 FR ругается - говорит - не знаю, чего такое 'TYPE' ('Переменная не опрделена: "TYPE"' дословно)
Чего делать? Подскажите! Замучился уже
Проблему с newPage так и не решил
Привязал к мастердата child'а высотой чуть меньше высоты штампа и только на первой сранице в конце вывожу этого чаилда. Тем самым в оверлее на первой странице штамп не перекрывается, а на остальных страницах оверлей чиститься, а штамп печатается за счет паджефутера.
Вот так
Всем спасибо за помощь.
Если будут какие-нить замечания и предложения - с вниманием прочитаю...