- Вікно вибору таблиць та полів для форми
У прикладі, що розробляється, при побудові форми для таблиці ПОСАДИ необхідно вибрати всі поля. На другому кроці () майстер дає можливість забезпечити зовнішній вигляд форми структурно виваженим.
Рис. - Вибір зовнішнього вигляду форми
Виберемо вигляд форми в один столбец. На третьому кроці () майстер забезпечує дизайн форми
Рис. - Вибір оформлення форми
Користувач вибирає той стиль, який йому більше до вподоби. Нарешті, на останньому, четвертому кроці майстер пропонує назвати форму та вибрати варіант наступних дій користувача: відкрити форму для накопичення (редагування) даних або для подальшого редагування форми, яка побудована майстром. Майстер на цьому кроці також дає можливість завантажити вікно-підказку по елементах побудованої форми та правилах роботи з нею.
Майже на одному подиху будується форма і для другої таблиці – ПрацівникИ, але, на відміну від побудови форми для таблиці ПОСАДИ, тут бажано при формуванні множини полів потурбуватись про наявність поля Назва з таблиці ПОСАДА. Цей елемент у формі таблиці ПрацівникИ допоможе бачити, а при необхідності і виправляти назву посади.
Форма для таблиці ЗАРПЛАТА будується за тими ж правилами, що й попередні, але на відміну від них тут виникає необхідність зосередити певні сили та вміння для побудови обчислень. Спочатку в середовищі майстра формуємо множину полів форми: це всі поля таблиці ЗАРПЛАТА, поля Назва та ТарифЗаГодину з таблиці ПОСАДА, а також поля Прізвище, Імя та По-батькові з таблиці ПРАЦІВНИКИ. Після закінчення звичайної роботи майстра побудови форм необхідно потурбуватись про поля, що обчислюються. Тобто, вже побудовану форму для таблиці ЗАРПЛАТА потрібно редагувати. Для цього її треба відкрити конструктором. Далі головне: необхідно визначитись, в який момент виконувати обчислення? Тут відповідь неоднозначна. Все залежить від вибору подій, після яких виконуються ті чи інші обчислення. Можна рекомендувати обчислення кожного виразу вести, як тільки змінюється значення його аргументів. Після відповіді на це питання в формі ЗАРПЛАТА спочатку забезпечимо обчислення поля СумаНарахована. Значення цього поля залежить від значень двох полів: КількістьГодин та ТарифЗаГодину. У властивостях елементу форми КількістьГодин ()
Рис. - Вікно властивостей поля Кількість годин
вибираємо закладку События, на рівні После обновления замовляємо значення Процедура обработки событий і далі кнопкою відкриваємо вікно модуля (),
Рис. - Вікно модуля, пов’язаного з формою "Зарплата"
де редагуємо відповідну процедуру з назвою КількістьГодин_AfterUpdate (дослівно - КількістьГодин_ПісляОновлення). Тіло цієї процедури буде таким:
СумаНарахована = КількістьГодин* ТарифЗаГодину
Так само будуємо процедуру обробки події оновлення другого аргументу поля СумаНарахована, а саме аргументу ТарифЗаГодину. Тепер буде побудована друга процедура з назвою ТарифЗаГодину_AfterUpdate, в якій тіло процедури співпадає з тілом процедури КількістьГодин_AfterUpdate (отже, можна скористатись буфером обміну замість набору тексту!). Значення інших полів, що обчислюються, також залежать врешті-решт від аргументів КількістьГодин та ТарифЗаГодину. Це означає, що процедури, вже визначені вище, необхідно редагувати додаванням нових інструкцій. Редагування процедур виконується в тому ж вікні модуля, в яке можна потрапити знову ж таки через властивості поля та обробку подій (кнопка ). Беручи до уваги алгоритм, який побудовано вище (формули (1) - (6)), ці процедури набувають такого вигляду:
Dim s As Integer
СумаНарахована = КількістьГодин * ТарифЗаГодину
s = Int(СумаНарахована)
Податок = min(85 - 17, max(s - 17, 0)) * 10 / 100 + _
min(170 - 85, max(s - 85, 0)) * 15 / 100 + _
min(1020 - 170, max(s - 170, 0)) * 20 / 100 + _
min(1700 - 1020, max(s - 1020, 0)) * 30 / 100 + _
max(s - 1700, 0) * 40 / 100
ВнесокПФ = IIf(СумаНарахована <= 150, _
СумаНарахована * 1 / 100, min(СумаНарахована * 2 / 100, 32))
ВнесокФССбр = min(СумаНарахована * 0.5 / 100, 8)
ВнесокФССл = IIf(СумаНарахована <= 150, _
СумаНарахована * 0.25 / 100, min(СумаНарахована * 0.5 / 100, 8))
СумаНаРуки = СумаНарахована - (Податок + ВнесокПФ + ВнесокФССбр +
Крім названих вище процедур необхідно записати в цьому ж модулі функції max та min:
Private Function max(a, b)
max = IIf(a >= b, a, b)
End Function
Private Function min(a, b)
min = IIf(a >= b, b, a)
End Function
Пояснення:
Інструкція Dim s As Integer у мові VBA означає опис типу змінної s, а саме, її тип визначено як цілий.
Знак "_" в кінці тексту деяких рядків процедур означає перенесення частини поточної інструкції на новий рядок.
Зауваження: Критерій вибору обробки подій у даному прикладі може не привести до бажаного результату, якщо зміни аргументів вже проведені за межами форми. Тому при необхідності можна запропонувати обробляти подію Выход. Відповідні процедури будуть ідентичними до записаних вище.
Остаточний вигляд форми для таблиці ЗАРПЛАТА зображено на .
Рис. - Остаточний вигляд форми для таблиці ЗАРПЛАТА
Побудова звітів
Нагадаємо: звіт необхідно побудувати групуванням за полем Посада, сортуванням за полем Прізвище. Повертаємось до вікна бази даних () та вибираємо закладку Отчеты. Кнопкою Создать починаємо роботу з побудови звіту (). Тут, як і у випадку побудови форми, зручно скористатись майстром . Крім вибору варіанту технології побудови звіту необхідно визначитись з базовою таблицею для звіту.
Рис. - Вікно вибору варіанту створення звіту
На першому кроці () майстер звіту пропонує визначитись з множиною полів для вибраної таблиці (таблиць).
Рис. - Вікно вибору списку полів для звіту
Крім всіх полів таблиці ЗАРПЛАТА, виберемо поля Назва та ТарифЗаГодину з таблиці ПОСАДА, а також поля Прізвище, Імя, По-батькові та Посада з таблиці ПРАЦІВНИКИ.
На другому кроці () майстер пропонує вибрати таблицю, що є базовою. Цю таблицю вже оголошено