Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1071 Курсова заочников.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
10 Мб
Скачать
☆

'Ця процедура викликає форму та передає код пацієнта як параметр

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 - Звіт “Премія” в режимі перегляду перед печаттю