- •Методичні вказівки та завдання до курсової роботи №2 з курсу
- •1 Вибір варіанта завдання
- •2 Загальні вимоги до виконання курсової роботи №2
- •3 Варіанти індивідуальних завдань до курсової роботи
- •4 Стислі теоретичні зведення
- •4.1 Методи об'єкта Recordset
- •MsgBox "Книг такого автора в бібліотеці немає"
- •4.2 Властивості об'єкта Recordset
- •5 Приклад виконання курсової роботи
- •5.1 Завдання на курсову роботу:
- •Пояснення до курсової роботи
- •'Ця процедура викликає форму та передає код пацієнта як параметр
- •Література
'Ця процедура викликає форму та передає код пацієнта як параметр
DoCmd.OpenForm "Вартість лікування", acNormal,,, _
acFormEdit, acWindowNormal, kp
End Sub
Рисунок 5.8 - Форма “Вартість лікування” в режимі конструктора
В формі розташовано такі елементи управління:
написи з текстами, що пояснюють зміст текстових полів;
текстове поле, в якому виводиться поточна дата; цьому полю надане ім’я dlik;
текстове поле, в якому виводиться код пацієнта, що передано в цю форму при її виклику як параметр; цьому полю надане ім’я kod;
текстове поле, в якому виводиться прізвище пацієнта, яке знайдено по коду в таблиці Пацієнти; цьому полю надане ім’я prizv;
текстове поле, в якому виводиться загальна вартість лікування; цьому полю надане ім’я vart;
текстове поле, в якому виводиться загальна сума до сплати; цьому полю надане ім’я splata;
список, в якому виводиться результат запиту про проведене лікування для даного пацієнта та на поточну дату, має ім’я lik;
командна кнопка з написом “Печать квитанції”, що виводить на печать звіт про проведене лікування та підраховує загальну вартість лікування та суму до сплати; має ім’я “Квитанція”.
Програма, що заповнює текстові поля та список даними, працює на подію Load – завантаження форми. Текст програми:
Private Sub Form_Load()
Dim s As Currency, k As String, pacient As Recordset
Dim i As Integer, n As Integer, spl As Currency
Dim s1 As String, s2 As String, s3 As String
Set pacient = CurrentDb.OpenRecordset("Пацієнти", _
dbOpenDynaset)
k = Me.OpenArgs ‘беремо аргумент, що передано при виклику
dlik.SetFocus
dlik.Text = Date
kod.SetFocus
kod.Text = k
pacient.FindFirst "[Код пацієнта]='" & k & "'"
prizv.SetFocus
prizv.Text = pacient![Прізвище]
lik.SetFocus
s1 = "SELECT [Проведене лікування].Процедура, _
[Проведене лікування].[Ступень важкості], _
[Проведене лікування].Прізвище,"
s2 = "[Проведене лікування].Вартість, _
[Проведене лікування].[До сплати] _
FROM [Проведене лікування]"
s3="WHERE((([Проведене лікування].[Дата лікування]) = _ Date()) And (([Проведене лікування].[Код пацієнта]) = _
kod.Text));"
kod.SetFocus
lik.RowSource = s1 & s2 & s3
s = 0: spl = 0
n = lik.ListCount ‘ підрахувати кількість строк в списку
For i = 0 To n - 1
s = s + lik.Column(3, i) ‘сумуємо вартість лікування
spl = spl + lik.Column(4, i) ‘сумуємо до сплати
Next i
vart.SetFocus
vart.Text = s
splata.SetFocus
splata.Text = spl
End Sub
В змінні s1,s2,s3 записано запит, що використовує запит “Проведене лікування”, створений конструктором запитів. Вікно з цим запитом наведено на рис.5.9.
З командною кнопкою “Печать квитанції” пов’язана процедура, що викликає в режимі попереднього перегляду створений звіт з ім’ям “Квитанція”. Цей звіт створено конструктором звітів. Він має групи для кожного пацієнта, для групи обчислюється сума вартості лікування та загальна сума до сплати. Звіт в режимі конструктора наведено на рис.5.10.
Процедура виклику звіту:
Private Sub Квитанція_Click()
kod.SetFocus
DoCmd.OpenReport "Квитанція", acViewPreview, , _
"[Код пацієнта] ='" & kod.Text & "' _
And [Дата лікування]=Date()"
End Sub
Метод OpenReport викликає звіт “Квитанція”. Останній параметр задає умови для даних, що будуть показані в звіті. Показані будуть тільки дані для пацієнта, чий код записано в текстовому полі kod, та тільки про лікування, що проведено сьогодні.
Квитанція в робочому режимі наведена на малюнку 5.11.
Рисунок 5.9 - Вікно конструктора запитів, що створює запит “Проведене лікування”
Поле “До сплати” – обчислювальне поле, обчислюється за формулою:
До сплати: IIf([Пацієнти]![Категорія]="3";[Вартість];IIf([Пацієнти]![Категорія]="2";[Вартість]*0,5;0))
Р
исунок
5.10 - Звіт “Квитанція” в режимі конструктора
Рисунок 5.11 - Звіт “Квитанція” в режимі попереднього перегляду
Приступимо до останнього завдання курсової роботи – створення звіту, який для кожного лікаря виводить загальну суму, що сплачена пацієнтами, щомісячно з підрахунком відсоткового входження до загальної суми.
Для створення цього звіту необхідно створити запит з угрупуванням даних по місяцях для кожного лікаря. Створений запит наведено на рис.5.12 Обчислювальне поле “Місяць” використовує функцію
M
onth,
яка обчислює місяць від поля “Дата
лікування”.
Рисунок 5.12 - Запит “Робота лікарів” в режимі конструктора.
Для того, щоб обчислити щомісячну премію лікарів, на основі запиту “Робота лікарів” створюємо запит, що має всі поля основного запиту та обчислювальне поле “Премія”, що обчислюється за формулою:
Премія: IIf([Sum_Вартість]<300;0,15; _
IIf([Sum_Вартість]<1000;0,1;0,05))*[Sum_Вартість]
В цій формулі Sum_Вартість – ім’я поля з запиту “Робота лікарів”, що обчислює сумарну вартість лікування для кожного лікаря та за кожен місяць.
Звіт “Премія” створювався за допомогою майстра звітів. Потім в вікні конструктора звітів були зроблені незначні доповнення. Створений звіт в режимі конструктора наведено на рис.5.13.
Рисунок 5.13 - Звіт “Премія” в режимі конструктора
Майстром створена група за кодом лікаря, для цієї групи додані дві стрічки «Заголовок группы» та «Примечание группы». В примітці групи розташовано чотири обчислювальних поля, які сумують дані з полів запиту «Премія» – Sum_Вартість та Премія, та обчислюють відсотки від загальних сум за лікування та премій по всій стоматологічній лікарні.
На рис.5.14 наведено цей звіт в режимі попереднього перегляду перед печаттю. Те, що ви бачите на екрані, буде відтворено на листах при печаті.
Рисунок 5.14 - Звіт “Премія” в режимі перегляду перед печаттю
