Master-detail отчет с переменным количеством строк в Band. Проблема.

отредактировано 04:39 Раздел: FastReport 4.0
Добрый день!
Господа, требуется ваша помощь. Помогите.

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

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

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.

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


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



p/s
Используется Delphi 7 (стандартные компоненты из палитры IB)+Firebird 2.5 (beta) embedded и FastReport 4.7.9.

Комментарии

  • отредактировано April 2009
    Н-да, господа. Не ожидал такой от вас тишины... Все, наверное, мега крутые программеры, а направить (просто сказать пару слов в каком направлении копать, например в subreport) в нужное направление решения проблемы ноль. А ещё форум разработчиков...
  • отредактировано April 2009
    p/s
    Тему можно закрывать. Проблему решил собственноручно.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.