Firebird && LazReport

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

qwerty123
новенький
Сообщения: 14
Зарегистрирован: 05.05.2015 13:49:21

Сообщение qwerty123 »

alexs писал(а):В дизайнере есть же кнопка специальная для выравнивания объектов по сетке.

Забываю про эту панель кнопок справа :)
P.S. а можете что-нибудь посоветовать по поводу новой иерархии?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Кнопка выравнивания сверху находится. Она именно по сетке ровняет все выделенные объекты.
А по поводу иерархии - тебе сколько группировок надо? 2 или 1?
Если 2 - то ложи два бэнда групп
если одна - то делай в редакторе группирующего бэнда условия сразу по двум полям
qwerty123
новенький
Сообщения: 14
Зарегистрирован: 05.05.2015 13:49:21

Сообщение qwerty123 »

Да, мне нужно сделать 2 группировки: GROUP BY country, speciality
Прикрепляю пример, как я сделал отчет (внутренности бандов заполняются текстом [SQLQuery."field"] в реалтайме), но он вообще ничего не показывает в результате. Что я не так сделал?
P.S. правда, я условия для бандов групп не прописывал, просто кинул на них дочерние банды -- может в этом дело?

Добавлено спустя 22 часа 15 минут 17 секунд:
1. Да, наверное дело в том, что я не прописываю условия в банды групп. Но как мне это сделать программно?

Код: Выделить всё

frReport1.FindObject('GroupHeader1').GroupCondition := ...

не канает :(

2. Вот я составил отчет, только у него неверно кол-во записей считается, такое чувство, что группировка не отрабатывает. Вот SQL (по стандартной базе employers):

Код: Выделить всё

SELECT LOCATION, HEAD_DEPT, count(*) 
FROM DEPARTMENT
GROUP BY LOCATION, HEAD_DEPT
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

кстати - да
почему-то группы не посчитались. Надо будет глянуть. Как выход сейчас можно просто скриптом руками в отчёте посчитать.
Я сложные группировки промежуточные считаю вручную скриптом.
qwerty123
новенький
Сообщения: 14
Зарегистрирован: 05.05.2015 13:49:21

Сообщение qwerty123 »

alexs писал(а):Я сложные группировки промежуточные считаю вручную скриптом.

А подскажите, как мне это сделать? :) Я пока представляю себе только так: сделать select, а его результат записать в банд.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

в заголовке группы в скрипте инициализируешь переменную:
A:=0;
В мастер-данных делаешь расчёт - например суммируешь:
A:=A+[твоё поле];
В итогах группы отображаешь переменную:
[A]

Это простейшая логика.
Я так например процентную долю группы считаю и т.п.
qwerty123
новенький
Сообщения: 14
Зарегистрирован: 05.05.2015 13:49:21

Сообщение qwerty123 »

Я попробую, только мне нужно знать результат не в итоге группы, а в ее заголовке.
А как еще мне программно заполнить GroupCondition у заголовка группы?

Код: Выделить всё

frReport1.FindObject('GroupHeader1').GroupCondition := ...
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

1. Насчёт заголовка - тогда надо делать двухпроходной отчёт. На первом проходе считать итоги и заполнять массив. Во втором проходе отображать результат из массива
2. (frReport1.FindObject('aa') as TfrBandView).GroupCondition:='bla-bla-bal';
3. А чем вызвано желание делать отчёт в рантайме? Почему нельзя заранее подготовить шаблон? Это же гораздо удобнее...
qwerty123
новенький
Сообщения: 14
Зарегистрирован: 05.05.2015 13:49:21

Сообщение qwerty123 »

1. Как сложно оказалось вывести в заголовке просто сумму :(
3. Я использую в отчете SQLQuery, который есть свойство класса, который умеет всякие штуки над базой (пытаюсь сделать, используя ООП и т.д.). Соответственно если я в шаблоны загоню сразу код, то ограничу себя тем, что не смогу вызвать отчет по другому SQLQuery, а превью все-равно не работает.

Добавлено спустя 28 минут 7 секунд:
Кстати, по этому поводу еще вопросик.
У меня есть функция CreateReportBase(const filePath, SQL: string), которая подготавливает базу для дальнейшего отчета:

Код: Выделить всё

    DataSource1.DataSet := SQLReport;
    frDBDataSet1.DataSource := DataSource1;

    SQLReport.DataBase := DBManager.IBConnect;
    SQLReport.SQL.Text := SQL;
    SQLReport.Active := true;

    frReport1.LoadFromFile(filePath);

и далее у меня есть несколько отчетов, в каждом из которых код формата:

Код: Выделить всё

CreateReportBase(%путь к файлу%, 'select * from ...')
frReport1.FindObject('Memo1').Memo.Text := '[SQLReport."%поле1%"]';
frReport1.FindObject('Memo2').Memo.Text := '[SQLReport."%поле2%"]';
...
frReport1.ShowReport;

И вот в чем прикол: я вызываю первый отчет, все показывается, вызываю второй, ошибка: "... Undefined symbol: SQLReport."%поле%"". Но если я запущу программу и открою сначала второй отчет, будет все ок, а после этого при открытии первого отчета будет такая же ошибка, правда будет ругаться уже на другое поле. Может как-то ресетить frReport1 между LoadFromFile для разных отчетов?
qwerty123
новенький
Сообщения: 14
Зарегистрирован: 05.05.2015 13:49:21

Сообщение qwerty123 »

Я не знаю, что было причиной этого странного поведения, но я вроде вылечил его, воткнув перед:

Код: Выделить всё

SQLReport.DataBase := DBManager.IBConnect;
SQLReport.SQL.Text := SQL;
SQLReport.Active := true;

одну строчку:

Код: Выделить всё

SQLReport.Active := false;


Добавлено спустя 20 часов 27 минут 15 секунд:
Еще вопрос назрел: когда ты кидаешь какой-нибудь банд-контейнер (мастер-дата, мастер-заголовок, заголовок группы и т.д.), то он автоматически прижмется к банду-контейнеру, который лежит выше на листе. Правильно же? А что делать, если я хочу задать точное положение? Ну или как хотя бы прижать вниз\вверх листа?
Ответить