Розробка гнучкої системи автоматизації обліку імунобіологічних препаратів

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    2,33 Мб
  • Опубликовано:
    2012-10-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка гнучкої системи автоматизації обліку імунобіологічних препаратів

Міністерство освіти та науки України

Криворізький інститут

Кременчуцького університету економіки, інформаційних технологій та управління

Кафедра Технічної кібернетики




ДИПЛОМНА РОБОТА

зі спеціальності

.091402 “Гнучкі комп’ютеризовані системи та робототехніка“

ПОЯСНЮВАЛЬНА ЗАПИСКА

”Розробка гнучкої системи автоматизації обліку

імунобіологічних препаратів”

Студента групи ГКС-03-з Горбенко Олени Олександрівни

Керівник роботи проф., к.т.н. Корнілов Георгій Іванович

Консультанти:

зі спеціальної частини доц. Вдовиченко І.Н.

з програмної частини проф., д.т.н. Мурашко А.Г.

з економічної частини доц., к.е.н. Тимко Є.В.

з охорони праці доц., к.т.н. Климович Г.Б.

нормоконтроль ст. викл. Супрунова Ю.А.

Завідувач кафедри ТК доц., к.т.н. Старіков О.М.

Кривий Ріг 2008

Міністерство освіти та науки України

Криворізький інститут

Кременчуцького університету економіки, інформаційних технологій та управління

Кафедра Технічної кібернетики

Спеціальність 7.091402 “Гнучкі комп’ютеризовані системи та робототехніка“

ЗАТВЕРДЖУЮ

Зав. кафедрою доц., к.т.н. Старіков О.М.

_______________________

" 31 " жовтня 2007 р.

ЗАВДАННЯ

на дипломну роботу студента

Горбенко Олени Олександрівни

(прізвище, ім'я, по-батькові)

1. Тема роботи: Розробка гнучкої системи автоматизації обліку імунобіологічних препаратів

затверджена наказом по інституту від " 29 " жовтня 2007 р. №65Са-01

. Термін здачі студентом закінченої роботи 01.06.08.___________

. Вхідні дані до роботи: Вимоги до кінцевого програмного продукту, вихідні масиви даних

. Зміст розрахунково-пояснювальної записки (перелік питань, що підлягають розробці): Постановка задачі, Інформаційні системи як сукупність організаційних і технічних засобів для збереження та обробки інформації; Основи технології Activex Data Objects (ADO); Опис функціональних можливостей і програмної реалізації системи; Економічне обґрунтування доцільності розробки програмного продукту; Охорона праці.

. Перелік графічного матеріалу (з точними вказівками обов'язкових креслень)

. Логіко-функціональна схема роботи користувача з системою;______

.Схема взаємозв’язку таблиць бази даних;________________________

. Типи та призначення полів таблиць бази даних__________________

. Приклади робочих вікон системи; __________________________

. Ієрархія форм системи;_______________________________________

. Схема архітектури ADO; ___________________________________

. Схема взаємодії в ADO основних COM інтерфейсів ______________

. Схема компонентів OLE DB__________________________________

6. Консультанти з роботи, з вказівками розділів роботи, що належать до них

Розділ

Консультант

Підпис, дата



Завдання видав

Завдання прийняв

Спеціальна частина

Вдовиченко І.Н.



Програмна частина

Мурашко А.Г.



Економічна частина

Тимко Є.В.



Охорона праці

Климович Г.Б.




. Дата видачі завдання 31.10.07 р.

Керівник ____________________

(підпис)

Завдання прийняв до виконання ____________________

(підпис)

КАЛЕНДАРНИЙ ПЛАН

№ п/п

Найменування етапів дипломної роботи

Термін виконання етапів роботи

Примітки

1.

Отримання завдання на дипломну роботу

31.10.07


2.

Огляд існуючих рішень

20.02.08


3.

Обґрунтування вибраного рішення

03.03.08


4.

Програмна частина (постановка задачі, створення програмного забезпечення, опис алгоритму рішення задачі, проектування та опис інтерфейсу користувача, опис програми)

30.04.08


5.

Оформлення пояснювальної записки

15.05.08


6.

Оформлення графічної документації

25.05.08


7.

Оформлення електронних додатків до диплому

27.05.08


8.

Представлення дипломної роботи до захисту

01.06.08



Студент-дипломник _________________

(підпис)

Керівник роботи _________________

(підпис)

АНОТАЦІЯ

Метою даної дипломної роботи є розробка гнучкої системи для автоматизованої реєстрації та обліку руху імунобіологічних препаратів в межах лікувально-профілактичної установи. Система реалізована в середовищі Delphi 6.0 з використанням технології доступу до баз даних ADO.

Розділів 6, схем та малюнків 40, таблиць 7, бібліографічних посилань 28, загальний обсяг - 122.

Аннотация

Целью данной дипломной работы является разработка гибкой системы для автоматизации регистрации и учета движения иммунобиологических препаратов в пределах лечебно-профилактического учреждения. Система реализована в среде Delphi 6.0 с использованием технологии доступа к базам данных ADO.

Разделов 6, схем и рисунков 40, таблиц 7, библиографических ссылок 30, общий объем - 122.

The summarypurpose of this diploma work is development of the flexible system for automation of registration and account of immunobiological preparations motion in the medical establishment. The system is realized in the environment of Delphi 6.0 with the use of access databases technology ADO.6, circuits and figures 40, tables 7, bibliographic references 30, total amount - 122.

ЗМІСТ

ВСТУП

. ПОСТАНОВКА ЗАВДАННЯ

.1 Найменування та область застосування

.2 Підстава для створення

.3 Характеристика розробленого програмного забезпечення

.4 Мета й призначення

.5 Загальні вимоги до розробки

.6 Джерела розробки

. ТЕОРЕТИЧНЕ ДОСЛІДЖЕННЯ ІНФОРМАЦІЙНИХ СИСТЕМ ЯК СУКУПНОСТІ ЗАСОБІВ ДЛЯ ЗБЕРЕЖЕННЯ ТА ОБРОБКИ ІНФОРМАЦІЇ

.1 Класифікація інформаційних систем

.2 База даних як складова частина інформаційної системи

.2.1 Моделі представлення даних

.2.2 Реляційний спосіб доступу до даних

.2.3 Таблиці

.2.4 Ключові поля

.2.5 Індекси

.2.6 Зовнішні ключі

. ОСНОВИ ТЕХНОЛОГІЇ ACTIVEX DATA OBJECTS (ADO)

.1 Огляд технології ADO

.2 Огляд технології OLE DB

.2.1 OLE DB провайдери

.2.2 ODBC провайдери

.3 Архітектура технології ADO

.3.1 Огляд компонентів ADO в середовищі Delphi

.3.2 Інтерфейси архітектури ADO

.3.3 Використання компонента TADOConnection

.3.4 Використання параметрів запиту

.3.5 Синхронізація даних клієнта і сервера

.3.6 Робота з транзакціями

.3.7 Атрибути доступу до даних

. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ І ПРОГРАМНОЇ РЕАЛІЗАЦІЇ СИСТЕМИ

.1 Предметна область і задачі, покладені на гнучку систему автоматизації

.2 Апаратні вимоги, та вимоги до системного програмного забезпечення

.3 Розробка логіко-функціональної схеми системи

.4 Опис інтерфейсу користувача

. ЕКОНОМІЧНЕ ОБҐРУНТУВАННЯ ДОЦІЛЬНОСТІ РОЗРОБКИ ПРОГРАМНОГО ПРОДУКТУ

.1 Визначення витрат на створення програмного продукту

.2 Витрати, пов'язані з розробкою програми на ПК

.3 Визначення планованої економії від упровадження програмного продукту

. ОХОРОНА ПРАЦІ

.1 Аналіз шкідливих і небезпечних факторів в Міська клінічна лікарня №2

.2 Фізичні й психофізіологічні небезпечні та шкідливі виробничі фактори при роботі на комп’ютері й заходи по їх знищенню

.2.1 Електромагнітне випромінювання

.2.2 Рентгенівське випромінювання

.2.3 Підвищений рівень шуму

.2.4 Мікроклімат

.2.5 Освітлення

.2.6 Психофізіологічні шкідливі і небезпечні виробничі чинники

.3 Організаційні і технічні заходи по зменшенню рівня шкідливих виробничих чинників

.3.1 Захист від електромагнітних випромінювань

.3.2 Захист від ураження електричним струмом

.3.3 Захист від статичної електрики

.3.4 Захист від шуму та вібрації

.3.5 Оздоровлення повітряного середовища

.3.6 Захист від рентгенівського випромінювання

.3.7 Забезпечення раціонального освітлення

.4 Пожежна безпека

.4.1 Пожежна і вибухова безпека в робочій зоні технічного обслуговування в приміщеннях з ПЕОМ

ВИСНОВКИ

СПИСОК ЛІТЕРАТУРИ

ДОДАТОК

ВСТУП


Потоки інформації, що циркулюють у світі, який нас оточує, величезні. У часі вони мають тенденцію до збільшення. Тому у любій організації, як великій, так і малій, виникає проблема такої організації управління даними, яка забезпечила б найбільш ефективну роботу. Деякі організації використовують для цього шафи з папками, але більшість надають перевагу комп’ютеризованим засобам - базам даних, які дозволяють ефективно зберігати, структурувати і систематизувати великі об’єми даних. І вже сьогодні без баз даних неможливо уявити роботу більшості фінансових, промислових, торгових та інших організацій. Як би не було баз даних, вони б просто захлинулись в інформаційній лавині.

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

Для реалізації цих вимог було зручніше всього не вдаватись до засобів якої-небудь універсальної СКБД, а створити незалежну програму у вигляді виконуємого файлу, що працює з-під Windows, з інтерфейсом максимально пристосованого для зручної роботи, що не потребує ніяких додаткових знань.

Реалізація даної задачі проводиться у системі програмування Delphi 6, яка володіє великими можливостями по створенню додатків баз даних, необхідним набором драйверів для доступу до самих відомих форматів баз даних, зручними і розвиненими засобами для доступу до інформації, що розташована як на локальному диску, так і на віддаленому сервері, а також великою колекцією візуальних компонентів для побудування вікон, які відображаються на екрані

Система візуального програмування Delphi користується великою популярністю серед широкого круга користувачів: від програмістів, що починають, до досвідчених розробників, складних додатків, що займаються створенням і великих інформаційних систем.

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

Традиційно Delphi відносять до так званих RAD-систем (Rapid Application Development, швидка розробка додатків). Проте ця система володіє також практично всіма можливостями сучасних СУБД, таких як, наприклад, Microsoft Access або Visual FoxPro. Вона дозволяє створювати додатки за допомогою широкого набору інструментальних програмних засобів, візуально готувати запити до баз даних, а також безпосередньо писати запити на мові SQL.

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

1. ПОСТАНОВКА ЗАВДАННЯ


1.1 Найменування та область застосування


Найменування розробки: Гнучка система автоматизації обліку імунобіологічних препаратів. Система пройшла практичну апробацію і може бути впроваджена в КЗ «Міська клінічна лікарня №2».

1.2 Підстава для створення


Підставою для розробки є наказ №65Са-01 від 29 жовтня 2007 р. по Криворізькому інституту КУЕІТУ.

Початок робіт: 31.10.07. Закінчення робіт: 01.06.08.

1.3 Характеристика розробленого програмного забезпечення


Гнучка система автоматизації була реалізована в середі Delphi 6.0. з використанням технології доступу до файлів баз даних ADO. Система може використовуватися як в локальному, так і в мереженому варіанті. Для функціонування системи потрібна інсталяція MS Office.

До складу системи входять:

·  Ukr_vak.exe - виконавчий файл розробленої системи;

·        baza.mdb - файл, що містить таблиці баз даних, і який може бути розташований на будь-якому комп’ютері, що підключений до локальної мережі; help.hlp - довідковий файл системи.

1.4 Мета й призначення


Метою даної дипломної роботи було створення програми, яка зможе автоматизувати процес обліку імунопрофілактики дітей та підлітків.

Система була реалізована з використанням технології доступу до баз даних АDО. Розробка пройшла практичну апробацію і може бути використана на прикладі КЗ «Міська клінічна лікарня №2».

1.5 Загальні вимоги до розробки


Вимоги до програмного забезпечення:

·        Робота в середовищі операційних систем Windows 98/2000/XP;

·        Відсутність додаткових вимог до розміщення здійснених файлів;

·        Простота й зрозумілість інтерфейсу.

Мінімальні вимоги до апаратного забезпечення:

·        ПК типу IBM PC або сумісний з ним, продуктивністю не менше 166 МГц;

·        Оперативна пам'ять не менше 32 МГбайт;

·        Монітор із SVGA адаптером;

·        НЖМД не менше 4,3 Гбайт;

·        НГМД 3,5 дюйми;

·        Компакт-дисковий носій (CD);

·        Монітор, клавіатура, маніпулятор типу "миша".

 

.6 Джерела розробки


Джерелами розробки дипломної роботи є:

·        довідкова література;

·        наукова література;

·        технічна література;

·        програмна документація.

2. ТЕОРЕТИЧНЕ ДОСЛІДЖЕННЯ ІНФОРМАЦІЙНИХ СИСТЕМ ЯК СУКУПНОСТІ ЗАСОБІВ ДЛЯ ЗБЕРЕЖЕННЯ ТА ОБРОБКИ ІНФОРМАЦІЇ


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

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

Ще один приклад. На великому сучасному підприємстві в тому чи іншому вигляді повинна існувати інформаційна система. Для забезпечення якісного управління потрібно знати (можливо з різним ступенем оперативності) об'єм запасів тієї чи іншої сировини, скільки і якої вироблено продукції, скільки споживається електроенергії, який цех що виробляє і що потребує, та багато іншої інформації, яка стосується виробничих питань. Крім цього, профспілкам необхідні відомості про потреби співробітників у соціально-побутовій, медично-оздоровчій сферах, тощо. Для обробки всіх таких даних потрібні певні організаційні і технічні засоби, тобто ІС.

Найстаріші (у моральному і у фізичному розумінні) системи повністю базувалися на ручній праці. Пізніше їм на зміну прийшли різні механічні пристрої для обробки даних (наприклад, для сортування, копіювання, асоціативного пошуку, тощо). Наступним кроком стало впровадження автоматизованих інформаційних систем (АІС), тобто систем, де для забезпечення інформаційних потреб користувачів використовується ЕОМ зі своїми носіями інформації.

В наш час - епоху інформаційного вибуху - розроблюється і впроваджується велика кількість самих різноманітних АІСів з дуже широким спектром використання.

2.1 Класифікація інформаційних систем


В науковій літературі існує досить значне розмаїття щодо класифікації АІС. Різні автори в залежності від своїх задач та точок зору виділяють ті чи інші критерії і розподіляють пріоритети між ними. Зупинимось на одному з таких підходів, який на наш погляд, найбільш узгоджується з іншими темами цього курсу. Отже, АІС класифікуються:

·        за призначенням (фактографічні, документальні та змішані);

·        за мовами (замкнуті системи, системи з базовою мовою та змішані);

·        за локалізацією (локальні та розподілені);

·        за схемою додаткової обробки (постобробка та попередня обробка);

·        за структурами даних (ієрархічні, мережаного типу, реляційні).

Критерії за якими діляться АІС:

) за призначенням.

Документальні системи зорієнтовані на обробку та зберігання документа (порівняно великої за розміром послідовності символів), внутрішню структуру якого система (майже) повністю ігнорує, тобто він неподільний (атомарний) з точки зору системи. Споживачем результатів пошуку виступає, як правило, кінцевий користувач.

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

Змішані системи включають в себе в тих чи інших пропорціях риси обох вищеназваних варіантів. Переважну більшість сучасних систем для ПЕОМ слід віднести до категорії змішаних.

Звичайно, наведені описові характеристики не дають можливості чітко визначитись у випадку класифікації кожної конкретної ІС, але дозволяють зробити перші грубі припущення. Для більш точних класифікаційних оцінок необхідно враховувати додаткові властивості, що відносяться до пошукового процесу, а також до особливостей мов запитів, реалізованих в тій чи іншій системі. Оскільки подальші наші розгляди будуть стосуватися переважно фактографічних систем, тому зараз приділимо більше уваги саме документальним системам.

Дескрипторні або документальні АІС (ДАІС) історично були першими. Спочатку їх мовою була нічим не обмежена природна мова. Перші ДАІС були призначені для пошуку книг та документів у бібліотеках і великих сховищах, тому їх і почали називати документографічними.

Основним елементом інформаційного простору ДАІС була анотація або реферат книги, документа, явища чи об'єкта. Реферат повинен відображувати ті риси, які цікавлять користувача (як правило - людини). В ньому виділяються слова чи словосполучення, які в сукупності майже однозначно (в ідеалі точно) відповідають повному опису об'єкта, крім того, таких слів повинно бути відносно небагато. Їх називають ключовими словами або дескрипторами. Запит для ДАІС можна сформулювати у вигляді переліку дескрипторів, який на думку користувача характеризує потрібний реферат, а значить, і відповідний об'єкт. Алгоритм формування відповіді послідовно порівнює запит з кожним рефератом і вибирає такі, що пройшли порівняння. В таких системах запит називають пошуковим розпорядженням, а реферат - пошуковим образом.

) За мовами (замкнуті системи, системи з базовою мовою та змішані);

Системи з базовою мовою передбачають взаємодію користувача з СУБД з середовища якоїсь іншої мови програмування, де і виконуються більшість постпошукових перетворень даних. Такий підхід зручний для розробки різного роду систем як надбудов над СУБД, бо дає можливість створювати високоефективні програми постпошукової обробки даних.

Замкнуті системи самостійно забезпечують користувача всіма необхідними засобами як для локалізації даних, так і для їх постпошукової чи передпошукової обробки. Недоліком таких систем є те, що в них відсутні (або малоефективні) засоби для розробки надбудов - проблемно-орієнтованих комплексів.

Змішані системи передбачають наявність обох можливостей двох попередніх підходів і є найбільш поширеними на сьогодні.

) за локалізацією (локальні та розподілені);

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

) за схемою додаткової обробки (постобробка та попередня обробка);

Головним призначенням будь-якої системи баз даних є підтримка функцій локалізації даних, що зберігаються, але дуже важливою властивістю, що може значно підняти інтерфейсний рівень системи, є наявність постобробки даних після їх локалізації в базі даних, чи попередньої обробки.

) за структурами даних (ієрархічні, мережного типу, реляційні).

Структури даних, що підтримуються в системі бази даних, - це важливий фактор, що впливає, як на виразову потужність, так і на ефективність функціонування. Для систем з ієрархічною структурою базовою структурою даних є дерево; як правило, вони мають найвищу ефективність функціонування, але виразові можливості їх відносно низькі. Системи з структурами даних типу мережа мають значно кращі виразові можливості, але дещо програють у ефективності функціонування, точніше, від користувача вимагається значно вищий рівень кваліфікації для ефективної експлуатації таких систем. В останні десятиріччя найбільшого розповсюдження (особливо для персональних ЕОМ) зазнали СУБД реляційного типу, для яких характерно щонайпростіша структура даних (плоский файл), але одночасно суттєво підвищений рівень мов маніпулювання даними, що максимально употужнює виразові можливості та знижує ефективність функціонування, тому для таких систем потрібні потужні комп’ютери, і вони значно чутливіші (порівняно з попередниками) до росту об’ємів даних.

2.2 База даних як складова частина інформаційної системи


База даних (БД) - це сукупність взаємозв'язаних даних, що зберігаються разом. Основними та невід'ємними властивостями БД є такі:

для даних допускається така мінімальна надлишковість, яка сприяє їх оптимальному використанню в одному чи кількох застосуваннях;

незалежність даних від програм;

для пошуку та модифікації даних використовуються спільні механізми;

як правило, у складі БД існують засоби для підтримки її цілісності та захисту від неавторизованого доступу.

Прокоментуємо додатково підкреслені слова та вирази у вищенаведеному описі, порівнюючи в основному з близьким попередником БД - файловими системами (ФС).

На відміну від файлових систем БД зорієнтована для підтримки даних для кількох застосувань. На практиці ця властивість інколи порушується. Часом таке порушення можна пояснити тим, що проект вводиться в дію поетапно, і у певний момент дійсно функціонує тільки одне застосування. Іноді відхід від вказаної властивості зумовлений іншими важливими причинами, але, на жаль, не є рідкістю просто помилка у виборі засобів для реалізації проекту і ситуація нагадує відоме прислів'я про стрілянину з гармати по горобцям.

Взаємозв'язок даних полягає в тому, що доступ до певної групи даних якогось застосування загалом полегшує доступ до інших груп даних цього ж застосування. В умовах орієнтації БД на велику кількість застосувань виникає необхідність у підтримці значного числа різноманітних зв'язків між даними.

Вимога мінімізації надлишковості полягає у мінімальній кількості копій для одних і тих же даних з урахуванням орієнтації на кілька застосувань. Ці надлишкові копії використовуються для підтримки зв'язків між даними. Як приклад, розглянемо відомості, що зберігаються у відділі кадрів деякого підприємства про своїх співробітників. Користувачами цієї інформації виступають адміністрація, профспілкова організація та бухгалтерія підприємства. Адміністрацію цікавлять дані про кваліфікацію, професійний рівень і досвід роботи, профспілки використовують відомості соціально-побутового характеру, а бухгалтерія оброблює ті дані, що потрібні для нарахувань заробітної плати та підрахунку податків, інших нарахувань та відрахувань. Хоча інформація і різнорідна, але все ж має значну спільну частину. Всім користувачам потрібні службовий номер, прізвище, ім'я, по-батькові співробітника, його рік народження, дані про умови праці. Інформація про сімейний стан та склад сім'ї використовується бухгалтерією і профспілками. Якщо для зберігання даних застосувати технологію ФС, то можливі два крайні варіанти: а)незалежні один від одного файли, відсортовані згідно з потребами того чи іншого користувача, передбачають значну надлишковість даних; б)всі дані знаходяться у одному файлі, відсортованому так, як потрібно одному з користувачів (наприклад, адміністрації) - надлишковість при цьому практично відсутня, але зручно працювати тільки одному з користувачів. Концепція БД займає проміжне становище між вищеописаними крайніми позиціями.

Зайва надлишковість має кілька недоліків. По-перше, зберігання кількох копій веде до додаткових витрат пам'яті. По-друге, доводиться виконувати численні операції оновлення для кількох надлишкових копій. Крім того, оскільки різні копії даних можуть відповідати різним стадіям оновлення, то інформація, що зберігається в системі на певний час може стати суперечливою.

Про незалежність даних часто говорять, як про одну з основних властивостей БД. Під цим поняттям розуміється можливість зміни структури даних без зміни програм, що її використовують, а також рівень самоінтерпретованості даних. Міра незалежності даних тісно пов'язана з ступенем необхідної деталізації відомостей про організацію їх зберігання. Проілюструємо цю ситуацію дещо абстрагованим прикладом. Припустимо, що ви збираєтесь переглянути фільм у кінотеатрі, а для того, щоб прибути на місце плануєте скористатись послугами таксі. Поінформованість та досвід водія таксі відповідають мірі незалежності. У одному випадку Вам достатньо вказати лише назву фільму, а все інше зробить водій. У іншому випадку Вам потрібно буде визначити назву кінотеатру. Наступне зниження рівня - це адреса кінотеатру, а ще далі - вказівки по дорозі типу "їхати прямо, звернути наліво, а через 500 метрів - направо і т.п.". Аналогічно і користувачу при підвищенні ступеня незалежності даних треба менше задавати (і знати) "процедурної" інформації щодо доступу до даних. Зауважимо, що певний (хоч і досить низький) рівень незалежності мають сучасні ФС: при доступі до файлу достатньо вказати його ім'я, а інформація про треки та сектори непотрібна, але зміна розміру запису вимагає корекції всіх програм, що звертались до цього файлу.

Під цілісністю БД розуміють несуперечливість між собою даних, що в ній зберігаються. Наприклад, для кадрових відомостей рік народження співробітника не може бути більшим року призначення на посаду або поточного року. Щоб запобігти виникненню таких ситуацій при модифікації і поповненнях БД, співвідношення між даними контролюються спеціальними засобами підтримки цілісності БД. Специфікація подібних умов, що накладаються на дані і відслідковуються при будь-яких їх оновленнях, покладаються на спеціальну службу Адміністратора бази даних (АБД), а системи управління базами даних (СУБД) надають інструментальні засоби, які забезпечують службі АБД можливість виконання її функцій.

За критерієм виразової потужності інструментальні засоби специфікації умов цілісності можна підрозділити на такі групи:

·        порівняння поля запису (або атрибута) з константою або з іншим полем цього ж запису; приклад такої умови наводився вище;

·        порівняння поля запису з полем або кількома полями інших записів;

·        порівняння поля запису з множиною (підмножиною) значень полів всього файлу або навіть кількох файлів.

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

Ринок інформаційних технологій пропонує широкий вибір програмних продуктів для рішення актуальних проблем обліку обчислювальної техніки на підприємстві. У зв'язку зі зростаючою кількості комп’ютерів на підприємствах та організації, багато хто з них сьогодні стоять перед вибором програм обліку і використанням сучасних технологій, що дозволять:

·        оперативно одержувати інформацію про місце знаходження комп’ютера;

·        вести облік пристроїв які підключені або входять до складу комп’ютера;

·        організувати процеси перемішання комп’ютерів їх частин або пристроїв;

·        вести облік програм які установлені на цьому комп’ютері;

·        вести облік профілактик які були зроблені на цьому комп’ютері.

2.2.1 Моделі представлення даних

У залежності від виду організації даних розрізняють наступні основні моделі представлення даних у БД:

·        ієрархічну;

·        мережну;

·        реляційну;

·        об’єктно-орієнтовану.

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

У мережній моделі дані організуються у вигляді довільного графа. Недоліком мережної моделі є висока складність її організації.

Крім того, значним недоліком ієрархічної і мережної моделей є також те, що структура даних задається на етапі проектування БД і не може бути змінена при організації доступу до даних.

В об’єктно-орієнтованій моделі окремі записи бази даних представляються у вигляді об'єктів. Між записами бази даних і функціями їхні обробки установлюються взаємозв'язки за допомогою механізмів, подібних до відповідних засобів в об’єктно-орієнтованих мовах програмування. Об’єктно-орієнтовані моделі сполучать особливості мережної і реляційної моделей та використовуються для створення великих БД зі складними структурами даних.

Реляційна модель одержала свою назву від англійського терміна relation (відношення) і була запропонована в 70-х роках співробітником фірми IBM Едгаром Коддом. Реляційна БД являє собою сукупність таблиць, зв'язаних відносинами. Достоїнствами реляційної моделі даних є простота, гнучкість структури, зручність реалізації на комп'ютері, наявність теоретичного опису. Дана розробка заснована на реляційних базах даних.

2.2.2 Реляційний спосіб доступу до даних

Реляційний спосіб доступу до даних ґрунтується на операціях із групами записів. Для завдання операцій використовуються засоби мови структурованих запитів - SQL (Structured Query Language), тому реляційний спосіб доступу називають також SQL-орієнтованим. Для його реалізації в програмних продуктах Delphi як набір даних повинні застосовуватися такі компоненти, як Query чи storedProc, що дозволяють виконати SQL-запит.

Засобу SQL застосовні для виконання операцій з локальними і вилученими БД. Найбільше повно переваги реляційного способу доступу і мови SQL виявляються при роботі з вилученими БД. Основним достоїнством реляційного способу доступу є невелике завантаження мережі, оскільки передаються тільки запити і результат їхнього виконання.

Стосовно до локальних БД використання реляційного способу доступу не дає істотної переваги, але й у цьому випадку за допомогою SQL-запиту можна:

·   формувати склад полів набору даних при виконанні додатка; включати в набір даних полючи і запису з декількох таблиць; відбирати запису за складними критеріями;

·        сортувати набір даних по будь-якому полю, у тому числі неіндексованому;

·        здійснювати пошук даних по частковому збігу зі значеннями полів.

Основи мови SQL

Мова SQL орієнтована на виконання дій з таблицями БД і даними в цих таблицях, а також деяких допоміжних дій. На відміну від процедурних мов програмування, у неї немає операторів керування обчислювальним процесом (циклів, переходів, розгалуження) і засобів уведення-висновку. Складену мовою SQL програму також називають SQL-запитом.

Мова SQL звичайно інтегрується в інші засоби (оболонку), використовуючись в інтерактивному режимі. Так, у системі керування базами даних, що має інтерактивний інтерфейс, користувач може працювати, нічого не знаючи про мову SQL, незалежно від того, яка БД використовується: віддалена чи локальна. Такі СУБД, як Microsoft Access, Visual FoxPro чи Paradox, самі виконують дії, зв'язані з програмуванням запитів на SQL, пропонуючи користувачу засоби візуальної побудови запитів, наприклад, Query By Example (QBE) - запит за зразком.

Тому що SQL не має можливості повноцінної мови програмування, а орієнтований на доступ до даних, те його часто включають у засоби розробки програм. Вбудована вона і в систему Delphi. При цьому для роботи з командами SQL пропонуються відповідні засоби і компоненти. У Delphi до числа таких компонентів належить набір даних Query.

Розрізняють два види SQL-запитів: статичний і динамічний. Статичний SQL-запит включається у вихідний код на етапі розробки й у процесі виконання додатка не змінюється. Розроблювач може змінити SQL-запит шляхом використання параметрів, якщо такі маються в його тексті.

Код динамічного SQL-запиту формується чи змінюється при роботі програми. Такі запити звичайно застосовуються у випадку, коли при виконанні запиту потрібно враховувати дії користувача.

Прийнята нами класифікація не є однозначною. Так, у деяких випадках SQL-запити з параметрами теж відносять до розряду динамічних.

Мова SQL має кілька стандартів, з яких найбільш розповсюдженими серед виробників програмних продуктів є стандарти SQL-89 і SQL-92. Стандарт SQL92, підтриманий Американським національним інститутом стандартів (ANSI - American National Standards Institute) і Міжнародною організацією по стандартизації (ISO - International Standard Organization), також називають стандартом ANSI чи ANSI/ISO. Наявність декількох стандартів і різна їхня інтерпретація породили безліч діалектів мови SQL, що у більшому чи меншому ступені відрізняються друг від друга.

У мові SQL можна виділити наступні основні підмножини операторів:

·        визначення даних;

·        обробки даних;

·        керування привілеями (доступом до даних); керування транзакціями.

Розглянемо основні можливості, реалізовані у Delphi версії мови SQL. Ця версія трохи відрізняється від стандарту SQL-92, наприклад, у ній не можна працювати з переглядами і керувати привілеями.

У додатках Delphi для виконання операторів SQL можна використовувати набір даних Query. Нагадаємо, що текст SQL-запиту є значенням властивості sql компонента Query і формується при розробці додатка, чи під час його виконання. Компонент Query забезпечує виконання SQL-запиту й одержання відповідного набору даних. Формування набору даних виконується при активізації компонента Query шляхом виклику методу Оpen чи установкою властивості Active значення True. Іноді при відпрацьовуванні SQL-запиту немає необхідності одержувати набір даних, наприклад, при видаленні, чи вставці модифікації записів. У цьому випадку більш переважно виконувати запит викликом методу ExecSQL. При роботі в мережі виклик цього методу робить необхідну модифікацію набору даних, не передаючи в визиваючу програму (комп'ютер) запис набору даних, що істотно знижує навантаження на мережу.

Крім того, набрати і виконати в інтерактивному режимі текст SQL-запиту дозволяють інструментальні програми, що поставляються разом з Delphi 5, наприклад такі, як Database Desktop, SQL Explorer і SQL Builder. Відзначимо, що перші дві програми викликаються за допомогою однойменних команд меню Tools і Database, відповідно, а візуальний будівник запитів SQL Builder викликається через контекстне меню компонента Query.

Перевірка синтаксису і відпрацьовування запиту, убудованого в додаток (найчастіше за допомогою компонента Query), виробляються на етапі виконання програми. При наявності синтаксичних помилок у тексті SQL-запиту генерується виняткова ситуація, інтерпретувати яку часом непросто. Для налагодження SQL-запитів зручно використовувати програми з розвитим інтерфейсом, наприклад Database Desktop. Після налагодження текст запиту вставляється в розроблювальний додаток. При такому підході значно скорочується час створення запитів і істотно зменшується імовірність появи динамічних помилок.

Як результат виконання SQL-запиту може повертатися набір даних, що складають відібрані з його допомогою запис. Цей набір даних називають результуючим.

Зарезервовані слова мови SQL пишемо рядковими, а імена - прописними буквами. Регістр букв не впливає на інтерпретацію операторів мови. Крапка з комою наприкінці SQL-операторів необов'язкова. Елементи в списках, наприклад, імена полів і таблиць, повинні бути розділені комами.

Імена таблиць і полів (стовпців) полягають в одиночні чи подвійні апострофи, наприклад, "First Name". Якщо ім'я не містить пробілів і інших спеціальних символів, то апострофи можна не вказувати.

У SQL-запиті допускаються коментарі, що пояснюють текст програми. Коментар обмежується символами /* і */.

Функції мови SQL

Мова SQL, як і інші мови, надає для використання ряд функцій, з яких найбільш уживані наступні:

Агрегатні чи статистичні функції:

AVG () - середнє значення;

МАХ () - максимальне значення;

MIN () - мінімальне значення;() - сума;

COUNT () - кількість значень;

COUNT(*) - кількість ненульових значень.

Функції роботи з рядками:

UPPER(Str) - перетворення символів рядка Str до верхнього регістра;

LOWER(Str) - перетворення символів рядка Str до нижнього регістра;

TRIM(Str) - видалення пробілів на початку і наприкінці рядка Str;

SUBSTRING (Str FROM n1 to n2) - виділення з рядка str підрядка, що містить у собі символи, починаючи з номера (позиції) n1 і закінчуючи номером n2;(<Expression> AS <Type>) - приведення виразу Expression до типу Type;

|| - конкатенація (зчеплення) двох рядків.

Функції декодування дати і часу:

EXTRACT (<Елемент> FROM <вираз>) - з вираження, що містить значення чи дати часу, витягається значення, що відповідає зазначеному елементу. Як елемент дати чи часу можна вказувати значення: YEAR, MONTH, DAY, HOUR, MINUTE чи SECOND.

Відбір даних з таблиць

Відбір даних з таблиць полягає в одержанні з них полів і записів, що задовольняють заданим умовам. Результат виконання запиту, на підставі якого відбираються записи, називають вибіркою. Дані можна вибирати з однієї чи декількох таблиць за допомогою оператора SELECT.

Оператор SELECT - найважливіший оператор мови SQL. Він використовується для добору записів, що задовольняють складним критеріям пошуку, і має наступний формат:[DISTINCT] {* I <Список полів>)<Список таблиць>

[WHERE <Умови добору >]

[ORDER BY <Список полів для сортування >]

[GROUP BY <Список полів для групування >]

[HAVING <Умови групування>]

[UNION <Вкладений оператор SELECT>]

Результат виконання SQL-запиту, заданого оператором SELECT, являє собою вибірку записів, що відповідають заданим у ньому умовам. При розгляді оператора SELECT будемо припускати, що SQL-запит набраний і виконаний за допомогою компонента Query. У цьому випадку результатом виконання запиту є відповідний цьому компонент набору даних.

У такому результуючому наборі даних можуть бути дозволені чи заборонені повторювані записи (тобто однакові значення, що мають, усіх полів). Цим режимом керує DISTINCT. Якщо він відсутній, то в наборі даних дозволяються повторювання записів.

В оператор SELECT обов'язково включається список полів і операнд FROM. інші операнди можуть бути відсутніми. У списку операнда FROM перелічуються імена таблиць, для яких відбираються записи. Список повинний містити як мінімум одну таблицю.

Список полів визначає склад полів результуючого набору даних, ці поля можуть належати різним таблицям. У списку повинне бути задане хоча б одне поле. Якщо в набір даних потрібно уключити всі поля таблиці (таблиць), то замість перерахування імен полів можна вказати символ "*". Якщо список містить поля декількох таблиць, то для вказівки приналежності полів до тієї чи іншої таблиці використовують складене ім'я, що включає в себе ім'я таблиці й ім'я полючи, розділені крапкою: <Ім'я таблиці>.<Ім'я поля>

Операнд WHERE задає умови (критерії) добору, яким повинні задовольняти запису в результуючому наборі даних. Вираження, що описує умови добору, є логічним. Його елементами можуть бути імена полів, операції порівняння, арифметичні і логічні операції, дужки, спеціальні функції LIKE, NULL, IN і інші.

Операнд GROUP BY дозволяє виділяти групи записів у результуючому наборі даних. Групою є записи з однаковими значеннями в полях, перерахованих за операндом GROUP BY. Виділення груп потрібно для виконання групових операцій над записами, наприклад, для визначення кількості якого-небудь товару на складі.

Операнд HAVING діє разом з операндом GROUP BY і використовується для добору записів усередині груп. Правила запису умов групування аналогічні правилам формування умов вибору в WHERE. Операнд ORDER BY містить список полів, що визначають порядок сортування записів результуючого набору даних. За замовчуванням сортування по кожному полю виконується в порядку зростання значень; якщо необхідно задати для полів сортування по зменшенню, то після імені цього поля вказується описувач DESC.

Оператори SELECT можуть мати складну структуру і бути вкладеними друг у друга. Для об'єднання операторів використовується операнд UNION, у якому розташовується вкладений оператор SELECT, названий також підзапитом. Результуючий набір даних представляють записи, відібрані в результаті виконання умов добору, заданих операндами WHERE обох операторів.

Оператор SELECT використовується також усередині інших операторів, наприклад, операторів модифікації записів, забезпечуючи для їхнього виконання необхідний добір записів.

Статичний і динамічний запити

Як уже відзначалося, у залежності від способу формування SQL-запит може бути:

·   статичним;

·        динамічним.

Текст статичного SQL-запиту формується при розробці програмного продукту й у процесі виконання програми не може бути змінений. Такий запит звичайно використовується у випадках, коли код запиту заздалегідь відомий і під час роботи програми не вимагає модифікації.

Динамічний SQL-запит формується чи змінюється при виконанні додатка.

.2.3 Таблиці

Таблиці - фундаментальні об'єкти реляційної бази даних, у яких зберігається основна частина програмних даних. Окрема таблиця найчастіше зберігає інформацію з конкретної теми (наприклад, відомості компанії, чи адреси замовників). Інформація в таблиці організується в рядки (запису) і стовпці (поля). Таблиці присутні два компоненти: структура таблиці і дані таблиць.

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

Структура таблиці включає наступну інформацію:

Ім'я таблиці - Ім'я, по якому до таблиці можна звернутися у властивостях, методах і операторах SQL.

Стовпці таблиці - Категорії інформації, збереженої в таблиці. Кожен стовпець має ім'я і тип даних. Табличні і стовпцеві обмеження - Обмеження цілісності, визначені на рівні таблиці чи на рівні стовпця.

Кожен вертикальний стовпець таблиці STUDENTS представляє один елемент даних для кожного зі студентів. Наприклад, у стовпці GROUP містяться номери груп, у яких розташовані студенти. У стовпці DATE містяться дати народження кожного студента.

Дані таблиці - інформація, що збережена в таблиці. Усі дані таблиці зберігаються в рядках, кожна з який містить порції інформації в стовпцях, визначених у структурі таблиці. Дані - та частина таблиці, до якої повинні мати доступ користувачі програми (наприклад, дані таблиці можуть виводитися в елементах керування, розміщених у формах і звітах).

На перетинанні кожного рядка з кожним стовпцем таблиці міститься одне значення даних. Наприклад, у другому рядку в стовпці FAMILY міститься значення "ІВАНОВ". У стовпці PODGRP того ж рядка міститься значення 1, що є номером підгрупи, у якій знаходиться даний студент.

Усі значення, що містяться в тому самому стовпці, є даними одного типу. Наприклад, у стовпці FAMILY містяться тільки слова, у стовпці DATE містяться дати, а в стовпці NUMBER містяться цілі числа, що представляють ідентифікатори студентів. Безліч значень, що можуть міститися в стовпці, називається доменом цього стовпця. Доменом стовпця FAMILY є безліч прізвищ студентів. Доменом стовпця DATE є будь-як дата.

У кожного стовпця в таблиці є своє ім'я, що звичайно служить заголовком стовпця. Усі стовпці в одній таблиці повинні мати унікальні імена, однак дозволяється привласнювати однакові імена стовпцям, розташованим у різних таблицях. На практиці такі імена стовпців, як NUMBER, FAMILY, NAME, GROUP, DATE, PODGRP, часто зустрічаються в різних таблицях однієї бази даних.

Стовпці таблиці упорядковані ліворуч праворуч, і їхній порядок визначається при створенні таблиці. У будь-якій таблиці завжди є як мінімум один стовпець. У стандарті ANSI/ISO не вказується максимально припустиме число стовпців у таблиці, однак майже у всіх комерційних СУБД ця межа існує і звичайно складає приблизно 255 стовпців.

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

У таблиці може міститися будь-яка кількість рядків. Цілком припустиме існування таблиці з нульовою кількістю рядків. Така таблиця називається порожньою. Порожня таблиця зберігає структуру, визначену її стовпцями, просто в ній не містяться дані. Стандарт ANSI/ISO не накладає обмежень на кількість рядків у таблиці, і в багатьох СУБД розмір таблиць обмежений лише вільним дисковим простором комп'ютера. В інших СУБД мається максимальна межа, однак він дуже високий - біля двох мільярдів рядків, а іноді і більше.

2.2.4 Ключові поля

За допомогою запитів, форм і звітів реляційних баз даних, можна швидко знайти і зв'язати дані з різних. Для цього кожна таблиця повинна містити одне чи кілька полів, що однозначно ідентифікують кожен запис у таблиці. Ці поля називаються ключовими полями таблиці. Ключові поля ще також називають первинним ключем. Можна виділити три типи ключових полів: лічильник, простий ключ і складений ключ.

Оскільки рядки в реляційній таблиці не упорядковані, не можна вибрати рядок по його номеру в таблиці. У таблиці немає "першого", "останнього" чи "тринадцятого" рядка. Тоді яким чином можна вказати в таблиці конкретний рядок, наприклад рядок для студента з прізвищем Іванов?

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

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

На перший погляд, первинним ключем таблиці STUDENTS можуть служити і стовпець FAMILY. Однак у житті досить часто зустрічаються однофамільці, отже, стовпець FAMILY більш не може виконувати роль ключа. На практиці як первинні ключі таблиць звичайно варто вибирати ідентифікатори, такі як ідентифікатор студента NUMBER у таблиці STUDENTS.

Таблиця ORDERS являє приклад таблиці, у якій первинний ключ являє собою комбінацію стовпців. Такий первинний ключ називається складеним ключем.

Він застосовується у випадках, коли неможливо гарантувати унікальність значень кожного окремого поля. Стовпець NSTUD містить ідентифікатори студентів, перерахованих у таблиці, а стовпець NORDER містить номера, наказам. Може показатися, що стовпець NORDER міг би й один виконувати роль первинного ключа, однак ніщо не заважає одному студенту кілька разів потрапити під відрахування і потім відновитися на факультеті. Таким чином, як первинний ключ таблиці ORDERS необхідно використовувати комбінацію стовпців NSTUD і NORDER. Для кожного зі студентів, що містяться в таблиці, комбінація значень у цих стовпцях буде унікальною.

Первинний ключ для кожного рядка таблиці є унікальним, тому в таблиці з первинним ключем немає двох зовсім однакових рядків. Таблиця, у якій усі рядки відрізняються друг від друга, у математичних термінах називається відношенням. Саме цьому терміну реляційні бази даних і зобов'язані своєю назвою, оскільки в їхній основі лежать відносини (таблиці з несхожими друг від друга рядками).

2.2.5 Індекси

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

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

Створити індекси, як і ключі, можна по одному чи декільком полям. Складені індекси дозволяють при доборі даних групувати записи, у яких перші поля можуть мати однакові значення. Індексувати поля потрібно для виконання частих пошуків, сортувань чи об'єднань з полями з інших таблиць у запитах. Ключові поля таблиці індексуються автоматично. Не можна індексувати поля з типом даних поле МЕМО, чи об'єкту OLE. Для інших полів індексування використовується, якщо поле має текстовий, числовий, грошовий тип чи тип дати/часу і потрібно здійснювати пошук і сортування значень у полі. Якщо передбачається, що буде часто виконуватися сортування чи пошук одночасно по двох і більш полях, можна створити складений індекс. Наприклад, якщо для того самого запиту часто встановлюється критерій для полів Ім'я і Прізвище, то для цих двох полів має сенс створити складений індекс. При сортуванні таблиці по складеному індексі спочатку здійснюється сортування по першому полю, визначеному для даного індексу. Якщо в першому полі містяться записи з повторюваними значеннями, то сортування здійснюється по другому полю і т.д.

2.2.6 Зовнішні ключі

Стовпець однієї таблиці, значення якого збігаються зі значеннями стовпця, є первинним ключем іншої таблиці, і називається зовнішнім ключем. Сукупно первинний і зовнішній ключі створюють між таблицями, у яких вони містяться, відношення предок/нащадок, як і в ієрархічній базі даних.

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

Якщо таблиця зв'язана з декількома іншими таблицями, вона може мати кілька зовнішніх ключів. Реляційна модель даних має всі можливості мережної моделі по частині вираження складних відносин.

Зовнішні ключі є невід'ємною частиною реляційної моделі, оскільки реалізують відносини між таблицями бази даних. До нещастя, підтримка зовнішніх ключів була відсутня в перших реляційних СУБД. Вона була введена в системі DB2 Version 2 і тепер мається у всіх комерційних СУБД.

3. ОСНОВИ ТЕХНОЛОГІЇ ACTIVEX DATA OBJECTS (ADO)


Доступ до даних є найважливішою вимогою при розробці сучасних бізнес-додатків. Технологія ODBC забезпечує доступ до реляційних баз даних і це перший крок на шляху вирішення цієї проблеми. Однак, коли розроблювачі хочуть включити у свої проекти не реляційні джерела даних або працювати в середовищах, подібних Інтернет, вони стикаються з дилемою - або розробляти власні парадигми доступу до даних, або працювати на рівні API, що несумісне з новими середовищами. ActiveX об'єкти доступу до даних (ActiveX Data Object) вирішують цю дилему і забезпечують єдину модель, що працює з усіма джерелами даних у різних середовищах. У такий спосіб ADO забезпечує послідовний, високопродуктивний доступ до даних, із якими можливо створювати клієнтські програми для роботи з БД або бізнес-об'єкти середнього рівня, що використовують додатки, інструментарій, мова або, навіть, Інтернет-переглядач (Internet Explorer). ADO - це єдиний інтерфейс доступу до даних, що необхідний для створення одне- і багаторівневих додатків архітектури клієнт/сервер і Web-орієнтованих інформаційних систем.

3.1 Огляд технології ADO


Технологія ADO була вперше застосована в Microsoft Internet Information Server як інтерфейс доступу до БД. Використання ADO дозволяє мінімізувати мережний трафік у ключових Internet-сценаріях і зменшити кількість проміжних рівнів між клієнтським додатком і джерелом даних. ADO легко використовувати, тому що він (або вони (об'єкти) або вона (технологія)) застосовує звичну систему викликів - інтерфейс Автоматизації OLE, доступний сьогодні в більшості засобів розробки додатків. Через легкість застосування й вивчення популярність ADO буде рости й у підсумку ADO витисне технології RDO і DAO, що у даний час застосовуються дуже широко. Технологія ADO багато в чому подібна до RDO і DAO, наприклад, вона використовує ті ж угоди мови. ADO також підтримує аналогічну семантику і тому може бути легко освоєна розроблювачами ПЗ.є інтерфейсом програмного рівня до OLE DB, новітній і наймогутнішої парадигмі доступу до даних від MS. OLE DB забезпечує високопродуктивний доступ до багатьох джерел даних. ADO і OLE DB разом являють собою основу стратегію універсального доступу до даних (Universal Data Access). OLE DB дає можливість універсального доступу до багатьох даних і представляє розроблювачам можливість зробити це досить легко. Тому що ADO знаходиться на вершині OLE DB, те застосування ADO має всі привілеї універсального доступу до даних, що забезпечує OLE DB.

3.2 Огляд технології OLE DB

DB - це відкрита специфікація, розроблена на основі успіху специфікації ODBC і забезпечує відкритий стандарт доступу до усіх видів даним у системах масштабу підприємства. OLE DB - це ядро технології підтримуючий універсальний доступ до даних. На відміну від технології ODBC, що була створена для доступу до реляційних БД, технологія OLE DB розроблена для реляційних і не реляційних джерел даних, таких як сховища пошти (mail stores), текстів і графіки для Web, служби каталогів (directory services), IMS і VSAM сховищ даних на мейнфреймах.

Компоненти OLE DB складаються з провайдерів даних (data providers), що представляють свої дані, споживачів даних (data consumers), що використовують дані, і сервісних компонентів (service components), що обробляють і транспортують дані (наприклад, процесор запитів і механізм курсорів). OLE DB містить у собі міст із ODBC, щоб дати можливість розроблювачам використовувати ODBC-драйвера реляційних БД, широко розповсюджені в даний час.

3.2.1 OLE DB провайдери

Існує два типи OLE DB додатків: споживачі й провайдери. Споживачами можуть бути будь-які додатки, що використовують OLE DB інтерфейси. Наприклад, Delphi додаток, що використовує OLE DB інтерфейси для зв'язку із сервером БД - це OLE DB споживач. Об'єктна модель ADO, що використовує OLE DB інтерфейси, - це теж OLE DB споживач. Будь-який додаток, що використовує ADO, побічно використовує OLE DB інтерфейси через об'єкти ADO.

OLE DB провайдер здійснює OLE DB інтерфейси, тому, OLE DB провайдер дає можливість споживачам мати доступ до даним однаковим способом через ряд документованих інтерфейсів. У цьому змісті OLE DB провайдер подібний ODBC драйверові, що забезпечує універсальний механізм доступу до реляційних БД, але тільки для не реляційних типів даних. Більш того, OLE DB провайдер убудований у вершину OLE COM інтерфейсів, що додає йому велику гнучкість, а ODBC драйвер убудований у вершину C API специфікації.OLE DB SDK version 1.1 поставляє два OLE DB провайдери: ODBC провайдер і провайдер текстів. Провайдер текстів є прикладом, що демонструє докладну реалізацію OLE DB провайдеру. ODBC провайдер - це OLE DB провайдер для ODBC драйверів. Цей провайдер надає механізм для споживачів, щоб використовувати існуючі ODBC драйвери без необхідності термінової заміни існуючих ODBC драйверів на нові OLE DB провайдери.

3.2.2 ODBC провайдери

ODBC провайдер встановлює відповідність між OLE DB інтерфейсами і ODBC API. З ODBC провайдером OLE DB споживачі можуть зв'язуватися із сервером БД через існуючі ODBC драйвери. Споживач викликає OLE DB інтерфейс через ODBC провайдеру. ODBC провайдер викликає відповідні ODBC API інтерфейси і посилає запити до ODBC драйвера. Метою розробки ODBC провайдеру є здійснення усієї функціональності менеджера ODBC драйвера. Тому тепер немає необхідності в менеджері ODBC драйвера. Однак при використанні ODBC провайдером версії 1.1 менеджер ODBC драйвера усе ще потрібно для підтримки зв'язку з ODBC додатками.

3.3 Архітектура технології ADO

засновано на технології COM (Component Object Model) - компонентній об’єктній моделі. Всі об'єкти й інтерфейси ADO є інтерфейсами й об'єктами COM.

Рис. 3.1 Архітектура ADO

3.3.1 Огляд компонентів ADO в середовищі Delphi

Для роботи з ADO на вкладці компонентів ADO є шість компонентів: TADOConnection, TADOCommand, TADODataSet, TADOTable, TADOQuery, TADOStoredProc.

Рис.3.2 Палітра компонентів ADO

аналогічний компонентові BDE TDatabase і використовується для вказівки бази даних і роботи з транзакціями.- таблиця доступна через ADO.- запит до бази даних. Це може бути як запит, у результаті якого повертаються дані і бази (наприклад, SELECT), так і запит не повертає даних (наприклад, INSERT).- виклик збереженої процедури. На відміну від BDE і InterBase збережені процедури в ADO можуть повертати набір даних, по цьому компонент даного типу є нащадком від TDataSet і може виступати джерелом даних у компонентах типу TDataSource.і TADODataSet є найбільше загальними компонентами для роботи з ADO, але і найбільш складними в роботі. Обидва компоненти дозволяють виконувати команди мовою провайдера даних (так у ADO називається драйвер бази даних).

Різниця між ними в тім, що команда, що виконується через TADODataSet, повинна повертати набір даних і цей компонент дозволяє працювати з ними засобами Delphi (наприклад, прив'язати компонент типу TDataSource). А компонент TADOCommand дозволяє виконувати команди не повертають набір даних, але не має штатних засобів Delphi для наступного використання повернутого набору даних.

Очевидно, що усі компоненти повинні зв'язуватися з базою даних. Робиться це двома способами або через компонент TADOConnection або прямим указівкою бази даних в інших компонентах. До TADOConnection інші компоненти прив'язуються за допомогою властивості Connection, до бази даних прямо через властивість ConnectionString.

База даних може бути зазначена двома способами через файл лінка до даних (файл у форматі Microsoft Data Link, розширення UDL), або прямим завданням параметрів з'єднання.

Значення властивості всіх ConnectionString цих компонентів можуть бути введені прямо в текстовій формі, але куди простіше викликати редактор властивості натиснувши на кнопку «…» наприкінці отримавши введення. Вікно цієї властивості виглядає так:

Рис.3.3 Вікно властивості ConnectionString

При виборі «Use data link file» і натисканні на кнопку «Browse...» з'являється стандартний діалог вибору файлу. Цей файл можна створити в будь-якому вікні explorer-а (у цьому вікні відкриття файлу, у самому explorer, на desktop і т.д.) викликавши контекстне меню і вибравши пункт «New/Microsoft Data Link». Потім викличте локальне меню для створеного файлу і виберіть у ньому пункт «Open». Після цього з'явиться property sheet описаний трохи нижче. Ці ж вкладки містить і property sheet, викликуваний через пункт «Property» локального меню UDL файлу, але в ньому ще є вкладки стосовні до самого файлу.

Використання файлів Microsoft Data Link спрощує підтримку додатків, тому що можливо використовувати засобу Windows для настроювання додатка.

При виборі в редакторі властивості «Use connection string» і натисканні на кнопку «Build...» з'являється такою же property sheet, як і при виборі «Open» для Microsoft Data Link файлу.

У цьому вікні вибирається тип бази даних, місце розташування бази і параметри з'єднання.

На першій сторінці вибирається тип бази даних або Provider, у термінах ADO.

Рис.3.4 Вибір типу бази даних (провайдера)

Бази MS Access доступні як через «Microsoft Jet OLE DB Provider», так і через «Microsoft OLE DB Provider for ODBC».

Наступна сторінка залежить від обраного типу бази, однак для всіх типів є кнопка «Test connection» що дозволяє перевірити правильність і повноту параметрів.

Для «Microsoft Jet OLE DB Provider» вона виглядає так:

Рис. 3.5 Вибір джерела бази даних«Blank password» придушує діалог введення ідентифікатора і пароля користувача при встановленні з'єднання, якщо поле пароля порожнє.«Allow saving password» зберігає пароль у рядку параметрів з'єднання. Якщо він не відзначений, то введений пароль буде використовуватися тільки при виконанні тестового з'єднання.

Для «Microsoft OLE DB Provider for ODBC» ця сторінка виглядає так:

Рис.3.6 Вибір джерела бази даних

Радіокнопка «Use data source name» дозволяє ввести аліас ODBC, а через «Use connection string» уводиться як аліаси так і тип ODBC драйвера і параметри з'єднання.

Параметри ідентифікації користувача аналогічні вище описаним.

На сторінці «Advanced» розташовані додаткові параметри, за допомогою яких установлюється рівень доступу до файлу бази даних, тайм-аут мережного з'єднання (тобто час через яке зв'язок буде вважатися загубленої, якщо сервер не відповідає) і рівень глибини перевірки таємності з'єднання.

Рис. 3.7 Встановлення додаткових параметрів

На сторінці «All» можна відредагувати всі параметри з попередніх сторінок і параметри залежні від провайдера, але не ввійшли на сторінку «Connection». Редагування здійснюється у виді параметр - значення, причому в текстовій формі, ніяких діалогів немає. Допомоги те ж ні, ці параметри описані тільки в документації на провайдер. Її можна знайти в MSDN Data Access Services/Microsoft Data Access Components (MDAC) SDK/Microsoft Active Data Objects (ADO)/Microsoft ADO Programmer's Reference/Using Providers with ADO.

Рис. 3.8 Сторінка з усіма доступними параметрами відкриття

У компоненті TADOConnection є властивості Provider, DefaultDatabase і Mode які є альтернативним методом завдання частин рядка параметрів з'єднання - провайдеру, бази даних (наприклад, шляхи до бази MS Access) і режиму спільного використання файлів бази даних. Ці значення цих властивостей автоматично включаються в рядок з'єднання, якщо були задані до активізації компонента й автоматично виставляються після з'єднання.

3.3.2 Інтерфейси архітектури ADO

Інтерфейс Connection

Об'єкти цього типу виконують наступні функції:

·  зв'язок із сервером

·        керування транзакціями

·        одержання інформації про помилки, що відбулися, (властивість Errors)

·        одержання інформації про схему даних (таблиці, поля і т.д.)

Рис 3.9 Схема взаємодії в ADO основних COM інтерфейсів

Інтерфейси Recordset і Field

Інтерфейс Recordset (на нижньому рівні ADO це IRowset) є аналогом TDataSet у Delphi.

Підтримує поточне положення і переміщення курсору, закладки (bookmarks), читання, зміна і видалення записів і так далі. Значення полів і їхніх типів доступні за допомогою властивості Fields.

Інтерфейс Field дозволяє одержувати значення полючи, його тип довжину і так далі.

Інтерфейси Command і Parameter

Ці два типи дозволяють працювати з командами джерела даних. Синтаксис команд для кожного з джерел свій.

Інтерфейс Property

Всі об'єкти, крім Parameter, мають властивість Properties, що дозволяє одержувати і встановлювати параметри специфічні для провайдера даних.

Бібліотека досить заплутана, багато функцій дубльовані в різних об'єктах. Наприклад, Recordset можна створювати прямо, методом Open, (причому попередньо створювати Connection не обов'язково), можна одержати як результат виконання методу Command.Execute, або після Connection.Execute задавши команду без параметрів.

Особливості інтерфейсу Command та RecordSet

Інтерфейс Command інкапсульований в усі компоненти за винятком TADOConnection. Це зроблено тому, що в ADO немає можливості одержати дані не виконавши команду.

Інтерфейс Recordset інкапсульований у компоненти похідні від TCustomADODataSet. Це компоненти TADODataSet, TADOTable, TADOQuery, TADOStoredProc. Одержувати дані з них можливо штатними засобами Delphi.

Можливе одержання даних і при виконанні компонента TADOCommand. Метод цього компонента Execute повертає тип _Recordset. Після чого його можна, наприклад, зв'язати з компонентом TADODataSet у такий спосіб

ADODataSet1.RecordSet := ADOCommand1.Execute;

Компоненти TADOTable, TADOQuery і TADOStoredProc є окремими випадками команди, відповідно для таблиці, SQL запиту і збереженої процедури.

Тип Connection інкапсулюється в компонент TADOConnection.

Коли ви виконуєте команду попередньо не відкриваючи з'єднання, воно все рівно створюється. Одержати до нього доступ можливо через властивість Recordset. Прив'язати компонент TADOConnection до уже відкритого з'єднання можливо через властивість ConnectionObject.

Інформацію про структуру бази даних можна одержати за допомогою методу OpenSchema компонента TADOConnection. Ця інформація представлена як набір таблиць, як стандартизованих, так і специфічних для провайдеру. Таким способом можна довідатися список таблиць, запитів, збережених процедур і багато чого іншого. Однак змінювати структуру бази за допомогою наборів, що повертаються, даних неможливо.

3.3.3 Використання компонента TADOConnection

У цьому прикладі розглядається робота з компонентом TADOConnection, SQL запитами з параметрами і трансакціями.

Створимо додаток з наступних компонентівтипу TADOConnectionі DetailSQL типу TADODataSetі DetailDS типу TDataSourceі DetailGrid типу TDBGrid

Рис 3.10 Master-detail форма на етапі дизайну

Зв'язуємо MasterGrid, MasterDS, MasterSQL і DetailGrid, DetailDS, DetailSQL аналогічно попередньому прикладові, за винятком того, що замість типу TADOTable використовується тип TADODataSet.

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

Для введення SQL запитів необхідно відредагувати властивість CommandText компонентах MasterSQL і DetailSQL. Після натискання на кнопку "SQLString" з'явиться редактор компонентів, що виглядає в такий спосіб:

Рис. 3.11 Редактор SQL-запита

Кнопка «Add Table to SQL» додає в текст SQL запиту таблицю, обрану в списку «Tables», а «Add Field to SQL» поле таблиці, обране в списку «Fields».

Запит для MasterSQL

select VendorNo, VendorName, Country, City, State, Preferredvendors

select PartNo, OnOrder, OnHand, ListPrice, Description, CostpartsVendorNo = :VendorNo

Запит у DetailSQL повинний вибирати тільки ті деталі, постачальник яких є поточним у MasterSQL. Для цього установимо властивість DataSource компонента DetailSQL у значення MasterDS.

Запит для DetailSQL наступний:у частині where - параметр запиту. Параметри при встановленому DataSource беруться з нього.

Активізуємо MasterSQL і DetailSQL аналогічно попередньому прикладові.

Додаток можна запускати. Цей приклад можна знайти в директорії MasterDetail.

 

3.3.4 Використання параметрів запиту

Тепер обмежимо вибірку постачальників за значенням полючи State. Для цього додамо до форми наступні компоненти StateEdit типу TEdit c вкладки Standard, QueryButton типу TButton c вкладки Standard

Змінимо запит у MasterSQL на :StateID - параметр, замість якого при виконанні підставляється значення.

select VendorNo, VendorName, Country, City, State, PreferredvendorsState = :StateID

procedure TForm1.QueryButtonClick(Sender: TObject);.Active := False;.Active := False;.Parameters.ParamByName('StateID').Value := StateEdit.Text;.Active := True;.Active := True;;

Додамо так само обработчик події OnClick у QueryButton наступного змісту

Програма готова. Цей приклад можна знайти в директорії Param.

 

3.3.5 Синхронізація даних клієнта і сервера

У ADO використовуються три методи синхронізації даних на клієнті і сервері.

Перший - c допомогою методу Resync, що повторно зчитує запису набору. Цей метод використовується при виконанні методу Refresh Delphi.

Другий - повторний запит методом Requery, що заново виконує запит на сервері. Виконання цього методу те ж саме, що і виконання підряд закриття і відкриття набору даних.

Третій - повідомлення сервером клієнта у випадку зміни даних.

Ці методи доступні у всіх компонентах даних, що мають набір. Однак ці функції доступні не для всіх баз даних.

.3.6 Робота з транзакціями

У компонентах ADO робота з транзакціями здійснюється через компонент TADOConnection.

Тип транзакції встановлюється у властивості IsolationLevel однієї з наступних констант:

IlUnspecified

Сервер буде використовувати кращий, на його думку, тип ізоляції.

IlChaos

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

IlReadUncommitted

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

IlBrowse

Те ж саме що і IlReadUncommitted

IlReadCommitted

Читання даних змінених підтвердженими транзакціями. Тобто зміна даних буде очевидно після виконання Commit в інший транзакції.

IlCursorStability

Те ж саме що і IlCursorStability.

IlRepeatableRead

Зміни, зроблені іншими транзакціями не видимі, але при виконанні перезапиту вони транзакція може одержувати новий набір даних.

IlIsolated

Трансакція не бачить змін даних зроблених іншими транзакціями.

IlSerializable

Те ж саме що і IlIsolated.

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

Властивість Attributes установлює чи відкривати нову транзакцію автоматично- при підтвердженні транзакції- при скасуванні транзакції

Так само в компонента TADOConnection є три методи для роботи з транзакціями:Починає транзакціюПідтверджує зроблені зміниВідкочує транзакцію.

3.3.7 Атрибути доступу до даних

На відміну від BDE, ADO підтримує більше настроювань роботи даних.

У ADO є поняття набору даних (recordset) і тісно зв'язане з ним поняття курсору (cursor). Що таке курсор у документації на ADO не описане. Однак чому те місце розташування набору даних називається положенням курсору. Я думаю, що це термінологічна плутанина в Microsoft і курсор той же саме що набір даних.

В усіх компонентах що мають набір даних (тобто в TADODataSet, TADOTable, TADOQuery, TADOStoredProc) є властивості CursorLocation, CursorType, LockType і MarshalOptions, що встановлюють параметри обміну із сервером. Усі ці властивості повинні бути встановлені до того, як набір даних відкривається. Якщо ви установите їх пізніше, те ефекту не буде.- визначає, де виконується робота з набором на клієнті (clUseClient) або на сервері (clUseServer). Якщо набір даних розташований на клієнті, то із сервера дані запитуються однократно (або до виконання повторного запиту), надалі уся вибірка даних і позиціювання йде на клієнті. Однак модифікація даних виробляється негайно.- установлює тип курсору. Значення одне з:- бібліотека ADO сама визначає оптимальний тип блокування.- статичний курсор. Статична копія набору записів, що ви можете використовувати, наприклад, для генерації звіту. Додавання, зміни або видалення записів іншими користувачами не видимі.

сtOpenForwardOnly - ідентичний статичному курсорові, за винятком того, що ви можете переходити тільки вперед. Це тип поліпшує ефективність у ситуаціях, коли ви робите тільки один прохід через набір даних.- динамічний курсор. Додавання, зміни і видалення іншими користувачами видимі і можливі всі типи пересування по наборі даних. Закладки (bookmarks) можливі тільки, якщо провайдер даних них підтримує.- курсор набору даних. Аналогічний динамічному курсорові, за винятком того, що ви не побачите записи додані іншими користувачами, а записи вилучені іншими користувачами недоступні з вашого набору даних. Зміни даних іншими користувачами видимі.

Треба помітити, що TDBGrid і інші компоненти, що одночасно працюють з декількома записами, можуть працювати тільки коли закладки підтримуються. Тому для компонентів з якими ви будите зв'язувати такі компоненти повинні використовуватися типи ctKeyset або ctDynamic.- визначає тип блокування записів у наборі даних. Воно з:- бібліотека ADO сама визначає який тип буде використовуватися.- тільки читання, зміна даних неможливо.- песимістичне блокування. Запис блокується відразу після початку редагування і до збереження записів.- оптимістичне блокування. Запис блокується тільки коли зміни зберігаються.- теж саме що і ltOptimistic, але використовується відкладене збереження змін записів. Більш докладно вона розглядається в наступному пункті.- це властивість визначає чи будуть відправлені на сервер ті полючи, що не були змінені. При значенні moMarshalAll будуть, а при moMarshalModifiedOnly не будуть.

4. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ І ПРОГРАМНОЇ РЕАЛІЗАЦІЇ СИСТЕМИ

 

.1 Предметна область і задачі, покладені на гнучку систему автоматизації


Проектована система призначена для автоматизації процесу обліку використання та зберігання імунобіологічних препаратів (ІБП) у межах районної лікувально-профілактичної установи (ЛПУ). Основні задачі, покладені на систему, наступні:

·  Створення різних довідників, необхідних для функціонування системи;

·        Ведення журналу обліку та використання імунобіологічних препаратів;

·        Ведення статистики руху ІБП у межах ЛПУ.

Кінцевими користувачами програми є лікар, медсестра або інша відповідальна особа, що займається обліком ІБП.

4.2 Апаратні вимоги, та вимоги до системного програмного забезпечення


При проектуванні гнучкої інтегрованої системи приймалися до уваги наступні вимоги.

. Оптимальний склад технічних засобів, при яких працює програма:

·        ПК типу IBM PC або сумісний з ним, продуктивністю не менше 166 МГц;

·        Оперативна пам'ять не менше 32 МГбайт;

·        Монітор із SVGA адаптером;

·        НЖМД не менше 4,3 Гбайт;

·        НГМД 3,5 дюйми;

·        Компакт-дисковий носій (CD);

·        Струменевий або лазерний принтер формату А4;

·        Монітор, клавіатура, маніпулятор типу "миша".

. Система не повинна мати прив’язки до апаратної частини для можливого переносу її на нову платформу через моральне старіння комп’ютерної техніки;

. Програмна оболонка повинна мати інтуїтивно зрозумілий інтерфейс;

Система повинна функціонувати під керуванням операційних систем Windows 98 та Windows 2000, або Windows ХР.

 

.3 Розробка логіко-функціональної схеми системи


Логіко-функціональна схема системи наведена на рис.4.1.

 

Рис.4.1 Логіко-функціональна схема системи

 

4.4 Опис інтерфейсу користувача


Після запуску програми на екрані з’являється вікно, в якому потрібно провести ідентифікацію користувача. Для цього треба вибрати із списку логін користувача та ввести відповідний пароль.

Рис.4.2 Вікно реєстрації користувача системи

Якщо пароль користувача був введений вірно, на екрані з’являється головне вікно системи, в іншому випадку на екрані з’являється повідомлення:

Рис.4.3 Повідомлення про помилку реєстрації

Після успішної авторизації на екрані з’являється головне вікно системи. Програма має стандартний інтерфейс Windows. Головне меню системи має наступний вигляд:

Рис.4.4 Головне меню системи

Робота з системою починається з формування довідників.

Довідник типів препаратів має наступний вигляд:

Рис. 4.5 Довідник типів препаратів

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

Рис. 4.6 Довідник країн-виробників

Тут міститься інформація про країни-виробники імунобіологічних препаратів.

Довідник категорій об’єктів. В цей довідник включається перелік категорій (груп) об'єктів. Під об'єктами маються на увазі різноманітні заклади та установи. Наприклад, продовольчі магазини, не продовольчі магазини та ін. Користувачеві програми пропонується вже заповнений довідник категорій, який може бути змінений при необхідності.

Рис. 4.7 Вікно довідника категорій об’єктів

Рис. 4.8 Вікно довідника дільниць

Вікно довідника дільниць містить інформацію про номер дільниці та ПІП дільничного лікаря.

Вікно довідника об’єктів має наступний вигляд.

Рис. 4.9 Вікно довідника об’єктів

Дані, що відображені в таблиці недоступні для редагування. При натисканні кнопки „Додати запис” на екрані з’являється наступне вікно:

Рис. 4.10 Вікно додавання запису довідника об’єктів

Для кожного об'єкту користувачем програми обираються наступні дані із сформованих заздалегідь довідників:

·        Тип (категорія об’єкту). Вибирається з довідника за допомогою кнопки-підказки та заповнюється для тих об'єктів, які закріплені за відділенням. При цьому на екрані з’являється вікно довідника з додатковою панеллю.

Рис. 4.11 Вікно довідника у режимі вибору категорії об’єкту

·        Номер дільниці. Аналогічним чином обирається із довідника.

Обов’язковим є ввід даних про тип об’єкту, номер дільниці та назву об’єкту. Якщо ці поля не були заповнені, закрити форму за допомогою кнопки „Виконати” неможливо. Якщо натиснути кнопку „Відмінити”, вікно буде закрито без збереження введених даних.

Редагування запису в довіднику об’єктів відбувається за допомогою подвійного клацання мишею по відповідному запису.

Рис. 4.12 Вікно редагування інформації про об’єкт

Система передбачає фільтрацію об’єктів по категорії. При натисканні кнопки „Фільтрація” на екрані з’являється допоміжна панель, де із випадаючого списку можна обрати необхідну категорію.

Рис. 4.13 Панель фільтрації записів

Кнопка „Експорт” дозволяє експортувати дані про об’єкти в файл формату MS Word. Приклад цього документу наведений в додатку Б.

Пункт меню Облік - Паспортні дані виводить на екран вікно, що представлене на рис.

Для кожної серії препарату реєструються наступні паспортні дані:

·        Вид препарату - вид імунобіологічного препарату із довідника видів ІБП.

·        Серія - вказується серія препарату.

·        Контрольний №- реєструється контрольний №ІБП.

·        Вимір дози - вказується вимір дози (мл, краплі).

·        Фасування - вказується кількість доз в ампулі, флаконі.

·        Країна-виробник - фіксується країна-виробник препарату (обирається із довідника).

·        Дата випуску - вказується дата виготовлення ІБП.

·        Термін придатності - вказується дата, до якої можливо використовувати препарат.

·        Примітка - довільний коментар до запису про ІБП.

Рис. 4.14 Вікно „Паспортні дані імунобіологічних препаратів”

При натисканні кнопки „Додати запис” на екрані з’являється наступне вікно:

Рис. 4.15 Вікно додавання запису паспортних даних

Вид препарату та країна-виробник обирається із відповідних довідників. Інтерфейс форми організований таким же чином, як і в довіднику об’єктів.

Кнопка „Експорт” дозволяє сформувати файл формату MS Word, приклад якого наведений в додатку Б.

Пункт меню Облік - Рух препаратів дозволяє вести статистику надходження та використання імунобіологічних препаратів.

Для формування запису про рух ІБП існує спеціальна форма (рис.), в якій відображені наступні дані:

·        Дата - дата реєстрації запису в журналі (за умовчанням - це поточна дата).

·        Серія - серійний номер препарату.

·        Термін придатності - строк, до якого препарат можна використовувати.

Рис. 4.16 Вікно „Облік використання ІБП в ЛПУ”

Наступні чотири поля відображають один із можливих варіантів здійснення операції. Це або:

·  отримання препарату від постачальників;

·        видача препарату на об’єкт (в якості об’єкту може виступати будь-яка одиниця із відповідного довідника);

·        використання препарату у межах лікувально-профілактичної установи;

·        списання препарату у зв’язку із закінченням строку гідності.

Додавання запису (чи його редагування, як і в попередніх випадках воно здійснюється за допомогою подвійного клацання мишею по відповідному запису) здійснюється за допомогою наступної форми:

Рис. 4.17 Додавання запису про рух ІБП

Після обрання типу операції (Отримано чи Використано) становиться доступною кнопка, що призначена для вибору препарату із довідника. Якщо обрано варіант Використано, становиться доступним вибір типу використання. У випадку, якщо тип використання - Видано на об’єкт, його можна вибрати із довідника об’єктів.

Рис. 4.18 Додавання запису в режимі видання препарату на об’єкт

Закрити вікно за допомогою кнопки „Виконано” неможливо, якщо не здійснені наступні операції:

·        обрано тип операції;

·        якщо тип операції „Використано” не обраний тип використання;

·        якщо в якості типа використання обрано „Видано на об’єкт” та не обрано об’єкт із довідника;

·        якщо не обрана серія препарату із паспорту препаратів;

·        якщо не введена кількість одиниць (флаконів або ампул препарату).

При цьому система здійснює наступний контроль. Якщо кількість препарату, що ми намагаємося використати або списати перевищує те, що є в наявності, система надає користувачеві відповідне повідомлення:

Рис.4.19 Повідомлення системи про відсутність препарату у необхідній кількості

Пункт меню Облік - Залишки, дозволяє отримати інформацію про кількість одиниць ІБП, що є на балансі ЛПУ.

Рис. 4.20 Вікно обліку залишків ІБП

Кнопка „Експорт” дозволяє створити звіт про залишки препаратів у форматі MS Word (додаток Б).

Пункт меню Облік - Препарати, що підлягають списанню дозволяє отримати звіт про препарати, термін придатності яких вийшов та швидко списати обрану серію з видаленням її найменування із переліку паспортних даних препаратів.

Рис. 4.21 Вікно „Перелік препаратів, що підлягає списанню”.

За допомогою підпункту меню Файл - Відкрити базу даних користувач системи має можливість змінити шлях до розташування фалу бази даних. Звернемо увагу на те, що файл бази даних може бути розташований на будь - якій ЕОМ, що підключена до локальної мережі організації. При відкритті файлів використовується фільтр - файли формату mdb. Діалогове вікно відкриття файлу наведено на рис.

Рис.4.22 Діалогове вікно відкриття файлу бази даних

Підпункт меню Файл - Резервна копія дозволяє у будь - який момент зберегти резервну копію бази даних у форматі mdb. Діалогове вікно зберігання резервної копії наведено на рис..

Рис. 4.23 Діалогове вікно зберігання резервної копії бази даних

Підпункт меню Адміністратор - Користувачі дозволяє змінювати або додавати інформацію (логін та пароль) про користувачів. Інформація про користувачів системи зберігається у системному реєстрі. Цей підпункт меню доступний тільки тоді, коли користувачем системи є адміністратор.

Рис. 4.24 Вікно редагування відомостей про користувачів системи

Якщо натиснути кнопку „Додати запис”, на екрані з’являється додаткова панель. Таким чином адміністратор може додавати користувачів системи та визначати їх пароль.

Рис. 4.25 Вікно системи, в якому можна додати інформацію про користувача

Кнопка „Редагувати” дозволяє змінити логін та пароль користувача, або зовсім видалити інформацію про нього.

Рис. 4.26 Вікно зміни інформації про користувача

 

4.5 Програмна реалізація гнучкої системи автоматизації


Система створена засобами середовища програмування Delphi 6.0 і відповідає всім необхідним вимогам, які пред'являлися в постановці завдання до дипломної роботи і виконує повне коло задач, перерахованих вище.

Додаток використовує базу даних в форматі mdb за наступною схемою:

Рис.4.27 Схема взаємозв’язку таблиць бази даних

Типи та призначення полів відповідних таблиць бази даних наведені на малюнках.

Рис.4.28 Структура таблиці sp_type_pr - довідника видів імунобіологічних препаратів

Рис. 4.29 Структура таблиці sp_country - довідника країн - виробників

Рис. 4.30 Структура таблиці pasport_pr - „Паспортні дані препаратів”

Рис. 4.31 Структура таблиці sp_type_ob - довідника типів об’єктів

Рис. 4.32 Структура таблиці sp_dil - довідника дільниць ЛПУ

Рис. 4.33 Структура таблиці objects - довідника об’єктів

Рис. 4.34 Структура таблиці sp_dil, що містить відомості про рух препаратів

Програми містить 6 форм, за допомогою яких користувач має змогу заносити та змінювати інформацію у базі даних та застосовуючи надані засоби фільтрування даних вибирати потрібні дані. Ієрархія форм наведена на мал. 4.35.

Рис. 4.35 Ієрархія форм системи

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

Рис. 4.36 Вікно DataModule2

Інформація про розташування файлу бази даних зберігається у системному реєстрі і зчитується в глобальну змінну basename за допомогою процедур, що містяться в модулі registry в події створення DataModule2.

:=tregistry.Create(key_read); //створення ключа.RootKey:=HKEY_CURRENT_USER;reg.OpenKey('\software\archive_doc\path',false) //відкриття ключа реєстру для зчитування:=reg.ReadString('text') //зчитування значення ключа як текстового параметру:='.\baza.mdb'; //якщо відповідний ключ в реєстрі не знайдений, система буде шукати файл бази в каталозі, в якому розташований виконавчий файл.ADOConnection1.Connected:=false;.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+'Data Source='+basename+';Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";';(‘Файл не найден’);.Terminate; //якщо файл бази не знайдено, система припиняє роботу;.Free;

Перед завантаження головного вікна системи на екрані з’являється форма, де необхідно вибрати логін користувача та ввести пароль.

Інформація про логін користувача та пароль також зберігається у системному реєстрі (гілка password).

Рис. 4.37 Вікно редактора реєстру

Кожному користувачеві (ім’я параметру log[i] - відповідно до порядку додавання користувача до списку) відповідає власний пароль (pas[i]).

Система налаштована таким чином, що завжди першим користувачем у списку буде адміністратор системи (логін - admin). Тому ключ log1 у системі відсутній. Якщо в системному реєстрі не знайдена гілка password, єдиним користувачем системи є admin, пароль якого по умовчанню - „1”.

Випадаючий список користувачів формується наступним чином:

Tpassword.FormCreate(Sender: TObject);i:integer;:=tregistry.Create(key_read); //відкриття реєстру для зчитування інформації.RootKey:=HKEY_CURRENT_USER;i:=1 to 20 doreg.OpenKey('\software\vak\password',false) theni=1 then begin log[1]:='admin'; ComboBox1.Items.Add(log[1]); //якщо це перший за номером користувач, його логін 'admin'else log[i]:=reg.ReadString('log'+inttostr(i)); //інакше логін зчитується із відповідного ключа реєстру[i]:=reg.ReadString('pas'+inttostr(i));(log[i]<>'') and (i>1) then ComboBox1.Items.Add(log[i]);;;;pas[1]='' then pas[1]:='1'; //пароль користувача 'admin' по умовчанню.ItemIndex:=0;;

При натисненні на кнопку „Виконати” система звіряє пароль, який ввів користувач з тим, що зберігається в системному реєстрі.

Tpassword.BitBtn1Click(Sender: TObject);s:string; i:integer;:=false; //ознака того, що пароль введений невірноi:=1 to 20 do(Edit1.Text=pas[i]) and (ComboBox1.Text=log[i]) //якщо відповідні логін та пароль співпадають з тими, що введені користувачемfl:=true; //ознака того, що пароль введений вірно;fl then close //якщо пароль вірний, форма закриваєтьсяbegin //інакше на екран виводиться інформаційне вікно та користувачеві надається ще одна спроба:=Application.Title;.Title:='Помилка реєстрації'; //зміна заголовку повідомлення('Ім''я користувача або пароль введено невірно!');.Title:=s; Edit1.Text:='';.SetFocus; //фокус у вікні вводу пароля;;

Редагувати інформацію про користувача може тільки admin. Тому, якщо користувач не має прав адміністратора, відповідний пункт буде заблокований.

Tpassword.FormClose(Sender: TObject; var Action: TCloseAction);not fl then main.Close //якщо пароль введений невірно, закривається головна формаComboBox1.Text='admin' then main.N17.Enabled:=true //якщо користувач системи admin, пункт Користувачі головного меню системи доступнийmain.N17.Enabled:=false;;

Формування довідників відбувається при допомозі стандартних компонентів DBGrid та DBNavigator і не є цікавим з програмної точки зору.

Виключенням є Довідник об’єктів, при формуванні якого використовуються два допоміжних довідника (дільниць та категорій об’єктів).

Перелік об’єктів об’єднує записи з деяких таблиць та формується на основі наступного SQL-запиту:

o.pib_k, o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil

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

procedure Tsp_ob.DBGrid1DblClick(Sender: TObject);DataModule2 do.Locate('kod_ob',ADOQuery3kod_ob.AsInteger,[]); //пошук у таблиці - довіднику об’єктів запису, що відповідає обраному в наборі ADOQuery3

ADOTable5.Edit; //перехід в режим редагування

end;vvod_ob do:='Редагування запису'; //зміна назви форми

DataModule2.ADOTable6.Locate

('kod_dil',DataModule2.adoquery3kod_dil.asinteger,[]); //пошук відповідного запису у таблиці -довіднику дільниць

DataModule2.ADOTable4.Locate

('kod_type_ob',DataModule2.adoquery3kod_type_obj.asinteger,[]);,[]); //пошук відповідного запису у таблиці -довіднику типів об’єктів

Edit1.Text:=DataModule2.ADOTable4type_obj.AsString; //виводиться тип об’єкту у відповідному вікні

Edit2.Text:=inttostr(DataModule2.ADOTable6nomer.AsInteger); //виводиться номер дільниці

ShowModal;

end;

end;

При натисканні кнопки „Додати запис” з’являється аналогічна форма, але з іншою назвою. При цьому текстові поля очищуються.

Tsp_ob.BitBtn2Click(Sender: TObject);.adotable5.Insert; //додавання запису у таблицю_ob.Edit1.Text:='';_ob.Edit2.Text:='';_ob.Caption:='Додавання запису';_ob.ShowModal;

Рис. 4.38 Форма вводу даних про об’єкт на етапі проектування

інформаційний автоматизований облік імунобіологічний

При натисканні на кнопки з трьома крапками на екрані з’являються вікна довідників. При цьому в вікні довідника з’являється додаткова панель з кнопкою „Вибрати”

Tvvod_ob.SpeedButton1Click(Sender: TObject);_type_ob.Panel1.Visible:=true; //візуалізація панелі_type_ob.ShowModal;;

При закритті форми довідника код обраного типу автоматично заноситься в довідник об’єктів, а назва типу відображається в компоненті типу Edit, що недоступний для редагування:

Tsp_type_ob.BitBtn1Click(Sender: TObject);.ADOTable5kod_type_obj.AsInteger:=DataModule2.ADOTable4kod_type_ob.AsInteger;_ob.Edit1.Text:=DataModule2.ADOTable4type_obj.AsString;; //закриття форми;

При закритті форми вводу відбувається оновлення набору та заново формується список типів об’єктів:

Tvvod_ob.BitBtn1Click(Sender: TObject);_ob.ComboBox1.Items.Clear;.ADOTable5.Post;.ADOQuery3.Close;.ADOQuery3.Open;DataModule2 do.Close;.Open;not ADOQuery4.Eof do_ob.ComboBox1.Items.Add(ADOQuery4type_obj.AsString);.Next;; end;;;

При натисненні кнопки фільтрація на екрані з’являється додаткова панель.

Tsp_ob.SpeedButton1Click(Sender: TObject);.Checked:=true; //флажок „Фільтрація” ввімкнено.Visible:=SpeedButton1.Down;Click(sender);;

Список типів об’єктів формується на основі наступного SQL-запиту:

distinct t.type_obj from objects o left join sp_type_ob t on t.kod_type_ob=o.kod_type_obj

Таким чином до набору додаються назви тільки тих типів об’єктів, які присутні в довіднику об’єктів. При цьому повторення виключаються (оператор distinct)

Формування списку відбувається при появі форми:

Tsp_ob.FormShow(Sender: TObject);.Items.Clear; //очищення спискуDataModule2 do.Close;.Open;not ADOQuery4.Eof do //перебір усіх записів набору_ob.ComboBox1.Items.Add(ADOQuery4type_obj.AsString); //додавання назви типу об’єкту до списку.Next; //перехід на наступну запис;;;

Фільтрація записів відбувається після обрання значення із списку (подія OnChange компоненту):


Режим фільрації вимикається, якщо встановлено перемикач „Показати все”.

Tsp_ob.CheckBox1Click(Sender: TObject);CheckBox1.Checked then //якщо режим фільтраціїї відключеноDataModule2 do.Close;.SQL.Clear;.SQL.Add('select o.pib_k,.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil');.Open;ComboBox1Change(Sender);;

Розглянемо більш детально процедуру формування звіту (кнопка „Експорт”).

При цьому автоматично генерується файл документу Word, в який буде експортовано дані із набору, що відображений у вікні. Процедури і функції, що використовуються при роботі з контролером автоматизації розміщені в модулі comobj.

Tsp_ob.BitBtn4Click(Sender: TObject);=1;i,j,k:integer;:string; mypagenumber:variant; mypagenumbers:variant;:variant;:=createoleobject('word.application'); //створення об’єкту Word

w.documents.add; //додавання документу.activewindow.activepane.view.zoom.percentage:=100; //масштаб відображення вікна документу - 100%:=w.activedocument.range.sections.item(1); //встановлення поточного розділу документу:=mysection.headers.item(1).pagenumbers; //автоматична нумерація сторінок звіту:=mysection.headers.item(1).pagenumbers.add(pagenumberalignment:=wdalignPageNumberRight,firstpage:=true); //встановлення параметрів нумерації - вгорі сторінки, по центру, номер на першій сторінці:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1; //вирівнювання тексу абзацу по центу.select; //виділення поточного абзацу.selection.font.bold:=1; //текст „жирний”.selection.font.underline:=1; //текст підкреслений.activedocument.range.insertafter('Перелік об''єктів'); //вставка заголовка звіту.activedocument.range.insertafter(#13); //додавання пустих строк.activedocument.range.insertafter(#13);CheckBox1.Checked then //якщо не ввімкнений режим фільтрації:=ComboBox1.Items.Count-1 else begin k:=0; //встановлення кількості груп (типів об’єктів0:=combobox1.text; //змінна, де зберігається назва типа об’єкту;j:=0 to k do //перебір усіх груп:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1;.select;.selection.font.underline:=0;.selection.font.bold:=1;checkbox1.checked then.activedocument.range.insertafter(ComboBox1.Items[j]) else.activedocument.range.insertafter(s); //вивід заголовку групи - назви типа об’єкту.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);DataModule2 do //вивід даних про об’єкту поточного типу.Close;.SQL.Clear;CheckBox1.Checked then:=ComboBox1.Items[j];.SQL.Add

('select o.pib_k, o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil where o.kod_type_obj=(select kod_type_ob from sp_type_ob where type_obj='+''''+s+''''+')');

//формування відповідного SQL-запиту.Open;.first;;:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.activedocument.tables.add(range:=myrange,numrows:=1,numcolumns:=5); //додавання в документ таблиці - 1 рядок та 5 стовпців:=w.activedocument.tables.item(j+1);.AutoFormat(Format:=20,:=true,:=false,:=false,:=false,:= false,:=false,:= false,:=false,:=false); //форматування таблиці за основі заданого типу Автоформату.rows.item(1).range.paragraphformat.alignment:=1; //вирівнювання посередині.rows.item(1).shading.backgroundpatterncolorindex:=16; //заливка комірки таблиці.rows.item(1).select; //обираємо 1-й рядок.selection.font.bold:=1;i:=1 to table.columns.count do //формування заголовківi of // i - порядковий номер стовпця

: begin.columns.item(i).width:=120; //встановлюємо ширину стовпця.cell(1,i).range.text:='Назва'; //виводимо заголовок;

: begin.columns.item(i).width:=50;.cell(1,i).range.text:='№діл.';;

: begin.columns.item(i).width:=100;.cell(1,i).range.text:='Адреса';;

: begin.columns.item(i).width:=100;.cell(1,i).range.text:='ПІП керівника';;

: begin.columns.item(i).width:=80;.cell(1,i).range.text:='Телефон';;;.rows.add; //додаємо рядок у таблицю.rows.item(2).shading.backgroundpatterncolorindex:=0; //відключення заливки.rows.item(2).select;.rows.item(2).range.paragraphformat.alignment:=3;.selection.font.bold:=0;:=2;DataModule2 donot ADOQuery3.eof do //перебір усіх записів набору

//формування таблиці - занесення відповідних значень набору у комірки таблиці.cell(ADOQuery3.recno+1,1).range.text:=adoquery3nazva.asstring;.cell(ADOQuery3.recno+1,2).range.text:=adoquery3nomer.asinteger;.cell(ADOQuery3.recno+1,3).range.text:=adoquery3adresa.asstring;.cell(ADOQuery3.recno+1,4).range.text:=adoquery3pib_k.asstring;.cell(ADOQuery3.recno+1,5).range.text:=adoquery3tel.asstring;:=k+1; //номер рядка.next; //перехід на наступну запис.rows.add; //додавання рядку у таблицю;.rows.item(k).delete;.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13); //візуалізація документу;.visible:=true;.checked:=true;Click(Sender);;

Видалення запису відбувається наступним чином:

Tsp_ob.BitBtn3Click(Sender: TObject);DataModule2 do.Locate('kod_ob',ADOQuery3kod_ob.AsInteger,[]); //пошук запису у таблиці-довіднику, щр відповідає поточній у набору.Delete; //видалення запису

//оновлення набору.Close;.Open;;;

Реалізація інтерфейсу вікна „Паспортні дані ІБП” відбувається майже аналогічним чином. Наведемо тільки тексти SQL-запитів, на основі яких сформовані відповідні набори.

Перелік паспортних даних препаратів:

 

select p.kod_pr,p.kod_type_pr,p.seria, p.kontr_n, p.vol_d, p.vimir_d, p.kol_d, p.date_vip, p.termin_pr,c.country, p.note from pasport_pr p left join sp_country c on c.kod_c=p.kod_vir

Формування списку типів препаратів:

 

select distinct t.naz_type from pasport_pr p left join sp_type_pr t on t.kod_type_pr=p.kod_type_pr

Найголовнішою гілкою системи є облік руху ІБП. Відповідний набір даних формується на основі наступного SQL-запиту:

 

select o.kod_z,o.lpu,o.spisano, o.kod_pr,o.priznak, o.kilkist,p.seria,p.termin_pr,o.date_v from oblik o left join pasport_pr p on p.kod_pr=o.kod_pr

Фільтрація записів по даті відбувається наступним чином:

Toblik.SpeedButton2Click(Sender: TObject);SpeedButton2.Down then //якщо нажата кнопка „Фільтрація”.ADOQuery5.Filter:='date_v>='+''''+datetostr(DateTimePicker1.date)+''''+' and ' +'date_v<='+''''+DATETOSTR(DateTimePicker2.date)+''''; //установка діапазону дат.ADOQuery5.Filtered:=true;else DataModule2.ADOQuery5.Filtered:=false; //якщо кнопка не нажата, фільтрація буде відмінена;

На рис. наведена форма вводу або редагування запису про рух препарату.

Рис.4.39 Форма вводу даних про рух препаратів на етапі проектування

Toblik_vvod.BitBtn1Click(Sender: TObject);(DataModule2.ADOTable7kod_pr.AsInteger=0) or

(DataModule2.ADOTable7kilkist.AsFloat=0)((RadioGroup2.ItemIndex=-1) and (RadioGroup1.ItemIndex=1))exit; //якщо не обраний тип препарату, тип операції або не введена кількість нажати кнопку „Виконати” неможливо.ADOTable7date_v.AsDateTime:=datetimepicker1.date; //значення дати здійснення операції заноситься у відповідне полеRadioGroup1.ItemIndex=0 then //якщо тип операції „Отримано”.ADOTable7priznak.AsBoolean:=falseDataModule2.ADOTable7priznak.AsBoolean:=true;RadioGroup2.ItemIndex=0 then //якщо препарати видано на об’єкт.ADOTable7lpu.AsBoolean:=false;.ADOTable7spisano.AsBoolean:=falseelse if RadioGroup2.ItemIndex=1 then //якщо використано в ЛПУ.ADOTable7lpu.AsBoolean:=true;.ADOTable7spisano.AsBoolean:=false;else //якщо препарати списано.ADOTable7lpu.AsBoolean:=false;.ADOTable7spisano.AsBoolean:=true;;.ADOTable7.Post;.ADOQuery5.Close;.ADOQuery5.Open;not DataModule2.ADOTable7priznak.AsBoolean thenDataModule2.ADOTable2.Edit;RadioGroup1.ItemIndex=0 then //якщо тип операції „Отримано”.ADOTable2zalishok.AsFloat:= DataModule2.ADOTable2zalishok.AsFloat+DataModule2.ADOTable7kilkist.AsFloat

//до кількості залишку відповідного препарату додається введена кількість//якщо тип операції „Використано”.ADOTable2zalishok.AsFloat:= DataModule2.ADOTable2zalishok.AsFloat-DataModule2.ADOTable7kilkist.AsFloat;

//від кількості залишку відповідного препарату віднімається введена кількість.ADOTable2.Post;begin.ADOTable2.Edit;.ADOTable2zalishok.AsFloat:= DataModule2.ADOTable2zalishok.AsFloat-DataModule2.ADOTable7kilkist.AsFloat;DataModule2.ADOTable2zalishok.AsFloat<0 then begin //перевірка, чи є в наявності необхідна кількість('Препарат '+Edit2.Text+' у потрібній кількості відсутній!'); exit

//якщо необхідної кількості немає, виводиться відповідне повідомлення та операція анулюєтьсяDataModule2.ADOTable2.Post;;

//оновлення набору.ADOQuery7.Close;.ADOQuery7.Open;;;

Набір даних форми „Залишки” формується на основі наступного SQL-запиту

 

select distinct p.zalishok,p.seria, p.kontr_n,t.naz_type, t.n_inf from pasport_pr p left join sp_type_pr t on t.kod_type_pr=p.kod_type_pr order by t.naz_type

Аналогічним чином відбувається формування набору про препарати, що підлягають списанню на поточний момент:

 

select p.kod_pr,p.seria,p.kontr_n, p.date_vip,p.termin_pr, p.zalishok, s.naz_type, s.n_inf from pasport_pr p left join sp_type_pr s on s.kod_type_pr=p.kod_type_pr order by s.naz_type

 

При появі форми набір даних фільтрується наступним чином:

procedure Tspisati.FormShow(Sender: TObject);s:string;DataModule2 do:=datetostr(date); //встановлення системної дати.Close; ADOQuery7.Open;.Filter:='termin_pr<='+''''+s+''''; //завдання параметрів фільтру.Filtered:=true;;;

Якщо нажати кнопку „Списати”, на екрані з’являється форма обліку руху препаратів, але усі значення полів будуть недоступними для редагування:

Tspisati.BitBtn3Click(Sender: TObject);.ADOTable7.Insert; //додання запису в таблицю обліку руху препаратів.ADOTable7kod_pr.AsInteger:=datamodule2.ADOQuery7kod_pr.AsInteger; //код препарату, що списується формується автоматично.ADOTable7kilkist.AsFloat:=datamodule2.ADOQuery7zalishok.AsFloat; //аналогічним чином формується значення поля, де зберігаються дані про залишкиoblik_vvod do //встановлення необхідних параметрів перемикачів.Enabled:=false;.ItemIndex:=2;.Enabled:=false;.Text:='Вид препарату '+ DataModule2.ADOQuery7naz_type.AsString+' серії '+DataModule2.ADOQuery7seria.AsString ; //вивід назви та серії препарату, що списується.Text:=inttostr(DataModule2.ADOQuery7zalishok.AsInteger); //вивід кількості препарату, що списується:='Списання препарату'; end;_vvod.ShowModal;

Якщо вже було зазначено вище, інформація про користувачів системи зберігається у системному реєстрі. При появі форми, що призначена для редагування інформації про користувачів, формуються два строкові масиви, що містять дані про логін та пароль користувача.

Tusers.FormShow(Sender: TObject);i:integer;.ClientHeight:=70;//встановлення розміру форми.SetFocus; ListBox1.Clear;.Visible:=false;.Visible:=false;:=tregistry.Create(key_read); //відкриття реєстру для читання.RootKey:=HKEY_CURRENT_USER;i:=1 to 20 doreg.OpenKey('\software\vak\password',false)

//формування масивівi=1 then log[i]:='admin' else log[i]:=reg.ReadString('log'+inttostr(i));[i]:=reg.ReadString('pas'+inttostr(i));not (log[i]='') then ListBox1.Items.Add(log[i]);i=1 then begin log[1]:='admin';[1]:='1';.Items.Add(pas[1]); //додаємо логін користувача у список;;;

Процедура додавання інформації про користувача реалізована наступним чином:

Tusers.BitBtn2Click(Sender: TObject);:=tregistry.Create(key_write);//відкриття реєстру для запису.RootKey:=HKEY_CURRENT_USER;reg.OpenKey('\software\vak\password',true)begin.writeString('log'+inttostr(ListBox1.Count+1),edit1.Text); //запис логіну.writeString('pas'+inttostr(ListBox1.Count+1),edit2.Text);//запис паролю;.Free;;.Down:=false;(Sender);;

Система також передбачає можливість зміни пароля користувача:

Tusers.BitBtn3Click(Sender: TObject);:=tregistry.Create(key_write);not ((Edit3.Text='') or (ListBox1.ItemIndex=-1)) //якщо обраний логін та введений пароль.RootKey:=HKEY_CURRENT_USER;reg.OpenKey('\software\vak\password',true)ListBox1.ItemIndex>0 then //змінити логін „admin” неможливо.writeString('log'+inttostr(ListBox1.ItemIndex+1),Edit4.Text);.writeString('pas'+inttostr(ListBox1.ItemIndex+1),Edit3.Text);.Free;;.Down:=false;Click(sender);;

При закритті головної форми зміни, що стосуються розташування файлу бази даних зберігаються у системному реєстрі.

Tf_main.FormClose(Sender: TObject; var Action: TCloseAction);:=tregistry.Create(key_write);.RootKey:=HKEY_CURRENT_USER;reg.OpenKey('\software\archive_doc\path',true).writeString('text',basename);.Free;;;

5. ЕКОНОМІЧНЕ ОБҐРУНТУВАННЯ ДОЦІЛЬНОСТІ РОЗРОБКИ ПРОГРАМНОГО ПРОДУКТУ


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

Найбільш важливим моментом для розроблювача, з економічної точки зору, є процес формування ціни. Програмні продукти являють собою досить специфічний товар з безліччю властивих їм особливостей. Багато їхніх особливостей проявляються й у методах розрахунків ціни на них. На розробку програмного продукту середньої складності звичайно потрібні досить незначні засоби. Однак, при цьому вона може дати економічний ефект, що значно перевищує ефект від використання досить дорогих систем.

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

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

В розробці користуємося мовою програмування Borland Delphi v.6.0.

Необхідні для розробки програмного продукту засоби обчислювальної техніки: персональна ЕОМ на базі процесора Pentium IV с тактовою частотою 2,1 Мгц, 512 Мб оперативної пам’яті, HDD 40 Гб, дисковод для компакт-дисків 4-х швидкісний.

Мінімальні апаратні вимоги:

для роботи додатків необхідно:

·        ПК типу IBM PC або сумісний з ним, продуктивністю не менше 166 МГц;

·        Оперативна пам'ять не менше 32 МГбайт;

·        Монітор із SVGA адаптером;

·        НЖМД не менше 4,3 Гбайт;

·        НГМД 3,5 дюйми;

·        Компакт-дисковий носій (CD);

·        Монітор, клавіатура, маніпулятор типу "миша".

5.1 Визначення витрат на створення програмного продукту


Економічна доцільність розробки полягає в скороченні штатних одиниць, та одержання більш достовірної інформації за короткий час.

Для визначення витрат на створення програмного продукту необхідно розрахувати:

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

витрати на оплату машинного часу, затраченого при розробці програми.

Витрати на оплату праці розроблювачів програми

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

, де

Зрозр - середньо-годинна оплата програміста,розр. - трудомісткість створення програми, що містить у собі витрати праці на наступні дії:

·      Знайомство з проблемою й визначення шляхів її вирішення;

·        Розробка структури інформаційної системи;

·        Розробка моделі бази даних «Деканат»;

·        Розробка програмного продукту «Деканат»;

·        Налагодження програми на ПК;

·        Підготовка документації по задачі.

Витрачений час на вирішення поставленої задачі розрахуємо за календарним планом виконання робіт (табл. 5.1)

Таблиця 5.1

Календарний план виконання робіт по створенню програми

Найменування етапів виконання робіт

 Кількість затрачених годин

Знайомство з проблемою і визначення шляхів її вирішення

35

Розробка структури інформаційної системи

50

Розробка моделі бази даних

25

Розробка програмного продукту

75

Налагодження програми на ПК

3

Підготовка документації по програмному забезпеченню

25


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

розр.= tпробл.+ tстр..+ tмод.+ tпрогр.+ tнал.+ ttдок, де

пробл. - час на знайомство з проблемою й визначення шляхів її вирішення,стр. - час на розробку структури інформаційної системи,мод. - час на розробку моделі бази даних «Деканат»;

tпрогр... - час на розробку програмного продукту «Деканат»,

tнал..- час на налагодження програми на ПК,tдок...- час на підготовку документації по задачі,розр. = 35+50+25+75+3+25 = 213 [люд./годин]

Для визначення середньої годинної оплати програміста необхідно спочатку визначити його річний фонд грошового забезпечення. Це можна зробити, знаючи місячне грошове забезпечення програміста. Воно складає приблизно 1200,00 гривень. Крім того він отримує раз на рік матеріальну допомогу на оздоровлення в розмірі 360 гривень та щомісячну премію в розмірі 420 гривень.

Таким чином, річний фонд грошового забезпечення програміста складає 19 800 гривень.

Нарахування на ФОП:

1.   Безробіття 1,3%

2.       Пенсійний фонд 33,2%

.        Соцзабезпечення тимчасової непрацездатності 1,6%

.        Соцзабезпечення від нещасних випадків 1,16%

Підсумок: 37,26%

Далі визначимо число робочих годин у році, за формулою:

(p) = (N - N(п) - N(в)) * 8, де

- загальне число днів у році,(п) - число святкових днів у році,(в) - число вихідних днів у році,

Число святкових днів у році - 10, вихідних - 104. Отже, число робочих годин у році дорівнює:(p) = (365 - 10 - 104) * 8 = 2008 [години]

Середньо годинна оплата програміста визначається співвідношенням:

Срозр. = ФЗПсн / n(p), де

ФЗПсн - річний фонд грошового забезпечення,

Срозр. = 19800 / 2008 = 9,86 [гривень]

Отже, витрати на оплату праці (Зрозр.) розроблювачів програми складають:

Зрозр. = 213 * 9,86 = 2100,18 [гривень]

Зрозр.нарах.= 2100,18 + 2100,18 * 37,26% = 2882,70 [гривень]

5.2 Витрати, пов'язані з розробкою програми на ПК


Витрати, пов'язані з розробкою програми на ПК, визначаються, як добуток години використання ПК для розробки програми на собівартість машинного часу обчислювальної техніки. Собівартість (СПК) однієї години роботи ПК дорівнює відношенню річних поточних витрат на експлуатацію ПК (ЗгПК) до річного фонду годин (ТгПК) корисної роботи ПК.

СПК = ЗгПК / ТгПК

 

Розрахунок річного фонду тривалості робочого часу ПК (у годинах)

Визначивши дійсний річний фонд тривалості робочого часу ЕОМ у годинах, маємо можливість оцінити собівартість машинного часу. Дійсний річний фонд тривалості робочого часу ЕОМ дорівнює числу робочих годин у році для оператора, за винятком часу затраченого на профілактику й ремонт ЕОМ. Час профілактики: щомісячно - 5 годин; щорічно - 6 діб.

ТгПК = n(p) - (6 * 8 + 5 * 12),

ТгПК = 2008 - (6 * 8 + 5 * 12) = 1900 [години]

Річні поточні витрати на експлуатацію визначаються за формулою:

ЗгПК = ЗгАМ + ЗгЭЛ + ЗгРЕМ + ЗгМАТ + ЗгДР, де

ЗгАМ - річні відрахування на амортизацію,

ЗгЭЛ - річні витрати на електроенергію для ПК,

ЗгРЕМ - річні витрати на ремонт ПК,

ЗгМАТ - річні витрати на додаткові комплектуючі ПК,

ЗгДР - інші витрати.

Амортизаційні відрахування

Основні фонди підлягають розподілу на групи. У нашому випадку, комп’ютер, група 4 (ЕОМ, інші машини призначені для автоматичної обробки інформації, а також пов’язані з ними засоби зчитування або друку інформації та інші). Амортизація основних фондів групи 4 відбувається до досягнення балансової вартості групи нульового значення. Для основних фондів групи 4 - амортизація відбувається з кварталу, наступного за кварталом придбання матеріальних цінностей.

Заключний етап в нарахуванні податкової амортизації - це щоквартальний розрахунок суми амортизації. Норми амортизації встановлені у відсотках до балансової вартості 4 групи основних фондів і складають 60% на рік, так як нарахування амортизації відбувається щоквартально, то норма амортизаційних відрахувань у квартал складає (60% / 4) = 15%.

Згідно податкового методу нарахування амортизації, загальна сума річних амортизаційних відрахувань визначається за формулою :

ЗгАМ = ЦПК * НА, де

ЦПК - балансова вартість ПК,

НА - норма амортизаційних відрахувань, що дорівнює 15% (у квартал).

Балансова вартість ПК :

Цпк = Цр * (1+ Кун), де

Цр - ринкова вартість ПК,

Кун - коефіцієнт, що враховує витрати на установку й налагодження, рівний 12%.

Ринковою вартістю ПК, будемо вважати ту вартість до якої входить повна комплектація ПК, вона становитиме 5000 грн.

Цпк = 5000 * (1 + 0.12) = 5600 [гривень],

кв. = 5600 * 0,15 = 840 [гривень],

кв. = (5600 - 840) * 0.15 = 714 [гривень],

кв. = (5600 - 840 - 714) * 0.15 = 606,90 [гривень],

кв. = (5600 - 840 - 714 - 606,90) * 0,15 = 515,87 [гривень],

ЗгАМ = 840 + 714 + 606,90 + 515,87 = 2676,77 [гривень]

Витрати на електроенергію, споживану ПК

Витрати на електроенергію, затрачену ПК, визначаються за формулою:

ЗгЭЛ = РчПК * ТгПК * ЦЭЛ * А, де

чПК - потужність ПК (PчПК = 0.3 [кВт.]),

ТгПК - річний фонд корисного часу роботи машини,

ЦЭЛ - вартість 1 кВт/годину електроенергії (ЦЭЛ = 0,24 [грн.]),

А - коефіцієнт інтенсивного використання ПК (0.9 - 1).

Таким чином, кількість витрат на електроенергію, споживану ПК, складає:

ЗгЭЛ = 0.3 * 1900 * 0,24 * 1.0 = 136,80 [гривень]

Витрати на поточний і профілактичний ремонт

Витрати на поточний і профілактичний ремонт приймаються рівними 6% від вартості ПК:

ЗгРЕМ = ЦПК * 0.06,

ЗгРЕМ = 5600* 0.06 = 336 [гривень]

 

Витрати на матеріали

Витрати на матеріали - витрати, необхідні для забезпечення експлуатації ПК, приймаються рівними 2% від вартості ПК.

ЗгМАТ = ЦПК * 2%,

ЗгМАТ = 5600 * 0.02 = 112 [гривень]

Непрямі витрати.

Непрямі витрати, пов'язані з експлуатацією ПК, приймаються рівними 5 - 10% вартості ПК.

ЗгДР = ЦПК * 5%,

ЗгДР = 5600 * 0.05 = 280 [гривень]

 

Повні витрати на експлуатацію ПК

Повні витрати на експлуатацію ПК протягом року складають:

ЗгПК= 2676,77 + 136,80 + 336 + 112 + 280 = 3541,57 [гривень]

Собівартість однієї години роботи машини (CПК) складає:

СПК = 3541,57 / 1900 =1,86 [гривень]

Витрати машинного часу.

У ході розробки програмного комплексу машина використовувалася на етапах програмування:

·        написання програми за готовою схемою алгоритму;

·        налагодження програми на ПК;

·        підготовки документації по задачі.

Таким чином, витрати машинного часу склали (tмаш):

маш = tпрог.+ tотл. + tдок,

tмаш = 75 + 3 + 25 = 103 [чол./часів]

Витрати на оплату машинного часу можна розрахувати за формулою:

Змаш = tмаш * СПК,

Змаш = 103* 1,86 = 191,58 [гривень]

Загальні витрати на створення програмного комплексу

Зразом = З розр. + З маш,

Зразом = 2882,70 + 191,58 = 3074,28 [гривень]

5.3 Визначення планованої економії від упровадження програмного продукту


При визначенні планованої окупності приймемо, що витрати на даний програмний комплекс понесла установа, без мети наступного комерційного поширення продукту.

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

Зменшення часу досягається за рахунок зручного розподілу збереження оброблюваних даних. Усі дані зберігаються в окремому каталозі й при необхідності легко доступні для повторної обробки й аналізу.

Таблиця 5.2

Річний фонд заробітної плати двох штатних одиниць

З/П до автоматизації

Кількість чоловік

Місячна З/П, грн.

Премія 40% та рай. Коеф. 15%, грн.

Всього З/П за рік, грн.

Працівник 1

1

1000

610

(1000*12+610*12) = 19320

Працівник 2

1

1000

610

(1000*12+610*12) = 19320

Відрахування на ФОП

2

19320 + 19320 = 38640

37,16%

14358,624

ВСЬОГО:

 

 

 

52998,62


У результаті впровадження даного програмного комплексу економія трудових ресурсів складає 1 штатну одиницю з річним фондом заробітної плати 26499,31грн. Річна економія складає:

Е = Зразом_прац - Зразом - ЗгПК, де

Зразом_прац - річний фонд заробітної плати 1-го працівника,

Зразом - загальні витрати на створення програмного комплексу,

ЗгПК - повні витрати на експлуатацію ПК протягом року.

Е = 26499,31 - 3074,28 -3541,57 = 19883,46 [гривень]

6. ОХОРОНА ПРАЦІ


Охорона праці - це система законодавчих актів, соціально-економічних, організаційних і лікувально-профілактичних заходів і засобів, що забезпечують безпеку, збереження здоров'я і працездатності людини в процесі праці.

Поліпшення охорони праці розглядається як одна з основних задач подальшого соціологічного розвитку нашої країни.

Закони охорони праці поширюються на всі підприємства, заклади, організації, юридичних осіб незалежно від форми власності, які здійснюють розробку виробництва та застосування ПЕОМ і ПК.

Законодавчими актами, що визначають основні положення про охорону праці, є загальні закони України, а також спеціальні законодавчі акти. До загальних законів, що визначають основні положення про охорону праці належать: Конституція України, Закони України «Про охорону праці», «Про охорону здоров’я », «Про пожежну безпеку», «Про забезпечення санітарного та епідемічного благополуччя населення», «Про загальнообов’язкове державне соціальне страхування від нещасного випадку на виробництві та професійного захворювання, які спричинили втрату працездатності», Кодекс законів про працю України (КЗпП). Спеціальними законодавчими актами в галузі охорони праці є Державні нормативні акти про охорону праці, Державні стандарти Системи стандартів безпеки праці, Будівельні норми та правила, Санітарні норми, Правила технічної експлуатації електроустановок споживачів та інші нормативні документи.

Законодавство України про охорону праці базується на основах нормативно - правових актів, які відповідають Конституції України. Статті 43, 45, 46, 49, 50, 53, 56 і 64 Конституції України гарантують право громадян України на працю, відпочинок, охорону здоров’я, медичну допомогу та страхування. Державна політика у галузі охорони праці, закріплена статтею 4 закону України «Про охорону праці», базується на пріоритеті життя і здоров’я працівників в умовах виробничої діяльності підприємства, повної відповідальності власника для створення шкідливих і безпечних умов праці. «Проектування виробничих об’єктів, розробка нових технологій, засобів виробництва, засобів колективного та індивідуального захисту працівників, повинні здійснюватися з урахуванням потреб з охорони праці" відповідно до статті 154 закону України «Про охорону праці». У статті 155 закону України «Про охорону праці» записано: «Ні одне підприємство, цех, ділянка підприємства не повинні бути прийняті і введенні у експлуатацію, якщо на них не створені безпечні і нешкідливі умови праці».

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

6.1 Аналіз шкідливих і небезпечних факторів в Міська клінічна лікарня №2


Робочим місцем вважається місце постійного чи періодичного перебування працюючого для спостереження й ведення виробничого процесу чи експерименту. Організація робочого місця полягає у виборі робочої пози, визначенні робочих зон, розміщенні органів управління, індикаторів, інструментів і заготовок. Частина простору робочого місця, в якому здійснюються робочі процеси, може бути розділена на зони. Робоча поза буде найменш втомлювальною при умові, що робоча зона сконструйована правильно, тобто забезпечується відповідність цієї зони з оптимальним полем зору працюючого.

Робоче місце, устатковане відео-терміналом, забезпечується:

. належними умовами освітлення приміщення й робочого місця, відсутністю відблисків;

. відповідністю оптимальних параметрів мікроклімату;

. належними ергономічними характеристиками основних елементів робочого місця.

При розміщенні відео-термінала обраховується наявність шуму та вібрації, м’якого рентгенівського випромінювання, електромагнітного випромінювання, ультрафіолетового та інфрачервоного, електростатичного поля, а також наявність пилу, озону, окислів азоту та аероіонізації.

Відповідно діючим нормативним документам площа приміщення 13,0 мІ; об’єм - 20 мі. Стіна, стеля, підлога приміщення виготовляються з матеріалів, дозволених для оформлення приміщень санітарно-епідеміологічним наглядом. Підлога приміщення вкрита діелектричним килимком, випробуваним на електричну міцність.

Висота робочої поверхні столу для відео-терміналу - 690 мм, ширина повинна забезпечувати можливість виконання операцій в зоні досягнення моторного ходу; висота столу 725 мм, ширина 800 мм, глибина 900 мм. Простір для ніг: висота 600 мм, ширина 500 мм, глибина на рівні колін 500 мм, на рівні витягнутої ноги 650мм.

Ширина й глибина сидіння 400 мм, висота поверхні сидіння 450 мм, кут нахилу поверхні від 15є вперед до 5є назад. Поверхня сидіння плоска, передній край закруглений.

Заземлення конструкцій, які знаходяться в приміщенні надійно захищені діелектричними щитками. В приміщенні з ПЕОМ кожен день проводиться вологе прибирання.

В доступних місцях знаходяться аптечки першої медичної допомоги.

Приміщення з ПЕОМ оснащено системою автоматичної пожежної сигналізації, а також устатковане засобами пожежогасіння. Підходи до засобів пожежогасіння вільні. Приміщення має кімнати для відпочинку, приймання їжі, психологічної розгрузки та інші побутові приміщення.

6.2 Фізичні й психофізіологічні небезпечні та шкідливі виробничі фактори при роботі на комп’ютері й заходи по їх знищенню


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

Нанесення травми людині в умовах виробництва обумовлене наявністю небезпечних виробничих чинників:

· підвищенні значення електричного струму, статичної електрики та рівня електромагнітних випромінювань;

· підвищений рівень рентгенівських випромінювань;

· підвищений рівень шуму;

· несприятливі мікрокліматичні умови;

· недостатнє або надмірне освітлення;

· психофізіологічні шкідливі і небезпечні виробничі чинники.

6.2.1 Електромагнітне випромінювання

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

Джерелами випромінювання електромагнітних полів (ЕМП) в ПЕОМ є система відхилення випромінювання монітору, а також елементи блоків живлення системного модуля, монітору, принтера.

Систематичний вплив на працюючого ЕМП з рівнями, що перевищують допустимі, призводить до порушення стану його здоров’я. При цьому можуть виникати зміни в нервовій, серцево-судинній та інших системах організму людини.

При впливі ЕМП значної інтенсивності на організм можуть виникати поразки кришталиків ока, нервово-психічні захворювання і трофічні явища (випадення волосся, ломкість нігтів).

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

6.2.2 Рентгенівське випромінювання

Електронно-променеві трубки, які працюють при напрузі понад 6 кВ є джерелами „м’якого” рентгенівського випромінювання. При напрузі понад 10 кВ рентгенівське випромінювання виходить за межі скляного балону і розсіюється в навколишньому просторі виробничого приміщення.

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

6.2.3 Підвищений рівень шуму

При роботі на ПЕОМ людина наражається на шумовий вплив з боку багатьох джерел, наприклад, шум викликаний роботою принтера (70 дБ), вентиляторів і кондиціонерів (до 100 дБ).

Під впливом шуму відбувається зниження слухової чутливості, що тим значні, ніж вище інтенсивність шуму і більше його експозиція.

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

При роботі в умовах шуму спостерігається підвищена втомлюваність і зниження дієздатності, погіршується увага і мовна комутація, створюються передумови до помилкових дій працюючих. Являючись причиною частих головних нездужань, нестійкого емоційного стану, шум створює передумови до погіршення психологічного стану. Шкідливий вплив шуму на організм людини, як правило, посилюється за наявності інших шкідливих або несприятливих виробничих чинників.

6.2.4 Мікроклімат

Мікроклімат виробничих приміщень і стан повітряної середи в робочій зоні - головні чинники, які визначають умови праці. Основні параметри мікрокліматичних умов - температура, вологість, швидкість руху повітря і барометричний тиск впливають на теплообмін і загальний стан організму людини.

На організм людини і обладнання ПЕОМ великий вплив виявляє відносна вологість. При відносній вологості повітря більш 75-80% знижується опір ізоляції, змінюються робочі характеристики елементів, зростає інтенсивність відмов елементів ПЕОМ. Швидкість руху повітря і запиленість повітряного середовища виявляють вплив на функціональну діяльність людини і роботу приладів ПЕОМ.

Одним з найважливіших фізіологічних механізмів організму є терморегуляція, що залежить від мікрокліматичних умов навколишньої середи. Терморегуляція підтримує тепловий баланс організму людини при різноманітних метеорологічних умовах і тяжкості роботи, що виконується за рахунок звуження або розширення поверхні кровоносних судин і відповідної роботи потових залоз.

Несприятливий мікроклімат в процесі роботи викликає недомагання і втому організму, порушує нервову і розумову діяльність, сприяє зниженню спостережливості і швидкості реакції.

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

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

До систем центрального опалення відносять водяне, парове, панельне, повітряне, комбіноване.

6.2.5 Освітлення

Значення освітлення в процесі життєдіяльності і особливо виробничої діяльності сучасного суспільства величезне.

Організація раціонального освітлення робочих місць - одне з основних питань охорони праці.


Залежно від джерела світла виробниче освітлення може бути трьох видів: природне, штучне і суміщене.

Природне освітлення

Для природного освітлення характерна висока дифузна (неуважність) денного світла від небозводу, що вельми сприятливе для зорових умов роботи.

Природне освітлення підрозділяють на бічне, здійснюване через світлові віконні отвори; верхнє, здійснюване через аераційні і зенітні ліхтарі, отвори в перекриттях; комбіноване - бічне з верхнім.

Природне освітлення характеризується тим, що створювана освітленість змінюється в надзвичайно широких межах залежно від часу дня, року, метеорологічних чинників. Тому природне освітлення неможливе кількісно задавати величиною освітленості. Як нормована величина для природного освітлення прийнята відносна величина - коефіцієнт природної освітленості (КЕО), який є вираженим у відсотках відношенням освітленості в даній крапці усередині приміщення до одночасного значення зовнішньої горизонтальної освітленості, створюваної світлом повністю відкритого небозводу, тобто

Штучне освітлення

Штучне освітлення передбачається у всіх виробничих і побутових приміщеннях, де не досить природного світла, а також для освітлення приміщень в нічний час.

По функціональному призначенню штучне освітлення підрозділяють на робоче, аварійне, евакуаційне, охоронне, чергове. Робоче освітлення забезпечує зорові умови нормальний роботи, проходу людей і руху транспорту. Аварійне освітлення влаштовують для продовження роботи при раптовому відключенні робочого освітлення. При цьому нормована освітленість повинна складати 5% від робочого освітлення. Евакуаційне освітлення передбачається для евакуації людей з приміщень при аваріях в місцях, небезпечних для проходу людей, на сходових клітках (повинно бути в приміщеннях не менше 0,5, а на відкритих територіях - не менше 0,2 лк).

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

Штучне освітлення може бути загальним (рівномірним або локалізованим) і комбінованим (до загального додається місцеве). Застосування тільки місцевого освітлення забороняється.

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

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

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

6.2.6 Психофізіологічні шкідливі і небезпечні виробничі чинники

Психофізіологічні шкідливі і небезпечні виробничі чинники по характеру дії поділяються на фізичні і нервово-психічні перевантаження.

При експлуатації ПЕОМ можуть виникнути негативні явища в організмі людини. Розлади, що виникають в результаті постійного виконання дій, що повторюються, стосуються працівників, що використовують в своїй роботі клавіатуру. При цьому виникає синдром тунельного зап’ястя, який викликає розпухання сухожиль, і що супроводжується постійною біллю при виконанні будь-яких дій, навіть не зв’язаних безпосередньо з професійною діяльністю.

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

6.3 Організаційні і технічні заходи по зменшенню рівня шкідливих виробничих чинників

 

.3.1 Захист від електромагнітних випромінювань

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

Для зниження електромагнітного впливу на людину-оператора використовуються також раціональні режими роботи, при яких норма роботи на ПЕОМ не повинна перевищувати 50% робочого часу.

6.3.2 Захист від ураження електричним струмом

Гранично допустимі рівні напруги дотику і струмів при експлуатації і ремонті обладнання забезпечені:

― застосуванням малої напруги;

― ізоляцією струмоведучих мереж;

― обґрунтуванням і оптимальним вибором елементної бази, що виключає передумови поразки електричним струмом;

― правильного компонування, монтажу приладів і елементів;

― дотриманням умов безпеки при настанові і заміні приладів і інше.

Захист від небезпечних впливів електричного струму при експлуатації обчислювальних комплексів забезпечені:

― застосування захисного заземлення або обнуління;

― ізоляцією струмопровідних частин;

― дотриманням умов безпеки при настанові і заміні агрегатів;

― надійним контактним сполученням з урахуванням перепаду кліматичних параметрів.

6.3.3 Захист від статичної електрики

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

На робочих місцях всі металеві та електропровідні неметалеві обладнання заземлені.

 

.3.4 Захист від шуму та вібрації

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

Зниження виробничого шуму в приміщеннях, де розміщені ПЕОМ, досягається за рахунок акустичної обробки приміщення - зменшення енергії відбитих хвиль, збільшення еквівалентної площі звукопоглинаючих поверхонь, наявність в приміщеннях штучних звукопоглиначів.

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

В якості засобів звукопоглинання застосовуються не горючі або тяжко горючі спеціальні перфоровані плити, панелі, мінеральна вата з максимальним коефіцієнтом поглинання в межах частот 31.5-8000 Гц.

6.3.5 Оздоровлення повітряного середовища

Для створення нормальних умов роботи програмістів і операторів ПЕОМ в машинному залі використовується система кондиціювання, що забезпечує необхідні оптимальні мікрокліматичні параметри і чистоту повітря.

В холодні періоди року температура повітря, швидкість його руху і відносна вологість повітря відповідно складають: 22-24 С°; 0,1 м/с; 40-60%; в теплі періоди року температура повітря - 23-25 Сє; відносна вологість 40-60%; швидкість руху повітря - 0,1 м/с.

Витяжні отвори розташовані у стелі.

6.3.6 Захист від рентгенівського випромінювання

Електронно-променеві трубки, магнетрони, тиратрони та інші електровакуумні прилади, що працюють при напрузі вище 6 кВ, є джерелами „м’якого” рентгенівського випромінювання.

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

Шкідливий вплив рентгенівських променів зв’язаний з тим, що порушення міжмолекулярних зв’язків тканинної речовини може призвести до порушення нормальної течії біохімічних процесів і обміну речовин.

Засобами захисту від „м’якого” рентгенівського випромінювання є застосування поляризаційних екранів, а також використання в роботі моніторів, що мають біокерамічне покриття і низький рівень радіації.

В якості засобів захисту від чинності м’яких рентгенівських променів застосовуються екрани з сталевого листа (0,5-1 мм) або алюмінію (3 мм), спеціальної гуми.

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

6.3.7 Забезпечення раціонального освітлення

При правильно розрахованому і виконаному освітленні очі працюючого за комп’ютером протягом тривалого часу зберігають здатність добре розрізняти предмети не втомлюючись. Це сприяє зниженню професійного захворювання очей, підвищується працездатність.

Раціональне освітлення відповідає ряду вимог:

достатнє, щоб очі без напруги могли розрізняти деталі;

постійна напруга в мережі не коливається більше ніж на 4%;

рівномірно розподілено по робочим поверхням, щоб очам не приходилося зазнавати різкого контрасту кольорів;

не викликає дії, яка сліпить органи зору працюючого (зменшення блищання джерел, що відбивають світло, досягається застосуванням світильників, які розсіюють світло);

не викликає різких тіней на робочих місцях.

Задачею розрахунку є визначення необхідної потужності електричної освітлювальної установки для створення у виробничому приміщенні заданої освітленості.

При проектуванні освітлювальної установки необхідно вирішити наступні основні питання:

― вибрати тип джерела світла - рекомендуються газорозрядні лампи, за винятком місць, де температура повітря може бути менш +5 ° З і напруга в мережі падати нижче 90% номінального, а також місцевого освітлення (у цих випадках застосовуються лампи розжарювання);

― визначити систему освітлення (загальна локалізована або рівномірна, комбінована);

― вибрати тип світильників з урахуванням характеристик світорозподілення, умов середовища (конструктивного виконання) і др.;

― розподілити світильники і визначити їх кількість (світильники можуть матися в своєму розпорядженні рядами, в шаховому порядку, ромбоподібно);

― визначити норму освітленості на робочому місці.

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

Найчастіше її розраховують по світловому потоку. Для цього визначається світловий потік кожної лампи по нормуючій мінімальній горизонтальній освітленості Еmin (лк) з вираження:

=(Emin·S·K·z) / n1·n·N,

де F - світловий потік лампи в світильнику, лм;- площа приміщення, м2;- коефіцієнт запасу;- коефіцієнт нерівномірного освітлення;1 - коефіцієнт використання світлового потоку;- кількість ламп в світильнику;- число світильників.

Якщо освітлення здійснюється рядами люмінесцентних ламп, те вираження вирішується відносно N.

Значення коефіцієнта n1 визначається по довіднику в залежності від типу світильника, коефіцієнтів відбивання стін Рс, стелі Рп, робітничій поверхні і від розмірів приміщення.

Показник приміщення fi визначається з виразу:

fi= А·В/Нр·(А+В),

Нр - висота підвісу світильника над робітничою поверхнею, м.

У випадку застосування люмінесцентних ламп потрібна кількість світильників N, яка визначається за формулою:

=Emin·S·K·z/F·n1·n

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

Нехай зал має розміри А=8м, В=5м, h=3м, стеля обладнується світильниками Л201Б з люмінесцентними лампами ЛБ80, технічні характеристики ламп і світильників наведені в таблицях 6.1., 6.2. (згідно з ГОСТом 6825-74).

Таблиця 6.1

Тип

Потужність, Вт

Напруга, В

Світловий потік (номін.)

Довжина, мм

Діаметр, мм

ЛБ80

80

110

5220

1500

40

Таблиця 6.2

Серія

Модифікація

Кількість* потужність, шт.,Вт

Розміри, мм

Номер групи

Прим.




Довжина

Ширина

Висота



Л201Б

3

2·8

1575

354

127

9

Стеля

Рівень робітничої поверхні над полом 0,8 м, при цьому Нр=2,2 м.

Показник приміщення рівний:i=40/2,2 (8+5)=1,3986

По довіднику визначаємо значення коефіцієнта n1 (для значень Рс=0,5, Рп=0,3): n1=0,7. Значення коефіцієнта нерівномірного освітлення приймаємо рівним 1,1, а коефіцієнта запасу - 1,5. При загальному типі освітлення значення Emin=400 лк.

Знаючи значення світлового потоку кожної лампи, можемо визначити необхідну кількість світильників:=400· 8· 5 ·1,5· 1,1/5220· 0,7· 2=3(штук)

Загальна потужність освітлювальної установки рівна:

Р=2· 80 · 3=480(Вт)

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

6.4 Пожежна безпека

 

.4.1 Пожежна і вибухова безпека в робочій зоні технічного обслуговування в приміщеннях з ПЕОМ

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

По класифікації приміщень з ПЕОМ по пожежній небезпеці відносяться до категорії В, що характеризуються наявністю твердих горючих і тяжко горючих речовин і матеріалів, а також легкозаймистих матеріалів.

В зв’язку з цим можна виділити ряд заходів для пожежебезпеки:

― не палити і не використовувати нагрівальні прилади в приміщеннях з ПЕОМ;

― не від’єднувати і не приєднувати кабелі, усувати несправності за наявності напруги в мережі;

― не визначати наявність напруги в ланцюзі, замиканням клем.

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

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

Технологічні об’ємні підлоги виконуються з негорючих або тяжко горючих матеріалів з межею вогнестійкості не менше 0,5 г. Підпільні простори під об’ємними підлогами відділяють негорючими перегородками з межею вогнестійкості не менше 0,75 г на ділянки площею не більш 250 м2.

В кожній кімнаті знаходяться вогнегасники. Вони діляться на хімічні, пінні, повітряно-пінні, СО2 - вогнегасники і порошкові.

Вогнегасники допускаються до експлуатації якщо їхні технічні характеристики відповідають нормативним значенням, встановленим експлуатаційно-технічною документацією. Зменшення змісту вогнегасячої речовини і тиску у вогнегасниках не повинне перевищувати 10% від встановленого номінального значення.

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

Первинні засоби пожежогасіння: ручні вогнегасники в кількості 2 шт.

Засоби гасіння загорання й пожежі, які можуть бути ефективно використані в початковій стадії пожежі: внутрішні пожежні крани, вогнегасники, кошми, пісок.

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

ЕПС складаються з таких основних частин: сповіщувачів, встановлених в приміщеннях; приймальної станції, яка знаходиться в черговій кімнаті пожежної команди; блока поживи від сіті та від акумулятора (резервний); системи переключення з одної поживи на іншу; електропровідній сіті, яка з’єднує сповіщувачі з приймальною станцією.

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

В кожному відділені лікарні є план евакуації.

ВИСНОВКИ


У процесі виконання дипломної роботи було розроблено гнучку систему автоматизації обліку імунобіологічних препаратів. Розроблена система дозволяє:

·          покращити ефективність роботи;

·        підвищити оперативність обробки інформації;

·        зменшити обсяг паперових носіїв;

·        підвищити оперативність та точність роботи.

Областю застосування розробленої системи є районні лікувально-профілактичні установи.

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

Дана програма була створена за допомогою саме цієї мови програмування, що дозволило зробити зручний інтерфейс і автоматизувати виконання дій.

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

Система візуального програмування Delphi користується великою популярністю серед широкого круга користувачів: від програмістів, що починають, до досвідчених розробників, складних додатків, що займаються створенням і великих інформаційних систем.

СПИСОК ЛІТЕРАТУРИ

1. Бобровский С. Delphi 5 - СПб.: Питер, 2000

. Гаевский А. Разработка программных приложений на Delphi 6 - М.: Киев, 2000.

. Галисеев, Г.В. Программирование в среде Delphi 8 for.NET. Самоучитель. :- М.: Издательский дом "Вильяме", 2004.

. Глинский Я.Н., Анохин В.Е., Ряжская В.А. Turbo Pascal 7.0 и Delphi. Учебное пособие. СПб.: ДиаСофтЮП, 2003. - 208 с.

. Гофман В., Хомоненко А. Delphi 6. CПб.: БХВ-Петербург, 2004.

. Грибачев К. Г. Delphi и Model Driven Architecture. Разработка приложений баз данных. - СПб.. Питер, 2004.

. Грибачев К. Тонкие базы данных и инструменты для их разработки в Delphi и C++Builder. - КомпьютерПресс, 2003, №7, 8.

. Дарахвелидзе П. Г., Марков Е. П. Delphi - среда визуального программирования. СПб.: BHV- Санкт-Петербург, 1999.-352с.

. Елманова Н., Трепалин С., Тенцер А. Delphi 6 и технология COM. - CПб.: Питер, 2002. - 640 с.

. Калверт Ч. Delphi 5. Энциклопедия пользователя. СПб.: ДиаСофтЮП, 2003.

. Климова Л. М. "Delphi 7. Самоучитель. М.: ИД КУДИЦ-ОБРАЗ, 2005. - 480с.

. Корняков В.Н. Программирование документов и приложений MS Office в Delphi. - CПб.: БХВ-Петербург, 2005. - 496 с.

. Коцюбинский А.О., Грошев С.В. Язык программирования Delphi 5 - М.: "Издательство Триумф", 1999

. Леонтьев В. Delphi 5 - М.: Москва "Олма-Пресс", 1999

. Мадрел Тео. Разработка пользовательского интерфейса/ Пер. с англ.- М.:ДМК,2001.

. Матросов А. В. и др. MS Office ХР: разработка приложений / Матросов А. В., Новиков Ф. А., Усаров Г. Е., Харитонова И. А. / Под ред. Ф. А. Новикова. - СПб.: БХВ-Петербург, 2003.

. Немнюгин С.А. Программирование - CПб.: Питер, 2000.

. Озеров В. Delphi. Советы программистов (2-е издание). - СПб.: Символ- Плюс, 2002.

. Пономарев В. Самоучитель Delphi 7. CПб.: БХВ-Петербург, 2005.

. Ревнич Ю. В. Нестандартные приемы программирования на Delphi. - СПб.: БХВ-Петербург, 2005.

. Ремизов Н. Delphi - CПб.: Питер, 2000

. Симонович С.В., Евсеев Г.А. Занимательное программирование: Delphi. - М.: АСТ-ПРЕСС Кнрга, 2001. - 368 с.

. Фараонов В. Система программирования Delphi. CПб.: БХВ-Петербург, 2005.

. Ханекамп Д.. Вилькен П. Программирование под Windows/ Пер. с нем. -М.: ЭКОМ, 1996.

. Хомоненко А.Д Delphi 7. CПб.: БХВ-Петербург, 2005.-1216с. :ил.

. http://www.dclphikingdom.info

. http://www.delphiworld.narod.ru

. http://www.delphirus.com.ru

ДОДАТОК

Вихідний текст модулів системи

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Menus, ComCtrls, ExtCtrls, ImgList,u_data_modul,registry;= class(TForm): TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TImageList;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TOpenDialog;: TSaveDialog;: TMenuItem;N3Click(Sender: TObject);N4Click(Sender: TObject);N7Click(Sender: TObject);N8Click(Sender: TObject);N9Click(Sender: TObject);N10Click(Sender: TObject);N2Click(Sender: TObject);N12Click(Sender: TObject);Timer1Timer(Sender: TObject);FormCreate(Sender: TObject);N13Click(Sender: TObject);N14Click(Sender: TObject);N15Click(Sender: TObject);N21Click(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);FormShow(Sender: TObject);N17Click(Sender: TObject);N23Click(Sender: TObject);N19Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: Tmain;u_sp_type, u_pasp_pr, u_sp_c, u_sp_type_ob, U_sp_ob, u_sp_dil, u_oblik,

u_zalishki, u_spisati, U_password, U_users;

{$R *.dfm}Tmain.N3Click(Sender: TObject);_c.Panel1.Visible:=false;_c.ShowModal;Tmain.N4Click(Sender: TObject);_pr.ShowModal;Tmain.N7Click(Sender: TObject);_type.Panel1.Visible:=false;_type.ShowModal;Tmain.N8Click(Sender: TObject);_type_ob.Panel1.Visible:=false;_type_ob.ShowModal;;Tmain.N9Click(Sender: TObject);_ob.BitBtn1.Enabled:=false;_ob.ShowModal;;Tmain.N10Click(Sender: TObject);_dil.Panel1.Visible:=false;_dil.ShowModal;;Tmain.N2Click(Sender: TObject);.ShowModal;Tmain.N12Click(Sender: TObject);opendialog1.Execute then:=OpenDialog1.FileName;.ADOConnection1.Connected:=false;.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+'Data Source='+basename+';Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";';.ADOConnection1.ConnectionString:=DataModule2.ADOConnection1.ConnectionString+'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;';.ADOConnection1.ConnectionString:=DataModule2.ADOConnection1.ConnectionString+'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;';.ADOConnection1.ConnectionString:=DataModule2.ADOConnection1.ConnectionString+'Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';.ADOConnection1.Connected:=true;.ADOTable1.Active:=true;.ADOTable2.Active:=true;.ADOTable3.Active:=true;.ADOTable4.Active:=true;.ADOTable5.Active:=true;.ADOTable6.Active:=true;.ADOTable7.Active:=true;.ADOQuery1.Active:=true;.ADOQuery2.Active:=true;.ADOQuery3.Active:=true;.ADOQuery4.Active:=true;.ADOQuery5.Active:=true;.ADOQuery6.Active:=true;.ADOQuery7.Active:=true;;Tmain.N13Click(Sender: TObject);.ShowModal;Tmain.N14Click(Sender: TObject);:=extractfilepath(application.ExeName)+'\baza.mdb';SaveDialog1 doExecute then(pchar(basename),pchar(filename),false);;Tmain.N15Click(Sender: TObject);;Tmain.N21Click(Sender: TObject);.ShowModal;;Tmain.FormClose(Sender: TObject; var Action: TCloseAction);:=tregistry.Create(key_write);.RootKey:=HKEY_CURRENT_USER;reg.OpenKey('\software\vak\path',true).writeString('text',basename);.Free;;;Tmain.FormShow(Sender: TObject);.ShowModal;;Tmain.N17Click(Sender: TObject);.ShowModal;;Tmain.N23Click(Sender: TObject);.ShowModal;;Tmain.N19Click(Sender: TObject);(main.Handle, 'help.hlp', HELP_CONTEXT, 1);;.

unit u_data_modul;

interface, Classes, DB, ADODB,Messages,Windows,registry;= class(TDataModule): TADOConnection;: TADOTable;: TADOTable;kod_type_pr: TAutoIncField;naz_type: TWideStringField;n_inf: TWideStringField;kod_pr: TAutoIncField;kod_type_pr: TIntegerField;seria: TWideStringField;kontr_n: TIntegerField;vol_d: TIntegerField;vimir_d: TBooleanField;kol_d: TIntegerField;note: TWideStringField;kod_vir: TIntegerField;: TDataSource;: TDataSource;: TADOTable;: TDataSource;kod_c: TAutoIncField;country: TWideStringField;: TADOQuery;seria: TWideStringField;kontr_n: TIntegerField;vol_d: TIntegerField;vimir_d: TBooleanField;kol_d: TIntegerField;date_vip: TDateTimeField;termin_pr: TDateTimeField;country: TWideStringField;: TDataSource;note: TWideStringField;kod_type_pr: TIntegerField;kod_pr: TAutoIncField;: TADOQuery;naz_type: TWideStringField;: TADOTable;: TDataSource;kod_type_ob: TAutoIncField;type_obj: TWideStringField;: TADOTable;kod_ob: TAutoIncField;kod_type_obj: TIntegerField;nazva: TWideStringField;adresa: TWideStringField;: TDataSource;: TADOQuery;: TADOTable;kod_dil: TAutoIncField;prizv_lik: TWideStringField;: TDataSource;nomer: TIntegerField;kod_dil: TIntegerField;pib_k: TWideStringField;tel: TWideStringField;: TDataSource;nazva: TWideStringField;adresa: TWideStringField;nomer: TIntegerField;kod_ob: TAutoIncField;kod_type_obj: TIntegerField;kod_dil: TIntegerField;: TADOQuery;type_obj: TWideStringField;: TADOTable;kod_z: TAutoIncField;date_v: TDateTimeField;priznak: TBooleanField;kod_ob: TIntegerField;kilkist: TIntegerField;lpu: TBooleanField;spisano: TBooleanField;: TDataSource;kod_pr: TIntegerField;: TADOQuery;: TDataSource;pib_k: TWideStringField;tel: TWideStringField;: TADOQuery;seria: TWideStringField;termin_pr: TDateTimeField;date_v: TDateTimeField;priznak: TBooleanField;kilkist: TIntegerField;k_pr: TFloatField;k_ras_ob: TFloatField;lpu: TBooleanField;spisano: TBooleanField;kod_pr: TIntegerField;k_spis: TFloatField;k_lpu: TFloatField;kod_z: TAutoIncField;zalishok: TIntegerField;date_vip: TDateTimeField;termin_pr: TDateTimeField;seria: TWideStringField;kontr_n: TIntegerField;naz_type: TWideStringField;n_inf: TWideStringField;: TDataSource;zalishok: TIntegerField;: TADOQuery;seria: TWideStringField;kontr_n: TIntegerField;date_vip: TDateTimeField;termin_pr: TDateTimeField;zalishok: TIntegerField;naz_type: TWideStringField;n_inf: TWideStringField;: TDataSource;kod_pr: TAutoIncField;DataModuleCreate(Sender: TObject);ADOQuery1AfterScroll(DataSet: TDataSet);ADOQuery3AfterScroll(DataSet: TDataSet);ADOQuery5CalcFields(DataSet: TDataSet);

{ Private declarations }

{ Public declarations };: TDataModule2;,n_pr,n_ob:ansistring;:tregistry;u_pasp_pr, U_sp_ob, u_oblik;

{$R *.dfm}TDataModule2.DataModuleCreate(Sender: TObject);:=tregistry.Create(key_read);.RootKey:=HKEY_CURRENT_USER;reg.OpenKey('\software\vak\path',false):=reg.ReadString('text');.Connected:=false;.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+'Data Source='+basename+';Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";';.ConnectionString:=ADOConnection1.ConnectionString+'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;';.ConnectionString:=ADOConnection1.ConnectionString+'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;';.ConnectionString:=ADOConnection1.ConnectionString+'Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';.Connected:=true;:='.\baza.mdb';.Connected:=false;.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+'Data Source='+basename+';Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";';.ConnectionString:=ADOConnection1.ConnectionString+'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;';.ConnectionString:=ADOConnection1.ConnectionString+'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;';.ConnectionString:=ADOConnection1.ConnectionString+'Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';.Connected:=true;;.Free;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Active:=true;.Sort:='country';;TDataModule2.ADOQuery1AfterScroll(DataSet: TDataSet);.Locate('kod_type_pr',ADOquery1kod_type_pr.AsInteger,[]);_pr:=ADOTable1naz_type.AsString;_pr.Label1.Caption:='Вид препарату - '+n_pr;;TDataModule2.ADOQuery3AfterScroll(DataSet: TDataSet);.Locate('kod_type_ob',ADOquery3kod_type_obj.AsInteger,[]);_ob:=ADOTable4type_obj.AsString;_ob.Label3.Caption:='Тип об''єкту - '+n_ob;;TDataModule2.ADOQuery5CalcFields(DataSet: TDataSet);not ADOQuery5priznak.AsBoolean thenk_pr.AsFloat:=ADOQuery5kilkist.AsFloatif ADOQuery5lpu.AsBoolean thenk_lpu.AsFloat:=ADOQuery5kilkist.AsFloat elseADOQuery5spisano.asboolean thenk_spis.AsFloat:=ADOQuery5kilkist.AsFloat elsek_ras_ob.AsFloat:=ADOQuery5kilkist.AsFloat;;.

unit u_oblik;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, ComCtrls,comobj;= class(TForm): TPanel;: TBitBtn;: TDBGrid;: TBitBtn;: TBitBtn;: TSpeedButton;: TPanel;: TLabel;: TDateTimePicker;: TDateTimePicker;: TSpeedButton;: TLabel;: TLabel;BitBtn1Click(Sender: TObject);DBGrid1DblClick(Sender: TObject);BitBtn3Click(Sender: TObject);SpeedButton1Click(Sender: TObject);SpeedButton2Click(Sender: TObject);BitBtn2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: Toblik;,table,myrange:variant;U_oblik_vvod, u_data_modul, u_pasp_pr;

{$R *.dfm}Toblik.BitBtn1Click(Sender: TObject);.ADOTable7.Insert;_vvod.SpeedButton1.Enabled:=false;_vvod.RadioGroup2.Enabled:=false;_vvod.RadioGroup1.ItemIndex:=-1;_vvod.RadioGroup2.ItemIndex:=-1;_vvod.SpeedButton2.Enabled:=false;_vvod.DBEdit1.Enabled:=false;_vvod.Caption:='Додавання запису';_vvod.Edit1.Text:='';_vvod.Edit2.Text:='';_vvod.DateTimePicker1.Date:=date;_vvod.RadioGroup1.Enabled:=true;_vvod.ShowModal;;Toblik.DBGrid1DblClick(Sender: TObject);_vvod.Edit1.Text:='';.ADOTable7.Locate('kod_z', DataModule2.adoquery5kod_z.asinteger,[]);.ADOTable7.Edit;_vvod.DateTimePicker1.Date:=DataModule2.ADOQuery5date_v.AsDateTime;not DataModule2.ADOQuery5priznak.AsBoolean then_vvod.RadioGroup1.ItemIndex:=0;_vvod.Edit1.Enabled:=true;_vvod.RadioGroup2.Enabled:=true;_vvod.RadioGroup1.ItemIndex:=1;DataModule2.ADOQuery5lpu.AsBoolean then_vvod.RadioGroup2.ItemIndex:=1if DataModule2.ADOQuery5spisano.AsBoolean then_vvod.RadioGroup2.ItemIndex:=2 else_vvod.RadioGroup2.ItemIndex:=0;.ADOTable5.Locate('kod_ob',DataModule2.ADOTable7kod_ob.AsInteger,[]);_vvod.Edit1.Text:=DataModule2.ADOTable5nazva.AsString;;;.ADOQuery1.Locate('kod_pr',DataModule2.ADOQuery5kod_pr.AsInteger,[]);_vvod.Edit2.Text:=pasp_pr.label1.Caption+ ' серії '+ DataModule2.ADOQuery1seria.AsString;_vvod.Caption:='Редагування запису';_vvod.ShowModal;;Toblik.BitBtn3Click(Sender: TObject);.ADOTable7.Locate('kod_z', DataModule2.adoquery5kod_z.asinteger,[]);.ADOTable7.Delete;.ADOQuery5.Close;.ADOQuery5.Open;;Toblik.SpeedButton1Click(Sender: TObject);.Visible:= SpeedButton1.Down;.Down:= SpeedButton1.Down;Click(sender);;Toblik.SpeedButton2Click(Sender: TObject);SpeedButton2.Down then.ADOQuery5.Filter:='date_v>='+''''+datetostr(DateTimePicker1.date)+''''+' and ' +'date_v<='+''''+DATETOSTR(DateTimePicker2.date)+'''';.ADOQuery5.Filtered:=true;else DataModule2.ADOQuery5.Filtered:=false;;Toblik.BitBtn2Click(Sender: TObject);=1;i,j,k:integer;:variant;:variant;:variant;:string;:=createoleobject('word.application');.documents.add;.activewindow.activepane.view.zoom.percentage:=100;:=w.activedocument.range.sections.item(1);:=mysection.headers.item(1).pagenumbers;:=mysection.headers.item(1).pagenumbers.add(pagenumberalignment:=wdalignPageNumberRight,firstpage:=true);:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1;.select;.selection.font.bold:=1;.selection.font.underline:=1;.activedocument.range.insertafter('Журнал обліку та використання імунобіологічних препаратів');.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);SpeedButton2.Down then.ADOQuery5.Filter:='date_v>='+''''+datetostr(DateTimePicker1.date)+''''+' and ' +'date_v<='+''''+DATETOSTR(DateTimePicker2.date)+'''';.ADOQuery5.Filtered:=true;else DataModule2.ADOQuery5.Filtered:=false;:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);

w.activedocument.tables.add(range:=myrange,numrows:=1,numcolumns:=7);

table:=w.activedocument.tables.item(j+1);.AutoFormat(Format:=20,:=true,:=false,:=false,:=false,:= false,:=false,:= false,:=false,:=false);.rows.item(1).range.paragraphformat.alignment:=1;.rows.item(1).shading.backgroundpatterncolorindex:=16;.rows.item(1).select;.selection.font.bold:=1;.selection.font.underline:=0;.Columns.Item(1).select;i:=1 to table.columns.count do //формування заголовківi of

: begin.columns.item(i).width:=70;.cell(1,i).range.text:='Дата';;

: begin.columns.item(i).width:=70;.cell(1,i).range.text:='Серія';;

: begin.columns.item(i).width:=70;.cell(1,i).range.text:='Термін пр.';;

: begin.columns.item(i).width:=70;.cell(1,i).range.text:='Отримано';;

: begin.columns.item(i).width:=70;.cell(1,i).range.text:='Видано на об.';;

: begin.columns.item(i).width:=70;.cell(1,i).range.text:='Використ. в ЛПУ';;

: begin.columns.item(i).width:=70;.cell(1,i).range.text:='Списано';;;.rows.add;.rows.item(2).shading.backgroundpatterncolorindex:=0;.rows.item(2).select;.rows.item(2).range.paragraphformat.alignment:=3;.selection.font.bold:=0;:=2;DataModule2 donot ADOQuery5.eof do.cell(ADOQuery5.recno+1,1).range.text:=datetostr(ADOQuery5date_v.asdatetime);.cell(ADOQuery5.recno+1,2).range.text:=adoquery5seria.asstring;.cell(ADOQuery5.recno+1,3).range.text:=datetostr(adoquery5termin_pr.asdatetime);;.cell(ADOQuery5.recno+1,4).range.text:=adoquery5k_pr.asfloat;.cell(ADOQuery5.recno+1,5).range.text:=adoquery5k_ras_ob.asfloat;.cell(ADOQuery5.recno+1,6).range.text:=adoquery5k_lpu.asfloat;.cell(ADOQuery5.recno+1,7).range.text:=adoquery5k_spis.asfloat;;:=k+1;.next;.rows.add;;.rows.item(k).delete;.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);.visible:=true;;.

unit U_oblik_vvod;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ComCtrls, StdCtrls, Buttons, ExtCtrls, Mask, DBCtrls,u_data_modul;_vvod = class(TForm): TLabel;: TPanel;: TBitBtn;: TBitBtn;: TDateTimePicker;: TRadioGroup;: TLabel;: TSpeedButton;: TEdit;: TLabel;: TDBEdit;: TRadioGroup;: TLabel;: TSpeedButton;: TEdit;FormCreate(Sender: TObject);RadioGroup1Click(Sender: TObject);RadioGroup2Click(Sender: TObject);BitBtn1Click(Sender: TObject);BitBtn2Click(Sender: TObject);SpeedButton1Click(Sender: TObject);SpeedButton2Click(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);Edit2KeyPress(Sender: TObject; var Key: Char);Edit1KeyPress(Sender: TObject; var Key: Char);

{ Private declarations }

{ Public declarations };_vvod: Toblik_vvod;U_sp_ob, u_pasp_pr;

{$R *.dfm}Toblik_vvod.FormCreate(Sender: TObject);.Date:=date;;Toblik_vvod.RadioGroup1Click(Sender: TObject);.ItemIndex:=-1;.Enabled:=true;.Enabled:=true;RadioGroup1.ItemIndex=1 then.Enabled:=true else.Enabled:=false ;.Enabled:=false;.Text:='';.ADOTable7kod_ob.AsInteger:=0;;;Toblik_vvod.RadioGroup2Click(Sender: TObject);RadioGroup2.ItemIndex=0 then.Enabled:=true;.Enabled:=true;.Text:='';.Enabled:=false;.Enabled:=false;;;Toblik_vvod.BitBtn1Click(Sender: TObject);(DataModule2.ADOTable7kod_pr.AsInteger=0) or (DataModule2.ADOTable7kilkist.AsFloat=0)((RadioGroup2.ItemIndex=-1) and (RadioGroup1.ItemIndex=1))exit;.ADOTable7date_v.AsDateTime:=datetimepicker1.date;RadioGroup1.ItemIndex=0 then.ADOTable7priznak.AsBoolean:=falseDataModule2.ADOTable7priznak.AsBoolean:=true;RadioGroup2.ItemIndex=0 then.ADOTable7lpu.AsBoolean:=false;.ADOTable7spisano.AsBoolean:=falseelse if RadioGroup2.ItemIndex=1 then.ADOTable7lpu.AsBoolean:=true;.ADOTable7spisano.AsBoolean:=false;else.ADOTable7lpu.AsBoolean:=false;.ADOTable7spisano.AsBoolean:=true;;.ADOTable7.Post;.ADOQuery5.Close;.ADOQuery5.Open;not DataModule2.ADOTable7priznak.AsBoolean thenDataModule2.ADOTable2.Edit;RadioGroup1.ItemIndex=0 then.ADOTable2zalishok.AsFloat:= DataModule2.ADOTable2zalishok.AsFloat+DataModule2.ADOTable7kilkist.AsFloat.ADOTable2zalishok.AsFloat:= DataModule2.ADOTable2zalishok.AsFloat-DataModule2.ADOTable7kilkist.AsFloat;.ADOTable2.Post;begin.ADOTable2.Edit;.ADOTable2zalishok.AsFloat:= DataModule2.ADOTable2zalishok.AsFloat-DataModule2.ADOTable7kilkist.AsFloat;DataModule2.ADOTable2zalishok.AsFloat<0 then begin('Препарат '+Edit2.Text+' у потрібній кількості відсутній!');endDataModule2.ADOTable2.Post;;.ADOQuery7.Close;.ADOQuery7.Open;;;Toblik_vvod.BitBtn2Click(Sender: TObject);;Toblik_vvod.SpeedButton1Click(Sender: TObject);_ob.BitBtn1.Enabled:=true;_ob.ShowModal;;Toblik_vvod.SpeedButton2Click(Sender: TObject);_pr.BitBtn4.Enabled:=true;_pr.ShowModal;;Toblik_vvod.FormClose(Sender: TObject; var Action: TCloseAction);.Enabled:=false;.Enabled:=false;;Toblik_vvod.Edit2KeyPress(Sender: TObject; var Key: Char);:=#0;Toblik_vvod.Edit1KeyPress(Sender: TObject; var Key: Char);:=#0;.

unit u_pasp_pr;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, Grids, DBGrids, StdCtrls, Buttons, comobj;_pr = class(TForm): TDBGrid;: TPanel;: TBitBtn;: TPanel;: TBitBtn;: TLabel;: TBitBtn;: TLabel;: TComboBox;: TCheckBox;: TBitBtn;BitBtn1Click(Sender: TObject);DBGrid1DblClick(Sender: TObject);BitBtn3Click(Sender: TObject);FormShow(Sender: TObject);ComboBox1Change(Sender: TObject);CheckBox1Click(Sender: TObject);BitBtn4Click(Sender: TObject);BitBtn2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };_pr: Tpasp_pr;,table,myrange:variant;u_pasp_pr_vvod, u_data_modul, U_oblik_vvod;

{$R *.dfm}Tpasp_pr.BitBtn1Click(Sender: TObject);.ADOTable2.Insert;_pr_vvod.Caption:='Додавання запису';_pr_vvod.Edit1.Text:='';_pr_vvod.Edit2.Text:='';_pr_vvod.ShowModal;;Tpasp_pr.DBGrid1DblClick(Sender: TObject);DataModule2 do.Locate('kod_pr',ADOQuery1kod_pr.AsInteger,[]);.Edit;;pasp_pr_vvod do:='Редагування запису';.Text:=DataModule2.ADOQuery1country.AsString;.Text:=n_pr;.Date:=DataModule2.ADOQuery1date_vip.AsDateTime;.Date:=DataModule2.ADOQuery1termin_pr.AsDateTime;;;;Tpasp_pr.BitBtn3Click(Sender: TObject);DataModule2 do.Delete;.Close;.Open;;;Tpasp_pr.FormShow(Sender: TObject);.Items.Clear;.ADOQuery2.First;not DataModule2.ADOQuery2.Eof do.Items.Add(DataModule2.ADOQuery2naz_type.AsString);.ADOQuery2.Next;;;Tpasp_pr.ComboBox1Change(Sender: TObject);DataModule2 do.Close;.SQL.Clear;.SQL.Add('select p.kod_pr,p.kod_type_pr,p.seria, p.kontr_n, p.vol_d, p.vimir_d, p.kol_d, p.date_vip, p.termin_pr,c.country, p.note from pasport_pr p left join sp_country c on c.kod_c=p.kod_vir where p.kod_type_pr=(select kod_type_pr from sp_type_pr where naz_type='+''''+ComboBox1.Text+''''+')');.Open;;.Checked:=False;;Tpasp_pr.CheckBox1Click(Sender: TObject);CheckBox1.Checked thenDataModule2 do.Close;.SQL.Clear;.SQL.Add('select p.kod_pr,p.kod_type_pr,p.seria, p.kontr_n, p.vol_d, p.vimir_d, p.kol_d, p.date_vip, p.termin_pr,c.country, p.note from pasport_pr p left join sp_country c on c.kod_c=p.kod_vir');.Open;ComboBox1Change(Sender);;Tpasp_pr.BitBtn4Click(Sender: TObject);.ADOTable7kod_pr.AsInteger:= DataModule2.ADOQuery1kod_pr.AsInteger;_vvod.Edit2.Text:=label1.Caption+ ' серії '+ DataModule2.ADOQuery1seria.AsString;;;Tpasp_pr.BitBtn2Click(Sender: TObject);=1;i,j,k:integer;:variant;:variant;:variant;:string;:=createoleobject('word.application');.documents.add;.activewindow.activepane.view.zoom.percentage:=100;:=w.activedocument.range.sections.item(1);:=mysection.headers.item(1).pagenumbers;:=mysection.headers.item(1).pagenumbers.add(pagenumberalignment:=wdalignPageNumberRight,firstpage:=true);:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1;.select;.selection.font.bold:=1;.selection.font.underline:=1;.activedocument.range.insertafter('Паспортні дані препаратів');.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);CheckBox1.Checked then:=ComboBox1.Items.Count-1 else begin k:=0;:=combobox1.text;;j:=0 to k doDataModule2 do.Close;.SQL.Clear;CheckBox1.Checked then:=ComboBox1.Items[j];.SQL.Add('select p.kod_pr,p.kod_type_pr,p.seria, p.kontr_n, p.vol_d, p.vimir_d, p.kol_d, p.date_vip, p.termin_pr,c.country, p.note from pasport_pr p left join sp_country c on c.kod_c=p.kod_vir where p.kod_type_pr=(select kod_type_pr from sp_type_pr where naz_type='+''''+s+''''+')');.Open;;:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1;.select;.selection.font.underline:=0;.selection.font.bold:=1;.activedocument.range.insertafter(s);.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);

w.activedocument.tables.add(range:=myrange,numrows:=1,numcolumns:=7);

table:=w.activedocument.tables.item(j+1);.AutoFormat(Format:=20,:=true,:=false,:=false,:=false,:= false,:=false,:= false,:=false,:=false);.rows.item(1).range.paragraphformat.alignment:=1;.rows.item(1).shading.backgroundpatterncolorindex:=16;.rows.item(1).select;.selection.font.bold:=1;.Columns.Item(1).select;i:=1 to table.columns.count do //формування заголовківi of

: begin.columns.item(i).width:=45;.cell(1,i).range.text:='№п/п';;

: begin.columns.item(i).width:=55;.cell(1,i).range.text:='Серія';;

: begin.columns.item(i).width:=50;.cell(1,i).range.text:='Контр.№';;

: begin.columns.item(i).width:=50;.cell(1,i).range.text:='Фасув.';;

: begin.columns.item(i).width:=100;.cell(1,i).range.text:='Країна-виробн.';;

: begin.columns.item(i).width:=100;.cell(1,i).range.text:='Дата випуску';;

: begin.columns.item(i).width:=100;.cell(1,i).range.text:='Термін збер.';;;.rows.add;.rows.item(2).shading.backgroundpatterncolorindex:=0;.rows.item(2).select;.rows.item(2).range.paragraphformat.alignment:=3;.selection.font.bold:=0;:=2;DataModule2 donot ADOQuery1.eof do.cell(ADOQuery1.recno+1,1).range.text:=inttostr(k-1);.cell(ADOQuery1.recno+1,2).range.text:=adoquery1seria.asstring;.cell(ADOQuery1.recno+1,3).range.text:=adoquery1kontr_n.asinteger;.cell(ADOQuery1.recno+1,4).range.text:=adoquery1kol_d.asfloat;.cell(ADOQuery1.recno+1,5).range.text:=adoquery1country.asstring;.cell(ADOQuery1.recno+1,6).range.text:=datetostr(adoquery1date_vip.asdatetime);.cell(ADOQuery1.recno+1,7).range.text:=datetostr(adoquery1termin_pr.asdatetime);:=k+1;.next;.rows.add;;.rows.item(k).delete;.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);;.visible:=true;.checked:=true;Click(Sender);;.

unit u_pasp_pr_vvod;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, u_data_modul, StdCtrls, Mask, DBCtrls, ExtCtrls, Buttons,;_pr_vvod = class(TForm): TDBEdit;: TPanel;: TLabel;: TLabel;: TDBEdit;: TLabel;: TDBEdit;: TLabel;: TComboBox;: TLabel;: TLabel;: TDBEdit;: TLabel;: TSpeedButton;: TLabel;: TLabel;: TDateTimePicker;: TDateTimePicker;: TLabel;: TDBEdit;: TLabel;: TBitBtn;: TEdit;: TLabel;: TBitBtn;: TSpeedButton;: TEdit;SpeedButton1Click(Sender: TObject);DBEdit1KeyPress(Sender: TObject; var Key: Char);DBEdit2KeyPress(Sender: TObject; var Key: Char);DBEdit3KeyPress(Sender: TObject; var Key: Char);ComboBox1KeyPress(Sender: TObject; var Key: Char);DBEdit4KeyPress(Sender: TObject; var Key: Char);BitBtn1Click(Sender: TObject);BitBtn2Click(Sender: TObject);SpeedButton2Click(Sender: TObject);Edit2KeyPress(Sender: TObject; var Key: Char);Edit1KeyPress(Sender: TObject; var Key: Char);

{ Private declarations }

{ Public declarations };_pr_vvod: Tpasp_pr_vvod;:boolean;u_sp_c, DB, u_sp_type;

{$R *.dfm}Tpasp_pr_vvod.SpeedButton1Click(Sender: TObject);_c.Panel1.Visible:=true;_c.ShowModal;Tpasp_pr_vvod.DBEdit1KeyPress(Sender: TObject; var Key: Char);Key=#13 then DBEdit2.SetFocus;Tpasp_pr_vvod.DBEdit2KeyPress(Sender: TObject; var Key: Char);Key=#13 then DBEdit3.SetFocus;Tpasp_pr_vvod.DBEdit3KeyPress(Sender: TObject; var Key: Char);Key=#13 thenComboBox1.DroppedDown:=true; ComboBox1.SetFocus; end;;Tpasp_pr_vvod.ComboBox1KeyPress(Sender: TObject; var Key: Char);key=#13 then DBEdit4.SetFocus;Tpasp_pr_vvod.DBEdit4KeyPress(Sender: TObject; var Key: Char);key=#13 then SpeedButton1Click(Sender);;Tpasp_pr_vvod.BitBtn1Click(Sender: TObject);.ADOTable2date_vip.AsDateTime:=datetimepicker1.date;.ADOTable2termin_pr.AsDateTime:=DateTimePicker2.Date;ComboBox1.ItemIndex=0 then.ADOTable2vimir_d.AsBoolean:=trueDataModule2.ADOTable2vimir_d.AsBoolean:=false;.ADOTable2kod_vir.AsInteger:=DataModule2.adotable3kod_c.AsInteger;.ADOTable2.Post;.ADOQuery1.Close;.ADOQuery1.Open;;;Tpasp_pr_vvod.BitBtn2Click(Sender: TObject);;Tpasp_pr_vvod.SpeedButton2Click(Sender: TObject);:=true;_type.Panel1.Visible:=true;_type.ShowModal;;Tpasp_pr_vvod.Edit2KeyPress(Sender: TObject; var Key: Char);key=#13 then key:=#0;;Tpasp_pr_vvod.Edit1KeyPress(Sender: TObject; var Key: Char);key=#13 then key:=#0;;.

unit U_password;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons,registry;= class(TForm): TComboBox;: TLabel;: TLabel;: TEdit;: TBitBtn;BitBtn1Click(Sender: TObject);FormCreate(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);Edit1KeyPress(Sender: TObject; var Key: Char);FormShow(Sender: TObject);

{ Private declarations }

{ Public declarations };: Tpassword;:tregistry;:boolean;,pas:array[1..20] of string;Unit1;

{$R *.dfm}Tpassword.BitBtn1Click(Sender: TObject);s:string;:integer;:=false;i:=1 to 20 do(Edit1.Text=pas[i]) and (ComboBox1.Text=log[i]):=true;;fl then closebegin:=Application.Title;.Title:='Помилка реєстрації';('Ім''я користувача або пароль введено невірно!');.Title:=s;.Text:='';.SetFocus;;;Tpassword.FormCreate(Sender: TObject);i:integer;:=tregistry.Create(key_read);.RootKey:=HKEY_CURRENT_USER;i:=1 to 20 doreg.OpenKey('\software\vak\password',false)i=1 then begin log[1]:='admin'; ComboBox1.Items.Add(log[1]);else log[i]:=reg.ReadString('log'+inttostr(i));[i]:=reg.ReadString('pas'+inttostr(i));(log[i]<>'') and (i>1) then ComboBox1.Items.Add(log[i]);('');i=1 then begin[1]:='1';.Items.Add('admin');;;;pas[1]='' then pas[1]:='1';.ItemIndex:=0;;Tpassword.FormClose(Sender: TObject; var Action: TCloseAction);not fl then main.CloseComboBox1.Text='admin' then main.N17.Enabled:=truemain.N17.Enabled:=false;;Tpassword.Edit1KeyPress(Sender: TObject; var Key: Char);key=#13 then bitbtn1click(sender);;Tpassword.FormShow(Sender: TObject);.Text:=''; Edit1.SetFocus;.

unit u_sp_c;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, u_data_modul, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls,;_c = class(TForm): TDBGrid;: TDBNavigator;: TPanel;: TBitBtn;BitBtn1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };_c: Tsp_c;u_pasp_pr_vvod;

{$R *.dfm}Tsp_c.BitBtn1Click(Sender: TObject);_pr_vvod.Edit1.Text:=DataModule2.ADOTable3country.AsString;;;.

unit u_sp_dil;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, u_data_modul, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls,;_dil = class(TForm): TDBGrid;: TDBNavigator;: TPanel;: TBitBtn;BitBtn1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };_dil: Tsp_dil;u_vvod_OB;

{$R *.dfm}Tsp_dil.BitBtn1Click(Sender: TObject);.ADOTable5kod_dil.AsInteger:=DataModule2.ADOTable6kod_dil.AsInteger;_ob.Edit2.Text:=inttostr(DataModule2.ADOTable6nomer.AsInteger);;.

unit U_sp_ob;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, DBCtrls, Grids, DBGrids,u_data_modul, StdCtrls,comobj,;_ob = class(TForm): TDBGrid;: TDBNavigator;: TPanel;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TPanel;: TPanel;: TGroupBox;: TLabel;: TComboBox;: TCheckBox;: TLabel;: TSpeedButton;BitBtn2Click(Sender: TObject);DBGrid1DblClick(Sender: TObject);BitBtn3Click(Sender: TObject);ComboBox1Change(Sender: TObject);FormShow(Sender: TObject);CheckBox1Click(Sender: TObject);SpeedButton1Click(Sender: TObject);BitBtn1Click(Sender: TObject);BitBtn4Click(Sender: TObject);

{ Private declarations }

{ Public declarations };_ob: Tsp_ob;,table,myrange:variant;u_sp_type_ob, u_vvod_OB, U_oblik_vvod;

{$R *.dfm}Tsp_ob.BitBtn2Click(Sender: TObject);.adotable5.Insert;_ob.Edit1.Text:='';_ob.Edit2.Text:='';_ob.Caption:='Додавання запису';_ob.ShowModal;Tsp_ob.DBGrid1DblClick(Sender: TObject);DataModule2 do.Locate('kod_ob',ADOQuery3kod_ob.AsInteger,[]);.Edit;;vvod_ob do:='Редагування запису';.ADOTable6.Locate('kod_dil',DataModule2.adoquery3kod_dil.asinteger,[]);.ADOTable4.Locate('kod_type_ob',DataModule2.adoquery3kod_type_obj.asinteger,[]);.Text:=DataModule2.ADOTable4type_obj.AsString;.Text:=inttostr(DataModule2.ADOTable6nomer.AsInteger);;;;Tsp_ob.BitBtn3Click(Sender: TObject);DataModule2 do.Locate('kod_ob',ADOQuery3kod_ob.AsInteger,[]);.Delete;.Close;.Open;;;Tsp_ob.ComboBox1Change(Sender: TObject);DataModule2 do.Close;.SQL.Clear;.SQL.Add('select o.pib_k, o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil where o.kod_type_obj=(select kod_type_ob from sp_type_ob where type_obj='+''''+ComboBox1.Text+''''+')');.Open;;.Checked:=false;;Tsp_ob.FormShow(Sender: TObject);.Items.Clear;DataModule2 do.Close;.Open;not ADOQuery4.Eof do_ob.ComboBox1.Items.Add(ADOQuery4type_obj.AsString);.Next;;;;Tsp_ob.CheckBox1Click(Sender: TObject);CheckBox1.Checked thenDataModule2 do.Close;.SQL.Clear;.SQL.Add('select o.pib_k, o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil');.Open;ComboBox1Change(Sender);;Tsp_ob.SpeedButton1Click(Sender: TObject);.Checked:=true;.Visible:=SpeedButton1.Down;Click(sender);;Tsp_ob.BitBtn1Click(Sender: TObject);.ADOTable7kod_ob.AsInteger:=DataModule2.ADOQuery3kod_ob.AsInteger;_vvod.Edit1.Text:=DataModule2.ADOQuery3nazva.AsString;;;Tsp_ob.BitBtn4Click(Sender: TObject);=1;i,j,k:integer;:string;:variant;:variant;:variant;:=createoleobject('word.application');.documents.add;.activewindow.activepane.view.zoom.percentage:=100;:=w.activedocument.range.sections.item(1);:=mysection.headers.item(1).pagenumbers;:=mysection.headers.item(1).pagenumbers.add(pagenumberalignment:=wdalignPageNumberRight,firstpage:=true);:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1;.select;.selection.font.bold:=1;.selection.font.underline:=1;.activedocument.range.insertafter('Перелік об''єктів');.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);CheckBox1.Checked then:=ComboBox1.Items.Count-1 else begin k:=0;:=combobox1.text; end;j:=0 to k do:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1;.select;.selection.font.underline:=0;.selection.font.bold:=1;checkbox1.checked then.activedocument.range.insertafter(ComboBox1.Items[j]) else.activedocument.range.insertafter(s);.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);

DataModule2 do.Close;.SQL.Clear;CheckBox1.Checked then:=ComboBox1.Items[j];.SQL.Add('select o.pib_k, o.tel,o.kod_type_obj,o.kod_dil,o.kod_ob,o.nazva, o.adresa, d.nomer from objects o left join sp_dil d on d.kod_dil=o.kod_dil where o.kod_type_obj=(select kod_type_ob from sp_type_ob where type_obj='+''''+s+''''+')');.Open;.first;;:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);

w.activedocument.tables.add(range:=myrange,numrows:=1,numcolumns:=5);

table:=w.activedocument.tables.item(j+1);.AutoFormat(Format:=20,:=true,:=false,:=false,:=false,:= false,:=false,:= false,:=false,:=false);.rows.item(1).range.paragraphformat.alignment:=1;.rows.item(1).shading.backgroundpatterncolorindex:=16;.rows.item(1).select;.selection.font.bold:=1;.Columns.Item(1).select;i:=1 to table.columns.count do //формування заголовківi of

: begin.columns.item(i).width:=120;.cell(1,i).range.text:='Назва';;

: begin.columns.item(i).width:=50;.cell(1,i).range.text:='№діл.';;

: begin.columns.item(i).width:=100;.cell(1,i).range.text:='Адреса';;

: begin.columns.item(i).width:=100;.cell(1,i).range.text:='ПІП керівника';;

: begin.columns.item(i).width:=80;.cell(1,i).range.text:='Телефон';;;.rows.add;.rows.item(2).shading.backgroundpatterncolorindex:=0;.rows.item(2).select;.rows.item(2).range.paragraphformat.alignment:=3;.selection.font.bold:=0;:=2;DataModule2 donot ADOQuery3.eof do.cell(ADOQuery3.recno+1,1).range.text:=adoquery3nazva.asstring;.cell(ADOQuery3.recno+1,2).range.text:=adoquery3nomer.asinteger;.cell(ADOQuery3.recno+1,3).range.text:=adoquery3adresa.asstring;.cell(ADOQuery3.recno+1,4).range.text:=adoquery3pib_k.asstring;.cell(ADOQuery3.recno+1,5).range.text:=adoquery3tel.asstring;:=k+1;.next;.rows.add;;.rows.item(k).delete;.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);;.visible:=true;.checked:=true;Click(Sender);;.

unit u_sp_type;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids,u_data_modul,u_pasp_pr_vvod, ExtCtrls, DBCtrls,, Buttons;_type = class(TForm): TDBGrid;: TDBNavigator;: TPanel;: TBitBtn;FormClose(Sender: TObject; var Action: TCloseAction);BitBtn1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };_type: Tsp_type;

{$R *.dfm}Tsp_type.FormClose(Sender: TObject; var Action: TCloseAction);f then begin.ADOTable2kod_type_pr.AsInteger:=DataModule2.ADOTable1kod_type_pr.AsInteger;_pr_vvod.Edit2.Text:=DataModule2.ADOTable1naz_type.AsString;;:=false;;Tsp_type.BitBtn1Click(Sender: TObject);;.

unit u_sp_type_ob;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, DBCtrls, Grids, DBGrids,u_data_modul, StdCtrls,;_type_ob = class(TForm): TDBGrid;: TDBNavigator;: TPanel;: TBitBtn;BitBtn1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };_type_ob: Tsp_type_ob;u_vvod_OB;

{$R *.dfm}Tsp_type_ob.BitBtn1Click(Sender: TObject);.ADOTable5kod_type_obj.AsInteger:=DataModule2.ADOTable4kod_type_ob.AsInteger;_ob.Edit1.Text:=DataModule2.ADOTable4type_obj.AsString;;;.

unit u_spisati;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,,u_data_modul, ExtCtrls, Grids, DBGrids, StdCtrls, Buttons,comobj;= class(TForm): TDBGrid;: TPanel;: TBitBtn;: TBitBtn;FormShow(Sender: TObject);BitBtn3Click(Sender: TObject);BitBtn2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: Tspisati;,table,myrange:variant;U_oblik_vvod, DB;

{$R *.dfm}Tspisati.FormShow(Sender: TObject);s:string;DataModule2 do:=datetostr(date);.Close; ADOQuery7.Open;.Filter:='termin_pr<='+''''+s+'''';.Filtered:=true;;;Tspisati.BitBtn3Click(Sender: TObject);.ADOTable7.Insert;.ADOTable7kod_pr.AsInteger:=datamodule2.ADOQuery7kod_pr.AsInteger;.ADOTable7kilkist.AsFloat:=datamodule2.ADOQuery7zalishok.AsFloat;oblik_vvod do.Enabled:=false;.ItemIndex:=2;.Enabled:=false;.Text:='Вид препарату '+ DataModule2.ADOQuery7naz_type.AsString+' серії '+DataModule2.ADOQuery7seria.AsString ;.Text:=inttostr(DataModule2.ADOQuery7zalishok.AsInteger);:='Списання препарату';;_vvod.ShowModal;Tspisati.BitBtn2Click(Sender: TObject);=1;i,j,k:integer;:variant;:variant;:variant;:string;:=createoleobject('word.application');.documents.add;.activewindow.activepane.view.zoom.percentage:=100;:=w.activedocument.range.sections.item(1);:=mysection.headers.item(1).pagenumbers;:=mysection.headers.item(1).pagenumbers.add(pagenumberalignment:=wdalignPageNumberRight,firstpage:=true);:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1;.select;.selection.font.bold:=1;.selection.font.underline:=1;.activedocument.range.insertafter('Перелік препаратів, що підлягає списанню на '+datetostr(date));.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);

w.activedocument.tables.add(range:=myrange,numrows:=1,numcolumns:=5);

table:=w.activedocument.tables.item(1);.AutoFormat(Format:=20,:=true,:=false,:=false,:=false,:= false,:=false,:= false,:=false,:=false);.rows.item(1).range.paragraphformat.alignment:=1;.rows.item(1).shading.backgroundpatterncolorindex:=16;.rows.item(1).select;.selection.font.bold:=1;.selection.font.underline:=0;.Columns.Item(1).select;i:=1 to table.columns.count do //формування заголовківi of

: begin.columns.item(i).width:=90;.cell(1,i).range.text:='Серія';;

: begin.columns.item(i).width:=90;.cell(1,i).range.text:='Назва';;

: begin.columns.item(i).width:=120;.cell(1,i).range.text:='Проти якої інфекції';;

: begin.columns.item(i).width:=90;.cell(1,i).range.text:='Термін пр.';;

: begin.columns.item(i).width:=90;.cell(1,i).range.text:='Кількість';;;.rows.add;.rows.item(2).shading.backgroundpatterncolorindex:=0;.rows.item(2).select;.rows.item(2).range.paragraphformat.alignment:=3;.selection.font.bold:=0;:=2;DataModule2 donot ADOQuery7.eof do.cell(ADOQuery7.recno+1,1).range.text:=adoquery7seria.asstring;.cell(ADOQuery7.recno+1,2).range.text:=adoquery7naz_type.asstring;.cell(ADOQuery7.recno+1,3).range.text:=adoquery7n_inf.asstring;.cell(ADOQuery7.recno+1,4).range.text:=datetostr(adoquery7termin_pr.asdatetime);.cell(ADOQuery7.recno+1,5).range.text:=adoquery7zalishok.asfloat;:=k+1;.next;.rows.add;;.rows.item(k).delete;.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);.visible:=true;;.

unit U_users;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, Buttons,registry,u_password;= class(TForm): TPanel;: TEdit;: TEdit;: TBitBtn;: TLabel;: TLabel;: TPanel;: TSpeedButton;: TSpeedButton;: TBitBtn;: TPanel;: TLabel;: TEdit;: TBitBtn;: TListBox;: TBitBtn;: TEdit;: TLabel;BitBtn2Click(Sender: TObject);FormShow(Sender: TObject);BitBtn1Click(Sender: TObject);BitBtn5Click(Sender: TObject);BitBtn4Click(Sender: TObject);BitBtn3Click(Sender: TObject);ListBox1Click(Sender: TObject);Edit3KeyPress(Sender: TObject; var Key: Char);BitBtn6Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: Tusers;:tregistry;

{$R *.dfm}Tusers.BitBtn2Click(Sender: TObject);:=tregistry.Create(key_write);.RootKey:=HKEY_CURRENT_USER;reg.OpenKey('\software\vak\password',true)begin.writeString('log'+inttostr(ListBox1.Count+1),edit1.Text);.writeString('pas'+inttostr(ListBox1.Count+1),edit2.Text);;.Free;;.Down:=false;(Sender);;Tusers.FormShow(Sender: TObject);i:integer;.ClientHeight:=70;.SetFocus; ListBox1.Clear;.Visible:=false;.Visible:=false;:=tregistry.Create(key_read);.RootKey:=HKEY_CURRENT_USER;i:=1 to 20 doreg.OpenKey('\software\vak\password',false)i=1 then log[i]:='admin' else log[i]:=reg.ReadString('log'+inttostr(i));[i]:=reg.ReadString('pas'+inttostr(i));not (log[i]='') then ListBox1.Items.Add(log[i]);i=1 then begin log[1]:='admin';[1]:='1';.Items.Add(pas[1]);;; end;Tusers.BitBtn1Click(Sender: TObject);.Text:='';.Text:='';BitBtn1.Down then.ClientHeight:=150.ClientHeight:=70;.Visible:=BitBtn1.Down ;BitBtn1.Down then Edit1.SetFocus;.Visible:= BitBtn4.Down;;Tusers.BitBtn5Click(Sender: TObject);;Tusers.BitBtn4Click(Sender: TObject);BitBtn4.Down then.ClientHeight:=70+182.ClientHeight:=70;.Visible:= BitBtn4.Down;.Visible:=BitBtn1.Down ;;Tusers.BitBtn3Click(Sender: TObject);:=tregistry.Create(key_write);not ((Edit3.Text='') or (ListBox1.ItemIndex=-1)).RootKey:=HKEY_CURRENT_USER;reg.OpenKey('\software\vak\password',true)ListBox1.ItemIndex>0 then.writeString('log'+inttostr(ListBox1.ItemIndex+1),Edit4.Text);.writeString('pas'+inttostr(ListBox1.ItemIndex+1),Edit3.Text);.Free;;.Down:=false;Click(sender);;Tusers.ListBox1Click(Sender: TObject);.Text:= log[ListBox1.ItemIndex+1];.Text:= pas[ListBox1.ItemIndex+1];;Tusers.Edit3KeyPress(Sender: TObject; var Key: Char);key=#13 then BitBtn3Click(sender);;Tusers.BitBtn6Click(Sender: TObject);.RootKey:=HKEY_CURRENT_USER;.deleteKey('\software\vak\password\log'+inttostr(listbox1.ItemIndex+1));.Free;;.Items.Delete(listbox1.ItemIndex);.Text:='';.Text:='';;.

unit u_vvod_OB;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,,u_data_modul, Buttons, StdCtrls, ExtCtrls, Mask, DBCtrls;_ob = class(TForm): TLabel;: TSpeedButton;: TEdit;: TDBEdit;: TPanel;: TBitBtn;: TBitBtn;: TLabel;: TSpeedButton;: TEdit;: TLabel;: TLabel;: TDBEdit;: TLabel;: TDBEdit;: TLabel;: TDBEdit;SpeedButton1Click(Sender: TObject);SpeedButton2Click(Sender: TObject);BitBtn2Click(Sender: TObject);BitBtn1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };_ob: Tvvod_ob;u_sp_type_ob, u_sp_dil, U_sp_ob;

{$R *.dfm}Tvvod_ob.SpeedButton1Click(Sender: TObject);_type_ob.Panel1.Visible:=true;_type_ob.ShowModal;;Tvvod_ob.SpeedButton2Click(Sender: TObject);_dil.Panel1.Visible:=true;_dil.ShowModal;;Tvvod_ob.BitBtn2Click(Sender: TObject);;Tvvod_ob.BitBtn1Click(Sender: TObject);_ob.ComboBox1.Items.Clear;.ADOTable5.Post;.ADOQuery3.Close;.ADOQuery3.Open;DataModule2 do.Close;.Open;not ADOQuery4.Eof do_ob.ComboBox1.Items.Add(ADOQuery4type_obj.AsString);.Next;;;;;.

unit u_zalishki;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids, ExtCtrls,u_data_modul, StdCtrls, Buttons,comobj;= class(TForm): TPanel;: TDBGrid;: TBitBtn;FormShow(Sender: TObject);BitBtn2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: Tzalishki;,table,myrange:variant;

{$R *.dfm}Tzalishki.FormShow(Sender: TObject);.ADOQuery6.Close;.ADOQuery6.Open;;Tzalishki.BitBtn2Click(Sender: TObject);=1;i,j,k:integer;:variant;:variant;:variant;:string;:=createoleobject('word.application');.documents.add;.activewindow.activepane.view.zoom.percentage:=100;:=w.activedocument.range.sections.item(1);:=mysection.headers.item(1).pagenumbers;:=mysection.headers.item(1).pagenumbers.add(pagenumberalignment:=wdalignPageNumberRight,firstpage:=true);:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);.paragraphformat.alignment:=1;.select;.selection.font.bold:=1;.selection.font.underline:=1;.activedocument.range.insertafter('Залишки препаратів на '+datetostr(date));.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);:=w.activedocument.range(w.activedocument.range.end-1,w.activedocument.range.end-1);

w.activedocument.tables.add(range:=myrange,numrows:=1,numcolumns:=5);

table:=w.activedocument.tables.item(1);.AutoFormat(Format:=20,:=true,:=false,:=false,:=false,:= false,:=false,:= false,:=false,:=false);.rows.item(1).range.paragraphformat.alignment:=1;.rows.item(1).shading.backgroundpatterncolorindex:=16;.rows.item(1).select;.selection.font.bold:=1;.selection.font.underline:=0;.Columns.Item(1).select;i:=1 to table.columns.count do //формування заголовківi of

: begin.columns.item(i).width:=90;.cell(1,i).range.text:='Назва';;

: begin.columns.item(i).width:=120;.cell(1,i).range.text:='Проти якої інфекції';;

: begin.columns.item(i).width:=90;.cell(1,i).range.text:='Серія';;

: begin.columns.item(i).width:=90;.cell(1,i).range.text:='Контр. №';;

: begin.columns.item(i).width:=90;.cell(1,i).range.text:='Залишки';;;.rows.add;.rows.item(2).shading.backgroundpatterncolorindex:=0;.rows.item(2).select;.rows.item(2).range.paragraphformat.alignment:=3;.selection.font.bold:=0;:=2;DataModule2 donot ADOQuery6.eof do.cell(ADOQuery6.recno+1,1).range.text:=adoquery6naz_type.asstring;.cell(ADOQuery6.recno+1,2).range.text:=adoquery6n_inf.asstring;.cell(ADOQuery6.recno+1,3).range.text:=adoquery6seria.asstring;.cell(ADOQuery6.recno+1,4).range.text:=adoquery6kontr_n.asinteger;.cell(ADOQuery6.recno+1,5).range.text:=adoquery6zalishok.asfloat;:=k+1;.next;.rows.add;;.rows.item(k).delete;.activedocument.range.insertafter(#13);.activedocument.range.insertafter(#13);.visible:=true;;.

Похожие работы на - Розробка гнучкої системи автоматизації обліку імунобіологічних препаратів

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!