LazReport
Модератор: Модераторы
Здравствуйте, нужна помощь, нужно изменить межстрочный интервал (LineSpacing) и отступы (GapY) в текстовом поле отчета (Memo), нутром чую что капать надо в сторону OnEnterRect, что то типа (View as TfrMemoView).LineSpacing := ххх; , но ничего не приходит в голову, а то что приходит не работает, да и до Gap-ов не добрался... В общем нужна помощь. Заранее спасибо.
P.S. Я так понимаю что в дизайнере этого не сделаешь, только из программы или я ошибаюсь?
P.S. Я так понимаю что в дизайнере этого не сделаешь, только из программы или я ошибаюсь?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Код: Выделить всё
procedure TForm1.frReport1EnterRect(Memo: TStringList; View: TfrView);
begin
if View.Name = 'Memo2' then
TfrMemoView(View).LineSpacing:=20;
end;
Насчёт GapX и GapY - это пока да, нет доступа.
Надо доделать будет.
Спасибо за ответ, но все равно как то не так межстрочный работает, в моем случае нужно было уменьшить меньше дефолтного (там кажется 2 стоит), а насчет GapY, сделал пока "костылем"
Хорошо бы конечно что бы "дробные"размеры шрифта и тех же интервалов, в fastreport-е это реализовано. Понимаю что тут чистый энтузиазм поэтому это не стоит расценивать как требование.
Код: Выделить всё
if pos('off_2',View.Name)>0 then
View.y:=-2;
Хорошо бы конечно что бы "дробные"размеры шрифта и тех же интервалов, в fastreport-е это реализовано. Понимаю что тут чистый энтузиазм поэтому это не стоит расценивать как требование.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Доступ к этим свойствам из дизайнера я сделал. Патчик вышлю Рейсу - он должен включить в исходники.
Насчёт дробных размеров - это можно, но переделок много.
Можешь сам попробовать. Если получится что-то хорошее - высылай.
Насчёт дробных размеров - это можно, но переделок много.
Можешь сам попробовать. Если получится что-то хорошее - высылай.
alexs писал(а):Доступ к этим свойствам из дизайнера я сделал. Патчик вышлю Рейсу - он должен включить в исходники.
Отлично будет!
alexs писал(а):Насчёт дробных размеров - это можно, но переделок много.
понимаю... насчет сам - попробую конечно, но не уверен в своих познаниях.
Добрый день.
Поделитесь пожалуйста примером, пытаюсь в отчете форматировать текст, т.е. в зависимости от значения поля поменять шрифт например на fsBold.
Спасибо.
Поделитесь пожалуйста примером, пытаюсь в отчете форматировать текст, т.е. в зависимости от значения поля поменять шрифт например на fsBold.
Спасибо.
В русской доке по FreeReport можно найти, как это делать через скрипт.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
Axi писал(а):Добрый день.
Поделитесь пожалуйста примером, пытаюсь в отчете форматировать текст, т.е. в зависимости от значения поля поменять шрифт например на fsBold.
Спасибо.
viewtopic.php?f=5&t=8093&start=75#p84944
Кстати, вчера целых часа три угробил на то, чтобы заставить работать скрипты в Lazreport.
Цель в общем - выделять цветом соответствующие строки в зависимости от ряда условий.
Условий у меня два. Методом перебора пришел к заключению, что работает только такая конструкция вложенных условных операторов IF:
несколько условных операторорв подряд не работают - работает только первый.
Последний else нужен для того, чтобы не менять цвет у строк, не подпадающих под условия (если не прописать, почему-то меняется на цвет из первого else.
В общем, может кому пригодится. Тройное вложение ифов по не пробовал)).
Добавлено спустя 27 минут 6 секунд:
Однако решив проблему со скриптами LazReport, у меня возникла другая, которую я должен решить. Пока сделал костыль, но вопрос принципиальный, т.к. в дальнейшем все равно нужна будет нормальная работа приложения.
Итак, есть две связанные таблицы, связь - один ко многим. Доступ ко второй таблице через компонент ZQuery, выборка с помощью SQL запроса и связанных полей таблиц.
При отображении в гридах все работает отлично.
При построении отчета - все не работает.
Делал по инструкции: в дизайне отчета один masterband с нужными полями из главной таблицы, второй detailband с полями из дочерней таблицы.
При отображении отчета записи главной таблицы все показываются нормально, но в detailband показываются ко всем записям главной таблицы только первая запись дочерней, и только одна, первая, хотя и к первой записи главной связано две записи дочерней.
такие пироги.
Помогите, пожалуйста, разобраться, как построить отчет с двумя связанными таблицами.
Кстати, в костыле, чтобы все нормально работало (записи дочерней таблицы я пока вставляю в memo с параметром путем перебора всех строк из дочерней таблицы) приходится использовать метод refresh дочерней таблицы при вызове GetValue отчета.
Цель в общем - выделять цветом соответствующие строки в зависимости от ряда условий.
Условий у меня два. Методом перебора пришел к заключению, что работает только такая конструкция вложенных условных операторов IF:
Код: Выделить всё
if [первое условие] then FontColor:=clRed
else if [второе условие] then FontColor:=clBlue
else FontColor:=clBlack;несколько условных операторорв подряд не работают - работает только первый.
Последний else нужен для того, чтобы не менять цвет у строк, не подпадающих под условия (если не прописать, почему-то меняется на цвет из первого else.
В общем, может кому пригодится. Тройное вложение ифов по не пробовал)).
Добавлено спустя 27 минут 6 секунд:
Однако решив проблему со скриптами LazReport, у меня возникла другая, которую я должен решить. Пока сделал костыль, но вопрос принципиальный, т.к. в дальнейшем все равно нужна будет нормальная работа приложения.
Итак, есть две связанные таблицы, связь - один ко многим. Доступ ко второй таблице через компонент ZQuery, выборка с помощью SQL запроса и связанных полей таблиц.
При отображении в гридах все работает отлично.
При построении отчета - все не работает.
Делал по инструкции: в дизайне отчета один masterband с нужными полями из главной таблицы, второй detailband с полями из дочерней таблицы.
При отображении отчета записи главной таблицы все показываются нормально, но в detailband показываются ко всем записям главной таблицы только первая запись дочерней, и только одна, первая, хотя и к первой записи главной связано две записи дочерней.
такие пироги.
Помогите, пожалуйста, разобраться, как построить отчет с двумя связанными таблицами.
Кстати, в костыле, чтобы все нормально работало (записи дочерней таблицы я пока вставляю в memo с параметром путем перебора всех строк из дочерней таблицы) приходится использовать метод refresh дочерней таблицы при вызове GetValue отчета.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
java73 писал(а):несколько условных операторорв подряд не работают - работает только первый.
Весь скрипт пробовали брать в begin end? Я регулярно на этом попадаю, без begin end выполняется только первый оператор, всё остальное игнорируется, видимо предполагается что в теле только одна инструкция раз блок не задан...
Код: Выделить всё
begin
if then ....
else ...;
if then ...;
if then ...;
end
С master - detail у меня в отчетах проблем не возникло (но компоненты не ZEOS, но разницы я думаю нет). Единственное что не заработало - группировка на Detail Data, поэтому заменил выводом отчета в Master-Detail-SubDetail. Целых 3 уровня получилось... Выложите бланк отчета, если не секретный, без него наверно сложно будет. Единственное что приходит на ум, возможно потеряна связь с TfrUserDataSet либо в приложении несколько компонент TfrUserDataSet, с которым связан DetailData с одинаковыми именами попадают, отчет источник данных по имени ищет...
Кстати, в костыле, чтобы все нормально работало (записи дочерней таблицы я пока вставляю в memo с параметром путем перебора всех строк из дочерней таблицы) приходится использовать метод refresh дочерней таблицы при вызове GetValue отчета.
Возможно в этом проблема, попробуйте отключить refresh, сделайте простой отчет Master-Detail без костылей..
*Rik* » 02.07.2015 18:31:29
Спасибо за советы. Сейчас еще немного помудрил, получилось.
дело было в том, что я хотел бы, чтобы поля из мастер-таблицы и детейл-таблицы были на одном уровне в строках таблицы, поэтому бэнд я сдвинул вверх и он зашел на мастер бенд. Сейчас сделал их друг под другом и получилось, но не так, как хотелось бы:
Хотелось бы, чтобы поле "патенты" выводилось именно на строке вместе с другими полями, а не под ней. Можно ли так сделать???
также теперь для каждой записи связанной таблицы повторяется строка, в которой я суммирую роялти по всем патентам. Можно ли сделать так, чтобы она выводилась только один раз? На мастер-бэнд не положишь, так как суммы идут из второго набора данных, связанным с детейл-бэндом.
Как быть?
Добавлено спустя 1 минуту 21 секунду:
Кстати, засовывать условия в скрипте внутрь begin..end я, разумеется, пробовал, но у меня все равно скрипт не работал нормально. Выполнялось только последнее условие)))
Добавлено спустя 4 часа 2 минуты 16 секунд:
Самый последний вопрос снимается, узрел бэнд дитейл-примечание))
Пока отчет выглядит так, чтоб более-менее красиво было:
Но хотелось бы, конечно, как изначально планировал, чтобы патенты начинались в строке самой записи про договор, а не ниже. И бэнд-примечание хотелось бы сделать на их уровне, а не еще ниже.
alexs писал(а):alexs » 03.07.2015 22:46:29
Попробуй вместо детайла использовать субрепорт.
Его можно положить рядом с данными из мастера. И он умеет растягиваться по содержимому.
Попробовал. Вообще что-то все в кучу, растянул на главной странице отчета точно в том месте, где нужно. На странице вложенного отчета сделал мастер-бэнд, растягивающийся с одним полем из dataset'а. Так вот ничего не растягивается, сам субрепорт отображается, съехавшим сильно вправо, все другие записи накладываются как-то друг на друга.
Нужен нормальный пример, как это работает, в общем ))
Нашёл ещё косяк. В популярных программах для винды диапазон страниц для печати могут задавать, например, в виде строки 2- . Если отправить команду Print с таким значением диапазона печати, приложение падает с сообщением о невозможности преобразовать '' в Integer.
Ну вот сделал пример отчета с subreport:

Содержимое страницы субрепорта:

В итоге все строки и мастера главного отчета накладываются друг на друга, строки субрепорта вообще где-то посередине перчатаются друг на друге, причем кажется только последняя запись таблицы, связанной с главной таблицей.
ну как это делать-то правильно, расскажите уже))
Добавлено спустя 25 минут 8 секунд:
Так-с, вроде разобрался с обеими затырками.
В редакторе субрепорта пришлось мемо сдвинуть далеко за границу страницы:

Надеюсь, в дальнейшем это не аукнется) Попробую распечатать и отпэдээфить.
А данные из связанной таблицы - в обработчике события frDBDataSet1First и frDBDataSet1Next принудительно метод Refresh у связанной таблицы.
Пока работает. Посмотрим, будет ли растягиваться и брать несколько значений в подотчет.
Добавлено спустя 14 минут 52 секунды:
Как и следовало ожидать, всё ПЛОХО...
Растянув подотчет на высоту мастер-бэнда, каждый элемент подотчета печатается под бэндом на всю высоту... В пределах одного мастер-бэнда никак не получается сделать.
Добавлено спустя 59 минут 59 секунд:
Убрал подотчет, добавил обычный мем с параметром, который тупо сам перебирает и записывает текстом все значения связанной таблицы.
Теперь проблема - отчет показывается, но не хочет отправляться в PDF с помощью Cairo, не смотря на то, что процедура одна на все формы, и в других отчетах экспорт работает... Access violation говорит.
Содержимое страницы субрепорта:
В итоге все строки и мастера главного отчета накладываются друг на друга, строки субрепорта вообще где-то посередине перчатаются друг на друге, причем кажется только последняя запись таблицы, связанной с главной таблицей.
ну как это делать-то правильно, расскажите уже))
Добавлено спустя 25 минут 8 секунд:
Так-с, вроде разобрался с обеими затырками.
В редакторе субрепорта пришлось мемо сдвинуть далеко за границу страницы:
Надеюсь, в дальнейшем это не аукнется) Попробую распечатать и отпэдээфить.
А данные из связанной таблицы - в обработчике события frDBDataSet1First и frDBDataSet1Next принудительно метод Refresh у связанной таблицы.
Пока работает. Посмотрим, будет ли растягиваться и брать несколько значений в подотчет.
Добавлено спустя 14 минут 52 секунды:
Как и следовало ожидать, всё ПЛОХО...
Растянув подотчет на высоту мастер-бэнда, каждый элемент подотчета печатается под бэндом на всю высоту... В пределах одного мастер-бэнда никак не получается сделать.
Добавлено спустя 59 минут 59 секунд:
Убрал подотчет, добавил обычный мем с параметром, который тупо сам перебирает и записывает текстом все значения связанной таблицы.
Теперь проблема - отчет показывается, но не хочет отправляться в PDF с помощью Cairo, не смотря на то, что процедура одна на все формы, и в других отчетах экспорт работает... Access violation говорит.
