Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Урок11.doc
Скачиваний:
3
Добавлен:
19.09.2019
Размер:
314.88 Кб
Скачать
  1. Создание простейшего отчета

Компоненты TQuickRep и TQRBand являются минимально достаточными для создания простейшего отчета, не содержащего внутри себя группировок информации.

Пусть имеется таблица БД Rashod.DB, содержащая сведения об отпуске материалов со склада. В состав ТБД входят поля

  • N_RASH – уникальный номер события отпуска товара;

  • DEN – номер дня;

  • MES – номер месяца;

  • GOD – номер года;

  • TOVAR – наименование отпущенного товара;

  • POKUP – наименование покупателя;

  • KOLVO – количество единиц отпущенного товара.

Заметим, что дата отпуска товара хранится в разбивке на день, год и месяц. Сделано так специально, с целью показать, как в отчетах используются выражения и вычисляемые поля.

Создадим простейший отчет, состоящий из заголовка и сведений об отпуске товара. В отчет включаются все факты отпуска товара. Сортировка производится по номеру события отпуска товара. Для этого разместим на форме компонент TTable, свяжем его с таблицей Rashod.DB и откроем (Active = True). Разместим на форме компонент TQuickRep. Поместим в его свойство DataSet значение Table1, назначив таким образом отчету НД, записи которого будут выводиться в отчете. Добавим в отчет компонент TQRBand. В его свойство BandType компонента QRBand1 по умолчанию будет установлено значение rbTitle, то есть компонент QRBand1 определяет заголовок отчета Разместим на QRBand1 компонент TQRLabel. Установим в свойство Caption этого компонента значение Отпуск товаров со склада и выберем в свойстве Font жирный наклонный шрифт высотой 16 пунктов. Вид формы отчета к этому моменту показан на рис.5.

Рис. 5. В отчете определен только его заголовок.

Теперь разместим в отчете данные, соответствующие текущей записи таблицы Rashod. Для этого поместим в отчет новый компонент TQRBand (имя QRBand2) и установим в его свойство BandType значение rbDetail. Затем разместим на полосе QRBand2 шесть компонентов TQRDBText. Свяжем эти компоненты с полями НД – N_RASH, TOVAR, KOLVO, DEN, MES, GOD. Для этого в свойство DataSet каждого компонента QRDBText установим значение Table1, а в свойство DataField – имя соответствующего поля. Вид отчета к этому моменту показан на рис.6.

Рис. 6. Отчет с заголовком и группой детальной информации.

Для просмотра получившегося отчета щелкнем по нему правой кнопкой мыши и из всплывающего меню выберем элемент Preview. Окно предварительного просмотра отчета показано на рис. 7.

Рис. 7. Содержимое отчета в окне предварительного просмотра.

Чтобы окно предварительного просмотра открывалось при активизации формы, создадим такой обработчик события OnActivate формы:

procedure TForm1.FormActivate(Sender: TObject);

begin

QuickRep1.Preview;

end;

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

procedure TForm1.QuickRep1AfterPreview(Sender: TObject);

begin

Form1.Close;

end;

  1. Использование компонента tqrexpr

Из рис.7 видно, что в простейшем отчете выводится дата, составленная из трех полей – DEN, MES, GOD. Объединим значения из этих полей в одно значение, являющееся результатом вычисления выражения. Выражение в отчетах формируется при помощи компонента TQRExpr. Удалим из компонента QRBand2 компоненты QRDBText4, QRDBText5 и QRDBText6, связанные с полями DEN, MES, GOD. Вместо них разместим в отчете компонент TQRExpr (имя QRExpr1).

Выражения в TQRExpr формируются с помощью специального редактора, который вызывается в окне инспектора объектов кнопкой в поле данных свойства Expression этого компонента (рис.8).

Рис. 8. Окно редактора формул компонента TQRExpr.

В поле Enter expression можно ввести или отредактировать выражение, которое обычно состоит из имен полей НД, преобразующих функций и переменных, связанных операциями отношения. Имена полей НД добавляются в текущее положение курсора (поле Enter expression) с помощью вспомогательного окна, связанного с кнопкой Function, а переменные – с кнопкой Variable.

Нажмите кнопку Function, в левом окне выберите категорию Other (другие) и функцию STR в правом окне – эта функция преобразует числовое значение в строковое. Нажмите Continue, чтобы перейти к вводу параметров (рис.9). Надпись над строкой ввода окна Expression Wizard напоминает о том, что выбранная нами функция имеет один числовой параметр.

Рис. 9. Формирование части выражения.

Для его ввода нажмите кнопку справа от строки ввода – на экране вновь появится начальное окно редактора формул. Поскольку мы хотим преобразовать в строку номер дня, нажмите кнопку Database field и выберите поле DEN в списке полей таблицы Table1. Нажмите OK, чтобы завершить ввод параметра. В поле Enter expression будет сформирована часть формулы – STR(Table1.DEN). На панели Insert at cursor position нажмем кнопку «+» и вручную введем разделитель ‘.’ (рис.10).

Рис. 10. Создание части формулы выражения.

Продолжите формировать выражение так, чтобы в конце концов оно приобрело такой вид:

STR(Table1.DEN) + ‘.’ + STR(Table1.MES) + ‘.’ + STR(Table1.GOD)

(возможно проще ввести его вручную). Затем нажмите кнопку OK, чтобы закрыть окно редактора формул. С помощью Инспектора объектов установите в свойство AutoSize компонента QRExpr1 значение False, измените размеры компонента так, чтобы он мог отображать примерно 10 символов, и установите выравнивание вправо (свойство Alignment = taRightJustify). Запустите режим предварительного просмотра содержимого отчета (рис.11). Как видим, дата отпуска товара приобрела более привычный вид.

Рис. 11. Результат вычисления выражения появился в отчете.

Замечание.

Другим способом составления значения даты из трех полей могло бы быть создание вычисляемого поля (например, SumData) и определение алгоритма вычисления его значения в таком обработчике события OnCalcFields:

procedure TForm1.TableCalcFields(DataSet: TDataSet);

begin

Table1SumData.Value := Table1DEN.AsString + ‘.’ +

Table1MES.AsString + ‘.’ + Table1GOD.AsString;

end;