Firebird && LazReport

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

Re: Firebird && LazReport

Сообщение qwerty123 » 11.05.2015 12:52:42

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

Забываю про эту панель кнопок справа :)
P.S. а можете что-нибудь посоветовать по поводу новой иерархии?
qwerty123
новенький
 
Сообщения: 14
Зарегистрирован: 05.05.2015 14:49:21

Re: Firebird && LazReport

Сообщение alexs » 11.05.2015 15:04:24

Кнопка выравнивания сверху находится. Она именно по сетке ровняет все выделенные объекты.
А по поводу иерархии - тебе сколько группировок надо? 2 или 1?
Если 2 - то ложи два бэнда групп
если одна - то делай в редакторе группирующего бэнда условия сразу по двум полям
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Firebird && LazReport

Сообщение qwerty123 » 11.05.2015 16:50:13

Да, мне нужно сделать 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
У вас нет необходимых прав для просмотра вложений в этом сообщении.
qwerty123
новенький
 
Сообщения: 14
Зарегистрирован: 05.05.2015 14:49:21

Re: Firebird && LazReport

Сообщение alexs » 12.05.2015 16:08:43

кстати - да
почему-то группы не посчитались. Надо будет глянуть. Как выход сейчас можно просто скриптом руками в отчёте посчитать.
Я сложные группировки промежуточные считаю вручную скриптом.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Firebird && LazReport

Сообщение qwerty123 » 13.05.2015 12:00:52

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

А подскажите, как мне это сделать? :) Я пока представляю себе только так: сделать select, а его результат записать в банд.
qwerty123
новенький
 
Сообщения: 14
Зарегистрирован: 05.05.2015 14:49:21

Re: Firebird && LazReport

Сообщение alexs » 13.05.2015 14:00:13

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

Это простейшая логика.
Я так например процентную долю группы считаю и т.п.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Firebird && LazReport

Сообщение qwerty123 » 13.05.2015 16:21:30

Я попробую, только мне нужно знать результат не в итоге группы, а в ее заголовке.
А как еще мне программно заполнить GroupCondition у заголовка группы?
Код: Выделить всё
frReport1.FindObject('GroupHeader1').GroupCondition := ...
qwerty123
новенький
 
Сообщения: 14
Зарегистрирован: 05.05.2015 14:49:21

Re: Firebird && LazReport

Сообщение alexs » 13.05.2015 17:44:30

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

Re: Firebird && LazReport

Сообщение qwerty123 » 14.05.2015 14:57:37

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 14:49:21

Re: Firebird && LazReport

Сообщение qwerty123 » 16.05.2015 14:42:13

Я не знаю, что было причиной этого странного поведения, но я вроде вылечил его, воткнув перед:
Код: Выделить всё
SQLReport.DataBase := DBManager.IBConnect;
SQLReport.SQL.Text := SQL;
SQLReport.Active := true;

одну строчку:
Код: Выделить всё
SQLReport.Active := false;


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

Пред.

Вернуться в Базы данных

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

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

Рейтинг@Mail.ru