LazReport

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: LazReport

Сообщение agir » 17.06.2015 18:53:29

Здравствуйте, нужна помощь, нужно изменить межстрочный интервал (LineSpacing) и отступы (GapY) в текстовом поле отчета (Memo), нутром чую что капать надо в сторону OnEnterRect, что то типа (View as TfrMemoView).LineSpacing := ххх; , но ничего не приходит в голову, а то что приходит не работает, да и до Gap-ов не добрался... В общем нужна помощь. Заранее спасибо.

P.S. Я так понимаю что в дизайнере этого не сделаешь, только из программы или я ошибаюсь?
agir
незнакомец
 
Сообщения: 3
Зарегистрирован: 17.06.2015 14:17:44
Откуда: Бурятия, г.Улан-Удэ

Re: LazReport

Сообщение alexs » 18.06.2015 09:40:55

Код: Выделить всё
procedure TForm1.frReport1EnterRect(Memo: TStringList; View: TfrView);
begin
  if View.Name = 'Memo2' then
    TfrMemoView(View).LineSpacing:=20;
end;

Насчёт GapX и GapY - это пока да, нет доступа.
Надо доделать будет.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение agir » 18.06.2015 12:00:42

Спасибо за ответ, но все равно как то не так межстрочный работает, в моем случае нужно было уменьшить меньше дефолтного (там кажется 2 стоит), а насчет GapY, сделал пока "костылем"
Код: Выделить всё
 
if pos('off_2',View.Name)>0 then
    View.y:=-2;


Хорошо бы конечно что бы "дробные"размеры шрифта и тех же интервалов, в fastreport-е это реализовано. Понимаю что тут чистый энтузиазм поэтому это не стоит расценивать как требование.
agir
незнакомец
 
Сообщения: 3
Зарегистрирован: 17.06.2015 14:17:44
Откуда: Бурятия, г.Улан-Удэ

Re: LazReport

Сообщение alexs » 18.06.2015 13:00:21

Доступ к этим свойствам из дизайнера я сделал. Патчик вышлю Рейсу - он должен включить в исходники.
Насчёт дробных размеров - это можно, но переделок много.
Можешь сам попробовать. Если получится что-то хорошее - высылай.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение agir » 18.06.2015 14:17:46

alexs писал(а):Доступ к этим свойствам из дизайнера я сделал. Патчик вышлю Рейсу - он должен включить в исходники.

Отлично будет!

alexs писал(а):Насчёт дробных размеров - это можно, но переделок много.

понимаю... насчет сам - попробую конечно, но не уверен в своих познаниях.
agir
незнакомец
 
Сообщения: 3
Зарегистрирован: 17.06.2015 14:17:44
Откуда: Бурятия, г.Улан-Удэ

Re: LazReport

Сообщение Axi » 19.06.2015 18:56:58

Добрый день.
Поделитесь пожалуйста примером, пытаюсь в отчете форматировать текст, т.е. в зависимости от значения поля поменять шрифт например на fsBold.

Спасибо.
Axi
новенький
 
Сообщения: 15
Зарегистрирован: 23.10.2014 22:18:41

Re: LazReport

Сообщение slyubez » 19.06.2015 20:19:55

В русской доке по FreeReport можно найти, как это делать через скрипт.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: LazReport

Сообщение *Rik* » 19.06.2015 23:30:02

Axi писал(а):Добрый день.
Поделитесь пожалуйста примером, пытаюсь в отчете форматировать текст, т.е. в зависимости от значения поля поменять шрифт например на fsBold.

Спасибо.

viewtopic.php?f=5&t=8093&start=75#p84944
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: LazReport

Сообщение java73 » 02.07.2015 17:42:06

Кстати, вчера целых часа три угробил на то, чтобы заставить работать скрипты в Lazreport.
Цель в общем - выделять цветом соответствующие строки в зависимости от ряда условий.
Условий у меня два. Методом перебора пришел к заключению, что работает только такая конструкция вложенных условных операторов 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 отчета.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: LazReport

Сообщение *Rik* » 02.07.2015 18:31:29

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*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: LazReport

Сообщение java73 » 03.07.2015 13:33:20

*Rik* » 02.07.2015 18:31:29

Спасибо за советы. Сейчас еще немного помудрил, получилось.
дело было в том, что я хотел бы, чтобы поля из мастер-таблицы и детейл-таблицы были на одном уровне в строках таблицы, поэтому бэнд я сдвинул вверх и он зашел на мастер бенд. Сейчас сделал их друг под другом и получилось, но не так, как хотелось бы:
Изображение
Хотелось бы, чтобы поле "патенты" выводилось именно на строке вместе с другими полями, а не под ней. Можно ли так сделать???
также теперь для каждой записи связанной таблицы повторяется строка, в которой я суммирую роялти по всем патентам. Можно ли сделать так, чтобы она выводилась только один раз? На мастер-бэнд не положишь, так как суммы идут из второго набора данных, связанным с детейл-бэндом.
Как быть?

Добавлено спустя 1 минуту 21 секунду:
Кстати, засовывать условия в скрипте внутрь begin..end я, разумеется, пробовал, но у меня все равно скрипт не работал нормально. Выполнялось только последнее условие)))

Добавлено спустя 4 часа 2 минуты 16 секунд:
Самый последний вопрос снимается, узрел бэнд дитейл-примечание))
Пока отчет выглядит так, чтоб более-менее красиво было:
Изображение
Но хотелось бы, конечно, как изначально планировал, чтобы патенты начинались в строке самой записи про договор, а не ниже. И бэнд-примечание хотелось бы сделать на их уровне, а не еще ниже.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: LazReport

Сообщение alexs » 03.07.2015 22:46:29

Попробуй вместо детайла использовать субрепорт.
Его можно положить рядом с данными из мастера. И он умеет растягиваться по содержимому.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение java73 » 06.07.2015 19:19:44

alexs писал(а):alexs » 03.07.2015 22:46:29

Попробуй вместо детайла использовать субрепорт.
Его можно положить рядом с данными из мастера. И он умеет растягиваться по содержимому.

Попробовал. Вообще что-то все в кучу, растянул на главной странице отчета точно в том месте, где нужно. На странице вложенного отчета сделал мастер-бэнд, растягивающийся с одним полем из dataset'а. Так вот ничего не растягивается, сам субрепорт отображается, съехавшим сильно вправо, все другие записи накладываются как-то друг на друга.

Нужен нормальный пример, как это работает, в общем ))
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: LazReport

Сообщение slyubez » 20.07.2015 07:40:11

Нашёл ещё косяк. В популярных программах для винды диапазон страниц для печати могут задавать, например, в виде строки 2- . Если отправить команду Print с таким значением диапазона печати, приложение падает с сообщением о невозможности преобразовать '' в Integer.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: LazReport

Сообщение java73 » 24.07.2015 16:15:36

Ну вот сделал пример отчета с subreport:
Изображение
Содержимое страницы субрепорта:
Изображение

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

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

Добавлено спустя 14 минут 52 секунды:
Как и следовало ожидать, всё ПЛОХО...
Растянув подотчет на высоту мастер-бэнда, каждый элемент подотчета печатается под бэндом на всю высоту... В пределах одного мастер-бэнда никак не получается сделать.

Добавлено спустя 59 минут 59 секунд:
Убрал подотчет, добавил обычный мем с параметром, который тупо сам перебирает и записывает текстом все значения связанной таблицы.

Теперь проблема - отчет показывается, но не хочет отправляться в PDF с помощью Cairo, не смотря на то, что процедура одна на все формы, и в других отчетах экспорт работает... Access violation говорит.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 12

Рейтинг@Mail.ru