Создать отчет на основе данных, получаемых из нескольких таблиц БД, можно двумя способами.
С помощью компонента Query объединить данные из нескольких таблиц в один набор данных, затем построить отчет обычным образом.
Создать несколько наборов данных (по одному на каждую таблицу), соединить эти наборы связью “главный-подчиненный” с помощью свойств MasterSource и MasterFields. Для отображения информации из связанных наборов данных применяются компонент QRBand (для главной таблицы) и компонент QRSubDetail (для подчиненной таблицы).
Компонент QRSubDetail предназначен для включения в отчет информации из подчиненной таблицы. Свойство DataSet этого компонента должно содержать ссылку на подчиненный набор данных.
Пример. Создать отчет для связанных таблиц БД “Pokupka”. БД содержит две таблицы: Tovar.db и Pokupka.db. Главной таблицей является Tovar.db, а подчиненной Pokupka.db, связь устанавливается по полям Code_Tovar главного и подчиненного набора данных.
Для полосы данных QRBand в качестве набора данных устанавливается главный набор. В этой полосе размещаются компоненты QRDBText, связанные полями этого набора данных: Code_Tovar, Tovar, а также компоненты QRLabel – заголовки записей группы покупки товара: Data и Number.
Для полосы детализации устанавливается подчиненный набор данных. В ней размещаются компоненты QRDBText и QRExpr, в которых выводятся значения полей записей подчиненного набора данных.
Чтобы группа не выводилась для товаров, которые не имеют записи о покупке, для полос данных нужно создать обработчик события OnBeforePrint, содержащий команду:
PrintBand:=Form1.Pokupka.RecordCount>0;
Создать колонтитулы групп можно следующим способом: задать подствойствам HasHeader и HasFooter свойства Bands компонента QRSubDetail полосы детализации значения True, и автоматически будет создан соответствующий колонтитул.