Смекни!
smekni.com

Засоби виводу інформації на принтер в об’єктно-орієнтованому середовищі програмування Delphi (стр. 3 из 4)

Спочатку в редакторі необхідно натиснути кнопку Function. У лівому списку вікна, що відкрився при цьому, потрібно вибратикатегорію Other, а потім у правому списку - функцію STR, що перетворить числове значення в строкове. Після цього варто натиснути кнопку Continue, щоб перейти до введення параметрів функції. У результаті відкриється спеціальне вікно введення параметрів (див. мал. 7).

Параметр можна ввести безпосередньо в поле одно строкового редактора або натиснути кнопку

, розташовану праворуч від поля введення. Після натискання даної кнопки на екрані з'явиться початкове вікно редактора формул. Тому що, відповідно до поставленої задачі, необхідно буде перетворювати в рядок значення поля таблиці БД, то для задання його як параметра даної функції варто натиснути кнопку Database field і вибрати поле Price у списку полів таблиці Tablel. Тепер потрібно натиснути кнопку ОК, щоб вставити поле, потім ОК, щоб закрити вікно редактора формул, і ще раз ОК, щоб завершити введення параметра. У поле Enter expression буде сформована частина формули, що має вид:

STR( Tablel. Price)

Перш ніж перетворити значення поля Price до строкового виду, його необхідно помножити на 5.35, щоб представити ціну не в доларах, а в гривнях. З цією метою курсор встановлюється в позицію безпосередньо після імені Price, потім на панелі Insert at cursor position натискається кнопка «*» і вручну вводиться значення 5.35.

Після цього залишилося тільки додати вказівку грошової одиниці. Для цього курсор переводиться в кінцеву позицію, натискається кнопка «+» і вручну вводиться підрядок “ грн. ”. У результаті сформована формула здобуває такий вид:

STR(Tablel.Price*5.35)+ ' грн.'

У вікні попереднього перегляду звіту буде відображатися інформація приблизно на кшталт показане на мал. 8.

У цьому звіті відображається найменування товару, потім вміст поля Price у первісному вигляді і, нарешті, перелічена за допомогою компонента QRExpr вартість товару. Ціна виводиться двічі, щоб проілюструвати різницю між початковим і перетвореним значенням.

Відображення системної інформації.Для відображення допоміжної і системної інформації використовується компонент QRSysData

. Вид відображуваної інформації визначається значенням властивості Data даного компонента. Ця властивість може приймати одне з таких значень:

qrsColumnNo - номер поточного стовпчика звіту:

qrsDate - поточна дата;

qrsDataTinie - поточна дата і час;

qrsDetaiICount - кількість записів у наборі даних; при використанні декількох наборів даних - кількість записів у головному наборі. Якщо набір даних представлений компонентом Query, ця можливість може бути недоступна, що зв'язано з характером роботи даного компонента, що повертає стільки записів, скільки необхідно для використання в даний момент часу;

qrsDetailNo - номер поточного запису в наборі даних;

qrsPageNumber - номер поточної сторінки звіту;

qrsPageCount - загальна кількість сторінок звіту;

qrsReportTitle - заголовок звіту;

qrsTime - поточний час.

Компонент QRSysData, як правило, розміщається в заголовку або підсторінці звіту.

Групування даних у звіті.Для групування даних використовується компонент QRGroup

. Умова групування зберігається у властивості Expression, інакше кажучи, у групу будуть входити записи набору даних, що задовольняють встановленій умові. Роль такої умови виконує ім'я поля набору даних, на основі якого буде здійснюватися групування записів. Для кожної групи виводиться її заголовок. Як заголовок групи використовується компонент QRGroup, а як під компонент QRBand зі значенням властивості BandType, рівним rbGroupFooter. При цьому властивість FooterBand компонента QRGroup повинне обов'язково містити посилання на компонент підгрупи. Як правило, у заголовку групи виводиться вираження, що групує, а в підзаголовку - різна інформація, така як, наприклад, сумарне або середнє значення по групі в цілому.

Важливою умовою є те, що угрупування буде здійснюватися тільки на основі поточного індексу. Іншими словами, необхідно, щоб як поточний індекс був використаний індекс, побудований за полем (або полями, у випадку створення вкладених груп даних), що використовується для групування записів у звіті.

Розглянемо групування даних у звіті на прикладі. Тут же буде проілюстровано, як можна застосувати деякі інші компоненти.

Приклад. Нехай, є таблиця, у якій зберігається інформація про співробітників фірми. Нехай дана таблиця має такі поля: Табельний номер (Tab_nom), Ім'я співробітника (Name), Відділ (Otdel), Посада (Position), Оклад (Salary). Необхідно скласти звіт, що відображає дані з цієї таблиці. При цьому потрібно здійснити групування всіх записів за номерами відділів, у яких працюють співробітники. Також необхідно відображати назви стовпців звіту й у підсторінці виводити номер сторінки і поточну дату.Наприкінці звіту повинна бути виведена інформація про загальну кількість співробітників підприємства.

На першому кроці на форму міститься компонент Table1 і його властивості IndexFieldNames або indexName установлюється відповідне значення, що містить посилання на індекс, побудований за полем Otdel.

Після того як на форму поміщений компонент QuickRep1 і його властивість DataSet задана як Tablel, у звіті розміщаються такі смуги:

• смуга заголовка звіту - компонентів QRBandl, у якого властивість BandType має значення rbTitle;

• смуга заголовків колонок - компонентів QRBand2 із значенням властивості BandType, рівним rbCol- ColumnHeader;

• смуга групи - компонентів QRGroupl, його властивість FooterBand одержує значення QRBand4 (посилання на підзвіт - див. нижче), а властивості Expression присвоюється значення Tablel.Otdel (встановлює поле, на основі якого буде вироблятися групування даних);

• смуга детальної інформації - компонентів QRBand3 для якого властивість BandType встановлена в rbDetail;

• смуга підгрупи - компонентів QRBand. властивості BandType якого задане значення rbGroupFooter;

• смуга підзвіту - компонентів QRBand, властивість BandType має значення rbSuiranary;

• смуга підсторінки - компонентів QRBand6, зі значенням властивості BandType, рівним rbPageFooter

На смугах звіту розміщаються компоненти QRLabel, що містять різні пояснювальні записи, у тому числі заголовок звіту, заголовки стовпців і т.д.

На смугу групи QRGroup1 міститься компонент QRExpr, у якого властивості Expression необхідно присвоїти значення Tablel.Otdel, що дозволяє відображати значення поля Otdel для поточної групи даних.

У смузі детальної інформації розміщаються компоненти QRDBText.що посилаються на відповідні поля набору даних, а саме на поля Tab nom. Name. Position і Salary.

У підгрупі додається компонент QRExpr. Його властивості Expression присвоюється значення SUM (Tablel. Salary)для підсумовування зарплати всіх співробітників відділу.

У підзвіті також включається компонент QRExpr, властивості Expression якого потрібно задати значення COUNT, що дозволяє порахувати загальне число виведених у звіті записів або, іншими словами, загальна кількість співробітників підприємства.

На смузі підсторінки необхідно розмістити два компонентиQRSysData. Властивості Data одного з них привласнити значення qrsDate, а іншого - qrsPageNumber. Таким чином, у підсторінці буде відображатися поточна дата і номер поточної сторінки звіту.

На мал. 9 показаний зразковий вид вікна попереднього перегляду сформованого звіту.

В звіті може застосовуватися і більш складне групування даних, оскільки кожна група може, у свою чергу, мати вкладену групу.

Побудова звіту для зв'язаних наборів даних.У тих випадках, коли потрібно створити звіт на основі даних, одержуваних з декількох таблиць БД, можна здійснити двома способами.

1.За допомогою компонента Query об'єднати дані з декількох таблиць в один набір даних, після чого будувати звіт звичайним чином, аналогічно тому, як було показано вище.

2.Створити кілька наборів даних (по одному на кожну таблицю) і з'єднати ці набори між собою зв'язком майстер-детальний, використовуючи їх властивості MasterSource і MasterFields. Далі для відображення інформації зі зв'язаних наборів даних у звіті застосовуються компонент QRBand (для головної таблиці) і компонент QRSubDetail (для підлеглої таблиці). Саме особливості застосування цього способу і будуть розглянуті нижче.

Компонент QRSubDetail

спеціально призначений для включення в звіт інформації з детального набору даних. Властивість DataSet цього компонента повинна містити посилання на детальний набір даних.

Нехай у БД бухгалтерії підприємства маються дві таблиці. Перша таблиця firm.db містить інформацію про співробітників і має такі поля: Табельний номер (Tab_nom), Ім'я співробітника (Name), Відділ (Otdel), Посада (Dolgn), Оклад (Salary). В другій таблиці zarplata.db зберігається помісячна інформація про виплату зарплати кожному співробітникові з початку поточного року і включає такі поля: Порядковий номер запису (Ncmer), Табельний номер (Tab_nom), Місяць (Mes), Кількість відпрацьованих днів (Dni), Виплачена зарплата (Zarpl).

Таблиці firm.db і zarplata.db знаходяться у відношенні один-до-одного, тобто одному співробітникові можуть відповідати кілька фактів виплати зарплати.