Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» FastReport

Автор: jonikDk
Дата сообщения: 20.04.2009 19:08
Массив переменных:
frxReport.Variables.IndexOf(VariableName) - возвращает индекс переменной
Автор: delover
Дата сообщения: 23.04.2009 12:21
А есть окно типа дизайнера отчёта, только для FastScript и его форм и данных, но без странички отчёта. Чтоб его вызывать а превиюв печати не показывать???

Думаю, что можно организовать события в программе, чтоб обрабатывать типа плагинами. В принципе нужно дать возможность состряпать окно с гридиной и произвольными заголовками колонок. Дальше пусть делают любые селекты. Назначают хоткеи. Им может надо в базе табличку с пропусками на проходную...
Автор: FunCode
Дата сообщения: 23.04.2009 14:22
Может быть кто сталкивался с такой ситуацией ...

Есть MasterData, есть Picture под ним,
так вот в Picture находится печать,
которую надо распечатать так чтобы она залезла
верхней половиной на распечатанный над ней
MasterData

Заранее благодарен всем откликнувшимся
Автор: X11
Дата сообщения: 23.04.2009 14:57
Картинка (печать) в каком формате? Попробуй в формате PNG с альфаканалом.
Автор: FunCode
Дата сообщения: 24.04.2009 14:12

Цитата:
Картинка (печать) в каком формате? Попробуй в формате PNG с альфаканалом.

Вопрос немного другой, как сделать нахлест этой "печати" на последние строки бэнда с данными ?
Автор: X11
Дата сообщения: 24.04.2009 14:51
А что Picture не получается положить сверху на другие компоненты?
Автор: FunCode
Дата сообщения: 24.04.2009 16:17
X11

Цитата:
А что Picture не получается положить сверху на другие компоненты?


Положить то можно, но результат будет другой...
У меня лежит бэнд - MasterData, к нему подключен DataSet,
к примеру получаю вывод таблицы из 10 строк, снизу всей
этой таблицы мне нужна "печать", но она должна наполовину
своей верхней частью перекрывать последние строки таблицы.
Если положить Picture на MasterData, то он будет выводиться
10 раз в каждой строке, если положить в Footer, то после
таблицы, но перекрывать нижние строки не будет, можно
конечно в Overlay положить, но кол-во строк у меня неизвестно,
соотвественно попадать не будет...
Автор: X11
Дата сообщения: 24.04.2009 16:21
Наверное, не подскажу в каком событии или в каком месте, но нужно смотреть в эту сторону: создаётся отчёт, выводятся все строки, только после этого создавай картинку и пихай в неё изображение.
Автор: FunCode
Дата сообщения: 24.04.2009 16:29
X11

Цитата:
Наверное, не подскажу в каком событии или в каком месте, но нужно смотреть в эту сторону: создаётся отчёт, выводятся все строки, только после этого создавай картинку и пихай в неё изображение.

Была такая мысль, рассчитывать кол-во строк перед формированием отчета
и размещеть печать на рассчитанные координаты посмледних строк, но
если что-то придется менять в отчете, то надо не забывать каждый раз
менять формулу расчета, а если таблица получается на нескольких листах,
то еще грустнее...
Автор: TrueVoxDei
Дата сообщения: 25.04.2009 13:10
Господа, помогите.

Кратко о предмете разговора: необзодимо сформировать отчет на основании данных из БД.
Отчёт содержит информацию о результатах тестирования.
Стурктура отчета:

        ПРОТОКОЛ ТЕСТИРОВАНИЯ

------------------------------------------------------
1. Вопрос №1
1.1. Ответы тестируемого: ответ_тестируемого 1.1.1
             ответ_тестируемого 1.1.2
            

1.2. Правильные ответы: правильный_ответ 1.2.1
             правильный_ответ 1.2.2
             правильный_ответ 1.2.3
             

-------------------------------------------------------
2. Вопрос №2
2.1. Ответы тестируемого: ответ_тестируемого 2.1.4
            

2.2. Правильные ответы: правильный_ответ 2.2.1
             правильный_ответ 2.2.2
             правильный_ответ 2.2.3
              правильный_ответ 2.2.4
             правильный_ответ 2.2.5

--------------------------------------------------------
3. Вопрос №3
3.1. Ответы тестируемого: ответ_тестируемого 3.1.1
             ответ_тестируемого 3.1.2
             ответ_тестируемого 3.1.3
             ответ_тестируемого 3.1.4
             ответ_тестируемого 3.1.5

3.2. Правильные ответы: правильный_ответ 3.2.1
             правильный_ответ 3.2.2
             правильный_ответ 3.2.3
              правильный_ответ 3.2.4
             правильный_ответ 3.2.5

---------------------------------------------------------
4. Вопрос № 4
4.1. Ответы тестируемого: ответ_тестируемого 4.1.3 //!!! 4.1.3
            
4.2. Правильные ответы: правильный_ответ 4.2.1
             правильный_ответ 4.2.2
             правильный_ответ 4.2.3 //!!! 4.2.3
---------------------------------------------------------

N. Вопрос № N
N.1. Ответы тестируемого: ответ_тестируемого N.1.M
             ответ_тестируемого N.1.M+1
             ответ_тестируемого N.1.....
             ответ_тестируемого N.1.M+X

N.2. Правильные ответы: правильный_ответ N.2.M
             правильный_ответ N.2.M+1
             правильный_ответ N.2.....
              правильный_ответ N.2.....
             правильный_ответ N.2.M+X
----------------------------------------------------------


Суть проблемы вот в чём. Не получается сформировать группы "ответы тестируемого" и "правильные ответы" в соответствии с номерами вопросов, т.е. что-бы например ответ_тестируемого 1.2.3 принадлежал вопросу №2 и находился в группе "ответы тестируемого".
"Ответы тестируемого" входят в множество ответов "правильные ответы".


Из базы данных извлекаю с помощью написанного SQL-запроса (компонент IBQuery).

Структура (поля) таблиц БД откуда извлекается информация:

Таблица PROTOCOL
ID_PROTOCOL / QUESTION / ANSWER /PLUS /ID_QUESTION


Таблица NUM_QUESTION
ID_QUEST / QUESTIONS / NOMER_QUEST


Таблицы не связаны. Связываются в программе с при извлечении по индксам ID_QUESTION=ID_QUEST


Проштудировал документацию на FastReport (как user manual так и programmers...). Изучил динамическое создание компонентов на форме, думал поможет, но...
потом понял, что именно master-detail должно быть тем самым, что требуется. Посмотрел demo-примеры с master-detail.
Немного изменил один из demo-примеров, но вот пока работает не так как надо.

Може быть можно просто связать как-нибудь таблицы через компоненты типа DataSet, DataSource и frxDB
Но в целом лучше что-бы начала отрабатывался написанный SQL-запрос, а потом на основании запроса строить отчет.


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


Ссылка на скачивание файла-проекта http://ifolder.ru/11803309


p/s
Используется Delphi 7 (стандартные компоненты из палитры IB)+Firebird 2.5 (beta) embed и FastReport 4.7.9.
Автор: delover
Дата сообщения: 27.04.2009 10:20
В FastReport можно создавать свои окошки. Мне надо такое окно, но я не знаю как можно положить на окно DBGrid. Предлагают мне нарисовать панельками, но это тяжело будет для пользователя, мне кажется. А почему нельзя грид?
Автор: Granmer
Дата сообщения: 27.04.2009 12:38
TrueVoxDei
Твоя проблема легко решается несколькими способами:
1 вариант, создаешь группирующие бэнды и фильтруешь перед рисованием группирующего бэнда вопросы, которые должны быть в разных MasterData.
2 вариант - вложенные отчёт (subreports), создаешь два вложенных отчёта для правильных и отвеченных, и тоже группирующий для названия вопроса, как мне кажется должно получиться.
delover
а точно не лучше окно сделать в IDE, и уже из него в фасты передавать параметры формирования отчета?


Добавлено:
FunCode

Цитата:
Если положить Picture на MasterData, то он будет выводиться
10 раз в каждой строке

попробуй двух проходной отчёт, картинка в мастер дате, но она невидимая и в OnBeforePrint делаешь её видимой только на последней строке.
Автор: TrueVoxDei
Дата сообщения: 27.04.2009 15:08
to Granmer
Я тоже думал что легко... Сейчас убеждаюсь что действительно должно быть легко. Только вот сделал пока вывод ответов пользователя относящихся к соответствующему вопросу так: сделал через master-detail с фильтром по требуемому полю. Думаю как вывесть правильные ответы (пока не получается, но разбираюсь).
Если я правильно понимаю вас, то группирующие бэнды - это: DetailData, SubMasterDetail.... или нет?
Заинтересовал вариант с вложенными отчётами (subreports). Если правильно понимаю, то в один бэнд (например masterdata) влаживается ещё один бэнд (masterdata2) и соответственно когда создаётся первый бэнд, то параллельно и второй-вложенный, который и заполняется (одновременно?) из 2-х разных источников?
Автор: delover
Дата сообщения: 27.04.2009 20:14
Granmer
Нет не точно, надо плагины давать, но я бы лучше грид дал в фасте, чем давать через DLL общию память.
Автор: Granmer
Дата сообщения: 30.04.2009 13:28
TrueVoxDei

Цитата:
группирующие бэнды - это: DetailData, SubMasterDetail.... или нет?

нет, группирующие бэнды - это GroupHeader и GropuFooter. В GroupHeader указывается мастер дата которую группировать и поле группировки. в твоём случае должно быть что-то вроде:
== GroupHeader1 (группировка по номеру вопроса) привязка к мастердата1 в нём же выводить название вопроса ==
== GroupHeader2 (группировка по номеру вопроса) привязка к мастердата2 ничего не выводить, 0 высота ==
== MAsterdata1 ответы ==
== MAsterdata2 правильные ответы ==
как мне кажется, должно сработать, работы - на 5 минут


Добавлено:
Соответственно таблицы с просто ответами и правильными ответами должны содержать поле с номером вопроса и быть по нему отсортированы.

Добавлено:
delover
Я с формами мало работал в фастах - не понравились они мне. Может лучше сделать тогда отдельную библиотеку содержащую форму с гридой и вызывающую фастовый отчёт?
Автор: delover
Дата сообщения: 30.04.2009 18:37
Granmer
Я не претендую на максимальную защиту. Мне интереснее дать возможность быстрее правильно решить свою задачу. Ну и естественно, чтобы пользователям это тоже не обламало. Направить разработчика и удовлетворить пользователя, может быть и нет у них лицензионных фастов, прогу то они купили...
Автор: Cryogen2003
Дата сообщения: 05.05.2009 12:37
Привет всем. Есть мини проблема, нужно было переделать один отчет и не совсем понимаю, как сделать так, чтобы он работал правильно.

Раньше было так - вызывался отчет по одному клиенту и там показывалось, что отчет по клиенту такому то и две таблички с разными полями по платежам клиента (в одной таблице как клиент платил и на какие счета деньги поступали, а в другой табличке как деньги в счет процентов и штрафов списывались.
Сейчас тот же отчет нужно переделать так, чтобы отчет можно было запускать сразу по множеству клиентов.

Итак, стало быть данные раньше передавались двумя табличками (два разных запроса в оракле), сейчас придется передавать все одной табличкой и стало быть один запрос будет вытягивать эту инфу.

Но возникла проблема - данные печатаются в обоих табличках, то есть в какой-то степени дублируются. Как можно решить эту проблему. С FastReport уже давно возился, так что не помню уже некоторые вещи.

Сейчас отчет выглядит так
GroupHeader по ID клиента

GroupHeader по дополнительному полю (где поставлено 1 для первой таблички и 2 для второй таблички) и шапкой первой таблички
Master Detail с данным первой таблички
Group Footer с итого первой таблицы

Group Header по дополнительному полю(где поставлено 1 для первой таблички и 2 для второй таблички) и шапкой второй таблицы
Master Detail с данным второй таблички
Group Footer с итого второй таблицы

Group Footer с итого по всем платежам клиента

Итак, как сделать так, чтобы данные фильтровались по этому дополнительному полю
Автор: TrueVoxDei
Дата сообщения: 06.05.2009 13:31
Granmer
Большое спасибо за подсказку, обязательно приму на вооружение. А так, вообщем сделал через вложенные отчёт (subreports) + написал скрипт и кое-что доработал ручками через frxUserDataset.
Предложенный вами совет попробую, потому как мне кажется моя реализация выглядит "топорно". Вообще большое спасибо ещё раз.
Автор: Dmitro25
Дата сообщения: 13.05.2009 06:27
Здравствуйте!
Подскажите, пожалуйста, решение следующей проблемы. У меня стоит fastreport 4.7.22 дома и на работе. Дома я создал форму для отчёта, очень тщательно (с точностью до 1 мм) выдержал все расстояния между компонентами отчёта. Приношу на работе, открываю дизайнер для своего отчёта, ничего не меняю, закрываю дизайнер, компилирую приложение, и при выводе отчёт рассыпается: компоненты сдвигаются, перекрываются, залезают в "чужие" бэнды. Основное отличие систем дома и на работе - на работе стоит масштабирование шрифта 120% (крупный шрифт). Однако, в Delphi я для всех форм ставлю Scaled=false - и всё в порядке, формы выглядят одинаково и там, и там. С FastReport, похоже, иначе... Может, кто сталкивался с похожей проблемой и знает её решение?
Автор: Granmer
Дата сообщения: 15.05.2009 23:23
Cryogen2003

Цитата:
Итак, как сделать так, чтобы данные фильтровались по этому дополнительному полю

Если я правильно понял вопрос, то просто достаточно на датасет в событии OnBeforePrint в GroupHeader накладывать фильтр на нужное поле. Тогда буду выводится только строки относящиеся к нужной группе и так на каждой группе.

TrueVoxDei
Рад, если чем помог )

Dmitro25
У меня всё ок работаю и дома и на работе. Попробуй поставить предыдущую или просто стабильную версию. Очень похоже на обычные глюки.
Автор: Cryogen2003
Дата сообщения: 18.05.2009 08:08
Granmer
То есть ты думаешь, что можно просто сделать в OnBeforePrint frxDataSet.Filter := 'myfield = 1' и все?
Кстати о таком простом решении я и не подумал
Автор: B00mb0x
Дата сообщения: 26.05.2009 18:40
Вопрос к профи в FR4:

как ускорить построение отчета, который целиком строится через событие GetValue.
из 2000 элементов в массиве построение занимает около 15мин!!!
можно ли как-то ускорить?

Спасибо!
Автор: f3ka
Дата сообщения: 27.05.2009 07:21
B00mb0x
пытаться переписать так чтоб GetValue использовалось по минимуму...
Автор: B00mb0x
Дата сообщения: 27.05.2009 18:08

Цитата:
пытаться переписать так чтоб GetValue использовалось по минимуму...


Спасибо, а другого варианта нет, мож есть "волшебная" кнопка (свойство)?
Автор: Nicka_Grey
Дата сообщения: 27.05.2009 20:11
B00mb0x

Цитата:
Спасибо, а другого варианта нет, мож есть "волшебная" кнопка (свойство)?

Конечно есть, называется "Сделать все"
А совет тебе дельный дали, старайся при таких объемах по минимуму использовать OnGetValue
К примеру можешь заполнить данными датасет и строить отчет уже по датасету, быстрее должно быть.
Автор: B00mb0x
Дата сообщения: 27.05.2009 20:34

Цитата:
Конечно есть, называется "Сделать все"
А совет тебе дельный дали, старайся при таких объемах по минимуму использовать OnGetValue
К примеру можешь заполнить данными датасет и строить отчет уже по датасету, быстрее должно быть.


Ясно, я так и предполагал, если честно, но надеялся, что может есть какие хитрости или это только у меня OnGetValue так медленно работает.
Что же, буду кумекать как енто сделать иначе.

Спасибо всем за помощь!
Автор: MagistrAnatol
Дата сообщения: 09.06.2009 16:43
Народ,подскажите можно ли в фастрепорте сделать условное выделение по двум
условиям для одного мемо?
Автор: jonikDk
Дата сообщения: 09.06.2009 17:09
MagistrAnatol
это как ?? выделием если одно из двух условий верно или когда оба верны ??
Почему не связать тогда or или and ??
Или я что-то не правильно понял ??
Автор: MagistrAnatol
Дата сообщения: 10.06.2009 08:27
jonikDk
понял правильно, я перерыл справку не нашол верного синтаксиса
мне надо условие
[Pos('група',<група."NAME">)>0] OR [Pos('Введені',<група."NAME">)>0]
перепробывал кучу вариантов транскрипции нифига - ошибка
Автор: FunCode
Дата сообщения: 10.06.2009 12:15
Granmer

Цитата:
попробуй двух проходной отчёт, картинка в мастер дате, но она невидимая и в OnBeforePrint делаешь её видимой только на последней строке.


Дело в том что высота печати грубо говоря составляет две-три высоты MasterData (строки), как в этом случае поступить?

Добавлено:
MagistrAnatol

Цитата:
понял правильно, я перерыл справку не нашол верного синтаксиса
мне надо условие
[Pos('група',<група."NAME">)>0] OR [Pos('Введені',<група."NAME">)>0]
перепробывал кучу вариантов транскрипции нифига - ошибка


а вот так работает:

(Pos('група',<група."NAME">)>0) OR (Pos('Введені',<група."NAME">)>0)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859

Предыдущая тема: CBuilder и копирование файла


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.