Автоматизація ведення бази даних індивідуальних програм реабілітації інвалідів
РЕФЕРАТ
Темою дипломного проекту є «Автоматизація ведення бази даних
індивідуальних програм реабілітації інвалідів».
Об’єкт дослідження: система ведення
індивідуальних програм реабілітацій інвалідів.
Мета роботи - дослідити сферу роботи
МСЕК та розробити автоматизовану систему ведення індивідуальних програм
реабілітацій інвалідів.
Загальна частина 13 сторінок. Вимоги
до технічних засобів, опис інструментальних засобів, що використовувались при
розробці програми.
Спеціальна частина 48 сторінок.
Докладна інформація про розроблення та експлуатацію програми.
Економічна частина 4 сторінки.
Економічний розрахунок вартості програмного продукту.
Охорона праці 20 сторінок. Аналіз та
розрахунок захисту від шкідливих та небезпечних факторів.
В даному дипломному проекті засобами
середовища Delphi 7 розроблено програму, що призначена для для автоматизації
ведення бази даних індивідуальних програм реабілітації інвалідів.
Ключові слова: ІНВАЛІДИ,
АВТОМАТИЗАЦІЯ, ІНДИВІДУАЛЬНА ПРОГРАМА РЕАБІЛІТАЦІЇ, БАЗА ДАНИХ, ДОУМЕНТ, ДОВІДКА,
DEPHI 7, FIREBIRD 2.5.
ВСТУП
При оформленні індивідуальної програми реабілітації інвалідів
треба виконати багато паперової роботи: подати ряд документів, оформити огляд і
отримати підтвердження. При цьому для отримання документа на індивідуальну програми
реабілітації (далі ІПР) потрібно буде заповнити багато бланків. Ведення цих
даних включає різноманітну інформацію, що повторюються із одного документу до
іншого, що підвищує ймовірність виникнення помилок та вимагає часу на
заповнення документів. До того ж у великій кількості довідок важко
орієнтуватися. Таким чином для обліку даних потрібно вести базу даних, що
повинна включати таку інформацію, як особисті дані пацієнта та інформацію про
його захворювання, ступінь обмеження життєдіяльності та реабілітаційні заходи,
інформація про призначення спеціальних засобів.
До задач автоматизації можна віднести:
- запобігання несанкціонованого доступу
до даних;
- зменшення кількості помилок;
- контроль за ІПР різних років;
- зменшення кількості часу на складання
документу та пошук.
В результаті аналізу стану галузі постає задача про надання
персоналу можливостей:
- ведення списків інвалідів та
призначених їм ІПР;
- оформлення ІПР та пошук серед них;
- формування документу про ІПР.
У зв’язку з цим була б актуальна програма, що автоматизує
процес ведення бази даних особистої інформації про інвалідів, обмежень
життєдіяльності інвалідів та індивідуальних програм реабілітації інвалідів.
Вона не повинна вимагати спеціальних знань від користувача та могла б
використовуватися у медичних закладах для ведення бази даних по індивідуальним
програмам реабілітації інвалідів.
На основі попереднього аналізу є цілком обґрунтованою
розробка програмного забезпечення, призначеного для автоматизації ведення даних
по даним інвалідів та ІПР для використання Медико-соціальною експертною
комісією (далі МСЕК).
Темою даного дипломного проекту є «Автоматизація ведення бази
даних індивідуальних програм реабілітації інвалідів».
Виходячи з вище написаного, можна зробити висновок про те, що
тема дипломного проекту є актуальною, а поставлене завдання - своєчасним.
1. ПОСТАНОВКА ЗАВДАННЯ
Тема даного дипломного проекту - «Автоматизація ведення бази
даних індивідуальних програм реабілітації інвалідів». Система повинна
складатися з підсистем адміністрування, ведення даних про інваліда, дані про
ІПР, пошук, формування документів.
В рамках даного дипломного проекту потрібно організувати базу
даних та розробити програмний додаток, який дозволяє працювати з розробленою
базою даних, яка повинна містити довідники, що можуть доповнятися в процесі
роботи програми та стандартні довідники, що поставляються з шаблоном бази даних
вже заповненими. База даних повинна містити інформацію у таблицях про осіб, що
мають інвалідність в таблиці «Особиста картка», основні дані про індивідуальну
програму реабілітації у таблиці «ІПР», дані про обмеження життєдіяльності в
таблиці «Обмеження», а також дані про заходи по реабілітації у таблиці
«Реабілітація».
Програма повинна формувати документ вказаного типу у вигляді
Excel.
Крім того, програма повинна перевіряти усі введені дані на
коректність та видавати повідомлення у випадку помилкового вводу.
Програма повинна дозволяти такі дії з інформацією пов’язаної
з ІПР над таблицями бази даних, як перегляд, додавання, редагування, видалення
інформації про особисті дані пацієнта, а також пов’язаної з особистою карткою
ІПР, обмежень та реабілітаційних заходів, а також сортування, фільтрування та
пошук даних про пацієнта. Стосовно ІПР програма повинна надавати можливість
роботи з такою інформацією, як номер програми реабілітації, дата запису, тип
програми реабілітації, тривалість перебування на інвалідності, діагноз, супутні
захворювання, реабілітаційний потенціал, дата контролю за виконанням ІПР,
працівник, що заповнив документ.
При введенні інформації користувачем програма повинна
максимально забезпечувати контроль даних, що вводяться.
Програмне забезпечення повинно мати сучасний, зручний та
зрозумілий для користувача інтерфейс.
Вхідні дані наведено у додатку А.
Лістинг програми міститься у додатку Б.
2. ЗАГАЛЬНА ЧАСТИНА
2.1 Вимоги до технічних заходів,
що застосовуються
Технічні вимоги до ПК повинні відповідати мінімальним
системним вимогам для розробки і експлуатації програмного продукту.
Вимоги до складу і параметрів технічних засобів: система
повинна працювати на ІBM-сумісних персональних комп'ютерах.
Мінімальні вимоги до конфігурації персонального комп’ютеру:
- тип процесора Intel Pentium 166 MHz
або краще;
- обсяг оперативного запам'ятовуючого
пристрою 64 Мб і більше;
- обсяг вільного місця на жорсткому
диску 124 Мб;
- операційна систем Microsoft Windows
XP.
Рекомендовані вимоги до конфігурації персонального
комп’ютеру:
- тип процесора Intel Pentium 500 MHz
або краще;
- обсяг оперативного запам'ятовуючого
пристрою 256 Мб і більше;
- обсяг вільного місця на жорсткому
диску750 Мб і більше;
- операційна систем Microsoft Windows
XP, Vista, 7.
2.2 Опис інструментальних засобів,
що застосовуються
Завдяки своїй зручності поширена об’єктно-орієнтована
технологія візуального програмування, яка дозволяє швидко розробляти програми.
Для розробки даного проекту обрано інтегроване середовище Borland Delphi 7 та
система СУБД FireBird 2.5.
Середовище Borland Delphi 7 було обрано завдяки своїй
зручності у використанні та широкому виборі компонентів візуального
програмування.
Щодо архітектури і принципів роботи Borland Delphi можна
сказати, що Delphi - це об'єктно-орієнтоване середовище візуального
програмування (RAD - Rapid Application Development) [1-3]. Delphi призначено
для прискореної розробки високопродуктивних програм, які можуть працювати в
середовищі Windows або Linux. При цьому Delphi дозволяє звести до мінімуму
об'єм програмного коду, який вводиться вручну. В склад Delphi входять засоби,
необхідні для розробки, тестування та встановлення програм, включаючи велику за
обсягом бібліотеку компонентів (VCL - Visual Components Library), засоби
візуального проектування, шаблони програм і форм. Середовище проектування
Delphi є відкритою системою і дозволяє використовувати як компоненти VCL, так і
компоненти від сторонніх розробників, або власні компоненти. Також, сильною
стороною Delphi є можливість використання функцій WinAPI.
В системі Delphi використовується спеціалізована версія мови
програмування Pascal, що постійно вдосконалюється; вона називається Delphi (в
шостій і більш ранішніх варіантах системи Delphi вона називалась Object Pascal
- "Об'єктний Паскаль"). Ця версія включає набір розширень,
орієнтованих тільки на застосування в рамках середовища Delphi і призначених
для прискореного створювання програм.
Середовище Delphi 7 являє собою інтегровану оболонку
розробника, в яку входить набір спеціалізованих програм, які відповідають за
різні етапи створення готової програми. Основні вікна системи Delphi 7
наступні: інспектор об'єктів, провідник, проектувальник форм, вікно редактора.
Вихідний текст програми формується в середовищі Delphi 7 за допомогою
вбудованого редактора вихідних текстів. Цей редактор спеціалізований. Він
відрізняється гнучкими можливостями кольорового виділення різних елементів тексту
програми (ключових слів, назв, операцій, чисел і рядків) і надає можливість
швидкого вводу конструкцій, які часто зустрічаються.
Елементами мови є набори компонентів, які дозволяють
створювати додатки за найрізноманітнішими тематиками. Компоненти володіють
наборами властивостей, що характеризують їх особливості. Крім властивостей,
компоненти містять методи - програмний код, який обробляє значення властивостей
та події - повідомлення, які компонент приймає від програми. Всі програми в
Delphi 7 будуються за наступним принципом: в головній частині з розширенням
.DPR зберігається тільки виклик декількох команд, які відкривають головне
вікно, а також виконують завершальні дії. Решта всього програмного коду
міститься в файлах, що зберігають опис додаткових модулів, які підключаються.
Кожен модуль має чітко задану структуру, яка зазвичай автоматично генерується
системою Delphi 7 при його створенні. Модуль складається з чотирьох частин:
інтерфейсної частини, частини реалізації (обов'язкова), частини ініціалізації і
частини завершення (необов'язкова). Спочатку вказують заголовок модуля -
ключове слово Unit, за ним довільну назву модуля (вона повинна співпадати з
іменем файлу, в якому модуль зберігається) і ставлять крапку з комою: Unit
Testunit. Інтерфейсна частина описує інформацію, яка доступна з інших частин
програми, з інших модулів і головної частини. Частина реалізації описує
інформацію, яка недоступна з інших модулів. Подібне розділення модуля на
частини дозволяє створювати і розповсюджувати модулі у відкомпільованому
вигляді (розширення DCU), додаючи до них тільки опис інтерфейсної частини. При
цьому внести зміни в такий модуль неможливо, вихідний код, який реалізує
описані в інтерфейсній частині можливості, недоступний. Такий підхід дозволяє
повторно використовувати раніше написані модулі для інших програм і вже
відкориговані модулі та розмежовує доступ до модуля декількох програмістів, а
також дозволяє розбивати програму на набір логічно незалежних модулів.
Інтерфейсна частина завжди йде першою і починається з ключового слова
interface, а частина реалізації з - implementation. Частини ініціалізації і
завершення необов'язкові. Вказані в них дії виконуються, відповідно, на самому
початку та в самому кінці роботи програми і тільки один раз. Частина ініціалізації
починається з ключового слова initialization, частина завершення - з ключового
слова finalization. В кінці модуля завжди ставиться слово end і крапка.
Базовими
елементами мови являються: коментарі, змінні, константи, оператори, типи даних
тощо.
Це середовище дозволяє створювати візуальний інтерфейс, має
простий синтаксис. Також воно добре документовано, що дозволить швидше виконати
поставлену задачу.- це нащадок Турбо Паскаля, який був випущений для
операційної системи Cp/m в 1983 році. У лютому 1994 року Турбо Паскаль був
перенесений на операційну систему MS-DOS. На ранньому етапі розвитку
комп'ютерів IBM РС, Турбо Паскаль був однією з найбільш популярних мов розробки
програмного забезпечення - головним чином тому, що це був цілком серйозний
компілятор, який, включаючи компілятор, редактор і відладчик. Середовище мало
змогу працювати на машині з 64 Kb оперативної пам'яті.
Під Windows Турбо Паскаль був перенесений фірмою Borland в
1990 році. А остання версія Borland Pascal 7.0 (має тепер таку назву), не рахуючи
Delphi, вийшла в світ в 1992 році. Розробка Delphi почалася в 1993 році. Після
проведення beta-тестування Delphi показали на "Software Development
'95". Спочатку на Delphi можна було програмувати під MS Windows 3.1.
Починаючи з версії 2.0 на Delphi можна створювати програми під будь-яку з
32-бітних версій MS Windows.
В 2000 році була спроба створити варіант Delphi під
операційну систему на базі ядра Linux, така модифікація Delphi мала назву
Kylix. Було випущено 3 версії Kylix, проте експеримент виявився невдалим і 2003
року проект був заморожений.
року була створена модифікація мови під платформу
Microsoft.NET, що отримала назву Delphi.NET. Цей варіант мови послідовно
розвивається в версіях Delphi 8, 2005, 2006, 2007.
Частково Delphi підтримується також у відкритому проекті
FreePascal, що потенційно дозволяє створювати програми під велику кількість
платформ.
СУБД Firebird є однією з найпопулярніших у світі
безкоштовних, кросплатформових систем управління базами даних з відкритим
вихідним кодом. FireBird є поширеною СУБД, основними перевагами якої є
можливість створення великих та складних баз даних, проте розмір бази не вплине
на швидкодію роботи з нею. Також вона має повну відповідність вимогам ACID:
СУБД Firebird зроблений спеціально, щоб задовольняти вимогам атомарності,
цілісності, ізоляції та надійності.
Вона була розроблена на основі вихідного коду СУБД Interbase
і розвивається сьогодні незалежним міжнародним співтовариством. За надійністю,
продуктивністю та функціональними можливостями ця система мало чим поступається
визнаним лідерам свого класу - Oracle і Microsoft SQL Server.
Основні можливості СУБД Firebird полягають в тому, що вона
повністю підтримує стандартні ANSI в синтаксисі мови SQL і може працювати під
управлінням багатьох операційних систем - Windows, Linux, MacOS, Solaris і
різних Unix-платформах. Серед переваг цієї системи використання дуже розвиненої
мови для збережених процедур і тригерів. Попередник Firebird, СУБД Interbase,
використовувалася в інформаційних системах починаючи з 1981 року.це вільний
проект, підтримуваний багатьма програмістами та спеціалістами з інших областей
по всьому світу. Його початок було покладено 25 липня 2000 року, коли
корпорація Inprise Corp (нині відома як Borland Software Corp) відкрила вихідні
коди своєї СУБД Interbase, яка використовувалася в різних інформаційних
системах, починаючи з 1981 року.повністю безкоштовна, вона не вимагає ні
реєстрації, ні оплати за підтримку. Вихідний код цієї системи відкритий і
будь-який бажаючий може розробляти на його базі власні некомерційні проекти, за
умови дотримання вимог ліцензії IDPL, по якій поширюється Firebird.заснована на
вихідному коді InterBase 6.0, який був випущений як Open Source компанією
Borland в серпні 2000 року. Історія Interbase починається в 1984 році, таким
чином, продукт є спадкоємцем більш ніж 20-річного досвіду роботи з реляційними
базами даних.
В якості переваг Firebird можна відзначити багатоверсійну
архітектуру, що забезпечує паралельну обробку оперативних і аналітичних запитів
(це можливо тому, що читаючі користувачі не блокують тих, що пишуть),
компактність (дистрибутив 5Mb), високу ефективність і потужну мовну підтримку
для збережених процедур і тригерів.використовується в різних промислових
системах (складські та господарські, фінансовий і державний сектори) з 2001 р.
Це комерційно незалежний проект C і C++ програмістів, технічних радників і
розробників мультиплатформових систем управління базами даних, заснований на
вихідному коді, випущеному компанією Borland 25 липня 2000 року у вигляді вільної
версії Interbase 6.0.є сервером баз даних. Один сервер Firebird може обробляти
кілька сотень незалежних баз даних, кожну з безліччю користувальницьких сполук.
Він є повністю вільним від ліцензійних відрахувань навіть для комерційного
використання.
Серед недоліків можна відмітити відсутність кешу результатів
запитів, повнотекстових індексів.
Основні характеристики СУБД Firebird наведено нижче. Серед
них відповідність вимогам ACID: Firebird зроблений спеціально, щоб задовольняти
вимогам атомарності, цілісності, ізоляції та надійності транзакцій
("Atomicity, Consistency, Isolation and Durability"). [4]
Також перевагою є версійна архітектура: Основна особливість
Firebird версійна архітектура, що дозволяє серверу обробляти різні версії одних
і тих же записів в будь-який час таким чином, що кожна транзакція бачить свою
версію даних, не заважаючи сусіднім ("читаючі транзакції не блокують
пишучі, а пишучі не блокують читаючі"). Це дозволяє використовувати
одночасно OLTP і OLAP запити.
Іншою важливою перевагою є збережені процедури,
використовуючи мову PSQL (процедурний SQL) Firebird, можливо створювати складні
процедури для обробки даних на стороні сервера. Для генерації звітів особливо
зручні збережені процедури з можливістю вибірки, що повертають дані у вигляді набору
записів. Такі процедури можна використовувати в запитах так само, як і звичайні
таблиці.
СУБД може містити збережені процедури і тригери, які можуть
генерувати події, на які може підписатися клієнт. Після успішного завершення
транзакції (COMMIT) він буде сповіщений про минулі події та їх кількість.
Ідея генераторів (послідовностей) робить можливою просту
реалізацію автоінкрементних полів, і не тільки їх. Генератори є 64-бітними
збереженими в базі даних лічильниками, які працюють незалежно від транзакцій.
Вони можуть бути використані для різних цілей, таких як генерація первинних
ключів, управління тривалими запитами в сусідніх транзакціях, і тому подібне.
Бази даних тільки для читання дозволяють поширювати бази
даних, наприклад, на CD-ROM. Особливо спрощує розповсюдження даних їх
використання в комбінації з вбудованої версією сервера Firebird (Firebird
Embedded).
Наступною перевагою цієї СУБД є повний контроль за
транзакціями: Один клієнтський додаток може виконувати безліч одночасних
транзакцій. У різних транзакціях можуть бути використані різні рівні ізоляції.
Протокол двофазного підтвердження транзакцій забезпечує гарантовану стійкість
при роботі з декількома базами даних. Так само доступні оптимістичне блокування
даних та точки збереження транзакцій.
Іншим плюсом є резервне копіювання на льоту. Для резервного
копіювання немає потреби зупиняти сервер. Процес резервного копіювання зберігає
стан бази даних на момент свого старту, не заважаючи при цьому роботі з базою.
Крім того, існує можливість створювати інкрементні резервні копії БД.
Також важливим моментом є тригери. Для кожної таблиці можливе
призначення кількох тригерів, що спрацьовують до або після вставки, оновлення
та видалення записів. Для тригерів використовується мова PSQL, дозволяючи
вносити початкові значення, перевіряти цілісність даних, викликати виключення,
і так далі. В Firebird 1.5 з'явилися універсальні тригери, які дозволяють в
одному тригері обробляти вставки, оновлення та видалення записів таблиці.
Зовнішні функції бібліотеки з UDF (User Defined Function)
можуть бути написані будь-якою мовою і легко підключені до сервера у вигляді
DLL/SO, дозволяючи розширювати можливості сервера "зсередини".
Декларативний опис посилальної цілісності забезпечує
несуперечність і цілісність багаторівневих відносин "master-detail"
між таблицями.підтримує безліч міжнародних наборів символів (включаючи Unicode)
з безліччю варіантів сортування.
Також у цьому розділі треба згадати і
про такий інструмент як SQL. SQL (Structured query language) - декларативна мова
програмування для взаємодії користувача з базами даних, що застосовується для
формування запитів, оновлення і керування реляційними БД, створення схеми бази
даних і її модифікації, системи контролю за доступом до бази даних. Сам по собі
SQL не є ні системою керування базами даних, ні окремим програмним продуктом.
Не бувши мовою програмування в тому розумінні, як C або Pascal, SQL може
формувати інтерактивні запити або, бувши вбудованою в прикладні програми,
виступати в якості інструкцій для керування даними. Стандарт SQL, крім того,
вміщує функції для визначення зміни, перевірки і захисту даних.- це діалогова
мова програмування для здійснення запиту і внесення змін до бази даних, а також
управління базами даних. Багато баз даних підтримує SQL з розширеннями до
стандартної мови. Ядро SQL формує командна мова, яка дозволяє здійснювати
пошук, вставку, оновлення, і вилучення даних, використовуючи систему управління
і адміністративні функції. SQL також включає CLI (Call Level Interface) для
доступу і управління базами даних дистанційно.
Перша версія SQL була розроблена на
початку 1970-х років у IBM. Ця версія мала назву SEQUEL і була призначена для
обробки й пошуку даних, що містилися в реляційній базі даних IBM, System R .
Мова SQL пізніше була стандартизована Американськими Держстандартами (ANSI) в
1986. Спочатку SQL розроблялась як мова запитів і управління даними, пізніші
модифікації SQL створено продавцями систем управління базами даних, які додали
процедурні конструкції, control-of-flowкоманд і розширення мов.призначений для
виконання запитів. Крім того, в SQL входить синтаксис для оновлення, вставки і
знищення даних. Цей синтаксис разом з командами поновлення формує мова
управління даними (DML):
- SELECT - отримує дані з
таблиці БД;
- UPDATE - оновлює дані в
таблиці БД;
- DELETE - знищує дані в
таблиці БД;
- INSERT INTO - вставляє нові
дані в таблицю БД.є частиною SQL, яка управляє створенням і видаленням таблиць
в БД, крім того, за допомогою DDL ми можемо призначати індекси (ключові слова),
налагоджувати взаємозв'язки між таблицями і накладати обмеження на таблиці БД
[5].
Найважливішими командами DDL є
наступні команди:
- CREATE TABLE - створення
нової таблиці;
- ALTER TABLE - зміна існуючої
таблиці;
- DROP TABLE - видалення
таблиці;
- CREATE INDEX - створення
індексу (ключового слова для полегшення пошуку);
- DROP INDEX - видалення
індексу.
2.3
Розробка баз даних за допомогою Firebird 2.5
інтерфейс редагування інформація база
Процес розробки бази даних складається з таких кроків:
- визначення мети створення бази даних;
- пошук і впорядкування потрібних
відомостей;
- розділення даних на таблиці;
- перетворення елементів даних на
стовпці;
- визначення первинних ключів;
- створення зв'язків між таблицями;
- удосконалення структури;
- застосування правил нормалізації .
Угрупування одних і тих же даних в
таблиці може проводитися різними способами. Атрибути і відносини повинні
групуватися за реляційними принципами, тобто має повністю мінімізуватися
дублювання даних, а також спрощуватися процедура їх обробки з подальшим
оновленням. Одним з першорядних завдань при проектуванні баз даних виступає
усунення надмірності, а воно досягається за допомогою нормалізації.
Нормалізація баз даних являє собою
формальний апарат обмежень на створення таблиць, що дозволяє усунути дублювання,
з обов’язковим забезпеченням несуперечності інформації, що зберігається,
зменшуючи трудовитрати, пов’язані з веденням та обслуговуванням бази даних.
Операція нормалізації полягає в розкладанні вихідних таблиць бази даних на
більш прості.
На кожному ступені даного процесу
таблиці обов’язково приводяться до нормальних форм. Кожна ступінь нормалізації
характеризується певним набором обмежень, яким і повинні відповідати всі
таблиці. Таким чином, здійснюється видалення з таблиць неключової інформації,
яка є надлишковою.
Нормалізація баз даних ґрунтується на
понятті функціональної залежності між атрибутами. Прийнято вважати, що один
атрибут залежить від іншого, якщо в кожен момент часу певному значенню другого
атрибута відповідає трохи більше, ніж одне значення першого.
Нормалізація баз даних - це загальне
поняття, однак, його прийнято поділяти на кілька нормальних форм, про які й
буде сказано далі.
Будь-який інформаційний об’єкт
вважається відповідним першій нормальній формі, коли значення кожного його атрибута
є єдиним. Якщо у якогось атрибуту є повторюване значення, то не можна вважати,
що об’єкт належить першій нормальній формі. Виходить, що можна створити ще одну
сутність, тобто інформаційний об’єкт.
Прийнято вважати, що інформаційний
об’єкт належить до другої нормальної формі, коли він вже перебуває в першій
нормальній формі і кожен з його атрибутів, який не перебуває в потенційному
ключі, повністю залежить, у функціональному плані, від кожного з потенційних
ключів.
Прийнято вважати, що інформаційний
об’єкт належить до третьої нормальної форми, якщо він вже перебуває в другій
нормальній формі і в ньому не присутня жодна з транзитивних залежностей
неключових об’єктів від ключів. Під транзитивною залежністю прийнято розуміти
очевидну залежність між полями.
Нормалізація бази даних ставить перед
розробником основну мету, яка полягає в приведенні всіх відносин до третьої
нормальної форми. Тільки так у подальшому можна буде створити ефективну
інформаційну систему.
Варто сформулювати набір правил, яких
слід притримуватися в роботі з нормалізації. У першу чергу варто виключати
повторювані групи. Необхідно формувати окрему таблицю, що зберігає кожен набір
пов’язаних атрибутів, в якій і створити окремий ключ. Далі обов’язково
виключити надлишкові дані. У випадках, коли залежність атрибуту спостерігається
тільки від частини ключа, то його необхідно виставити в окрему таблицю. Третє
правило полягає в обов’язковому виключенні стовпців, що не залежать від ключа.
Атрибути слід помістити в ізольовану таблицю, якщо вони не роблять належного
впливу на ключ. Обов’язково слід ізолювати незалежні множинні відносини. У
даному випадку мова йде про те, що між кількома відносинами не проглядається
конкретний зв’язок. І нарешті, варто ізолювати множинні відносини, пов’язані
семантично. На цьому нормалізація БД завершується, після чого настає процес
розробки.
2.4 Компоненти роботи з базами
даних
Для роботи з базою даних доцільно обрати такі компоненти
призначені для роботи з базами даних, як TIBdatabase, TIBTransaction,
TDataSource, TIBTable та TIBQuery. При проектуванні програми для підключення
бази даних доцільно встановити такі параметри для компонентів.
Для TIBdatabase1 властивість DatabaseName у вказати шлях до
бази даних, властивість Connected встановити у True. Для TIBTransaction1
властивість Active у True. Для TDataSource3 властивість Dataset у IBQuery3. Для
TIBQuery3 властивість Database у TIBdatabase1, Властивість SQL [6] залежно від
потреб заповнити запитом мовою SQL, а властивість Active встановити у True.
Таким чином може бути спроектована та підключена база даних
для початку проектування програми.
3
СПЕЦІАЛЬНА ЧАСТИНА
3.1 Програмна частина
3.1.1 Проектування бази даних та
інтерфейсу програми
Для реалізації бази даних була обрана СУБД Firebird 2.5, в
якій створено 24 таблиці.
Доцільно було поділити інформацію на різні таблиці, з яких 4
основні і 20 довідників. Схема взаємозв’язку таблиць представлена в додатку В.
Дані, що використовуються у таблиці багато разів, було
доречно занести у так звані довідкові таблиці, що мають характерний префікс
SPR_ у своїй назві, вони приведені на рисунках 3.1 - 3.20. Довідники, що
поставляються заповненими:
- «Стать»;
- «Освіта»;
- «Групи інвалідності»;
- «Тип програми реабілітації»;
- «Види обмежень»;
- «Ступені обмежень»;
- «Заходи реабілітації»;
- «Реабілітаційний потенціал»;
- «Мета реабілітації».
Довідники, що можуть поповнюватися в ході виконання програми:
- «Діагнози»;
- «Супутні захворювання»;
- «Професії»;
- «Терміни проведення реабілітаційних
заходів»;
- «Обсяг проведення реабілітаційних
заходів»;
- «Місце проведення реабілітаційних
заходів»;
- «Працівники закладу»;
- «Райони»;
- «Області»;
- «Населені пункти»;
- «Райони населеного пункту».
На рисунках позначка «ПК» позначає, що поле є первинним
ключем, позначка «ВК», що поле є зовнішнім ключем.
Рисунок 3.1 - Структура таблиці статі SPR_SEX
Рисунок 3.2 - Структура таблиці ступенів освіти SPR_OSVITA
Рисунок 3.3 - Структура таблиці груп інвалідності SPR_GR_INV
Рисунок 3.4 - Структура таблиці типів ІПР SPR_PROG_SKL
Рисунок 3.5 - Структура таблиці видів обмежень SPR_VID_OBMEJ
Рисунок 3.6 - Структура таблиці супутніх захворювань SPR_STUP
Рисунок 3.7 - Структура таблиці реабілітаційних заходів
SPR_ZAH
Рисунок 3.8 - Структура таблиці реабілітаційних потенціалів
SPR_R_POTENCIAL
Рисунок 3.9 - Структура таблиці цілей реабілітації SPR_META
Рисунок 3.10 - Структура таблиці діагнозів SPR_DIAGNOZ
Рисунок 3.11 - Структура таблиці супутніх захворювань SPR_MKH
Рисунок 3.12 - Структура таблиці професій SPR_PROF
Рисунок 3.13 - Структура таблиці термінів реабілітації
SPR_TERMIN
Рисунок 3.14 - Структура таблиці обсягів реабілітацій
SPR_OBSYAG
Рисунок 3.15 - Структура таблиці місць реабілітації SPR_MISC
Рисунок 3.16 - Структура таблиці працівників МСЕК
SPR_SOTRUDNIKI
Рисунок 3.17 - Структура таблиці районів області
SPR_RAJON_OBL
Рисунок 3.18 - Структура таблиці областей SPR_OBL
Рисунок 3.19 - Структура таблиці населених пунктів
SPR_NAS_PUNKT
Рисунок 3.20 - Структура таблиці районів населеного пункту
SPR_RAJON
Таблиця «Особиста картка пацієнта» містить такі поля
- ID_CHEL -- унікальний ідентифікатор;
- FIO - ПІБ;
- DR - дата народження;
- SEX - стать;
- OBL - область;
- R_OBL - район області;
- PUNKT - населений пункт;
- R_PUNKT - район населеного пункту;
- INDEX1 - поштовий індекс;
- STREET - вулиця;
- TEL - номер телефону;
- OSVITA - освіта;
- GR_INV - група інвалідності;
- ID_PROF - професія;
- WORK - ким працює.
Таблиця «Обмеження» містить такі поля
- ID_IPR - ідентифікатор ІПР, до якої
відноситься обмеження;
- ID_VID_OBMEJ - ідентифікатор виду
обмеження, до якого відноситься запис;
- ID_STUP - ідентифікатор ступеню, до
якого відноситься дане обмеження.
Таблиця «ІПР» містить такі поля:
- ID_IPR - унікальний ідентифікатор
ІПР;
- ID_CHEL - ідентифікатор пацієнта, для
якого складена дана програма;
- N_PROG - номер програми реабілітації;
- DAT_ZAP - дата заповнення ІПР;
- MSEK_N - назва та номер МСЕК;
- ID_PROG_SKL - програма складена;
- TRIV_INV - тривалість перебування на
інвалідності;
- ID_DIAGNOZ - діагноз;
- SUPUT_ZAHV - супутні захворювання;
- ID_R_POTENCIAL - реабілітаційний
потенціал;
- META - мета реабілітації;
- DAT_SPIVB - Дата проведення
співбесіди;
- DAT_KONTR - Дата контролю за
виконанням ІПР;
- SOTRUDNIK - Працівник, що уклав ІПР.
Таблиця «Реабілітація» містить такі поля
- ID_IPR - ідентифікатор ІПР, до якої
відносяться реабілітаційні заходи;
- ID_ZAH - реабілітаційний захід;
- ID_TERMIN - термін виконання
реабілітації;
- ID_OBSYAG - обсяг виконання
реабілітації;
- ID_MISCE - місце виконання
реабілітації.
Схема зв`язку таблиць приведена у додатку В.
Таким чином ми маємо таблицю, що містить перелік персональних
даних про осіб-інвалідів OS_KARTA, що зображено на рисунку 3.21, дані про
обмеження життєдіяльності містяться у таблиці OBMEJ, що зображено на рисунку
3.22, дані про індивідуальну програму реабілітації зображено у таблиці IPR, що
відображено на рисунку 3.23 та дані про реабілітаційні заходи містяться у
таблиці REABIL, що відображено на рисунку 3.24.
Рисунок 3.21- Структура таблиці OS_KARTA
Рисунок 3.22 - Структура таблиці OBMEJ
Рисунок 3.23 - Структура таблиці IPR
Рисунок 3.24 - Структура таблиці REABIL
Поля таблиць, які є індивідуальними ідентифікаторами, не
відображаються в ході виконання програми, так як служать для зв’язування
таблиць за ключовими полями та не несуть змістовного значення для користувача.
Для підключення бази даних до програми використано
SQL-запити, приклад якого приведено в лістингу 3.1
Лістинг 3.1 - Властивість SQL компоненту TIBQuery
SELECT os.id_chel, os.fio, os.dr, sex.sex as sex1, obl.obl as
obl1, osv.osvita as osvita1, os.work, os.street, os.index1, os.tel,
ro.rajon_obl as r_obl1, np.nas_punkt as punkt1, r.rajon as r_punkt1, gr.gr_inv
as gr_inv1, prof.prof as id_prof1 From Os_karta osJOIN Spr_sex sex ON os.sex =
sex.id_sexJOIN Spr_GR_INV gr ON os.gr_inv = gr.id_gr_invJOIN Spr_osvita osv ON
os.osvita = osv.id_osvitaJOIN Spr_obl obl ON os.obl = obl.id_oblJOIN
Spr_rajon_obl ro ON os.r_obl = ro.id_rajon_oblJOIN Spr_rajon r ON os.r_punkt =
r.id_rajonJOIN Spr_nas_punkt np ON os.punkt = np.id_nas_punktJOIN Spr_prof prof
ON os.id_prof = prof.id_prof
Зручно не використовувати один шлях доступу до таблиць бази
даних, а мати для цього файл налаштувань, який дозволяє вказати з програми шлях
доступу до бази даних. Такий підхід дає можливість розташовувати дані в
будь-якому місці, не перекомпільовуючи при цьому програму. Приклад вхідних даних
міститься у додатку А.
Згідно з постановкою задачі доцільно розробити інтерфейс
програми, який би складався з форм, описаних нижче.
До складу інтерфейсу повинно входити 15 форм, список та
призначення яких приведено у таблиці 3.1.
Таблиця 3.1 - Призначення форм
Назва форми
|
Призначення форми
|
AboutForm
|
Відображення
інформації про програму
|
DataModule1
|
Розташування не
візуальних компонентів
|
FormAddDov,
FormAddDovMKH
|
Додавання та
редагування даних у довідниках
|
FormAddIPR
|
Додавання та
редагування інформації про індивідуальну програму реабілітації
|
FormAddPacient
|
Додавання даних про
пацієнта
|
Назва форми
|
Призначення форми
|
FormAvtoriz
|
Авторизація
|
FormDovidnik
|
Перегляд довідників
|
FormIPRView
|
Перегляд ІПР
|
FormNastr
|
Вибір шляху до БД
|
FormReabil
|
Форма реабілітаційних
заходів ІПР
|
FormRedPac
|
Редагування
інформації про пацієнта
|
MainForm
|
Основна форма
|
FormRedPas
|
Форма зміни пароля
|
FormPath
|
Налаштування для
збереження довідок
|
Основна форма Main зображена на рисунку 3.1. Вона містить
такі компоненти [7] як:
- TMainMenu - для забезпечення
відображення головного меню уверху форми для переходів на інші форми;
- TStatusBar - для відображення
поточної інформації системи у нижній частині вікна;
- TToolBar - для відображення кнопок
під головним меню для швидкого доступу до деяких функцій;
- TDBNavigator - для переходу по
таблиці;
- TEdit - для вводу інформації;
- TImageList - для збереження зображень
у форматі *.bmp для іконок;
- TDateTimePicker - для вибору
коректної дати;
- TBitBtn - кнопка із іконкою для
виконання дій;
- TGroupBox - для візуально відділення
інформації;
- TPopupMenu - для спливаючого меню, що
викликається правою кнопкою миші;
- TDBGrid - для відображення таблиці із
бази даних;
- TImage - для розміщення зображень,
зокрема фону форми;
- TXPManifest - для придання формі
стилю Windows XP;
- TLabel - для розміщення
пояснювального тексту;
- TComboBox - для вибору значення зі
списку;
- TPanel - для розміщення та
вирівнювання компонентів один відносно одного.
Рисунок 3.25 - Основна форма Main
Для вирівнювання вікна при появі його властивість Position
була встановлена у poScreenCenter, для того, щоб користувач не міг змінити
розмір вікна, його властивість BorderStyle була встановлена у Single для
відповідних форм. Також при розміщенні компонентів на формі властивість Align в
залежності від потреб була встановлена у alBottom, alClient, alLeft , alRight
чи alTop для компонентів.
Головне меню містить такі пункти меню:
- «Авторизація» - має підпункти для
виходу із програми та для реєстрації нового користувача;
- «Заповнити» - має підпункти для
виклику вікна заповнення даних про пацієнта та заповнення ІПР пацієнта;
- «Пошук» - показує чи скриває панель
пошуку;
- «Довідники» - через підпункти
викликає вікно перегляду для конкретного довідника;
- «Про програму» - викликає вікно «Про
програму»;
- «Конфігурація» - викликає вікно
конфігурації;
- «Вихід» - закриває програму.
Компонент TPopupMenu призначений для виконання дій над
записами та містить такі пункти:
- «Додати пацієнта»;
- «Додати ІПР»;
- «Редагувати»;
- «Видалити».
Для зручності невізуальні компоненти [8] було розміщено на
спеціальній формі DataModule, яку зображено на рисунку 3.26.
Рисунок 3.26 - Форма з невізуальними компонентами DataModule
Форма додавання інформації [9] про пацієнта містить такі
компоненти, як TImage, TGroupBox, TMainMenu, TLabel, TDateTimePicker, TEdit,
TComboBoх.
Форма додавання інформації про ІПР містить такі компоненти як
TLabel, TEdit, TDateTimePicker, TUpDown - для завдання числового значення
кліком по стрілкам, TGroupBox, TImage, TMainMenu, TDBListBox - для відображення
інформації із таблиці обмежень, TMemo - для вводу ступеня обмеження,
TSpeedButton - кнопка-зображення для відкриття довідників, TComboBox,
TDBNavigator.
Вибір реабілітаційних засобів, їх термінів, обсягу та місця
проведення виконується на формі додавання інформації про реабілітаційні заходи,
їх обсяги, терміни та місця проведення «Реабілітація», яка зображена на рисунку
3.29. Дана форма містить такі компоненти, як TTreeView - призначений для
відображення довідника реабілітації у вигляді дерева, TImage, TMainMenu,
TComboBox, TLabel, TBitBtn, TSpeedButton.
Перегляд довідників виконується на формі FormDovidnik, в якій
відкривається тільки той, що буде обрано у підменю «Довідники». Ця форма мітить
такі компоненти як TPageControl - для вибору вкладок, TDBGrid, TBitBtn.
Форма містить такі компоненти, як TMainMenu, TImage,
TGroupBox, TLabel, TEdit.
Форма додавання до інших довідників, а саме: «Професії»,
«Терміни реабілітації», «Обсяги реабілітації», «Місця реабілітація»,
«Працівники», «Область», «Район області», «Населений пункт» та «Район
населеного пункту». Вона містить такі ж самі компоненти, що й попередня і
відрізняється лише тим, що містить тільки одне поле для заповнення.
Форма редагування інформації [10] про пацієнтів відображає
дані про конкретного пацієнта, що занесені в таблицю, та дозволяє змінити їх.
На формі містяться такі компоненти, як TMainMenu, TGroupBox, TLabel,
TDateTimePicker, TImage, TComboBox, TEdit.
Форма перегляду інформації про ІПР містить такі компоненти,
як TMainMenu, TPanel, TMemo, TDBGrid.
Форма авторизації дозволяє виконати вхід до програми. Вона
містить такі компоненти, як TLabel, TEdit, TImage, TMainMenu.
Форма зміни пароля має такі компоненти, як TImage, TLabel,
TGroupBox, TEdit, TMainMenu.
Форма інформації про програму містить інформацію про
програму. На формі містяться такі компоненти, як TLabel, TImage.
Форма конфігурації містить інформацію про шлях до БД. Вона
містить такі компоненти, як TLabel, TButton, TImage,TEdit та TOpenDialog - для
відкриття діалогу вибору шляху.
Форма конфігурації містить інформацію про шлях для збереження
довідок ІПР. Вона містить такі компоненти, як TLabel, TButton, TBitBtn, TEdit та
TOpenDialog - для відкриття діалогу вибору шляху, TCheckBox - для відмічання
прапорцем настройки.
3.1.2 Опис вхідних та вихідних
даних
Вхідними даними у даній програмі є інформація для чотирьох
основних таблиць: «Особиста картка пацієнта», «Обмеження», «ІПР» та
«Реабілітація», яку користувач вводить з клавіатури, а також дані, якими
заповнюються довідники.
Приклад вхідних даних приведено у додатку А.
Вихідними даними є документ сформований в Excel-документі,
фрагмент шаблону документу ІПР зображено на рисунку 3.40.
Рисунок 3.40 - Фрагмент шаблону документу
3.1.3 Контроль коректності вхідних
та вихідних даних
Контролю коректності даних, необхідно приділяти чималу увагу,
оскільки необроблені помилки, приводять до критичних ситуацій при роботі в
роботі програмі.
Тестування програмного забезпечення - це процес, що
використовується для виміру якості розроблюваного програмного забезпечення.
Зазвичай воно проводиться протягом всієї розробки та супроводу на різних
рівнях. Рівень тестування визначає "над чим" виробляються тести: над
окремим модулем, групою модулів або системою, в цілому. При цьому жоден з
рівнів тестування не може вважатися пріоритетним. Важливі всі рівні тестування,
незалежно від використовуваних моделей і методологій.
Модульне тестування (Unit testing)
дозволяє перевірити функціонування окремо взятого елемента системи. Що вважати
елементом - модулем системи визначається контекстом. Найбільш повно даний вид тестів
описаний в стандарті IEEE 1008-87 "Standard for Software Unit
Testing", задаючому інтегровану концепцію систематичного і документованого
підходу до модульного тестування.
Інтеграційне тестування (Integration
testing) є процесом перевірки взаємодії між програмними компонентами /
модулями. Класичні стратегії інтеграційного тестування -
"зверху-вниз" і "знизу-вгору" - використовуються для
традиційних, ієрархічно структурованих систем і їх складно застосовувати,
наприклад, до тестування слабозв'язаних систем. Інтеграційне тестування - постійно
проводиться діяльність, що передбачає роботу на досить високому рівні
абстракції. Найбільш успішна практика інтеграційного тестування базується на
інкрементальних підході, що дозволяє уникнути проблем проведення разових
тестів, пов'язаних з тестуванням результатів чергового тривалого етапу робіт,
коли кількість виявлених дефектів призводить до серйозної переробки коду
(традиційно, негативний досвід випуску та тестування тільки великих релізів
називають "big bang").
Системне тестування (System testing)
охоплює цілком всю систему. Більшість функціональних збоїв повинна бути
ідентифікована ще на рівні модульних та інтеграційних тестів. У свою чергу,
системне тестування, зазвичай фокусується на нефункціональних вимогах -
безпеки, продуктивності, точності, надійності т.п.
Існує кілька методів тестування:
- тестування методом «чорної
скриньки» (Black box testing);
- тестування методом «білого
ящика» (White box);
- тестування методом «сірого
ящика» (Grey box).
У термінології професіоналів
тестування (програмного і деякого апаратного забезпечення) фрази
"тестування білого ящика" і "тестування чорного ящика"
ставляться до того, чи має розробник тестів і тестувальник доступ до вихідного
коду тестованого ПО, або ж тестування виконується через інтерфейс користувача
або прикладної програмний інтерфейс, наданий тестуємим модулем.
При тестуванні білого ящика (англ.
white-box testing, також кажуть - прозорого ящика), розробник тесту має доступ
до вихідного коду і може писати код, який пов'язаний з бібліотеками тестованого
ПЗ. Це типово для юніт-тестування, при якому тестуються тільки окремі частини
системи. Воно забезпечує те, що компоненти конструкції - працездатні і стійкі,
до певної міри.
При тестуванні чорного ящика (англ.
black-box testing), тестувальник має доступ до ПЗ тільки через ті ж інтерфейси,
що і замовник або користувач, або через зовнішні інтерфейси, що дозволяють
іншого комп'ютера або іншому процесу підключитися до системи для тестування.
Наприклад, тестуючий модуль може віртуально натискати клавіші або кнопки миші в
програмі, що тестується за допомогою механізму взаємодії процесів, з
упевненістю в тому, чи все йде правильно, що ці події викликають той же відгук,
що й реальні натискання клавіш і кнопок миші. Як правило, тестування чорного
ящика ведеться з використанням специфікацій або інших документів, що описують
вимоги до системи.
Що стосується самих помилок, то вони
можуть бути синтаксичними та логічними. Перші легко визначаються, так як
компілятор вказує на них, та легко усуваються, якщо проаналізувати текст
помилки. Другі ж потребують значної уваги. Як правило вони виражаються не
появою повідомлень, а роботою програми, яка на практиці не відповідає
очікуванням. В такому разі може допомогти покроковий запуск програми,
трасування, відстеження значень змінних і тому подібне.
Для забезпечення надійності програми потрібно передбачити дії
у разі невдалої спроби підключитися до бази даних, невірно введених або не
введених даних. Прикладом логічної помилки служить, наприклад, випадок, коли
програма не може підключитися до бази даних через те, що база даних відсутня у
місці, де прописана програма. Цю помилку можна вирішити передбачивши, щоб
програма спочатку перевіряла наявність в базі даних файлу, а потім з’являлося
вікно, в якому можна обрати новий шлях до бази даних.
3.1.4 Опис структури та складових
системи
Система ділиться на підсистему адміністрування та підсистему
користувача.
Спочатку користувач повинен ввести пароль на формі
авторизації, після чого йому буде відображена основна форма. З основної форми
через пункти головного меню викликаються всі інші форми для забезпечення
виконання таких функцій, як:
- додавання даних у систему;
- редагування;
- видалення;
- пошук, сортування, фільтрація;
Для користувача, що авторизувався як адміністратор, доступні
всі функції, для звичайного, що не вводить паролю, доступні лише деякі функції.
Схема взаємодії складових частин програми приведена на рисунку 3.41, 3.42.
Рисунок 3.42 - Продовження схеми взаємодії складових частин
програми
3.2 Опис модулів програми
Програма містить 15 модулів, перелік обробників подій
приведено у таблиці 3.2. Основними подіями є обробка події натискання на
кнопку, зміни вмісту поля та активація форми.
Таблиця 3.2 - Вміст модулів програми
Назва
|
Перелік обробників
подій
|
Main
|
m_exitClick,
m_aboutClick, tb_view_iprClick, m_add_iprClick, m_zmin_korClick,
m_poiskClick, FormCreate, m_add_pacClick, pop_delClick, tb_excelClick,
m_zmin_korClick, DBGrid_InfTitleClick, BitBtn_filtrClick, pop_add_iprClick,
pop_add_pacClick, m_konfClick, tb_add_pacClick, m_diagnozClick, m_mkhClick,
m_profClick, m_terminClick, m_obClick, m_miscClick, m_pracClick,
pop_redClick, BitBtn_cancelClick, c_sexChange, m_r_oblClick, m_oblClick,
m_nas_punktClick, m_r_punktClick, c_grChange, c_osvChange, c_oblChange, fio
|
About
|
-
|
AddDov
|
m_cancelClick, m_
addClick, FormActivate
|
AddDovMKH
|
m_cancelClick,
m_addClick, FormActivate
|
Назва
|
Перелік обробників
подій
|
AddPacient
|
m_exitClick,
FormShow, m_add_pacClick, FormCreate, c_sexChange, c_osvChange, c_grChange,
c_profChange, c_oblChange, c_r_oblChange, c_nas_punktChange,
c_r_nas_punktChange, m_dd_iprClick, SpeedButton_profClick,
SpeedButton_oblClick, SpeedButton_r_oblClick, SpeedButton_punktClick,
SpeedButton_r_punktClick
|
Avtoriz
|
m_exitClick,
m_enterClick, RGClick, FormCreate
|
DataModule
|
DataModuleCreate
|
Dob_IPR
|
m_exitClick,
m_reabilClick, FormCreate, DBNavigator1Click, Memo3KeyPress..Memo16KeyPress,
m_addClick, s_zahChange pr_sklChange, r_potencialChange, diagnozChange,
c_pracChange, metaChange, sp_diagnozClick, sp_mkhClick, sp_pracClick
|
Dovidnik
|
FormClose,
BitBtn_add_mClick, BitBtn_del_mClick, BitBtn_addClick, BitBtn_delClick,
BitBtn_red_mClick, BitBtn_redClick
|
IPRView
|
m_exitClick,
m_redClick, FormActivate, m_obmejClick, m_reabilClick, m_excelClick
|
Nastr
|
B_obzorClick
|
PathEx
|
FormShow,
zberejClick, obzorClick
|
Reabil
|
m_exitClick,
FormCreate, TreeViewChange, m_addClick, BitBtnAddClick, c_obmChange,
c_terminChange, miscChange, B_obClick, B_tClick, B_mClick, c_obmDropDown,
TreeViewClick
|
RedPac
|
m_exitClick,
FormActivate, m_red_pacClick, SpeedButton_profClick, SpeedButton_oblClick,
SpeedButton_r_oblClick, SpeedButton_punktClick, SpeedButton_r_punktClick
|
AddPas
|
m_exitClick,
m_enterClick
|
Форма Main призначена для відображення таблиці пацієнтів, а
також доступу до модифікації таблиці [11] та додавання ІПР. Більш детально призначення
обробників подій модулів головної форми Main описано в таблиці 3.3.
Таблиця 3.3 - Призначення обробників подій модулів форми Main
Назва
|
Призначення
|
m_exitClick
|
Вихід із програми
|
m_aboutClick
|
Виклик форми «Про
програму»
|
tb_view_iprClick
|
Виклик форми
перегляду ІПР
|
m_add_iprClick,
pop_add_iprClick
|
Виклик форми
додавання ІПР
|
m_zmin_korClick
|
Виклик форми зміни
пароля
|
m_poiskClick
|
Показ чи
приховування панелі пошуку
|
FormCreate
|
Підготовка
компонентів до відображення
|
m_add_pacClick,
pop_add_pacClick, tb_add_pacClick
|
Виклик форми
додавання пацієнта
|
DBGrid_InfTitleClick
|
Сортування даних за
стовпцем
|
BitBtn_filtrClick
|
Фільтрування за
датою
|
m_konfClick
|
Виклик форми
конфігурації
|
m_diagnozClick,
m_mkhClick, m_profClick, m_terminClick, m_obClick, m_miscClick, m_r_oblClick,
m_oblClick, m_nas_punktClick, m_r_punktClick, m_pracClick
|
Виклик форми
довідників
|
BitBtn_cancelClick,
|
Зброс фільтрування
|
fioChange
|
Пошук в таблиці за
фамілією
|
c_grChange,
c_osvChange, c_oblChange, sexChange
|
Фільтрація за
полями з інформацією про групу інвалідності, область, стать та освіту
|
pop_delClick,
|
Видалення
інформації про пацієнта
|
pop_redClick,
|
Редагування
інформації про пацієнта
|
Більш детально призначення обробників подій модулів форми
AddDov описано в таблиці 3.4.
Таблиця 3.4 - Призначення обробників подій модулів форми
AddDov
Назва
|
Призначення
|
m_addClic
|
Виконання додавання
даних
|
m_cancelClick
|
Вихід із програми
|
FormActivate
|
Активація форми
|
Більш детально призначення обробників подій модулів форми
AddDovMKH описано в таблиці 3.5.
Таблиця 3.5 - Призначення обробників подій модулів форми
AddDovMKH
Назва
|
Призначення
|
m_addClick
|
Виконання додавання
даних
|
m_cancelClick
|
Вихід із програми
|
FormActivate
|
Активація форми
|
Більш детально призначення обробників подій модулів форми
AddPacient описано в таблиці 3.6.
Таблиця 3.6 - Призначення обробників подій модулів форми
AddPacient
Назва
|
Призначення
|
m_exitClick
|
Закрити програму
|
FormShow
|
Підготовка форми до
відображення
|
m_add_pacClick,
|
Вставка інформації
про пацієнта
|
FormCreate
|
Підготовка форми до
відображення
|
SpeedButton_profClick,
SpeedButton_oblClick, SpeedButton_r_oblClick, SpeedButton_punktClick,
SpeedButton_r_punktClick
|
Відкриття довідника
|
c_sexChange,
c_osvChange, c_grChange, c_profChange, c_oblChange, c_r_oblChange,
c_nas_punktChange, c_r_nas_punktChange
|
Збереження ключу з
довідника
|
m_dd_iprClick
|
Виклик форми
додавання ІПР
|
Більш детально призначення обробників подій модулів форми
Avtoriz описано в таблиці 3.7.
Таблиця 3.7 - Призначення обробників подій модулів форми
Avtoriz
Назва
|
Призначення
|
m_exitClick
|
Закрити програму
|
m_enterClick
|
Війти в систему
|
FormCreate
|
Підготовка форми
|
RGClick
|
Відображення чи
приховування поля паролю
|
Більш детально призначення обробників подій модулів форми
Addpas описано в таблиці 3.8.
Таблиця 3.8 - Призначення обробників подій модулю Redpas
Назва
|
Призначення
|
m_exitClick
|
Закрити програму
|
m_enterClick
|
Війти в систему
|
Більш детально призначення обробників подій модулів форми
DataModule описано в таблиці 3.9.
Таблиця 3.9 - Призначення обробників подій форми DataModule
Назва
|
Призначення
|
DataModuleCreate
|
Підключення
компонентів
|
Більш детально призначення обробників подій модулів форми
Path описано в таблиці 3.10.
Таблиця 3.10 - Призначення обробників подій модулю PathEx
Назва
|
Призначення
|
FormShow
|
Підготовка форми до
відображення
|
zberejClick
|
Прийняття
налаштування
|
obzorClick
|
Закрити вікно
|
Більш детально призначення обробників подій модулів форми
Dob_IPR [12] описано в таблиці 3.11.
Таблиця 3.11 - Призначення обробників подій форми Dob_IPR
Назва
|
Призначення
|
DataModuleCreate
|
Підключення
компонентів
|
m_exitClick
|
Закрити програму
|
N2Click
|
Виклик форми
реабілітації
|
FormCreate
|
Підготовка форми
|
Memo1KeyPress..
Memo16KeyPress
|
Захист від
натискання всіх символів крім чисел 1,2 та 3.
|
DBNavigator1Click
|
Перехід на
відповідний компоненти мемо
|
m_addClick,
|
Запис інформації
|
r_potencialChange,
diagnozChange, c_pracChange, metaChange, s_zahChange, pr_sklChange
|
Збереження ключу з
довідника
|
sp_diagnozClick
sp_mkhClick sp_pracClick
|
Виклик довіднику
|
m_reabilClick
|
Перехід до форми
реабілітації
|
Більш детально призначення обробників подій модулів форми
Dovidnik описано в таблиці 3.12.
Таблиця 3.12 - Призначення обробників подій форми Dovidnik
Назва
|
Призначення
|
FormClose
|
Приховування
вкладок
|
BitBtn_add_mClick,
BitBtn_addClick,
|
Додати дані до
довідника
|
BitBtn_del_mClick,
BitBtn_delClick
|
Видалити дані із
довідника
|
BitBtn_red_mClick,
BitBtn_redClick
|
Редагувати дані
довідника
|
Більш детально призначення обробників подій модулів форми
IPRView описано в таблиці 3.13.
Таблиця 3.13 - Призначення обробників подій форми IPRView
Назва
|
Призначення
|
m_exitClick
|
Вихід із програми
|
m_redClick,
|
Форма редагування
|
FormCreate
|
Підготовка форми до
перегляду
|
m_excelClick
|
Експорт в Excel
|
m_obmejClick,
|
Показ панелі
обмежень
|
m_reabilClick,
|
Показ форми
реабілітацій
|
Більш детально призначення обробників подій модулів форми
Nastr описано в таблиці 3.14.
Таблиця 3.14 - Призначення обробників подій форми Nastr
Назва
|
Призначення
|
B_obzorClick
|
Вибір шляху
підключення до БД
|
Більш детально призначення обробників подій модулів форми
Reabil описано в таблиці 3.15.
Таблиця 3.15 - Призначення обробників подій форми Reabil
Назва
|
Призначення
|
m_exitClick
|
Вихід із програми
|
FormCreate
|
Підготовка форми до
перегляду
|
SetTree
|
Побудова дерева для
відображення даних довідника
|
B_mClick,
B_obClick, B_tClick
|
Перехід до довідника
для заповнення інформації
|
c_obmChange,
c_terminChange, c_miscChange
|
Запис
ідентифікатора
|
BitBtnAddClick,
m_addClick
|
Додавання
інформації про реабілітацію
|
TreeViewChange
|
Запис поточного
ідентифікатора заходу
|
Більш детально призначення обробників подій модулів форми
RedPac описано в таблиці 3.16.
Таблиця 3.16 - Призначення обробників подій форми RedPac
Назва
|
Призначення
|
m_exitClick,
|
Вихід із програми
|
m_red_pacClick,
|
Виконання
редагування даних пацієнта
|
FormActivate
|
Активація форми
|
SpeedButton_profClick,
SpeedButton_oblClick, SpeedButton_r_oblClick, SpeedButton_punktClick,
SpeedButton_r_punktClick
|
Виклик форми
довідника
|
Також у базі використовуються генератори для ключових полів,
які забезпечують унікальність та не повторюваність ключових полів. Таким чином
база даних була спроектована з урахуванням не надмірності даних, має ключові
поля та зовнішні ключі, відповідає вимогам нормалізації і є актуальною для
даного програмного продукту.
3.2 Експлуатаційна частина
3.2.1 Підготовка програми до
виконання
Програма підтримує можливість клієнт-серверного з’єднання з
базою даних. Сервер може бути локальним чи віддаленим, для цього потрібен
Firebird 2.5 або його бібліотека, яка називається GDS32.DLL. Для роботи
програми на сервері повинна бути розташована база даних із заповненими
довідниками, що поставляються в комплекті з програмою.
Програму можна запустити клацнувши на файл IPR.exe,
піктограма якого зображена на рисунку 3.43.
Рисунок 3.43 - Піктограма запуску IPR.exe
3.2.2 Інструкція користувача
Якщо при запуску програми база даних не буде знайдена, то
з’явиться вікно настройки шляху до бази даних, яке зображено на рисунку 3.44.
На ньому треба обрати шлях або натисканням на кнопку «Огляд» або ввівши шлях до
бази з клавіатури в поле для вводу. Далі з’являється вікно авторизації, де
потрібно обрати рівень доступу та залежно від цього виконати наступні дії. Якщо
користувач є адміністратором, то йому потрібно обрати радіокнопку
«Адміністратор», набрати пароль та натиснути пункт меню «увійти, як
адміністратор», якщо потрібно увійти звичайному користувачу, то він обирає
радіо кнопку «Гість» та натискає пункт меню «Увійти, як гість». При вірному
вводі пароля адміністратором або при натисканні пункту меню «Увійти, як гість»
з’явиться основне вікно програми.
Після успішного виконання цих дій відкриється основне вікно
програми, в якому головне місце займає таблиця, що відображає інформацію про
осіб-інвалідів, що зареєстровані в базі. Програма містить спливаючі підказки на
більшості елементів.
Для перегляду не всіх осіб, а тільки тих, що відповідають
вказаним критеріям, можна використати фільтри та пошук. Можна відфільтрувати
дані пацієнтів за статтю, групою інвалідності, областю проживання, рівнем
освіти та датою народження або знайти за ПІБ. Ці дії виконуються на панелі
пошуку. Панель пошуку можна показати чи скрити клацнувши на пункту головного
меню «Пошук». Також можна виконати фільтрацію записів за будь-яким полем в
таблиці, клацнувши на заголовок відповідного стовпця.
Кнопка «Відмінити фільтри» повертає таблицю до первинного
вигляду.
Запис нової інформації про особу-інваліда можна виконати
обравши пункт головного меню «Заповнити» та підпункт «Додати пацієнта». Або
клацнувши на першу кнопку панелі інструментів.
Також ця дія може бути виконана через контекстне меню «Додати
пацієнта», яке з’являється після кліку правою кнопкою миші по таблиці.
Після цього з’явиться вікно додавання інформації про нового
пацієнта. На цій формі треба ввести всі необхідні дані та натиснути «Додати»,
після чого стане активним пункт меню «Додати ІПР», до якого можна перейти далі.
Для того щоб виконати видалення інформації про певного пацієнта потрібно
скористатися пунктом контекстного меню «Видалити». Так як видалення
відбувається в каскадному режимі, то буде виведено попередження про це, після
підтвердження якого буде виконана операція видалення. Для того щоб редагувати
пацієнта потрібно скористатися пунктом меню «Редагувати», після чого з’явиться
вікно аналогічне вікну додавання, тільки з заповненими полями.
У вікно додавання нової ІПР можна також перейти із основної
форми через пункт головного меню «Заповнити», підпункт «Додати ІПР», або
клацнувши правою кнопкою миші в таблиці на головній формі та обравши пункт меню
«Додати ІПР»). Крім того, після вибору з випадаючого списку біля тих списків,
що зв’язані із довідниками, які може редагувати користувач, з’являється кнопка для переходу до відповідного
довіднику, що дозволяє додати інформацію до довіднику.
Вікно додавання нової ІПР. Після натискання кнопки «Зберегти»
буде виведено повідомлення про результат виконання операції додавання. Після
цього стане активним пункт меню «Перейти до реабілітаційних заходів».
Вікно додавання реабілітаційних заходів зображено на рисунку
3.55, воно містить пункт меню «Зберегти». На дереві потрібно обрати
реабілітаційний захід та справа у випадаючому списку обрати термін
реабілітації, обсяг реабілітації та місце реабілітації, після чого натиснути на
кнопку або на пункт меню. Крім того, після вибору з випадаючого списку біля тих
них з’являється кнопка для переходу до відповідного довіднику, що дозволяє додати
інформацію до довіднику.
Можна переглянути вже додані ІПР, клацнувши на головній формі
на другій іконці .
На формі пункт меню «Редагувати» відкриває форму, ідентичну
формі додавання, на якій вже заповнені поля відповідно до вибраного запису.
Пункт меню «Видалити» дозволяє видалити обраний запис після
підтвердження.
Пункт меню «Обмеження» дозволяє скрити чи відкрити панель
обмежень.
Пункт меню «Реабілітаційні заходи» дозволяє відкрити вікно
реабілітаційних заходів і додати чи відредагувати їх для вибраної ІПР.
Пункт меню «Експортувати в Excel» призначене для того, щоб
зробити вигрузку даних у документ.
Для роботи з довідниками треба у головному пункті меню
«Довідники» клікнути на назву довідника, який треба відкрити, після цього
з’явиться вікно.
Для того, щоб додати запис у довідник, треба клацнути на
кнопку «Додати» та у вікні, ввести дані.
Для додавання інформації у довідник треба ввести значення та
натиснути на кнопку «Зберегти», після чого буде виведено повідомлення про
успішність виконання запису даних.
На формі «Довідник» пункт меню «Редагувати» відкриває таке ж
вікно, як і «Додавання в довідник», але із заповненим полем, яке можна змінити
та зберегти ці зміни в записі.
Пункт меню «Видалити» вікна «Довідник» дозволяє видалити з
довідника потрібний запис. При натисканні на цей пункт з’явиться попередження
про те, що видалення відбудеться в каскадному режимі, після підтвердження
відбудеться видалення.
Якщо треба редагувати запис пацієнта, то потрібно обрати на
основному вікні відповідний запис з інформацією про пацієнта та натиснути на
панелі інструментів на кнопку або в контекстному меню обрати пункт меню «Редагувати»,
після чого буде відкрите вікно редагування пацієнта, де можна змінити дані та
зберегти їх.
Якщо треба переглянути інформацію про програму, то на
основній формі треба клацнути на пункті меню «Про програму», після чого
з’явиться вікно «Про програму».
Щоб змінити шлях збереження документів, що формуються в
програмі, потрібно на основній формі в головному меню натиснути на пункт меню
«Налаштування» після чого з’явиться вікно.
Якщо користувач є адміністратором, то він може змінити
пароль, для цього потрібно обрати пункт головного меню «Авторизація» та
підпункт «Змінити пароль», після чого з’явиться вікно. Треба ввести старий
пароль та новий, після чого з’явиться вікно з повідомленням результату
операції.
Для зміни ролі потрібно обрати пункт меню «Авторизація» та
натиснути підпункт «Вийти», після чого користувач побачить вікно авторизації.
Для того щоб вийти із програми потрібно на основній формі
натиснути на пункт меню «Вийти».
.2.3 Опис критичних ситуацій та
повідомлень програми
При написанні скільки-небудь складних програм помилки є
неминучими, тому процес налагодження програми є одним із найважливіших етапів у
розробці програмного забезпечення. Під час написання даного проекту виникали
деякі критичні ситуації.
Прикладом логічної помилки служить, наприклад, випадок, коли
в процесі запису даних у змінну s був записаний шлях збереження файлу, а потім
вона була перезаписана іншим значенням до того, як файл було записано.
Відлагодження цієї помилки приведено в розділі «Опис процесу
налагодження програми».
Іншим прикладом є неправильний шлях для збереження
сформованого документу.
Ще одним прикладом є помилка несумісності форматів дати та
поля, з яким вона порівнювалась.
3.2.4 Опис процесу налагодження
програми
Хоча помилки і виникають у будь-якій програмі, їх можна
вирішити. Це трудомісткий процес, який є обов’язковим етапом життєвого циклу
програмного забезпечення.
Помилки описані в попередньому пункті вирішені відповідно
додаванням нової змінної та записом кожного значення у свою змінну, додаванням
можливості користувачу задати шлях для збереження довідок через вікно
налаштувань та приведенням типу поля дати до строкового через функцію
«DateToStr()».
Отже контроль даних повинен забезпечуватися:
- перевіркою припустимості введеного
символу, наприклад, у полі поштового індексу можна вводити тільки цифри, ввести
літеру неможливо;
- перевіркою діапазону для числових
значень (кількості тощо) наприклад, при додаванні ступенів обмеження
життєдіяльності користувач може ввести тільки цифри 1,2,3, ввід інших символів
не дозволяється,;
- перевіркою відповідності дати,
наприклад, дата народження передбачає, що дата є дійсною і що користувачу не
більше 125 років, що є достатнім запасом і дозволить виключити помилки вказання
занадто великого віку ;
- виборі даних з таблиці, тобто дані
занесені у довідник обираються із простого випадаючого списку і тому
скорочуються помилки.
4. ЕКОНОМІЧНА ЧАСТИНА
Згідно із завданням дипломного проекту необхідно визначити
собівартість і ціну програми автоматизації ведення бази даних індивідуальної
реабілітації інвалідів IPR. Для виконання розрахунку були використані початкові
дані, представлені в таблиці 4.1.
Таблиця 4.1 - Початкові дані для розрахунку
Найменування
початкових даних
|
Показник
|
Джерело отримання
|
1 Трудомісткість
складання програми
|
25 днів
|
Фактичні витрати
часу на розробку програми
|
2 Місячна ставка
оператора - укладача програми
|
5000 грн.
|
Дані переддипломної
практики
|
3 Кількість годин в
місяці
|
200 год.
|
Кількість робочих
днів - 25
|
4 Додаткова
зарплата
|
10%
|
Дані переддипломної
практики
|
5 Відрахування до
соціальних фондів
|
20%
|
Дані переддипломної
практики
|
6 ПДВ (податок на
додану вартість)
|
46%
|
Дані переддипломної
практики
|
Стаття 1. Матеріали - не використовуються.
Стаття 2. Комплектуючі вироби.
В таблиці 4.2 наведені комплектуючі вироби необхідні для
виконання роботи.
Таблиця 4.2 - Комплектуючі вироби
Найменування виробу
|
Ціна виробу, грн
|
Кількість виробів,
шт.
|
Сума,грн
|
CD компакт-диск
|
7,00
|
1
|
7,00
|
Разом:
|
|
|
7,00
|
, (4.1)
де - витрати на комплектуючі вироби, грн.;
- ціна за 1 одиницю комплектуючих виробів, грн.;
- кількість комплектуючих виробів по кожному типорозмірі, шт.
Витрати на матеріали й комплектуючі вироби в планову
виробничу собівартість не входять, а оплачуються замовником додатково при
заміні окремих комплектуючих виробів.
Стаття 3. Основна заробітна плата:
, (4.2)
де - годинна тарифна ставка оператора, грн.;
- кількість годин у місяці, приймається 200 год. - вихідні
дані.
Визначаємо годинну тарифну ставку оператора:
, (4.3)
де - місячна ставка оператора, грн.
Стаття 4. Додаткова заробітна плата:
, (4.4)
де - додаткова заробітна плата, грн.;
- відсоток додаткової заробітної плати, приймається 10% -
вихідні дані.
Стаття 5. Відрахування в соціальні фонди:
, (4.5)
де - відрахування в соціальні фонди, грн.;
- відсоток відрахувань у соціальні фонди, приймається 20% -
вихідні дані.
Стаття 6. Загальновиробничі витрати:
, (4.6)
де - загальновиробничі витрати, грн.;
- відсоток загальновиробничих витрат, приймається 100% -
вихідні дані.
Виробнича собівартість:
, (4.7)
Прибуток підприємства:
, (4.8)
де - прибуток підприємства, грн.;
- відсоток прибутку підприємства, приймається 10% - вихідні
дані.
Ціна підприємства:
, (4.9)
де - ціна підприємства, грн.
Податок на додану вартість:
, (4.10)
де - відсоток податку на додану вартість,
приймається 46% - діюча ставка на сучасний момент.
Ціна для замовника:
, (4.11)
Таблиця 4.3 - Планова калькуляція виробничої собівартості,
ціни підприємства й ціни для замовника на виконання розробки програми
Статті калькуляції
|
Сума, грн.
|
Стаття 1 Матеріали
|
-
|
Стаття 2
Комплектуючи вироби
|
7
|
Стаття 3 Основна
заробітна плата
|
5000
|
Стаття 4 Додаткова
заробітна плата
|
500
|
Стаття 5
Відрахування в соціальні фонди
|
1100
|
Стаття 6
Загальновиробничі витрати
|
5000,00
|
Виробнича
собівартість
|
11600,00
|
Прибуток
підприємства
|
1160,00
|
Ціна підприємства
|
12760,00
|
Податок на додану
вартість
|
5869,60
|
Ціна для замовника
|
18629,6
|
Висновок: таким чином розрахунок показав, що собівартість
програми автоматизації ведення бази даних індивідуальної реабілітації інвалідів
IPR складає 11600,00 грн., якщо коледж продаватиме цю програму, то її ціна для
споживача складе 18629,60 грн. При цьому з кожного екземпляра проданої програми
коледж матиме прибуток 1160,00 грн.
5. ОХОРОНА ПРАЦІ
Охорона праці - це система правових,
соціально-економічних, організаційно-технічних, санітарно-гігієнічних та
лікувально-профілактичних заходів і засобів, спрямованих на збереження здоров'я
та працездатності людини в процесі праці.
Відповідно до статті 18 Закону
України "Про охорону праці", працівник зобов'язаний "знати і
виконувати вимоги нормативних актів про охорону праці, правила поводження з
машинами, механізмами, устаткуванням та іншими засобами виробництва,
користуватися засобами колективного та індивідуального захисту, проходити у
встановленому порядку попередні та періодичні медичні огляди".
У даному розділі "Охорона
праці" поряд з теоретичними основами, з достатньою повнотою, розглянуті
організаційні питання охорони праці, пожежної безпеки, електробезпечності, а
також приведені вимоги, методи і засоби, що забезпечують безпеку праці.
.1 Вимоги під час експлуатації ПК.
Вплив електронно-обчислювальних машин на стан здоров'я користувачів
Впровадження ПК у різні галузі виробництва позитивно вплинуло
на умови праці, її якість та продуктивність. Разом з тим робота на ПК має низку
чинників, які у разі порушення правил експлуатації можуть негативно впливати на
стан здоров'я користувачів.
Основними проявами їх впливу с зоровий дискомфорт. Він
проявляється як біль в очах, почервоніння повік і очних яблук, відчуття піску в
очах, головний біль, подвоєння предметів, швидка втома. Кістково-м'язовий
дискомфорт проявляється у вигляді болю різної сили у суглобах та м'язах,
скутості, втоми, судоми, оніміння тощо. Частіше кістково-м'язовий дискомфорт
проявляється у людей старшої вікової категорії. Також монітор і ПК зумовлюють
захворювання шкіри. Вони проявляються у вигляді висипу, лущення, рожевих
вугрів, деяких видів дерматитів. Стресові чинники, до яких належать
несприятливі умови та режим праці, зміст праці, здібності працівника, його
сподівання, звички, умови життя, можуть стати причиною виникнення фізіологічних
і психологічних змін, погіршення здоров'я та змін у поведінці людини.
Фізіологічні порушення можуть супроводжуватись розладами шлунково-кишкового
тракту, змінами функцій серцево-судинної системи тощо. До психологічних та
поведінкових розладів належать нервозність, роздратування, тривога, порушення
сну, втрата апетиту, швидкий розвиток втоми.
Користувачі повинні знати потенційно шкідливі та небезпечні
виробничі чинники під час роботи за ПК та виконувати вимоги НПАОП 0.00-1.28-10
«Правила охорони праці під час експлуатації електронно-обчислювальних машин» і
ДСанПіН 3.3.2.007-98 «Державні санітарні правила і норми роботи з візуальними
дисплейними терміналами ЕОМ» та інших нормативних документі» щодо виключення
або зменшення їх негативного виливу.
5.2 Шкідливі та небезпечні чинники
під час експлуатації електронно-обчислювальних машин
Потенційно шкідливими та небезпечними чинниками під час
роботи за ПК являються фізичні фактори:
- підвищений рівень «м'якого»
рентгенівського випромінювання;
- підвищений рівень електромагнітного
випромінювання радіочастотного діапазону;
- підвищений рівень інфрачервоного та
ультрафіолетового випромінювання;
- підвищений рівень шуму та вібрації на
робочих місцях;
- підвищене значення напруги в
електричній мережі, замикання якої може відбутися через тіло людини; підвищений
рівень статичної електрики;
- підвищені або понижені температура,
відносна вологість та швидкість руху повітря робочої зони; підвищена
запиленість і загазованість повітря робочої зони; підвищений або понижений вміст
позитивних і негативних аероіонів у повітрі робочої зони;
- недостатня освітленість робочої зони;
підвищена яскравість світла; понижена контрастність між об'єктом і фоном;
прямий та віддзеркалений відблиск; підвищена пульсація світлового потоку;
Хімічні фактори:
- підвищений вміст у повітрі робочої
зони озону й аміаку.
Психофізіологічні фактори:
- надмірні статичні та динамічні
навантаження;
- розумове перенавантаження;
перенавантаження аналізаторів;
- монотонність праці; надмірні емоційні
навантаження;
- нераціональна організація робочого
місця;
Біологічні фактори:
- підвищений вміст мікроорганізмів у
повітрі робочої зони
Кожний із наведених чинників може зумовити небажані наслідки
впливу ПК на здоров'я користувачів, а їх сумісна дія підсилити цей вплив.
5.3 Вимоги до приміщень, розміщення
в них моніторів, ПК та організації лінії робочих місць
Об'ємно-планувальні рішення будівель і приміщень для роботи з
ПК мають відповідати вимогам чинних нормативних актів, зокрема СНиП 2.09.04-87
«Адміністративні та побутові будівлі», ДСанПіН 3.3.2.007-98, НПАОП 0.00-1.28 10
та іншим і мати ступінь вогнестійкості не нижчу II.
Заборонено розміщувати робочі місця для ПК у підвальних
приміщеннях, на цокольних поверхах, поряд з приміщеннями, в яких рівні шуму та
вібрації перевищують допустимі значення (поряд з механічними цехами,
майстернями тощо), з мокрими виробництвами, з вибухопожежонебезпечними
приміщеннями категорій А і Б, а також над такими приміщеннями або під ними.
Площу приміщень визначають із розрахунку, що на одне робоче
місце вона має становити не менше ніж 6 м2 а об'єм не менше ніж 20 м2 з
урахуванням максимальної кількості осіб, які одночасно працюють у зміні.
Приміщення мають бути оснащені природним і штучним
освітленням відповідно до ДБН В.2.5-28-2006. Природне освітлення має
здійснюватись через світлові прорізи, які орієнтовані переважно на північ чи
північний схід і обладнані регулювальними пристроями відкривання та жалюзями,
завісками, зовнішніми козирками. Приміщення мають бути обладнані системами
водяного опалення, кондиціонування або припливно-витяжною вентиляцією
відповідно до СНиП 2.04.05-91. Заземлені конструкції приміщення (батареї
опалення, водопровідні труби, кабелі з заземленим відкритим екраном тощо)
надійно захищають діелектричними щитками або сітками від випадкового дотику.
Приміщення можна обладнувати шафами для зберігання документів
і магнітних дисків, полицями, стелажами, тумбами тощо з урахуванням вимог до
площі приміщень. У цих приміщеннях має бути аптечка та потрібно проводити
щоденне вологе прибирання.
Для всіх споруд і приміщень, у яких експлуатують ПК
визначають категорію з вибухопожежної та пожежної безпеки відповідно до ОНТП
24-86 «Визначення категорії приміщень і будівель з вибухопожежної та пожежної
небезпеки » і НАПБ В.01.053-2000/520 «Правила пожежної безпеки в галузі
зв'язку» та клас вибухонебезпепечних зон відповідно до НПАОП 0.00-1.32-01
«Правила будови електроустановок. Електрообладнання спеціальних установок».
Відповідні позначення наносять на вхідні двері приміщення. Крім того,
приміщення з моніторами, ПК оснащують системою пожежної сигналізації з димовими
пожежними сповіщувачами та переносними вуглекислотними вогнегасниками з
розрахунку 2 од. на кожні 20 м2 площі приміщення. Підходи до засобів
пожежогасіння мають бути вільними.
Поряд із приміщеннями з моніторами мають бути обладнані
побутові приміщення для відпочинку, приймання їжі, психологічного розвантаження
та інші приміщення.
За розміщення робочих місць з моніторами і ПК потрібно
витримувати такі відстані: від стін зі світловими прорізами не менше 1 м; між
бічними поверхнями моніторів не менше 1,2 м; між тильною поверхнею одного
монітора та екраном іншого не менше 2,5 м; прохід між рядами робочих місць не
менше 1 м.
Робочі місця з моніторами щодо світлових прорізів розміщують
так. щоб природне світло падало збоку, переважно зліва.
Екран моніторами і клавіатура мають розміщуватися на
оптимальний відстані від очей користувача, але не ближче 600 мм з урахуванням
розміру алфавітно-цифрових знаків і символів. Відстань від екрана до ока
працівника має бути залежно від діагоналі екрана для 35/38 см
(14"/15") - 600...700 мм.
Розміщення екрана монітора має забезпечувати зручність
зорового спостереження у вертикальній площині під кутом ±30° від лінії зору
працівника.
Обладнання й організація робочих місць з монітором і ПК мають
забезпечувати відповідність усіх елементів робочого місця та їх розміщення
ергономічним вимогам ГОСТ 12.2.032 78 «ССБТ. Робоче місце при виконанні робіт
сидячи. Загальні ергономічні вимоги», характеру й особливостям діяльності.
Конструкція робочого місця має забезпечити підтримання оптимальної робочої пози
й оптимальне розміщення на робочій поверхні використовуваного обладнання
(дисплея, клавіатури, принтера) та документів.
5.4 Вимоги до виробничого середовища
приміщень з монітором і ПК
Згідно з Гігієнічною класифікацією праці за показниками
шкідливості та небезпечності чинників виробничого середовища, тяжкості та
напруженості трудового процесу умови праці користувачів ПК мають відповідати І
класу (оптимальним) або II класу (допустимим) умовам праці.
Приміщення з монітором, ПК мають бути забезпечені природним і
штучним освітленням. Коефіцієнт природного освітлення (КПО) має бути не нижчим
1,5%. Розраховують площу світлових прорізів, яка забезпечує нормоване значення
КПО в робочій зоні користувачів комп'ютерів, відповідно до ДБН В.2.5-28-2006.
Штучне освітлення має бути загальним, робочим і рівномірним.
У випадку, коли робота переважно з документами, допускається додатково
використовувати місцеве освітлення.
Систему загального освітлення має бути виконано у вигляді
суцільних або переривчатих ліній світильників, що розмішують збоку від
виробничих місць (переважно зліва), паралельно лінії зору працівників.
Допускається застосовувати світильники таких класів світлорозподілу:
світильники прямого світла - П; переважно прямого світла - Н; переважно
відбитого світла - В.
Для забезпечення нормованих значень освітлення в приміщеннях
з моніторами і ПК потрібно очищати скло та світильники не рідше ніж 2 рази на
рік і своєчасно проводити заміну перегорілих ламп.
Уміст шкідливих речовин у повітрі робочої зони не має
перевищувати ГДК Відповідно до ГОСТ 12.1.005 - 88 уміст озону не більше 0,1
мг/м3, вміст оксидів азоту - не більше 5 мг/м3. уміст пилу - не більше 4 мг/м3.
Параметри мікроклімату мають відповідати вимогам ДСН
3.3.6.042, а іонний склад повітря - вимогам СН 2152 - 80. Оптимальні вимоги для
приміщень з моніторами і ПК приведені в таблицях 5.1, 5.2 та 5.3.
Таблиця 5.1 - Оптимальні величини температури, відносної
вологості та швидкості руху повітря для приміщень з моніторами і ПК
Період року
|
Категорія робіт
|
Температура
повітря, °С
|
Відносна вологість
повітря, %
|
Швидкість руху
повітря, м/с
|
холодний
|
легка - 1 а
|
22 - 24
|
40-60
|
0,1
|
|
легка - 16
|
21 - 23
|
40 60
|
0,1
|
теплий
|
легка - 1а
|
23 - 25
|
40 60
|
0,1
|
|
легка - 16
|
22 - 24
|
40-60
|
0,2
|
Таблиця 5.2 - Рівні іонізації повітря приміщень під час
роботи з монітором і ПК
Рівні
|
Кількість іонів у 1
см3 повітря
|
|
n+
|
n-
|
Мінімально
необхідні
|
400
|
600
|
Оптимальні
|
1500-3000
|
3000-5000
|
Максимально допустимі
|
50000
|
50000
|
Таблиця 5.3 - Допустимі рівні звуку, еквівалентні рівні
звуку, рівні звукового тиску в октавних смугах частот
Види трудової
діяльності
|
Рівні звукового
тиску, дБ, в октавних смугах із середньо геометричними частотами, Гц
|
Рівні звуку, еквівалентні
рівні звуку, дБА/дБАекв
|
|
31.5
|
63
|
125
|
250
|
500
|
1000
|
2000
|
4000
|
8000
|
|
Програмісти ПК
|
86
|
71
|
61
|
54
|
49
|
45
|
42
|
40
|
38
|
50
|
Оператори в залах
оброблення інформації на ПК та оператори комп'ютерного набору
|
96
|
83
|
74
|
68
|
63
|
60
|
57
|
55
|
54
|
65
|
Для підтримання оптимальних значень параметрів повітря
робочої зони потрібно застосовувати вентиляцію приміщень, кондиціонування
повітря, використовувати установки або прилади зволожування та штучної
іонізації. У приміщеннях з ПК рівні звукового тиску, рівні звуку та еквівалентні
рівні звуку мають відповідати вимогам ДСН 3.3.6.037-99 та ДСанПіН 3.3.2.007 98.
Устаткування, яке є джерелом шуму (АЦП, принтери тощо), слід розташовувати поза
приміщеннями з ПК.
Для забезпечення допустимих рівнів шуму на робочих місцях
потрібно застосовувати засоби звукопоглинання, вибір яких обґрунтовано
спеціальними інженерно-акустичними розрахунками. Як засоби шумопоглинання
застосовують негорючі або важкогорючі спеціальні перфоровані плити, панелі,
мінеральну вату з максимальним коефіцієнтом звукопоглинання в границях частот
31,5...8000 Гц або інші матеріали аналогічного призначення, які дозволені для
оздоблення приміщень органами державного санітарно-епідеміологічного нагляду.
Крім того, приміщення потрібно обладнувати підвісними стелями із матеріалів,
які мають аналогічні властивості.
Рівні вібрації під час виконання робіт на ПК у виробничих
приміщеннях не мають перевищувати допустимих значень, які визначені ДСанПіН
3.3.2.007-98.
Рівень інфрачервоного випромінювання має відповідати вимогам
ДСН 3.3.6.042-99 і не перевищувати 35-100 Вт/м2 залежно від опромінюваної площі
тіла.
Допустима інтенсивність ультрафіолетового випромінювання не
має перевищувати величини, які визначені СН 4557-88 та ДСанПіН 3.3.2.007-98:
- випромінювання в області С (220...280
нм) - 0.001 Вт/м2;
- в області В (280...320 нм) - не
перевищувати 0,01 Вт/ м2;
- в області А (320...400 нм) - 10,0
Вт/м2.
Значення напруженості електромагнітних полів на робочих
місцях із монітором мають відповідати нормативним значенням ГОСТ 12.1.006-84 і
ДСанПіН 3.3.2.007-98. Допустимі рівні електромагнітних випромінювань
радіочастотного діапазону відображені в таблиці 5.4.
Таблиця 5.4 - Допустимі рівні електромагнітних випромінювань
радіочастотного діапазону
Діапазон частот,
МГц
|
Допустимі рівні ЕМП
|
|
Електрична складова
Е, В/м
|
Магнітна складова
Н, А/м
|
0.06...3,0
|
50
|
5
|
3.0...30,0
|
20
|
-
|
30.0...50.0
|
10
|
0.3
|
50,0...300,0
|
5
|
-
|
Захист від дії електромагнітних випромінювань радіочастотного
діапазону наведений в попередніх розділах підручника.
Гранично допустима напруженість електростатичного поля на
робочих місцях не має перевищувати 20 кВ/м (ГОСТ 12.1.045 84, ДСанПіН
3.3.2.007-98). Поверхневий електростатичний потенціал ВДТ не має перевищувати
500 В.
Потужність експозиційної дози рентгенівською випромінювання
на відстані 0,05м від екрана та корпуса монітора за будь-яких положень
регульованих пристроїв не має перевищувати 7.74·10-12 А/кг, що відповідає
еквівалентній дозі 0,1 мбер/год (100 мкР/гол) (НПАОГІ 0.00-1.28-10).
5.4.1 Забезпечення електробезпеки
під час експлуатації електронно-обчислювальних машин
За способом захисту людини від ураження електричним струмом
монітора і ПК периферійні пристрої ПК і устаткування для обслуговування,
ремонту і налагодженню ПК мають відповідати 1 класу захисту або бути
заземленими відповідно до НПАОП 0.00-1.28-10.
Електромережа живлення має бути трипровідною з фазовим,
нульовим робочим і нульовим захисним провідниками, площа перерізу яких має бути
не меншою площі перерізу фазового провідника. Нульовий захисний провідник
використовують для заземлення електрообладнання, але використовувати, як
нульовий робочий його не можна. Підключення нульового робочого і нульового
захисного провідників до одного контактного затискача щита живлення заборонено.
Усі провідники мають відповідати номінальним параметрам мережі, її
навантаженню, умовам навколишнього середовища,температурному режиму, типам
апаратури та вимогам ПУЕ.
У приміщенні, де одночасно експлуатують або обслуговують
більше п’яти ПК, встановлюють аварійний вимикач, який може вимкнути
електроживлення всього приміщення за винятком освітлення. Штепсельні з’єднання
й електророзетки мають бути зі спеціальними контактами для підключення
нульового захисного провідника. їх конструкція має забезпечити приєднання
нульового захисного провідника раніше ніж приєднання фазового та нульового
робочого. Порядок їх роз'єднання у разі відключення має бути зворотним. Слід
унеможливити з'єднання контактів фазового та нульового захисного провідників.
Недопустимим є підключення ПК, периферійних пристроїв ПК і устаткування для
обслуговування, ремонту та налагодження ПК до звичайної двопровідної
електромережі, в тому числі й з використанням перехідних пристроїв.
Якщо ПК, периферійні пристрої та устаткування розташовують
уздовж стін приміщення, то електромережу для їх живлення прокладають підлогою
поряд із стінами у металевих трубах і гнучких рукавах відповідно до
затвердженого плану. У разі розташування ПК у центрі приміщення електромережу
живлення прокладають під знімною підлогою в металевих трубах і гнучких
металевих рукавах, які заземлюють. Заборонено відкрите прокладання кабелів,
застосування проводів і кабелів в ізоляції з вулканізованої гуми та інших
матеріалів, які містять сірку. Отвори в плитах для прокладання кабелів
електроживлення виконують безпосередньо в місцях встановлення устаткування.
5.5 Режим праці та відпочинку
користувачів ПК
Для збереження здоров'я користувачів моніторів і ПК,
запобігання професійним захворюванням і підтримки працездатності впродовж
робочої зміни передбачають:
- перерви для відпочинку та вживання
їжі (обідні перерви), які визначені чинним законодавством про працю і
«Правилами внутрішнього трудового розпорядку» підприємства, організації,
установи;
- перерви для відпочинку та особистих
потреб (згідно з трудовими нормами);
- додаткові перерви, що вводять для
окремих професій з урахуванням особливостей трудової діяльності.
Згідно з діючим класифікатором професій для розробників
програм (інженерів-програмістів) за 8-годиннної денної робочої зміни
призначають регламентовані перерви для відпочинку тривалістю 15 хв через кожну
годину роботи за монітором;
У всіх випадках, коли виробничі обставини не дають змоги
застосовувані регламентовані перерви, тривалість безперервної роботи з
монітором не має перевищувати 4 годин.
За 12-годинну робочу зміну регламентовані перерви
встановлюють в перші 8 годин роботи аналогічно перервам за 8-годинну робочу
зміну, а протягом останніх 4-х годин роботи незалежно від характеру трудової
діяльності через кожну годину тривалістю 15 хв.
5.6 Вимоги до обладнання
Монітори, спеціальні периферійні пристрої ПК і устаткування
для обслуговування, ремонту та налагодження ПК мають відповідати вимогам чинних
в Україні стандартів та нормативних актів з охорони праці. Аналогічне
обладнання закордонного виробництва додатково має відповідати вимогам
стандартів держав-виробників і мати про це відповідну позначку на корпусі, у
паспорті або іншій експлуатаційній документації та сертифікат України, що
засвідчує його відповідність вимогам щодо забезпечення безпеки праці, життя і
здоров'я людини. Без наявності сертифіката, інструкції, іншої експлуатаційної
документації заборонено використовувати для виробничих потреб нове обладнання
закордонного виробництва.
Вимоги щодо неонізуючого електромагнітного випромінювання:
- напруженість електромагнітного поля
на відстані 50 см навкруги монітор за електричною складовою не має перевищувати
у діапазоні частот 2...5 кГц - 25 В/м, а у діапазоні частот 2...400 кГц - 2.5
В/м;
- щільність магнітного потоку не має
перевищувати: у діапазоні частоті 2...5 кГн - 250 нТл; а у діапазоні частот
2...400 кГн - 25 нТл;
- поверхневий електростатичний
потенціал не має перевищувати 500 В;
- потужність дози рентгенівського
випромінювання на відстані 5 см від екрана та інших поверхонь моніторів не мас
перевищувати 100 мкР/год.
5.7 Безпека під час експлуатації
портативних комп'ютерів
В умовах виробництва, в побуті, в навчальному процесі та
інших випадках, крім стаціонарних, широко використовують і портативні
комп'ютери. Зручність полягає в тому, що їх можна взяти з собою. Це дає змогу
оперативно накопичувати, зберігати опрацьовувати, транспортувати та видавати
інформацію безпосередньо на непостійних робочих місцях.
Портативні комп'ютери мають свої специфічні конструктивні
особливості та умови застосування. Основними із них є брак
електронно-променевої трубки; наявність плоского екрана на основі рідких
кристалів, що не генерують деякі шкідливі випромінювання; можливість живлення
від двох незалежних джерел від електричної мережі та від акумуляторної батареї;
можливість використання в приміщеннях та поза їх межами; компактність,
транспортабельність невеликі вага та габарити тощо.
Їх можна експлуатувати в діапазоні змін температур від 0 до
35 °С, як і стаціонарні ПК.
Слід зазначити, що параметри електромагнітних випромінювань
портативних комп'ютерів можуть перевищувати відповідні параметри комп'ютерів з
електронно-променевою трубкою, а тому за рівнем негативного впливу на
користувача вони нічим не відрізняються. Твердження про безпеку портативних комп'ютерів
за показниками цих випромінювань передчасні.
Внутрішні та зовнішні оптичні накопичувачі портативних
комп'ютерів мають лазерні пристрої першого класу небезпеки. У процесі
установлення, регулювання, настроювання та відкриття може з'явитись невидиме лазерне
випромінювання, яке може спричинити вилив лазерної радіації. Заборонено
придивлятися до лазерного променя та дивитись на джерело випромінювання за
допомогою оптичних пристроїв.
Живлення комп'ютерів здійснюється від мережі змінного струму
напругою 220 В частотою 50 Гц або від акумуляторної батареї, розмішеної в
корпусі.
Підключають їх до електричної мережі через універсальний
адаптер мережі без застосування додаткових трансформаторів або перемикачів па
допомогою екранного провідника, який входить до складу комплекту поставки.
Вилка провідника може мати 2 або 3 штирі. За допомогою третього штиря
підключають додатковий заземлюваний провідник для заземлення комп'ютера. Для
зменшення ризику ураження електричним струмом заборонено користуватись
портативним комп'ютером біля води, у вологому приміщенні (наприклад, підвалі)
та під час грози (є ризик ураження блискавкою). Інші заходи електробезпеки такі
ж, як під час експлуатації стаціонарних комп'ютерів.
Заборонено використовувати акумулятори від іншого обладнання.
У разі неправильної заміни можливі небажані наслідки (вибух).
Ідеальною температурою для роботи акумулятора є 10...29 °С.
Інша температура зменшує термін його експлуатації. Акумулятор починає
заряджатися, як тільки комп'ютер підключають до зовнішнього джерела живлення.
Використані акумулятори слід утилізувати відповідно до вимог виробника
Заборонено кидати їх у полум'я, щоб уникнути можливого вибуху.
У портативних комп'ютерах, як і у стаціонарних,
використовують світлову сигналізацію. Під час роботи комп'ютера світиться
індикатор живлення. Коли комп'ютер перебуває в режимі енергозбереження, він
блимає. Індикатор «не світиться, коли комп'ютер вимкнений або перебуває у
«режимі сну». Світлову сигналізацію використовують і за інших режимів роботи.
Вимкнений щойно комп'ютер можна вмикати не раніше ніж через 5с, щоб уникнути
ушкодження жорсткою диску. Перед тим, як чистити комп'ютер, слід застосувати
додаткові запобіжні заходи: вимкнути його з мережі та вийняти акумулятор.
Портативні комп'ютери потрібно оберігати від впливу статичної
електрики, магнітних полів, сонячних променів, сильних вібрацій та інших
впливів.
Під час експлуатації заборонено: встановлювати комп'ютер на
нерівну та нестійку поверхню; тиснути на поверхню екрана та торкатися до нього,
залишати увімкнений комп'ютер на колінах та інших частинах тіла, щоб запобігти
неприємним відчуттям та опікам від тепла, що виділяється; затуляти канали
вентиляції, щоб не зумовити перегрівання; піддавати впливу високих (понад 50
°С) та низьких (нижче 0 °С) температур, щоб уникнути
можливого: незавантаження; транспортувати із увімкненим живленням; виймати
акумулятор за увімкненого живлення, що може спричинити втрату даних;
користуватись безпосередньо біля місць витоку газу.
Комп'ютер, коли за ним не працюють, зберігають закритим,
транспортую його тільки із щільно закритою кришкою.
Таким чином, під час експлуатації портативних комп'ютерів
потрібно виконувати вимоги безпеки, які застосовують під час роботи зі
стаціонарними комп'ютерами та додаткові, що враховують особливості їх
конструкції та умови використання.
5.8 Розрахунок захисту від
шкідливого виробничого фактору
Проведемо розрахунок освітлення для
кімнати площею 36 м2, ширина якої 4.9 м, а висота 4.2 м. Скористаємося методом
світлового потоку.
Для визначення кількості світильників
визначимо світловий потік,що падає на поверхню. Роботу програміста, згідно з
таблицею, можна віднести до розряду точних робіт, отже, мінімальна освітленість
буде Е = 300 Лк при газорозрядних лампах;- площа освітлюємого приміщення = 36 м2);-
відношення середньої освітленості до мінімальної (звичайно приймається рівним
1.1-1.2, нехай Z = 1.1);
К - коефіцієнт запасу, що враховує
зменшення світлового потоку лампи в результаті забруднення світильників у
процесі експлуатації (його значення визначається по таблиці коефіцієнтів запасу
для різних приміщень, в нашому випадку К = 1.5);- коефіцієнт використання,
(виражається відношенням світлового потоку,що падає на розрахункову поверхню,
до сумарного потоку всіх ламп і обчислюється в частках одиниці, залежить від
характеристик світильника, розмірів приміщення, фарбування стін і стелі, якi
характеризуються коефіцієнтами відображеннявід стін (Рс) і стелі (Рп)),
значення коефіцієнтів Рс і Рп визначимо по таблиці залежностей коефіцієнтів
відображення від характеру поверхні Рс = 30%, Рп = 50%. Значення n визначимо по
таблиці коефіцієнтів використання різних світильників. Для цього обчислимо
індекс приміщення за формулою:
Де F - розраховується світловий потік, Лм;
Е - нормована мінімальна
освітленість, Лк (визначається за таблицею).
Рс = 30%, Рп = 50%. Значення n
визначимо по таблиці коефіцієнтів використання різних світильників. Для цього
обчислимо індекс приміщення за формулою:
де S - площа приміщення, S = 36 м2;
h - розрахункова висота підвісу,
h = 3.39 м;- ширина приміщення, А = 4.9 м;
В - довжина приміщення, В = 7.35
м.
Підставивши значення отримаємо:
Знаючи індекс приміщення I, Рс і Рп,
за таблицею знаходимо n = 0.28.
Для освітлення вибираємо
люмінесцентні лампи типу ЛБ40-1, світловий потік яких F = 4320 Лк.
Розрахуємо необхідну кількість ламп
за формулою:
Знаючи індекс приміщення I, Рс і Рп,
по таблиці знаходимо n = 0.28.
Підставами всі значення у формулу для
визначення світлового потоку F:
Лм
Для освітлення вибираємо
люмінесцентні лампи типу ЛБ40-1, світловий потік яких F = 4320 Лк.
Розрахуємо необхідну кількість ламп
за формулою:
Де N - обумовлене число ламп;-
світловий потік, F = 63642,857 Лм;л- світловий потік лампи, Fл = 4320 Лм.
При виборі освітлювальних приладів використовуємо світильники
типу ОД. Кожен світильник комплектується двома лампами. Розміщуються
світильники двома рядами, по чотири в кожному ряду.
5.9 Охорона навколишнього середовища
Сучасний вплив людини на природні
екосистеми незрівнянно більший, ніж раніше. Сумарна потужність антропогенних
викидів і скидів в багатьох випадках є близькою, а часто і більшою ніж
потужність природних джерел. Наприклад, антропогенні джерела викидають свинцю в
десять разів більше ніж природні, оксидів азоту приблизно однакову кількість, а
сірчастих газів промисловість викидає 30 млн. тон проти 150 млн. т природних
викидів [13]. Гірничовидобувне виробництво вилучає за рік із земних надр
близько 10 млрд. т корисних копалин і 100 млрд. т супутньої породи, а вулкани
за той же час викидають на поверхню лише 3 млрд. т речовини. За даними
К.М.Ситника нині майже 30 % суходолу планети перетворено на пустелі і
напівпустелі, 2 млрд. га ораних земель через нераціональну діяльність людей
втратили родючість, щороку із використання вилучається 200-300 тис. га
зрошувальних земель внаслідок підтоплення, засолення, виснаження та
спустошення.
Джерела антропогенного впливу
розташовані локально і їх вплив деформує, перш за все, локальні природні
екосистеми. Завдяки природним колообіговим процесам ця деформація поступово
охоплює екосистеми вищого рівня до біосфери включно.
Антропогенний вплив має різноманітний
характер і, як правило, є наслідком споживацького відношення людей до природи.
Відповідь у вигляді бумерангової реакції стає все відчутнішою - по-перше,
якість середовища існування людини погіршується. По-друге, повернення раніше
переможених хвороб та поява нових слід вважати захисною реакцією біосфери на
агресивну поведінку одного з біологічних видів.
В останні роки все більше поширюється
природозахисний напрямок людської діяльності шляхом створення заповідних
територій і акваторій. У зв'язку з тим що агроценози утворені невеликим числом
видів, саморегуляція в них здійснюється слабко. Це потребує активної турботи
про них з боку людини. Для боротьби з бур'янами і шкідниками використовують
хімічні засоби захисту (гербіциди, інсектициди). Проте хімікати впливають не
лише на бур'яни і шкідників, а й на інші, корисні рослини і тварин. Не байдужі
вони і для здоров'я людини. Інтенсивний обробіток ґрунту спричинює руйнування
його структури. Природні антропогенно-змінені екологічні системи по потужності
деформації первинної природної системи ділять на три категорії: мало змінені,
змінені та порушені.
До мало змінених природних екосистем
відносяться такі, в складі яких немає постійної компоненти антропогенного
походження, але людський вплив відбувається постійно. Це ліс, в якому регулярно
ведуться роботи по розчистці, пасовища худоби тощо. Антропогенний вплив в таких
системах враховується у вигляді зовнішньої постійної дії. Різниця між такими
системами полягає в спроможності повернення до первинного природного стану -
змінені екосистеми не втратили такої можливості, а порушені - втратили.
До змінених систем відносяться
цілинні розорені землі, перевипасені пасовища тощо. У випадку вилучення із
системи антропогенного фактору вона здатна через деякий час повернутися до
первинного стану. До порушених екосистем належать висушене болото, розорений
схил балки тощо.
Антропогенні екологічні системи - це
нові штучно створені чи постійно використані порушені в минулому природні
системи. Неприродні штучні складові в них превалюють над природними. Це -
людські поселення різного типу, сільськогосподарські угіддя, майданчики
промислових підприємств, транспортні шляхи, штучні лісонасадження, об'єкти
риборозведення тощо.
Деформація природного середовища в
межах локальних екосистем не обмежується розглянутим антропогенним впливом.
Будь-яка екосистема відчуває через зовнішні зв'язки дію глобального
антропогенного впливу, тобто інтегрованої (в масштабах планети) людської дії.
Нині, коли на всій планеті під впливом людини відбулися помітні зміни як живої,
так і неживої природи, дедалі більшого значення набуває гармонійна взаємодія
суспільства і природного довкілля, оскільки людина отримує від природи все
необхідне для життя: енергію, продукти харчування, матеріали, черпає в ній
емоційну й естетичну наснагу.
Тому вкрай необхідна не лише чітка
стратегія охорони природного середовища та посиленого контролю за
природокористуванням, але й добре продумана система екологічної освіти й
виховання населення. Бездумне ставлення до природи і виконання гасла на зразок
"Не треба чекати милості від природи - треба брати їх самим" вже
нанесли непоправної шкоди, виховали цілі покоління утриманців, які не вважають
себе зобов'язаними перед природою, завдяки якій існують.
Це і є одним із найважливіших серед чинників, що спричинили і
продовжують спричиняти погіршення стану природних екосистем внаслідок
посиленого антропогенного впливу.
Сюди слід віднести і надмірне використання ксенобіотиків, і
зростаюче хімічне забруднення, і неконтрольоване застосування пестицидів та
зростаюче засмічення атмосфери викидами транспортних засобів тощо. Наша планета
вже не витримує екологічних потрясінь, про що красномовно свідчать засухи,
повені, глобальне потепління, поява і ріст озонових дір, кислотні дощі, міління
озер, річок, тощо.
ВИСНОВКИ
Під час роботи над дипломним проектом «Автоматизація ведення
бази даних індивідуальних програм реабілітації інвалідів» засобами середовища
Delphi 7 та СУБД Firebird 2.5 було створено програмний продукт, який надає
можливість формування автоматизованого заповнення документу.
Програмна система забезпечує роботу з таблицями «Особиста
картка пацієнта», «Обмеження», «ІПР» та «Реабілітація». Розроблена база даних
не містить надлишкової інформації та відповідає вимогам нормалізації. Програма
може працювати з клієнт-серверним з’єднанням до бази даних, з багатьма користувачами,
чи локально тільки на комп’ютері користувача. Реалізована автоматизація ведення
даних з можливістю додавання, редагування, видалення даних. Під час роботи з
таблицею інформації про пацієнтів є можливість відсортувати її, відфільтрувати
або зробити пошук за ім’ям, а також сформувати на при необхідності роздрукувати
документ стандартними засобами друку. Програма дозволяє пришвидшити оформлення
документів та мінімізувати кількість помилок при цьому.
Таким чином для користувача реалізовані такі основні функції:
- запобігання несанкціонованого доступу
до даних;
- введення даних у таблиці для
складання документу;
- поповнення довідників;
- контроль за ІПР, які можуть
зберігатися у файлі Excel на диску;
Програма не вимагає спеціальних знань від користувача та
розрахована на користувачів з мінімальними навичками володіння Windows, має
інтуїтивно-зрозумілий програмний інтерфейс та підказки, тому може
використовуватися у МСЕК для ведення бази даних індивідуальних програм
реабілітації інвалідів.
Розроблена пояснювальна записка акцентує увагу та інтерфейсі
програми та інструкції користувача, що спрощує її використання.
Проведений економічний розрахунок показав, що собівартість
програми автоматизації ведення бази даних індивідуальної реабілітації інвалідів
IPR складає 11600,00 грн., якщо коледж продаватиме цю програму, то її ціна для
споживача складе 18629,60 грн. При цьому з кожного екземпляра проданої програми
коледж матиме прибуток 1160,00 грн.
Програмний продукт може бути корисним та актуальним для
автоматизації роботи МСЕК, адже дозволяє спростити та пришвидшити роботи
персоналу, надає точні дані у документі та дозволяє контролювати ІПР різних
пацієнтів.
У подальшому програмна система може бути розширена за рахунок
реалізації обміну даними між різними МСЕК, додавання можливостей для більш
широкої систематизації даних та ведення статистики за різними показниками,
формування більш широкого кола документів.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1 Borland Delphi 6. Руководство разработчика.: [Пер. с
англ.] - М.: Вильямс, 2002. - 1120 с.
2 Баас Р., Фервай М., Гюнтер Х. Delphi 5: для
пользователя. Пер. с нем. - К.: BHVб, 2000 - 496 с.
Бобровский С. Delphi 6 и Kylix: Библиотека
программиста. - СПб.: Питер, 2002. - 560 с.
4 Основные
возможности СУБД [Электронный ресурс]: / Режим доступу:
#"871469.files/image077.gif">
Рисунок А.1 - Довідник статі
Рисунок А.2 - Довідник освіти
Рисунок А.3 - Довідник груп інвалідності
Рисунок А.4 - Довідник типу програми реабілітації
Рисунок А.5 - Довідник видів обмежень
Рисунок А.6 - Довідник ступенів обмежень
Рисунок А.7 - Фрагмент довідника реабілітаційних заходів
Рисунок А.8 - Довідник реабілітаційних потенціалів
Рисунок А.9 - Довідник цілей реабілітації
Приклад заповненої таблиці інформації про пацієнта приведено
на рисунку А.10. Ця таблиця заповнюється в процесі користування програмою і
приведена лише для ознайомлення.
Рисунок А.10 - Таблиця інформації про пацієнта
Додаток Б
Лістинг програми
Лістинг Б.1 - Текст програми
//Текст модуля Main, головна формаMain;
TMainForm.m_exitClick(Sender: TObject);();;
TMainForm.m_aboutClick(Sender: TObject);(not
Assigned(AboutForm)) then:=TAboutForm.Create(Self);.ShowModal();;
TMainForm.tb_view_iprClick(Sender: TObject);(not
Assigned(FormIPRView)) then:=TFormIPRView.Create(Self);.showModal();;
TMainForm.m_add_iprClick(Sender: TObject);(not
Assigned(FormAddIPR)) then.CreateForm(TFormAddIPR,
FormAddIPR);DataModule1.IBQuery3.RecordCount>0 then.fio.Text:=
DataModule1.IBQuery3.fieldbyname('fio').Value;.fio.Tag:=
DataModule1.IBQuery3.fieldbyname('id_chel').Value;.Tag:=11;.ShowModal();;;
TMainForm.m_zmin_korClick(Sender: TObject);(not
Assigned(FormRedPas)) then:=TFormRedPas.Create(Self);.ShowModal();;
TMainForm.m_poiskClick(Sender: TObject);(Panel_Poshuk.Visible=true)
then Panel_Poshuk.Visible:=falsebegin if (Panel_Poshuk.Visible=false) then
Panel_Poshuk.Visible:=true; end;;
TMainForm.FormCreate(Sender: TObject);DataModule1.Tag=1
then_Inf.DataSource:=Datamodule1.DataSource3;(not Assigned(FormAvtoriz)) then
Application.CreateForm(TFormAvtoriz,
FormAvtoriz);.IBQuery3.Last;.Panels[0].Text := 'Кількість пацієнтів:
'+IntToStr(DataModule1.IBQuery3.RecordCount);_osv.Clear;_sex.Clear;_gr.Clear;_obl.Clear;.IBQuery_osvita.Active:=true;not
DataModule1.IBQuery_osvita.Eof do_osv.Items.Add(DataModule1.IBQuery_osvita.Fields[1].Value);.IBQuery_osvita.Next;;.IBQuery_sex.Active:=true;not
DataModule1.IBQuery_sex.Eof
do_sex.Items.Add(DataModule1.IBQuery_sex.Fields[1].Value);.IBQuery_sex.Next;;.IBQuery_gr.Active:=true;not
DataModule1.IBQuery_gr.Eof
do_gr.Items.Add(DataModule1.IBQuery_gr.Fields[1].Value);.IBQuery_gr.Next;;.IBQuery_obl.Active:=true;not
DataModule1.IBQuery_obl.Eof
do_obl.Items.Add(DataModule1.IBQuery_obl.Fields[1].Value);.IBQuery_obl.Next;;;;
TMainForm.m_add_pacClick(Sender: TObject);(not
Assigned(FormAddPacient)) then.CreateForm(TFormAddPacient,
FormAddPacient);.ShowModal();;
TMainForm.pop_delClick(Sender:
TObject);:string;:=DataModule1.IBQuery3.FieldByName('id_chel').Value;.IBTable_Os.Active:=true;.IBTable_Os.Locate('id_chel',id,
[]);Application.MessageBox('Ви дійсно бажаєте видалити цей запис? Це також
видалить всі зв`язані з ним дані по
ІПР','Увага!',mb_YesNo+mb_Iconquestion)=idYes
then.IBTable_Os.Delete;;.IBQuery3.Active:=false;.IBQuery3.Active:=true;.IBQuery3.Last;.Panels[0].Text
:= 'Кількість пацієнтів: '+IntToStr(DataModule1.IBQuery3.RecordCount);;
TMainForm.tb_excelClick(Sender: TObject);: variant;:
integer;:string;:=CreateOleObject('Excel.Application');.Visible :=
false;.Application.EnableEvents:=False;.Workbooks.Open('E:\Diplom\1.xlsx',
UpdateLinks:=0);.ActiveWorkBook.Sheets.Item[1].Activate;:=Trim(DataModule1.IBQuery3.FieldByName('fio').AsString);:='E:\'+s+'.xls';.ActiveWorkbook.SaveAs(s,
FileFormat:=-4143, Password:='', WriteResPassword:='', ReadOnlyRecommended:=false,
CreateBackup:=false);.Workbooks.Close;.Workbooks.Open(s,
UpdateLinks:=0);DataModule1 do
begin.ActiveWorkbook.WorkSheets[1].Cells[20,2]:=DataModule1.IBQuery3.FieldByName('fio').AsString;.ActiveWorkbook.WorkSheets[1].Cells[22,5]:=DataModule1.IBQuery3.FieldByName('dr').AsString;.ActiveWorkbook.WorkSheets[1].Cells[26,3]:=DataModule1.IBQuery3.FieldByName('tel').AsString;.ActiveWorkbook.WorkSheets[1].Cells[30,6]:=DataModule1.IBQuery3.FieldByName('work').AsString;:=DataModule1.IBQuery3.FieldByName('sex').AsInteger;.IBTable_Sex.Locate('id_sex',i,[]);:=DataModule1.IBTable_Sex.Fields[1].Value;.ActiveWorkbook.WorkSheets[1].Cells[23,3]:=s;
:=DataModule1.IBQuery3.FieldByName('osvita').AsInteger;.IBQuery_osvita.Locate('id_osvita',i,[]);:=DataModule1.IBQuery_osvita.Fields[1].Value;.ActiveWorkbook.WorkSheets[1].Cells[28,4]:=s;
:=DataModule1.IBQuery3.FieldByName('gr_inv').AsInteger;.ibquery_gr.Locate('id_gr_inv',i,[]);:=DataModule1.ibquery_gr.Fields[1].Value;.ActiveWorkbook.WorkSheets[1].Cells[32,5]:=s;
:=DataModule1.IBQuery3.FieldByName('punkt').AsInteger;.IBQuery_nas_punkt.Locate('id_nas_punkt',i,[]);:=DataModule1.IBQuery_nas_punkt.Fields[1].Value;.ActiveWorkbook.WorkSheets[1].Cells[24,5]:=s;;.Visible:=True;.Workbooks.Close;:=
Unassigned;;
TMainForm.DBGrid_InfTitleClick(Column:
TColumn);:integer;DataModule1.IBQuery3 do begin:=false;.Panels[2].Text :=
'';.Clear;.Add('SELECT os.id_chel, os.fio, os.dr, sex.sex as sex1, obl.obl as
obl1, osv.osvita as osvita1, os.work, os.street, os.index1, os.tel,
');.Add('ro.rajon_obl as r_obl1, np.nas_punkt as punkt1, r.rajon as r_punkt1,
gr.gr_inv as gr_inv1, prof.prof as id_prof1 From Os_karta os ');.Add('INNER
JOIN Spr_sex sex ON os.sex = sex.id_sex');.Add('INNER JOIN Spr_GR_INV gr ON
os.gr_inv = gr.id_gr_inv');.Add('INNER JOIN Spr_osvita osv ON os.osvita =
osv.id_osvita');.Add('INNER JOIN Spr_obl obl ON os.obl =
obl.id_obl');.Add('INNER JOIN Spr_rajon_obl ro ON os.r_obl =
ro.id_rajon_obl');.Add('INNER JOIN Spr_rajon r ON os.r_punkt =
r.id_rajon');.Add('INNER JOIN Spr_nas_punkt np ON os.punkt =
np.id_nas_punkt');.Add('INNER JOIN Spr_prof prof ON os.id_prof =
prof.id_prof');.Add('ORDER BY '+ Column.FieldName);;:=true;;i:=0 to
DBGrid_Inf.Columns.Count-1 do_Inf.Columns.Items[i].Color:=clWhite;;i:=0 to
DBGrid_Inf.Columns.Count-1 doDBGrid_Inf.Columns.Items[i].DisplayName=Column.FieldName
then_Inf.Columns.Items[i].Color:=clSkyBlue;;;;
TMainForm.BitBtn_filtrClick(Sender:
TObject);DataModule1.IBQuery3 do begin;.Clear;.Add('SELECT os.id_chel, os.fio,
os.dr, sex.sex as sex1, obl.obl as obl1, osv.osvita as osvita1, os.work,
os.street, os.index1, os.tel, ');.Add('ro.rajon_obl as r_obl1, np.nas_punkt as
punkt1, r.rajon as r_punkt1, gr.gr_inv as gr_inv1, prof.prof as id_prof1 From
Os_karta os ');.Add('INNER JOIN Spr_sex sex ON os.sex = sex.id_sex');.Add('INNER
JOIN Spr_GR_INV gr ON os.gr_inv = gr.id_gr_inv');.Add('INNER JOIN Spr_osvita
osv ON os.osvita = osv.id_osvita');.Add('INNER JOIN Spr_obl obl ON os.obl =
obl.id_obl');.Add('INNER JOIN Spr_rajon_obl ro ON os.r_obl =
ro.id_rajon_obl');.Add('INNER JOIN Spr_rajon r ON os.r_punkt =
r.id_rajon');.Add('INNER JOIN Spr_nas_punkt np ON os.punkt =
np.id_nas_punkt');.Add('INNER JOIN Spr_prof prof ON os.id_prof =
prof.id_prof');.Add('WHERE os.dr> :D1 and os.dr<
:D2');.ParamByName('D1').AsDate:=Datetimepicker1.Date;.ParamByName('D2').AsDate:=Datetimepicker2.Date;;;.Panels[2].Text
:= 'Відфільтровано записів:
'+IntToStr(DataModule1.IBQuery3.RecordCount);;TMainForm.pop_add_iprClick(Sender:
TObject);((DataModule1.IBQuery3.RecordCount>0) and (DataModule1.IBQuery3.RecNo>0))
then(not Assigned(FormAddIPR)) then:=TFormAddIPR.Create(Self);.fio.Text:=
DataModule1.IBQuery3.fieldbyname('fio').Value;.fio.Tag:=
DataModule1.IBQuery3.fieldbyname('id_chel').Value;.Tag:=11;.ShowModal();;;
TMainForm.pop_add_pacClick(Sender: TObject);(not
Assigned(FormAddPacient)) then:=TFormAddPacient.Create(Self);.ShowModal();;
TMainForm.m_konfClick(Sender: TObject);(not
Assigned(FormNastr)) then:=TFormNastr.Create(Self);.ShowModal();;
TMainForm.tb_add_pacClick(Sender: TObject);(not
Assigned(FormAddPacient)) then:=TFormAddPacient.Create(Self);.ShowModal();;
TMainForm.m_diagnozClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet1.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[0];.PageControl1.Pages[0].Caption:='Дігнози
МКХ';.IBQuery_mkh.Active:=true;.DBGrid8.DataSource:=DataModule1.ds_mkh;.Tag:=1;.ShowModal();;
TMainForm.m_mkhClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet1.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[0];.PageControl1.Pages[0].Caption:='Супутні
захворювання
МКХ-10';.IBQuery_mkh10.Active:=true;.DBGrid8.DataSource:=DataModule1.ds_mkh10;.Tag:=2;.ShowModal();;
TMainForm.m_profClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Професії';.IBQuery_prof.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_prof;.Tag:=3;.ShowModal();;
TMainForm.m_terminClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Терміни
реабілітації';.IBQuery_termin.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_termin;.Tag:=4;.ShowModal();;TMainForm.m_obClick(Sender:
TObject);(not Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Обсяги
реабілітації';.IBQuery_obsjag.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_obsjag;.Tag:=5;.ShowModal();;
TMainForm.m_miscClick(Sender: TObject);(not Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Місця
реабілітації';.IBQuery_misce.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_misce;.Tag:=6;.ShowModal();;
TMainForm.m_pracClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Працівники
МСЕК';.IBQuery_prac.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_prac;.Tag:=7;.ShowModal();;
TMainForm.pop_redClick(Sender: TObject);(not
Assigned(FormRedpac)) then:=TFormRedpac.Create(Self);.fio.Tag:=
DataModule1.IBQuery3.fieldbyname('id_chel').Value;.ShowModal();;
TMainForm.BitBtn_cancelClick(Sender: TObject);:integer;i:=0
to DBGrid_Inf.Columns.Count-1
do_Inf.Columns.Items[i].Color:=clWhite;;_gr.ItemIndex:=-1;_obl.ItemIndex:=-1;_osv.ItemIndex:=-1;_sex.ItemIndex:=-1;.Clear;DataModule1.IBQuery3
do begin;.Clear;.Add('SELECT os.id_chel, os.fio, os.dr, sex.sex as sex1,
obl.obl as obl1, osv.osvita as osvita1, os.work, os.street, os.index1, os.tel,
');.Add('ro.rajon_obl as r_obl1, np.nas_punkt as punkt1, r.rajon as r_punkt1,
gr.gr_inv as gr_inv1, prof.prof as id_prof1 From Os_karta os ');.Add('INNER
JOIN Spr_sex sex ON os.sex = sex.id_sex');.Add('INNER JOIN Spr_GR_INV gr ON
os.gr_inv = gr.id_gr_inv');.Add('INNER JOIN Spr_osvita osv ON os.osvita =
osv.id_osvita');.Add('INNER JOIN Spr_obl obl ON os.obl = obl.id_obl');.Add('INNER
JOIN Spr_rajon_obl ro ON os.r_obl = ro.id_rajon_obl');.Add('INNER JOIN
Spr_rajon r ON os.r_punkt = r.id_rajon');.Add('INNER JOIN Spr_nas_punkt np ON
os.punkt = np.id_nas_punkt');.Add('INNER JOIN Spr_prof prof ON os.id_prof =
prof.id_prof');;;.Panels[2].Text :='';;
TMainForm.c_sexChange(Sender:
TObject);:string;_gr.ItemIndex:=-1;_obl.ItemIndex:=-1;_osv.ItemIndex:=-1;.Clear;:=Trim(c_sex.Text);.ibtable_sex.Locate('sex',s,[]);:=DataModule1.ibtable_sex.FieldByName('id_sex').Value;DataModule1.IBQuery3
do begin;.Clear;.Add('SELECT os.id_chel, os.fio, os.dr, sex.sex as sex1,
obl.obl as obl1, osv.osvita as osvita1, os.work, os.street, os.index1, os.tel,
');.Add('ro.rajon_obl as r_obl1, np.nas_punkt as punkt1, r.rajon as r_punkt1,
gr.gr_inv as gr_inv1, prof.prof as id_prof1 From Os_karta os ');.Add('INNER
JOIN Spr_sex sex ON os.sex = sex.id_sex');.Add('INNER JOIN Spr_GR_INV gr ON
os.gr_inv = gr.id_gr_inv');.Add('INNER JOIN Spr_osvita osv ON os.osvita =
osv.id_osvita');.Add('INNER JOIN Spr_obl obl ON os.obl =
obl.id_obl');.Add('INNER JOIN Spr_rajon_obl ro ON os.r_obl =
ro.id_rajon_obl');.Add('INNER JOIN Spr_rajon r ON os.r_punkt =
r.id_rajon');.Add('INNER JOIN Spr_nas_punkt np ON os.punkt =
np.id_nas_punkt');.Add('INNER JOIN Spr_prof prof ON os.id_prof = prof.id_prof');.Add('WHERE
os.SEX='+s);;.Panels[2].Text := 'Відфільтровано записів:
'+IntToStr(DataModule1.IBQuery3.RecordCount);;;TMainForm.m_r_oblClick(Sender:
TObject);(not Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Райони
області';.IBQuery_r_obl.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_r_obl;.Tag:=8;.ShowModal();;
TMainForm.m_oblClick(Sender: TObject);(not Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Oбласті';.IBQuery_obl.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_obl;.Tag:=9;.ShowModal();;
TMainForm.m_nas_punktClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Населений
пункт';.IBQuery_nas_punkt.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_punkt;.Tag:=10;.ShowModal();;
TMainForm.m_r_punktClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Райони
населеного
пункту';.IBQuery_rajon.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_rajon;.Tag:=11;.ShowModal();;
TMainForm.c_grChange(Sender: TObject);:string;_obl.Text:='';_osv.Text:='';_sex.Text:='';.Clear;:=Trim(c_gr.Text);.ibquery_gr.Locate('gr_inv',s,[]);:=DataModule1.ibquery_gr.FieldByName('id_gr_inv').Value;DataModule1.IBQuery3
do begin;.Clear;.Add('SELECT os.id_chel, os.fio, os.dr, sex.sex as sex1,
obl.obl as obl1, osv.osvita as osvita1, os.work, os.street, os.index1, os.tel,
');.Add('ro.rajon_obl as r_obl1, np.nas_punkt as punkt1, r.rajon as r_punkt1,
gr.gr_inv as gr_inv1, prof.prof as id_prof1 From Os_karta os ');.Add('INNER
JOIN Spr_sex sex ON os.sex = sex.id_sex');.Add('INNER JOIN Spr_GR_INV gr ON
os.gr_inv = gr.id_gr_inv');.Add('INNER JOIN Spr_osvita osv ON os.osvita =
osv.id_osvita');.Add('INNER JOIN Spr_obl obl ON os.obl =
obl.id_obl');.Add('INNER JOIN Spr_rajon_obl ro ON os.r_obl =
ro.id_rajon_obl');.Add('INNER JOIN Spr_rajon r ON os.r_punkt =
r.id_rajon');.Add('INNER JOIN Spr_nas_punkt np ON os.punkt =
np.id_nas_punkt');.Add('INNER JOIN Spr_prof prof ON os.id_prof =
prof.id_prof');.Add('WHERE os.gr_inv='+s);;.Panels[2].Text := 'Відфільтровано
записів: '+IntToStr(DataModule1.IBQuery3.RecordCount);;;TMainForm.c_osvChange(Sender:
TObject);:string;_gr.ItemIndex:=-1;_obl.ItemIndex:=-1;_sex.ItemIndex:=-1;.Clear;:=Trim(c_osv.Text);.IBQuery_osvita.Locate('osvita',s,[]);:=DataModule1.IBQuery_osvita.FieldByName('id_osvita').Value;DataModule1.IBQuery3
do begin;.Clear;.Add('SELECT os.id_chel, os.fio, os.dr, sex.sex as sex1,
obl.obl as obl1, osv.osvita as osvita1, os.work, os.street, os.index1, os.tel,
');.Add('ro.rajon_obl as r_obl1, np.nas_punkt as punkt1, r.rajon as r_punkt1,
gr.gr_inv as gr_inv1, prof.prof as id_prof1 From Os_karta os ');.Add('INNER
JOIN Spr_sex sex ON os.sex = sex.id_sex');.Add('INNER JOIN Spr_GR_INV gr ON
os.gr_inv = gr.id_gr_inv');.Add('INNER JOIN Spr_osvita osv ON os.osvita =
osv.id_osvita');.Add('INNER JOIN Spr_obl obl ON os.obl =
obl.id_obl');.Add('INNER JOIN Spr_rajon_obl ro ON os.r_obl =
ro.id_rajon_obl');.Add('INNER JOIN Spr_rajon r ON os.r_punkt =
r.id_rajon');.Add('INNER JOIN Spr_nas_punkt np ON os.punkt =
np.id_nas_punkt');.Add('INNER JOIN Spr_prof prof ON os.id_prof =
prof.id_prof');.Add('WHERE os.osvita='+s);;.Panels[2].Text := 'Відфільтровано
записів: '+IntToStr(DataModule1.IBQuery3.RecordCount);;;
TMainForm.c_oblChange(Sender:
TObject);:string;_gr.ItemIndex:=-1;_osv.ItemIndex:=-1;_sex.ItemIndex:=-1;.Clear;:=Trim(c_obl.Text);.IBQuery_obl.Locate('obl',s,[]);:=DataModule1.IBQuery_obl.FieldByName('id_obl').Value;DataModule1.IBQuery3
do begin;.Clear;.Add('SELECT os.id_chel, os.fio, os.dr, sex.sex as sex1,
obl.obl as obl1, osv.osvita as osvita1, os.work, os.street, os.index1, os.tel,
');.Add('ro.rajon_obl as r_obl1, np.nas_punkt as punkt1, r.rajon as r_punkt1,
gr.gr_inv as gr_inv1, prof.prof as id_prof1 From Os_karta os ');.Add('INNER
JOIN Spr_sex sex ON os.sex = sex.id_sex');.Add('INNER JOIN Spr_GR_INV gr ON
os.gr_inv = gr.id_gr_inv');.Add('INNER JOIN Spr_osvita osv ON os.osvita =
osv.id_osvita');.Add('INNER JOIN Spr_obl obl ON os.obl =
obl.id_obl');.Add('INNER JOIN Spr_rajon_obl ro ON os.r_obl =
ro.id_rajon_obl');.Add('INNER JOIN Spr_rajon r ON os.r_punkt =
r.id_rajon');.Add('INNER JOIN Spr_nas_punkt np ON os.punkt =
np.id_nas_punkt');.Add('INNER JOIN Spr_prof prof ON os.id_prof =
prof.id_prof');.Add('WHERE os.obl='+s);;.Panels[2].Text := 'Відфільтровано
записів: '+IntToStr(DataModule1.IBQuery3.RecordCount);;;
TMainForm.fioChange(Sender: TObject);DataModule1.IBQuery3 do
begin;.Clear;.Add('SELECT os.id_chel, os.fio, os.dr, sex.sex as sex1, obl.obl
as obl1, osv.osvita as osvita1, os.work, os.street, os.index1, os.tel,
');.Add('ro.rajon_obl as r_obl1, np.nas_punkt as punkt1, r.rajon as r_punkt1,
gr.gr_inv as gr_inv1, prof.prof as id_prof1 From Os_karta os ');.Add('INNER
JOIN Spr_sex sex ON os.sex = sex.id_sex');.Add('INNER JOIN Spr_GR_INV gr ON
os.gr_inv = gr.id_gr_inv');.Add('INNER JOIN Spr_osvita osv ON os.osvita =
osv.id_osvita');.Add('INNER JOIN Spr_obl obl ON os.obl =
obl.id_obl');.Add('INNER JOIN Spr_rajon_obl ro ON os.r_obl =
ro.id_rajon_obl');.Add('INNER JOIN Spr_rajon r ON os.r_punkt =
r.id_rajon');.Add('INNER JOIN Spr_nas_punkt np ON os.punkt = np.id_nas_punkt');.Add('INNER
JOIN Spr_prof prof ON os.id_prof = prof.id_prof');.Add('WHERE os.fio LIKE
'''+fio.Text+'%'';');;;;
TMainForm.FormActivate(Sender:
TObject);.Panels[2].Text:='Сьогодні '+DatetoStr(now);FormAvtoriz.tag=1
then.Panels[1].Text:='В системі:
Адміністратор';.Items[0].Items[0].Enabled:=true;.Items[3].Enabled:=true;_add_pac.Enabled:=true;_red_pac.Enabled:=true;_add_pac.Enabled:=true;_add_ipr.Enabled:=true;_red.Enabled:=true;_del.Enabled:=true;FormAvtoriz.tag=2
then.Panels[1].Text:='В системі:
Гість';.Items[0].Items[0].Enabled:=false;.Items[1].Enabled:=false;.Items[3].Enabled:=false;_add_pac.Enabled:=false;_red_pac.Enabled:=false;_add_pac.Enabled:=false;_add_ipr.Enabled:=false;_red.Enabled:=false;_del.Enabled:=false;;;;
TMainForm.FormClose(Sender: TObject; var Action:
TCloseAction);Assigned(FormAvtoriz) then
FormAvtoriz.Close();Assigned(FormAddIPR) then FormAddIPR.Close;;
TMainForm.m_exClick(Sender:
TObject);.tag:=3;.visible:=false;.Visible:=true;;
TMainForm.m_pathClick(Sender: TObject);(not Assigned(Formpath))
then:=TFormpath.Create(Self);.ShowModal();;.
//Текст модуля AddDovMKHAddDovMKH;
TFormAddDovMKH.m_cancelClick(Sender:
TObject);();;TFormAddDovMKH.m_addClick(Sender:
TObject);:string;,s2:string;FormDovidnik.Tag=1 then(edit1.Text<>'')and(edit2.Text<>'')
thenDataModule1.IBQuery do
begin;:=edit1.Text;.Delete(s1,55,100);:=edit2.Text;.Delete(s2,10,100);.Clear;.Add('INSERT
INTO SPR_Diagnoz(diagnoz, kod_diagnozu, id_diagnoz)');.Add('VALUES(:diagnoz,
:kod_diagnozu, gen_id(GEN_SPR_Diagnoz_ID,1))');('diagnoz').Value:=s1;('kod_diagnozu').Value:=s2;;('Дані
записано');('Не вдалося додати
запис.');;;.IBQuery_mkh.Active:=false;.IBQuery_mkh.Active:=true;.IBQuery_prof.Active:=true;Assigned(FormAddIPR)
thenDataModule1 do begin.diagnoz.Clear;_mkh.close();_mkh.open();_mkh.first();not(IBQuery_mkh.eof)
do.diagnoz.items.add(Trim(IBQuery_mkh.fieldbyname('diagnoz').asstring));_mkh.next;;_mkh.first();;;Application.MessageBox('Ви
заповнили не всі поля','Увага!',MB_OK+MB_Iconerror)
...if FormDovidnik.Tag=14 thenDataModule1.IBQuery do
begin(edit1.Text<>'')and(edit2.Text<>'') then
begin;:=IntToStr(DataModule1.IBQuery_mkh10.fieldbyname('id_mkh_10').Value);.Clear;:=edit1.Text;.Delete(s1,55,100);:=edit2.Text;.Delete(s2,10,100);.Add('UPDATE
SPR_MKH_10 SET MKH_10=:MKH_10, KOD_MKH=:KOD_MKH WHERE
ID_MKH_10='+id);('MKH_10').Value:=s1;('KOD_MKH').Value:=s2;;.MessageBox('Дані
перезаписано','Увага!',MB_OK+MB_Iconinformation);.MessageBox('Не вдалося
відредагувати запис','Увага!',MB_OK+MB_Iconerror);;Application.MessageBox('Ви
заповнили не всі
поля','Увага!',MB_OK+MB_Iconerror);.IBQuery_mkh10.Active:=false;.IBQuery_mkh10.Active:=true;.IBQuery_prof.Active:=true;Assigned(FormAddIPR)
thenDataModule1 do
begin.s_zah.Clear;_mkh10.close();_mkh10.open();_mkh10.first();not(ibquery_mkh10.eof)
do.s_zah.items.add(Trim(ibquery_mkh10.fieldbyname('mkh_10').asstring));_mkh10.next;;_mkh10.first();;;;();.Clear;.Clear;;TFormAddDovMKH.FormActivate(Sender:
TObject);.Clear;.Clear;FormDovidnik.Tag=13
then.Text:=Trim(DataModule1.IBQuery_mkh.fieldbyname('DIAGNOZ').Value);.Text:=Trim(DataModule1.IBQuery_mkh.fieldbyname('KOD_DIAGNOZU').Value);FormDovidnik.Tag=14
then.Text:=Trim(DataModule1.IBQuery_mkh10.fieldbyname('MKH_10').Value);.Text:=Trim(DataModule1.IBQuery_mkh10.fieldbyname('KOD_MKH').Value);;;;
.
//Текст модуля AddDovAddDov;
TFormAddDov.m_addClick(Sender:
TObject);,s:string;FormDovidnik.Tag=3 thenEdit1.Text<>''
thenDataModule1.IBQuery do
begin;.Clear;:=edit1.Text;.Delete(s,30,100);.Add('INSERT INTO SPR_Prof(prof,
id_prof)');.Add('VALUES(:prof, gen_id(GEN_SPR_Prof_ID,1))');('prof').Value:=s;;.MessageBox('Дані
записано','Увага!',MB_OK+MB_Iconinformation);.MessageBox('Не вдалося додати
запис','Увага!',MB_OK+MB_Iconerror);;;.IBQuery_prof.Active:=false;.IBQuery_prof.Active:=true;.IBQuery_prof.Active:=true;DataModule1
doAssigned(FormAddpacient) then.c_prof.Clear;not(ibquery_prof.active) then
ibquery_prof.open();_prof.first();not(ibquery_prof.eof)
do.c_prof.items.add(Trim(ibquery_prof.fieldbyname('PROF').asstring));_prof.next;;_prof.first();if
Assigned(FormRedPac) then.c_prof.Clear;not(ibquery_prof.active) then
ibquery_prof.open();_prof.first();not(ibquery_prof.eof)
do.c_prof.items.add(Trim(ibquery_prof.fieldbyname('PROF').asstring));_prof.next;;_prof.first();;;Application.MessageBox('Ви
не заповнили поле','Увага!',MB_OK+MB_Iconerror)if FormDovidnik.Tag=23
thenDataModule1.IBQuery do begin;Edit1.Text<>'' then
begin:=IntToStr(DataModule1.IBQuery_rajon.fieldbyname('ID_RAJON').Value);.Clear;:=edit1.Text;.Delete(s,40,100);.Add('UPDATE
SPR_RAJON SET RAJON=:RAJON WHERE ID_RAJON='+id);('RAJON').Value:=s;;.MessageBox('Дані
перезаписано','Увага!',MB_OK+MB_Iconinformation);.MessageBox('Не вдалося
відредагувати запис','Увага!',MB_OK+MB_Iconerror);;Application.MessageBox('Ви
не заповнили поле','Увага!',MB_OK+MB_Iconerror);;.IBQuery_rajon.Active:=false;.IBQuery_rajon.Active:=true;.IBQuery_prof.Active:=true;DataModule1
doAssigned(FormAddpacient) then.c_r_nas_punkt.Clear;not(ibquery_rajon.active)
then ibquery_rajon.open();_rajon.first();not(ibquery_rajon.eof)
do.c_r_nas_punkt.items.add(ibquery_rajon.fieldbyname('RAJON').asstring);_rajon.next;;_rajon.first();if
Assigned(FormRedPac) then.c_r_nas_punkt.Clear;not(ibquery_rajon.active) then
ibquery_rajon.open();_rajon.first();not(ibquery_rajon.eof)
do.c_r_nas_punkt.items.add(ibquery_rajon.fieldbyname('RAJON').asstring);_rajon.next;;_rajon.first();;;;();.Clear;;
TFormAddIPR.FormActivate(Sender:
TObject);:integer;:boolean;FormAddIPR.tag=11 then:=false;datamodule1 do
begin.IBQuery_ipr_skl.active:=true;_ipr.first;not IBQuery_ipr.eof
doIBQuery_ipr.FieldByName('id_chel').Value=fio.Tag then
sovpadenie:=true;_ipr.Next;;;_pr.Text:='';.Text:='';.Text:='';_potencial.ItemIndex:=-1;_skl.ItemIndex:=-1;_zah.ItemIndex:=-1;.ItemIndex:=-1;.ItemIndex:=-1;_prac.ItemIndex:=-1;_potencial.Clear;_skl.Clear;_zah.Clear;.Clear;.Clear;_prac.Clear;_prac.Visible:=false;_diagnoz.Visible:=false;_mkh.Visible:=false;.Clear;
....Clear;;DataModule1
do.close();.Open();.first();.Clear;not(ibquery5.eof)
do.items.add(Trim(ibquery5.fieldbyname('VID_OBMEJ').asstring));.next;;.first();.Text:='Обласна
№3';.DateTime:=now();.DateTime:=now();.DateTime:=now();_mkh10.close();_mkh10.open();_mkh10.first();not(ibquery_mkh10.eof)
do_zah.items.add(Trim(ibquery_mkh10.fieldbyname('mkh_10').asstring));_mkh10.next;;_mkh10.first();
_ipr_skl.close();_ipr_skl.open();_ipr_skl.first();not(IBQuery_ipr_skl.eof)
do_skl.items.add(Trim(IBQuery_ipr_skl.fieldbyname('prog_skl').asstring));_ipr_skl.next;;_ipr_skl.first();sovpadenie=true
then.IBQuery_ipr_skl.Last;_skl.ItemIndex:=(datamodule1.IBQuery_ipr_skl.fieldbyname('id_prog_skl').value-1);_skl.Tag:=(datamodule1.IBQuery_ipr_skl.fieldbyname('id_prog_skl').value);.IBQuery_ipr_skl.First;_skl.ItemIndex:=(datamodule1.IBQuery_ipr_skl.fieldbyname('id_prog_skl').value-1);_skl.Tag:=(datamodule1.IBQuery_ipr_skl.fieldbyname('id_prog_skl').value);;_r_potencial.close();_r_potencial.open();_r_potencial.first();not(IBQuery_r_potencial.eof)
do_potencial.items.add(Trim(IBQuery_r_potencial.fieldbyname('r_potencial').asstring));_r_potencial.next;;_r_potencial.first();_mkh.close();_mkh.open();_mkh.first();not(IBQuery_mkh.eof)
do.items.add(Trim(IBQuery_mkh.fieldbyname('diagnoz').asstring));_mkh.next;;_mkh.first();
_prac.close();_prac.open();_prac.first();not(IBQuery_prac.eof)
do_prac.items.add(Trim(IBQuery_prac.fieldbyname('sotrudnic').asstring));_prac.next;;_prac.first();_meta.close();_meta.open();_meta.first();not(IBQuery_meta.eof)
do.items.add(Trim(IBQuery_meta.fieldbyname('meta').asstring));_meta.next;;_meta.first();;FormAddIPR.tag=22
then.ibquery5.close();.ibquery5.Open();_prac.Visible:=true;_diagnoz.Visible:=true;_mkh.Visible:=true;DataModule1
do.Text:=Trim(IBQuery_ipr.fieldbyname('fio').Value);not IBQuery_ipr_skl.active
then
IBQuery_ipr_skl.open();:=DataModule1.IBQuery_ipr.Fieldbyname('id_prog_skl').Value;.IBQuery_ipr_skl.Locate('id_prog_skl',s,
[]);_skl.Text:=Trim(IBQuery_ipr.fieldbyname('prog_skl').Value);_skl.Tag:=DataModule1.IBQuery_ipr.Fieldbyname('id_prog_skl').Value;
not IBQuery_mkh.active then
IBQuery_mkh.open();:=DataModule1.IBQuery_ipr.Fieldbyname('id_diagnoz').Value;.Tag:=s;.IBQuery_mkh.Locate('id_diagnoz',s,
[]);.Text:=Trim(IBQuery_mkh.fieldbyname('diagnoz').Value);not
IBQuery_mkh10.active then
IBQuery_mkh10.active:=true;:=DataModule1.IBQuery_ipr.Fieldbyname('suput_zahv').Value;.IBQuery_mkh10.Locate('id_mkh_10',s,
[]);_zah.Text:=Trim(IBQuery_mkh10.fieldbyname('mkh_10').Value);_zah.Tag:=s;
not IBQuery_r_potencial.active then
IBQuery_r_potencial.open();:=DataModule1.IBQuery_ipr.Fieldbyname('id_r_potencial').Value;.IBQuery_r_potencial.Locate('id_r_potencial',s,
[]);_potencial.Text:=Trim(IBQuery_r_potencial.fieldbyname('r_potencial').Value);_potencial.Tag:=s;
not IBQuery_meta.active then
IBQuery_meta.open();:=DataModule1.IBQuery_ipr.Fieldbyname('id_meta').Value;.IBQuery_meta.Locate('id_meta',s,
[]);.Text:=Trim(IBQuery_meta.fieldbyname('meta').Value);.Tag:=s;
not IBQuery_prac.active then
IBQuery_prac.open();:=DataModule1.IBQuery_ipr.Fieldbyname('sotrudnik').Value;.IBQuery_prac.Locate('id_sotrudnic',s,
[]);_prac.Text:=Trim(IBQuery_prac.fieldbyname('sotrudnic').Value);_prac.Tag:=s;
.Text:=Trim(IBQuery_ipr.fieldbyname('msek_n').Value);.DateTime:=IBQuery_ipr.fieldbyname('dat_zap').Value;.DateTime:=IBQuery_ipr.fieldbyname('dat_spivb').Value;.DateTime:=IBQuery_ipr.fieldbyname('dat_kontr').Value;_pr.Text:=Trim(IBQuery_ipr.fieldbyname('n_prog').Value);.Text:=IBQuery_ipr.fieldbyname('triv_inv').Value;
not IBQuery_obmej.Active then
IBQuery_obmej.Active:=true;_obmej.First;not IBQuery_obmej.Eof do
begin((IBQuery_obmej.FieldByName('ID_IPR').Value=IBQuery_ipr.fieldbyname('id_ipr').Value)
and (IBQuery_obmej.FieldByName('ID_VID_OBMEJ').Value=1))
then.Text:=IBQuery_obmej.fieldbyname('ID_STUP').Value;;_obmej.Next;;
...not IBQuery_obmej.Active then
IBQuery_obmej.Active:=true;_obmej.First;not IBQuery_obmej.Eof do
begin((IBQuery_obmej.FieldByName('ID_IPR').Value=IBQuery_ipr.fieldbyname('id_ipr').Value)
and (IBQuery_obmej.FieldByName('ID_VID_OBMEJ').Value=18))
then.Text:=IBQuery_obmej.fieldbyname('ID_STUP').Value;;_obmej.Next;;;;;
//Текст модуля Dob_iprDob_IPR;
TFormAddIPR.m_exitClick(Sender: TObject);();;
TFormAddIPR.m_reabilClick(Sender: TObject);(not
Assigned(FormReabil)) then:=TFormReabil.Create(Self);.ShowModal();;
TFormAddIPR.Memo1KeyPress(Sender: TObject; var Key: Char);not
(key in ['1'..'3', #8]) then Key:=#0;;
...;
TFormAddIPR.Memo16KeyPress(Sender: TObject; var Key:
Char);not (key in ['1'..'3', #8]) then Key:=#0;;
TFormAddIPR.DBNavigator1Click(Sender: TObject;:
TNavigateBtn);(DataModule1.IBQuery5.FieldByName('id_vid_obmej').Value=1) then
Memo1.SetFocus;
…(DataModule1.IBQuery5.FieldByName('id_vid_obmej').Value=16)
then Memo16.SetFocus;;
TFormAddIPR.DBNavigator1Click(Sender: TObject;:
TNavigateBtn);(DataModule1.IBQuery5.FieldByName('id_vid_obmej').Value=1) then
Memo1.SetFocus;
...(DataModule1.IBQuery5.FieldByName('id_vid_obmej').Value=16)
then Memo16.SetFocus;;
TFormAddIPR.m_addClick(Sender: TObject);,
f1,f2:integer;_ID_OFFER:integer;: string;:boolean;,
kod:integer;FormAddIPR.Tag=11 then:=false;:=StrToint(n_pr.Text);not
Datamodule1.IBQuery_ipr.Active then
Datamodule1.IBQuery_ipr.Active:=true;.IBQuery_ipr.First;not
Datamodule1.IBQuery_ipr.Eof
do:=StrToInt(Datamodule1.IBQuery_ipr.fieldbyname('n_prog').Value);f1=f2 then
sovpadenie:=true;.IBQuery_ipr.next;;sovpadenie=false then
begin(n_pr.text<>'')and(msek.text<>'')and(r_potencial.ItemIndex<>-1)and(pr_skl.ItemIndex<>-1)and(s_zah.ItemIndex<>-1)and(meta.ItemIndex<>-1)and(diagnoz.ItemIndex<>-1)and(c_prac.ItemIndex<>-1)and(StrToInt(edit3.Text)>=0)and(StrToInt(edit3.Text)<100)
then:=MonthsBetween(today,DateTimepicker3.Date);((DateTimepicker1.Date<=now)and(DateTimepicker2.Date<=now)and(res>=1))
then((memo1.Text<>'')and(memo2.Text<>'')and(memo3.Text<>'')and(memo4.Text<>'')and(memo5.Text<>'')and(memo6.Text<>'')and(memo7.Text<>'')and(memo8.Text<>'')and(memo9.Text<>'')and(memo10.Text<>'')(memo11.Text<>'')and(memo12.Text<>'')and(memo13.Text<>'')and(memo14.Text<>'')and(memo15.Text<>'')and(memo16.Text<>'')and(memo17.Text<>'')and(memo18.Text<>''))then(StrToint(memo1.Text)>0)and(StrToint(memo1.Text)<4)and(StrToint(memo2.Text)>0)and(StrToint(memo2.Text)<4)and(StrToint(memo3.Text)>0)and(StrToint(memo3.Text)<4)and(StrToint(memo5.Text)>0)and(StrToint(memo5.Text)<4)(StrToint(memo6.Text)>0)and(StrToint(memo6.Text)<4)and(StrToint(memo7.Text)>0)and(StrToint(memo7.Text)<4)and(StrToint(memo8.Text)>0)and(StrToint(memo8.Text)<4)and(StrToint(memo9.Text)>0)and(StrToint(memo9.Text)<4)(StrToint(memo10.Text)>0)and(StrToint(memo10.Text)<4)and(StrToint(memo11.Text)>0)and(StrToint(memo11.Text)<4)and(StrToint(memo12.Text)>0)and(StrToint(memo12.Text)<4)and(StrToint(memo13.Text)>0)and(StrToint(memo13.Text)<4)(StrToint(memo14.Text)>0)and(StrToint(memo14.Text)<4)and(StrToint(memo15.Text)>0)and(StrToint(memo15.Text)<4)and(StrToint(memo16.Text)>0)and(StrToint(memo16.Text)<4)and(StrToint(memo17.Text)>0)and(StrToint(memo17.Text)<4)(StrToint(memo18.Text)>0)and(StrToint(memo18.Text)<4)thenDataModule1.IBQuery
do:= False;.Clear;.Add('SELECT GEN_ID(GEN_IPR_ID,1) FROM RDB$DATABASE');:=
True;_ID_OFFER:=FieldByName('GEN_ID').AsInteger;;.Clear;.Add('INSERT INTO IPR
(ID_IPR, ID_CHEL, N_PROG, DAT_ZAP, MSEK_N, ID_PROG_SKL, TRIV_INV, ID_DIAGNOZ,
SUPUT_ZAHV, ID_R_POTENCIAL, META, DAT_SPIVB, DAT_KONTR,
SOTRUDNIK)');.Add('VALUES(:ID_IPR, :ID_CHEL, :N_PROG, :DAT_ZAP, :MSEK_N,
:ID_PROG_SKL, :TRIV_INV, :ID_DIAGNOZ, :SUPUT_ZAHV, :ID_R_POTENCIAL, :META,
:DAT_SPIVB, :DAT_KONTR, :SOTRUDNIK)');('ID_IPR').AsInteger:=global_ID_OFFER;('ID_CHEL').Value:=fio.Tag;('N_PROG').Value:=n_pr.Text;('DAT_ZAP').AsDate:=DateTimePicker1.Date;('MSEK_N').Value:=msek.Text;('ID_PROG_SKL').Value:=pr_skl.Tag;('TRIV_INV').Value:=StrToInt(Edit3.Text);('ID_DIAGNOZ').Value:=diagnoz.Tag;('SUPUT_ZAHV').Value:=s_zah.Tag;('ID_R_POTENCIAL').Value:=r_potencial.Tag;('META').Value:=meta.Tag;('DAT_SPIVB').AsDate:=DateTimePicker2.Date;('DAT_KONTR').AsDate:=DateTimePicker3.Date;('SOTRUDNIK').Value:=c_prac.Tag;;.MessageBox('Дані
записано','Увага!',MB_OK+MB_Iconinformation);_reabil.Enabled:=false;.MessageBox('Не
вдалося додати
запис','Увага!',MB_OK+MB_Iconerror);;;.IBQuery_ipr.Active:=false;.IBQuery_ipr.Active:=true;:=global_ID_OFFER;(not
Assigned(FormReabil)) then:=TFormReabil.Create(Self);.TreeView.Tag:=kod1;DataModule1.IBQuery
do;.Clear;.Add('INSERT INTO OBMEJ (ID_VID_OBMEJ, ID_STUP,
ID_IPR)');.Add('VALUES( :ID_VID_OBMEJ, :ID_STUP,
:ID_IPR)');('ID_VID_OBMEJ').Value:=1;('ID_STUP').Value:=memo1.Text;('ID_IPR').Value:=kod1;;.MessageBox('Не
вдалося додати запис про обмеження','Увага!',MB_OK+MB_Iconerror);;
....Clear;.Add('INSERT INTO OBMEJ (ID_VID_OBMEJ, ID_STUP,
ID_IPR)');.Add('VALUES( :ID_VID_OBMEJ, :ID_STUP,
:ID_IPR)');('ID_VID_OBMEJ').Value:=18;('ID_STUP').Value:=memo18.Text;('ID_IPR').Value:=kod1;;_reabil.Enabled:=true;_add.Enabled:=false;.MessageBox('Не
вдалося додати запис про
обмеження','Увага!',MB_OK+MB_Iconerror);;;.IBQuery_ipr.Active:=false;.IBQuery_ipr.Active:=true;.MessageBox('Ви
невірно заповнили ступені обмеження життедіяльності)','Увага!',MB_OK+MB_Iconerror);.MessageBox('Ви
не заповнили ступені обмеження
життедіяльності)','Увага!',MB_OK+MB_Iconerror);.MessageBox('Ви невірно
заповнили дату','Увага!',MB_OK+MB_Iconerror);.MessageBox('Ви заповнили не всі
поля','Увага!',MB_OK+MB_Iconerror);Application.MessageBox('Такий номер програми
реабілітації вже є.','Увага!',MB_Ok+MB_Iconerror);FormAddIPR.Tag=22
thenDataModule1.IBQuery
do:=DataModule1.IBQuery_ipr.fieldbyname('id_ipr').value;;.Clear;.Add('UPDATE
IPR SET N_PROG=:N_PROG, DAT_ZAP=:DAT_ZAP, MSEK_N=:MSEK_N,
ID_PROG_SKL=:ID_PROG_SKL, TRIV_INV=:TRIV_INV, ID_DIAGNOZ=:ID_DIAGNOZ,
SUPUT_ZAHV=:SUPUT_ZAHV, ID_R_POTENCIAL=:ID_R_POTENCIAL,');.Add(' META=:META,
DAT_SPIVB=:DAT_SPIVB, DAT_KONTR=:DAT_KONTR, SOTRUDNIK=:SOTRUDNIK where id_ipr='+id);('N_PROG').Value:=n_pr.Text;('DAT_ZAP').AsDate:=DateTimePicker1.Date;('MSEK_N').Value:=msek.Text;('ID_PROG_SKL').Value:=pr_skl.Tag;('TRIV_INV').Value:=StrToInt(Edit3.Text);('ID_DIAGNOZ').Value:=diagnoz.Tag;('SUPUT_ZAHV').Value:=s_zah.Tag;('ID_R_POTENCIAL').Value:=r_potencial.Tag;('META').Value:=meta.Tag;('DAT_SPIVB').AsDate:=DateTimePicker2.Date;('DAT_KONTR').AsDate:=DateTimePicker3.Date;('SOTRUDNIK').Value:=c_prac.Tag;;.MessageBox('Дані
перезаписано','Увага!',MB_OK+MB_Iconinformation);.MessageBox('Не вдалося
відредагувати
запис','Увага!',MB_OK+MB_Iconerror);;;:=DataModule1.IBQuery_ipr.Fieldbyname('ID_IPR').Value;(not
Assigned(FormReabil))
then:=TFormReabil.Create(Self);.TreeView.Tag:=kod;DataModule1.IBQuery
do;.Clear;.Add('UPDATE OBMEJ SET ID_STUP=:ID_STUP WHERE id_ipr='+id+' and
ID_VID_OBMEJ=1');('ID_STUP').Value:=memo1.Text;;.MessageBox('Не вдалося додати
запис про обмеження','Увага!',MB_OK+MB_Iconerror);;
...;.Clear;.Add('UPDATE OBMEJ SET ID_STUP=:ID_STUP WHERE
id_ipr='+id+' and ID_VID_OBMEJ=18');('ID_STUP').Value:=memo18.Text;;.MessageBox('Не
вдалося додати запис про
обмеження','Увага!',MB_OK+MB_Iconerror);;;_reabil.Enabled:=true;_add.Enabled:=false;.IBQuery_ipr.Active:=false;.IBQuery_ipr.Active:=true;.IBQuery_obmej.Active:=false;.IBQuery_obmej.Active:=true;;;
TFormAddIPR.diagnozChange(Sender:
TObject);:integer;_diagnoz.Visible:=true;.ibquery_mkh.first();i:=0 to
diagnoz.itemindex-1 do
begin.ibquery_mkh.Next;;.Tag:=DataModule1.IBQuery_mkh.fieldbyname('ID_DIAGNOZ').Value;;
…TFormAddIPR.c_pracChange(Sender:
TObject);:integer;_prac.Visible:=true;.ibquery_prac.first();i:=0 to
c_prac.itemindex-1 do
begin.ibquery_prac.Next;;_prac.Tag:=DataModule1.IBQuery_prac.fieldbyname('ID_SOTRUDNIC').Value;;
TFormAddIPR.sp_diagnozClick(Sender: TObject);(not Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet1.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[0];.PageControl1.Pages[0].Caption:='Дігнози
МКХ';.IBQuery_mkh.Active:=true;.DBGrid8.DataSource:=DataModule1.ds_mkh;.Tag:=1;.ShowModal();;
…TFormAddIPR.FormActivate(Sender:
TObject);:integer;FormAddIPR.tag=11
then_pr.Text:='';.Text:='';.Text:='';_potencial.ItemIndex:=-1;_skl.ItemIndex:=-1;_zah.ItemIndex:=-1;.ItemIndex:=-1;.ItemIndex:=-1;_prac.ItemIndex:=-1;_potencial.Clear;_skl.Clear;_zah.Clear;.Clear;.Clear;_prac.Clear;_prac.Visible:=false;_diagnoz.Visible:=false;_mkh.Visible:=false;.Clear;
….Clear;;
DataModule1
do.close();.Open();.first();.Clear;not(ibquery5.eof)
do.items.add(Trim(ibquery5.fieldbyname('VID_OBMEJ').asstring));.next;;.first();.Text:='Обласна
№3';.DateTime:=now();.DateTime:=now();.DateTime:=now();_mkh10.close();_mkh10.open();_mkh10.first();not(ibquery_mkh10.eof)
do_zah.items.add(Trim(ibquery_mkh10.fieldbyname('mkh_10').asstring));_mkh10.next;;_mkh10.first();_ipr_skl.close();_ipr_skl.open();_ipr_skl.first();not(IBQuery_ipr_skl.eof)
do_skl.items.add(Trim(IBQuery_ipr_skl.fieldbyname('prog_skl').asstring));_ipr_skl.next;;_ipr_skl.first();_r_potencial.close();_r_potencial.open();_r_potencial.first();not(IBQuery_r_potencial.eof)
do_potencial.items.add(Trim(IBQuery_r_potencial.fieldbyname('r_potencial').asstring));_r_potencial.next;;_r_potencial.first();_mkh.close();_mkh.open();_mkh.first();not(IBQuery_mkh.eof)
do.items.add(Trim(IBQuery_mkh.fieldbyname('diagnoz').asstring));_mkh.next;;_mkh.first();_prac.close();_prac.open();_prac.first();not(IBQuery_prac.eof)
do_prac.items.add(Trim(IBQuery_prac.fieldbyname('sotrudnic').asstring));_prac.next;;_prac.first();_meta.close();_meta.open();_meta.first();not(IBQuery_meta.eof)
do.items.add(Trim(IBQuery_meta.fieldbyname('meta').asstring));_meta.next;;_meta.first();;FormAddIPR.tag=22
then.ibquery5.close();.ibquery5.Open();_prac.Visible:=true;_diagnoz.Visible:=true;_mkh.Visible:=true;DataModule1
donot ibquery_os_karta.active then ibquery_os_karta.open();_os_karta.first();not(ibquery_os_karta.eof)
doibquery_os_karta.FieldByName('id_chel').Value
then_os_karta.next;;.Text:=Trim(IBQuery_ipr.fieldbyname('fio').Value);not
IBQuery_ipr_skl.active then IBQuery_ipr_skl.open();:=DataModule1.IBQuery_ipr.Fieldbyname('id_prog_skl').Value;.IBQuery_ipr_skl.Locate('id_prog_skl',s,
[]);_skl.Text:=Trim(IBQuery_ipr.fieldbyname('prog_skl').Value);_skl.Tag:=DataModule1.IBQuery_ipr.Fieldbyname('id_prog_skl').Value;
…not IBQuery_prac.active then IBQuery_prac.open();:=DataModule1.IBQuery_ipr.Fieldbyname('sotrudnik').Value;.IBQuery_prac.Locate('id_sotrudnic',s,
[]);_prac.Text:=Trim(IBQuery_prac.fieldbyname('sotrudnic').Value);_prac.Tag:=s;
.Text:=Trim(IBQuery_ipr.fieldbyname('msek_n').Value);.DateTime:=IBQuery_ipr.fieldbyname('dat_zap').Value;.DateTime:=IBQuery_ipr.fieldbyname('dat_spivb').Value;.DateTime:=IBQuery_ipr.fieldbyname('dat_kontr').Value;_pr.Text:=Trim(IBQuery_ipr.fieldbyname('n_prog').Value);.Text:=IBQuery_ipr.fieldbyname('triv_inv').Value;not
IBQuery_obmej.Active then IBQuery_obmej.Active:=true;_obmej.First;not
IBQuery_obmej.Eof do
begin((IBQuery_obmej.FieldByName('ID_IPR').Value=IBQuery_ipr.fieldbyname('id_ipr').Value)
and (IBQuery_obmej.FieldByName('ID_VID_OBMEJ').Value=1))
then.Text:=IBQuery_obmej.fieldbyname('ID_STUP').Value;;_obmej.Next;;
…not IBQuery_obmej.Active then
IBQuery_obmej.Active:=true;_obmej.First;not IBQuery_obmej.Eof do
begin((IBQuery_obmej.FieldByName('ID_IPR').Value=IBQuery_ipr.fieldbyname('id_ipr').Value)
and (IBQuery_obmej.FieldByName('ID_VID_OBMEJ').Value=18))
then.Text:=IBQuery_obmej.fieldbyname('ID_STUP').Value;;_obmej.Next;;;;;
TFormAddIPR.FormShow(Sender:
TObject);_reabil.Enabled:=false;_add.Enabled:=true;FormAddIPR.tag=22
then_potencial.Clear;_skl.Clear;_zah.Clear;.Clear;.Clear;_prac.Clear;.Clear;
….Clear;;;TFormAddIPR.n_prKeyPress(Sender: TObject; var Key:
Char);not (key in ['0'..'9', #8]):=#0;;
TFormAddIPR.Edit3KeyPress(Sender: TObject; var Key: Char);not
(key in ['0'..'9', #8]):=#0;;.
//Текст модуля AddPacientAddPacient;
TFormAddPacient.m_exitClick(Sender: TObject);();;
TFormAddPacient.FormShow(Sender:
TObject);_prof.Visible:=false;_obl.Visible:=false;_r_obl.Visible:=false;_punkt.Visible:=false;_r_punkt.Visible:=false;_add_pac.Enabled:=true;_dd_ipr.Enabled:=false;.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';_sex.ItemIndex:=-1;_osv.ItemIndex:=-1;_gr.ItemIndex:=-1;_prof.ItemIndex:=-1;_obl.ItemIndex:=-1;_r_obl.ItemIndex:=-1;_nas_punkt.ItemIndex:=-1;_r_nas_punkt.ItemIndex:=-1;;
TFormAddPacient.m_add_pacClick(Sender:
TObject);:integer;,f2:string;, dali:
boolean;_add_pac.Enabled:=true;_dd_ipr.Enabled:=false;(fio.Text<>'')and(c_sex.ItemIndex<>-1)and(c_osv.ItemIndex<>-1)and
(c_gr.ItemIndex<>-1)and(c_obl.ItemIndex<>-1)and(c_prof.ItemIndex<>-1)and(c_r_obl.ItemIndex<>-1)and(c_nas_punkt.ItemIndex<>-1)(c_r_nas_punkt.ItemIndex<>-1)and(work.Text<>'')and(tel.Text<>'')and(street.Text<>'')and(index.Text<>'')
then:=YearsBetween(today,DateTimepicker1.Date);((res>=18) and (res<125))
then:=false;:=false;:=trim(fio.Text);not Datamodule1.IBQuery_O.Active then
Datamodule1.IBQuery_O.Active:=true;.IBQuery_O.First;Datamodule1.IBQuery3.RecordCount>=1
thennot Datamodule1.IBQuery_O.Eof
do:=Trim(Datamodule1.IBQuery_O.fieldbyname('fio').Value);f1=f2 then sovpadenie:=true;.IBQuery_O.next;;dali:=true;sovpadenie=false
then dali:=true;sovpadenie=true then if (Application.MessageBox('Пацієнт з
таким ПІБ вже є в системі, ви точно хочете додати цей
запис?','Увага!',MB_YesNo+MB_Iconerror)=idYes) then:=true;dali=true thenDataModule1.IBQuery
do:= False;.Clear;.Add('SELECT GEN_ID(GEN_OS_KARTA_ID,1) FROM RDB$DATABASE');:=
True;.Tag:=FieldByName('GEN_ID').AsInteger;;.Clear;.Add('INSERT INTO
OS_karta(fio, osvita, dr, index1, sex, gr_inv, id_prof, obl, r_obl, punkt,
r_punkt, tel, street, work, id_chel)');.Add('VALUES(:fio, :osvita, :dr,
:index1, :sex, :gr_inv, :id_prof, :obl, :r_obl, :punkt, :r_punkt, :tel,
:street, :work,
:id_chel)');('fio').Value:=fio.Text;('osvita').Value:=c_osv.Tag;('dr').AsDate:=DateTimePicker1.Date;('index1').Value:=StrToInt(index.text);('sex').Value:=c_sex.Tag;('gr_inv').Value:=c_gr.Tag;('id_prof').Value:=c_prof.Tag;('obl').Value:=c_obl.Tag;('r_obl').Value:=c_r_obl.Tag;('punkt').Value:=c_nas_punkt.Tag;('r_punkt').Value:=c_r_nas_punkt.Tag;('tel').value:=tel.Text;('street').value:=street.Text;('work').value:=work.Text;('id_chel').Value:=fio.Tag;;.MessageBox('Дані
записано','Увага!',MB_OK+MB_Iconinformation);_dd_ipr.Enabled:=true;_add_pac.Enabled:=false;.MessageBox('Не
вдалося додати запис','Увага!',MB_OK+MB_Iconerror);;;;Application.MessageBox('Ви
невірно заповнили дату
народження','Увага!',MB_OK+MB_Iconerror);Application.MessageBox('Ви заповнили
не всі поля','Увага!',MB_OK+MB_Iconerror);
.IBQuery3.Active:=false;.IBQuery3.Active:=true;.IBQuery3.Last;.StatusBar1.Panels[0].Text
:= 'Кількість пацієнтів: '+IntToStr(DataModule1.IBQuery3.RecordCount);;
TFormAddPacient.FormCreate(Sender:
TObject);.IBTable_Sex.Active:=true;DataModule1
do_sex.Clear;.close();not(ibquery4.active) then
ibquery4.open();.first();not(ibquery4.eof)
do_sex.items.add(Trim(ibquery4.fieldbyname('SEX').asstring));.next;;.first();;
TFormAddPacient.FormCreate(Sender:
TObject);.IBTable_Sex.Active:=true;DataModule1
do_sex.Clear;.close();not(ibquery4.active) then
ibquery4.open();.first();not(ibquery4.eof)
do_sex.items.add(Trim(ibquery4.fieldbyname('SEX').asstring));.next;;.first();;
...DataModule1 do_r_nas_punkt.Clear;not(ibquery_rajon.active)
then ibquery_rajon.open();_rajon.first();not(ibquery_rajon.eof)
do_r_nas_punkt.items.add(ibquery_rajon.fieldbyname('RAJON').asstring);_rajon.next;;_rajon.first();;;
TFormAddPacient.c_sexChange(Sender:
TObject);:integer;.ibquery4.first();i:=0 to c_sex.itemindex-1 do
begin.ibquery4.Next;;_sex.Tag:=DataModule1.IBQuery4.fieldbyname('ID_SEX').Value;;
...
TFormAddPacient.c_r_nas_punktChange(Sender:
TObject);:integer;not DataModule1.IBQuery_rajon.active then
DataModule1.IBQuery_rajon.active:=true;.ibquery_rajon.first();i:=0 to
c_r_nas_punkt.itemindex-1 do
begin.ibquery_rajon.Next;;_r_nas_punkt.Tag:=DataModule1.IBQuery_rajon.fieldbyname('ID_RAJON').Value;_r_punkt.Visible:=true;;
TFormAddPacient.m_dd_iprClick(Sender:
TObject);((DataModule1.IBQuery3.RecordCount>0) and
(DataModule1.IBQuery3.RecNo>0)) then(not Assigned(FormAddIPR))
then:=TFormAddIPR.Create(Self);.fio.Text:=FormAddPacient.fio.Text;.fio.Tag:=FormAddPacient.fio.Tag;.Tag:=11;.ShowModal();;;
...
TFormAddPacient.SpeedButton_r_punktClick(Sender:
TObject);(not Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Райони
населеного
пункту';.IBQuery_rajon.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_rajon;.Tag:=11;.ShowModal();;
TFormAddPacient.indexKeyPress(Sender: TObject; var Key:
Char);not (key in ['0'..'9', #8]) then Key:=#0; end;
TFormAddPacient.telKeyPress(Sender: TObject; var Key:
Char);not (key in ['0'..'9', #8, '-', ')', '+', '(' ]) then Key:=#0; end;.
//Текст модуля AvtorizAvtoriz;
TFormAvtoriz.m_exitClick(Sender: TObject);.tag:=2;.Visible:=false;(not
Assigned(MainForm)) then:=TMainForm.Create(Self);.Show;.Visible:=false;;
TFormAvtoriz.m_enterClick(Sender: TObject);:Textfile;,s, key:
string;_pas,
result:string;,q:integer;:='9';:=ExtractFilePath(Application.ExeName)+'pas.toc';(f,path);not
FileExists(path) then(f);.MessageBox('Не задано пароль. Будь ласка задайте
пароль для
програми','Увага',mb_Ok+mb_Iconinformation);(f,s);(f);(f);:=pas.text;(f,old_pas);
//дешифрованиеi := 1 to Length(old_pas)
do:=(Ord(old_pas[i])-(Ord(Key[(Pred(i) mod Length(Key))+1])-Ord('0')));q<0
then Inc(q,256);_pas[i]:=Chr(q);:=old_pas;;(f);
//if pas.text='5' thenpas.text=old_pas
then.tag:=1;.Visible:=false;(not Assigned(MainForm))
then:=TMainForm.Create(Self);.Show;.Visible:=false;.MessageBox('Невірно введено
пароль!','Увага',mb_Ok+mb_Iconinformation);.Clear;_enter.enabled:=false;_exit.enabled:=false;;;;
TFormAvtoriz.RGClick(Sender: TObject);RG.ItemIndex=0
then.Visible:=true;_enter.enabled:=true;_exit.enabled:=false;.Visible:=false;_enter.enabled:=false;_exit.enabled:=true;;;
TFormAvtoriz.FormCreate(Sender:
TObject);.Visible:=false;_enter.enabled:=false;_exit.enabled:=false;;.
//Текст модуля DovidnikDovidnik;
TFormDovidnik.FormClose(Sender: TObject;Action:
TCloseAction);.TabVisible:=false;.TabVisible:=false;;
TFormDovidnik.BitBtn_add_mClick(Sender: TObject);(not
Assigned(FormAddDovMKH))
then:=TFormAddDovMKH.Create(Self);DBGrid8.DataSource=DataModule1.ds_mkh
then.Tag:=1;.edit1.Clear;.edit2.Clear;;DBGrid8.DataSource=DataModule1.ds_mkh10
then.Tag:=2;.edit1.Clear;.edit2.Clear;;.ShowModal();;
TFormDovidnik.BitBtn_del_mClick(Sender:
TObject);:integer;((FormDovidnik.Tag=1) or (FormDovidnik.Tag=13))
thenApplication.MessageBox('Ви дійсно бажаєте видалити цей запис? Це також
видалить всі зв`язані з ним дані','Увага!',mb_YesNo+mb_Iconquestion)=idYes
thenDataModule1
do.Close;:=DataModule1.IBQuery_mkh.FieldByName('id_diagnoz').AsInteger;.SQL.Clear;.SQL.Add('Delete
From SPR_DIAGNOZ WHERE
id_diagnoz='+IntToStr(i));.ExecSQL;_mkh.active:=false;_mkh.active:=true;;;if
((FormDovidnik.Tag=2) or (FormDovidnik.Tag=14)) thenApplication.MessageBox('Ви
дійсно бажаєте видалити цей запис? Це також видалить всі зв`язані з ним
дані','Увага!',mb_YesNo+mb_Iconquestion)=idYes thenDataModule1
do.Close;:=DataModule1.IBQuery_mkh10.FieldByName('id_mkh_10').AsInteger;.SQL.Clear;.SQL.Add('Delete
From SPR_MKH_10 WHERE
id_mkh_10='+IntToStr(i));.ExecSQL;_mkh10.active:=false;_mkh10.active:=true;;;;;
TFormDovidnik.BitBtn_addClick(Sender: TObject);(not
Assigned(FormAddDov)) then:=TFormAddDov.Create(Self);DBGrid7.DataSource=DataModule1.ds_prof
then FormDovidnik.Tag:=3;DBGrid7.DataSource=DataModule1.ds_termin then
FormDovidnik.Tag:=4;DBGrid7.DataSource=DataModule1.ds_obsjag then
FormDovidnik.Tag:=5;DBGrid7.DataSource=DataModule1.ds_misce then FormDovidnik.Tag:=6;DBGrid7.DataSource=DataModule1.ds_prac
then FormDovidnik.Tag:=7;DBGrid7.DataSource=DataModule1.ds_r_obl then
FormDovidnik.Tag:=8;DBGrid7.DataSource=DataModule1.ds_obl then
FormDovidnik.Tag:=9;DBGrid7.DataSource=DataModule1.ds_punkt then FormDovidnik.Tag:=10;DBGrid7.DataSource=DataModule1.ds_rajon
then FormDovidnik.Tag:=11;
.edit1.Clear;.ShowModal();;
TFormDovidnik.BitBtn_delClick(Sender:
TObject);:integer;((FormDovidnik.Tag=3) or (FormDovidnik.Tag=15))
thenApplication.MessageBox('Ви дійсно бажаєте видалити цей запис? Це також
видалить всі зв`язані з ним дані','Увага!',mb_YesNo+mb_Iconquestion)=idYes
thenDataModule1
do:=DataModule1.IBQuery_prof.FieldByName('id_prof').AsInteger;.SQL.Clear;.SQL.Add('Delete
From SPR_PROF WHERE id_prof='+IntToStr(i));.ExecSQL;_prof.active:=false;_prof.active:=true;;;
...if ((FormDovidnik.Tag=11) or (FormDovidnik.Tag=23))
thenApplication.MessageBox('Ви дійсно бажаєте видалити цей запис? Це також
видалить всі зв`язані з ним дані','Увага!',mb_YesNo+mb_Iconquestion)=idYes thenDataModule1
do:=DataModule1.IBQuery_rajon.FieldByName('id_rajon').AsInteger;.SQL.Clear;.SQL.Add('Delete
From SPR_rajon WHERE
id_rajon='+IntToStr(i));.ExecSQL;_rajon.active:=false;_rajon.active:=true;;;;;
TFormDovidnik.BitBtn_red_mClick(Sender: TObject);(not
Assigned(FormAddDovMKH))
then:=TFormAddDovMKH.Create(Self);DBGrid8.DataSource=DataModule1.ds_mkh
then.Tag:=13;DBGrid8.DataSource=DataModule1.ds_mkh10
then.Tag:=14;;.ShowModal();;
TFormDovidnik.BitBtn_redClick(Sender:
TObject);DBGrid7.DataSource=DataModule1.ds_prof then begin(not
Assigned(FormAddDov)) then:=TFormAddDov.Create(Self);.Tag:=15;.ShowModal();
...DBGrid7.DataSource=DataModule1.ds_rajon then begin(not
Assigned(FormAddDov)) then:=TFormAddDov.Create(Self);.Tag:=23;.ShowModal();;;.
//Текст модуля IPRViewIPRview;
TFormIPRview.m_delClick(Sender:
TObject);:integer;Application.MessageBox('Ви дійсно бажаєте видалити цей запис?
Це також видалить всі зв`язані з ним
дані','Увага!',mb_YesNo+mb_Iconquestion)=idYes thenDataModule1
do.Close;:=DataModule1.IBQuery_ipr.FieldByName('id_ipr').AsInteger;.SQL.Clear;.SQL.Add('Delete
From IPR WHERE
id_ipr='+IntToStr(i));.ExecSQL;_ipr.active:=false;_ipr.active:=true;;;;
TFormIPRview.m_redClick(Sender: TObject);(not
Assigned(FormAddIPR)) then.CreateForm(TFormAddIPR, FormAddIPR);.fio.Text:=
DataModule1.IBQuery3.fieldbyname('fio').Value;.fio.Tag:=
DataModule1.IBQuery_ipr.fieldbyname('id_chel').Value;.n_pr.Tag:=
DataModule1.IBQuery_ipr.fieldbyname('n_prog').Value;.Tag:=22;.ShowModal();;
TFormIPRview.FormActivate(Sender: TObject);,
id_s:string;.IBQuery_ipr.Active:=false;.IBQuery_ipr.Active:=true;DataModule1.IBQuery_ipr.RecordCount>=1
then_red.Enabled:=true;_del.Enabled:=true;_obmej.Enabled:=true;_reabil.Enabled:=true;_excel.Enabled:=true;not
DataModule1.IBQuery_vid_obmej.Active then
DataModule1.IBQuery_vid_obmej.Active:=true;.IBQuery_vid_obmej.First;_obmej.Clear;not
DataModule1.IBQuery_vid_obmej.Eof
do_obmej.Lines.Add(DataModule1.IBQuery_vid_obmej.FieldByName('VID_OBMEJ').Value);.IBQuery_vid_obmej.Next;;_stup.Clear;(DataModule1.IBQuery_ipr.Fieldbyname('ID_IPR').Value<>null)
then.IBQuery_stup.active:=true;:=DataModule1.IBQuery_ipr.Fieldbyname('ID_IPR').Value;not
DataModule1.IBQuery_obmej.Active then
DataModule1.IBQuery_obmej.Active:=true;.IBQuery_obmej.First;not DataModule1.IBQuery_obmej.Eof
do(DataModule1.IBQuery_obmej.FieldByName('ID_IPR').Value=kod)
thenDataModule1.IBQuery_obmej.fieldbyname('ID_STUP').Value
then_s:=DataModule1.IBQuery_obmej.fieldbyname('ID_STUP').Value;.IBQuery_stup.Locate('id_stup',id_s,[]);_stup.Lines.Add(Trim(DataModule1.IBQuery_stup.fieldbyname('STUP').Value));;.IBQuery_obmej.Next;;;_red.Enabled:=false;_del.Enabled:=false;_obmej.Enabled:=false;_reabil.Enabled:=false;_excel.Enabled:=false;;FormAvtoriz.tag=2
then_red.Enabled:=false;_del.Enabled:=false;_reabil.Enabled:=false;;;
TFormIPRview.DBGrid_iprCellClick(Column: TColumn);,
id_s:string;_stup.Clear;.IBQuery_ipr.active:=true;.IBQuery_stup.Active:=true;DataModule1.IBQuery_ipr.RecordCount>0
then:=DataModule1.IBQuery_ipr.Fieldbyname('ID_IPR').Value;not DataModule1.IBQuery_obmej.Active
then DataModule1.IBQuery_obmej.Active:=true;.IBQuery_obmej.First;not
DataModule1.IBQuery_obmej.Eof do
begin(DataModule1.IBQuery_obmej.FieldByName('ID_IPR').Value=kod)
thenDataModule1.IBQuery_obmej.fieldbyname('ID_STUP').Value then_s:=DataModule1.IBQuery_obmej.fieldbyname('ID_STUP').Value;.IBQuery_stup.Locate('id_stup',id_s,[]);_stup.Lines.Add(Trim(DataModule1.IBQuery_stup.fieldbyname('STUP').Value));;.IBQuery_obmej.Next;;;;
TFormIPRview.m_obmejClick(Sender: TObject);obm.Visible=true
then obm.Visible:=falseif obm.Visible=false then obm.Visible:=true;;
TFormIPRview.m_reabilClick(Sender: TObject);:integer;(not
Assigned(FormReabil))
then:=TFormReabil.Create(Self);:=DataModule1.IBQuery_ipr.Fieldbyname('ID_IPR').Value;.TreeView.Tag:=kod;.ShowModal();;
TFormIPRview.m_excelClick(Sender: TObject);: variant;:
Tinifile;:integer;, kod, row: integer;_ch:integer;:boolean;, obl, r, robl, ind,
st, punkt, propiska, path, ex :string;:=
CreateOleObject('Excel.Application');.Visible := false;.DisplayAlerts:=
false;.Application.EnableEvents:=False;.Workbooks.Open('E:\Diplom\1.xlsx',
UpdateLinks:=0);.ActiveWorkBook.Sheets.Item[1].Activate;_ch:=DataModule1.IBQuery_ipr.FieldByName('id_chel').value;.IBQuery3.Locate('id_chel',id_ch,
[]);:= TIniFile.Create(extractfilepath(paramstr(0))+'Path.ini');:=MyIni.ReadString('Open','Properties','default
value');:=MyIni.ReadBool('View',
'CheckboxVal',false);:=Trim(DataModule1.IBQuery3.FieldByName('fio').AsString);:=0;i:=0
to length(ex) doex[i]='\' then slesh:=slesh+1;;slesh>1 then
path:=ex+'\'+s+'_'+datetostr(now())+'.xls'path:=ex+s+'_'+datetostr(now())+'.xls';.ActiveWorkbook.SaveAs(path,
FileFormat:=-4143, Password:='', WriteResPassword:='',
ReadOnlyRecommended:=false,
CreateBackup:=false);.Workbooks.Close;.Workbooks.Open(path,
UpdateLinks:=0);DataModule1 do
begin.ActiveWorkbook.WorkSheets[1].Cells[20,2]:=DataModule1.IBQuery3.FieldByName('fio').AsString;.ActiveWorkbook.WorkSheets[1].Cells[22,5]:=DataModule1.IBQuery3.FieldByName('dr').AsString;.ActiveWorkbook.WorkSheets[1].Cells[26,3]:=DataModule1.IBQuery3.FieldByName('tel').AsString;.ActiveWorkbook.WorkSheets[1].Cells[30,6]:=DataModule1.IBQuery3.FieldByName('work').AsString;:=Trim(ibquery3.Fieldbyname('sex1').Value);.ActiveWorkbook.WorkSheets[1].Cells[23,3]:=s;:=Trim(ibquery3.Fieldbyname('id_prof1').Value);.ActiveWorkbook.WorkSheets[1].Cells[29,4]:=s;:=Trim(ibquery3.Fieldbyname('osvita1').Value);.ActiveWorkbook.WorkSheets[1].Cells[28,4]:=s;:=Trim(ibquery3.Fieldbyname('gr_inv1').Value);.ActiveWorkbook.WorkSheets[1].Cells[32,5]:=s;:=Trim(ibquery3.Fieldbyname('punkt1').Value);:=DataModule1.IBQuery3.FieldByName('street').AsString;:=Trim(DataModule1.IBQuery3.FieldByName('index1').AsString);:=Trim(IBQuery3.FieldByName('r_obl1').AsString);:=Trim(IBQuery3.FieldByName('r_punkt1').AsString);:=Trim(IBQuery3.FieldByName('obl1').AsString);:=ind+',
'+obl+' обл., '+robl+'р.обл., '+punkt+', р-н '+r+',
'+st;.ActiveWorkbook.WorkSheets[1].Cells[24,5]:=propiska;.ActiveWorkbook.WorkSheets[1].Cells[13,12]:=DataModule1.IBQuery_ipr.FieldByName('n_prog').AsString;.ActiveWorkbook.WorkSheets[1].Cells[17,4]:=DataModule1.IBQuery_ipr.FieldByName('dat_zap').AsString;.ActiveWorkbook.WorkSheets[1].Cells[17,9]:=DataModule1.IBQuery_ipr.FieldByName('msek_n').AsString;.ActiveWorkbook.WorkSheets[1].Cells[33,9]:=DataModule1.IBQuery_ipr.FieldByName('triv_inv').AsString;.ActiveWorkbook.WorkSheets[1].Cells[113,3]:=DataModule1.IBQuery_ipr.FieldByName('dat_spivb').AsString;.ActiveWorkbook.WorkSheets[1].Cells[116,7]:=DataModule1.IBQuery_ipr.FieldByName('dat_kontr').AsString;
not DataModule1.IBQuery_ipr_skl.Active then
DataModule1.IBQuery_ipr_skl.Active:=true;:=DataModule1.IBQuery_ipr.FieldByName('id_prog_skl').AsInteger;.IBQuery_ipr_skl.Locate('id_prog_skl',i,[]);:=DataModule1.IBQuery_ipr_skl.Fields[1].Value;.ActiveWorkbook.WorkSheets[1].Cells[34,7]:=s;
....IBQuery_prac.Open;:=DataModule1.IBQuery_ipr.FieldByName('sotrudnik').AsInteger;.IBQuery_prac.Locate('id_sotrudnic',i,[]);:=DataModule1.IBQuery_prac.Fields[1].Value;.ActiveWorkbook.WorkSheets[1].Cells[135,7]:=s;.IBQuery_obmej.Active:=true;.IBQuery_obmej.First;not
DataModule1.IBQuery_obmej.Eof
doDataModule1.IBQuery_obmej.FieldByName('id_ipr').Value=DataModule1.IBQuery_ipr.FieldByName('id_ipr').Value
then:=DataModule1.IBQuery_obmej.FieldByName('id_vid_obmej').AsInteger;i=1 thenif
DataModule1.IBQuery_obmej.FieldByName('id_stup').AsInteger=1
then.ActiveWorkbook.WorkSheets[1].Cells[44,9]:='X'DataModule1.IBQuery_obmej.FieldByName('id_stup').AsInteger=2
then.ActiveWorkbook.WorkSheets[1].Cells[44,10]:='X'DataModule1.IBQuery_obmej.FieldByName('id_stup').AsInteger=3
then.ActiveWorkbook.WorkSheets[1].Cells[44,11]:='X';;;;
...i=18 thenif
DataModule1.IBQuery_obmej.FieldByName('id_stup').AsInteger=1
then.ActiveWorkbook.WorkSheets[1].Cells[52,12]:='X'DataModule1.IBQuery_obmej.FieldByName('id_stup').AsInteger=2
then.ActiveWorkbook.WorkSheets[1].Cells[52,13]:='X'DataModule1.IBQuery_obmej.FieldByName('id_stup').AsInteger=3
then.ActiveWorkbook.WorkSheets[1].Cells[52,14]:='X';;;;;.IBQuery_obmej.next;;.IBQuery_reabil.Active:=true;not
DataModule1.IBQuery_obsjag.Active then
DataModule1.IBQuery_obsjag.Active:=true;not DataModule1.IBQuery_termin.Active
then DataModule1.IBQuery_termin.Active:=true;not
DataModule1.IBQuery_misce.Active then
DataModule1.IBQuery_misce.Active:=true;.IBQuery_reabil.First;.IBQuery_termin.First;.IBQuery_misce.First;.IBQuery_obsjag.First;not
DataModule1.IBQuery_reabil.Eof
doDataModule1.IBQuery_reabil.FieldByName('id_ipr').Value=DataModule1.IBQuery_ipr.FieldByName('id_ipr').Value
then:=56;i:=1 to 51 doDataModule1.IBQuery_reabil.FieldByName('id_zah').Value=i
theni=51 then
row:=row+1;:=row+i;:=DataModule1.IBQuery_reabil.FieldByName('id_obsyag').Value;.IBQuery_obsjag.Locate('id_obsyag',kod,[]);:=Trim(DataModule1.IBQuery_obsjag.Fieldbyname('obsyag').Value);.ActiveWorkbook.WorkSheets[1].Cells[row,4]:=s;
:=DataModule1.IBQuery_reabil.FieldByName('id_termin').Value;.IBQuery_termin.Locate('id_termin',kod,[]);:=Trim(DataModule1.IBQuery_termin.Fieldbyname('termin').Value);.ActiveWorkbook.WorkSheets[1].Cells[row,7]:=s;
:=DataModule1.IBQuery_reabil.FieldByName('id_misce').Value;.IBQuery_misce.Locate('id_misc',kod,[]);:=Trim(DataModule1.IBQuery_misce.Fieldbyname('misc').Value);.ActiveWorkbook.WorkSheets[1].Cells[row,9]:=s;;;;.IBQuery_reabil.next;;;(ExcelApp.ActiveWorkbook.Save)
then Application.MessageBox('Документ
сформовано','Увага!',mb_OK+mb_Iconinformation);.Workbooks.Close;.Free;check
then.Workbooks.Open(path, UpdateLinks:=0);.Visible:=True;:= Unassigned;;;
TFormIPRview.FormShow(Sender:
TObject);.IBQuery_ipr.Active:=false;.IBQuery_ipr.Active:=false;;.
//Текст модуля NastrNastr;
TFormNastr.B_obzorClick(Sender:
TObject);TFormNastr.B_obzorClick(Sender: TObject);not OpenDialog1.Execute then
exit;.Text:=Opendialog1.FileName;;
//Текст модуля PathExPathEx;
PathEx;
, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,, jpeg, ExtCtrls, Buttons, StdCtrls, inifiles, Filectrl,ShlObj;
= class(TForm): TEdit;: TButton;: TLabel;: TCheckBox;:
TBitBtn;: TImage;FormShow(Sender: TObject);zberejClick(Sender: TObject);obzorClick(Sender:
TObject);
{ Private declarations }
{ Public declarations };
: TFormPath;
{$R *.dfm}BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam:
LPARAM; lpData: LPARAM): Integer; stdcall;(uMsg = BFFM_INITIALIZED) then(hwnd,
BFFM_SETSELECTION, 1, lpData);:= 0;;
GetFolderDialog(Handle: Integer; Caption: string; var
strFolder: string): Boolean;_STATUSTEXT = $0004;_NEWDIALOGSTYLE =
$0040;_RETURNONLYFSDIRS = $0080;_SHAREABLE = $0100;_USENEWUI = BIF_EDITBOX or
BIF_NEWDIALOGSTYLE;
: TBrowseInfo;: PItemIDList;: PItemIDList;: PAnsiChar;:=
False;:= StrAlloc(MAX_PATH);(Handle, CSIDL_DRIVES, JtemIDList);BrowseInfo do:=
GetActiveWindow;:= JtemIDList;(hwndOwner, CSIDL_DRIVES, JtemIDList);
{ Возврат названия выбранного элемента }:=
StrAlloc(MAX_PATH);
{ Установка названия диалога выбора папки }:= PChar(Caption);
//
{ Флаги, контролирующие возврат }:= @BrowseCallbackProc;
{ Дополнительная информация, которая отдаётся обратно в
обратный вызов (callback) }:= LongInt(PChar(strFolder));;
:= SHBrowseForFolder(BrowseInfo);
(ItemIDList <> nil) thenSHGetPathFromIDList(ItemIDList,
Path) then:= Path;:= True;;;
TFormPath.FormShow(Sender: TObject);: Tinifile;:=
TIniFile.Create(extractfilepath(paramstr(0))+'Path.ini');.Text:=MyIni.ReadString('Open','Properties','default
value');.Checked:=MyIni.ReadBool('View', 'CheckboxVal',
false);.Free;;TFormPath.zberejClick(Sender: TObject);: Tinifile;:=
TIniFile.Create(extractfilepath(paramstr(0))+'Path.ini');.WriteBool('View',
'CheckboxVal', CheckBox1.Checked);.Free;;;
TFormPath.obzorClick(Sender: TObject);: String;:
Tinifile;:='E:\Diplom';GetFolderDialog(Application.Handle, 'Оберіть папку для
збереження довідок', sFolder) then Path.Text:= sFolder; MyIni:=
TIniFile.Create(extractfilepath(paramstr(0))+'Path.ini');
MyIni.WriteString('Open','Properties',Path.Text ); MyIni.WriteBool('View',
'CheckboxVal', CheckBox1.Checked); MyIni.Free;;.
//Текст модуля DataModuleDataModule;
TDataModule1.DataModuleCreate(Sender: TObject);:
Tinifile;:string;.IBDatabase1.Connected:=false;.IBQuery_ipr.Active:=false;.IBQuery2.Active:=false;.IBQuery3.Active:=false;:=
TIniFile.Create(extractfilepath(paramstr(0))+'PathDB.ini');FileExists(MyIni.ReadString('Open','Properties','default
value'))
then.Tag:=1;.DatabaseName:=MyIni.ReadString('Open','Properties','default value');.IBDatabase1.Connected:=true;.Tag:=2;('Файл
бази даних не знайдено, вкажіть файл бази даних', mtWarning,[mbOK],0);(not
Assigned(FormNastr))
then:=TFormNastr.Create(Self);.ShowModal();:=FormNastr.path.Text;.WriteString('Open','Properties',
PathToDb);.DatabaseName:=MyIni.ReadString('Open','Properties','default
value');.IBDatabase1.Connected:=true;.Tag:=1;.Tag:=2;;;.IBQuery_ipr.Active:=true;.IBQuery2.Active:=true;.IBQuery3.Active:=true;.IBTable_Sex.Active:=true;.Free;(not
Assigned(FormAvtoriz)) then:=TFormAvtoriz.Create(Self);.ShowModal();;.
//Текст модуля ReabilReabil;
TFormReabil.m_exitClick(Sender:
TObject);();;TFormReabil.SetTree(par_level: integer;
parent_node:TTreeNode);qryTemp:TIBQuery;_node :
TTreeNode;:integer;:=TIBQuery.Create(Self);.Database:=datamodule1.IBDatabase1;.SQL.Text:='select
id_zah, zah, vetka from spr_zah where vetka='+inttostr(par_level)+' order by
id_zah';.Open();
(* with datamodule1 do_ZAH.
Close();_ZAH.ParamByName('PAR_VETKA').Value:=par_level;_ZAH. Open(); *)
not(qryTemp.Eof) do_node:=TreeView.Items.AddChild(parent_node,
Trim(qryTemp.FieldByName('ZAH').AsString));:=qryTemp.FieldByName('ID_ZAH').AsInteger;_node.Data:=@i;(i,
curr_node);.Next();;.Close();;
TFormReabil.FormCreate(Sender: TObject);.Items.Clear;(0,
nil);DataModule1 do_ob.Visible:=false;_m.Visible:=false;_t.Visible:=false;_z.Active:=true;_obsjag.Active:=true;not(IBQuery_obsjag.eof)
do_obm.items.add(Trim(IBQuery_obsjag.fieldbyname('OBSYAG').asstring));_obsjag.next;;_termin.Active:=true;not(IBQuery_termin.eof)
do_termin.items.add(Trim(IBQuery_termin.fieldbyname('TERMIN').asstring));_termin.next;;_misce.Active:=true;not(IBQuery_misce.eof)
do_misc.items.add(Trim(IBQuery_misce.fieldbyname('MISC').asstring));_misce.next;;;;TFormReabil.m_addClick(Sender:
TObject);DataModule1.IBQuery do begin;.Clear;.Add('INSERT INTO Reabil (ID_IPR,
ID_OBSYAG, ID_ZAH, ID_TERMIN, ID_MISCE)');.Add('VALUES(:ID_IPR, :ID_OBSYAG,
:ID_ZAH, :ID_TERMIN,
:ID_MISCE)');('ID_IPR').Value:=TreeView.Tag;('ID_OBSYAG').Value:=c_obm.Tag;('ID_ZAH').Value:=BitBtnAdd.Tag;('ID_Termin').Value:=c_termin.Tag;('ID_MISCE').Value:=c_misc.Tag;;.Caption:='Дані
записано';.Caption:='Не вдалося додати
запис';;;.IBQuery_Reabil.Close;.IBQuery_Reabil.Open;;
TFormReabil.BitBtnAddClick(Sender: TObject);,
id2:string;:boolean;DataModule1.IBQuery do
begin;:=IntToStr(TreeView.Tag);:=IntToStr(BitBtnAdd.Tag);:=false;not
Datamodule1.IBQuery_reabil.Active then
Datamodule1.IBQuery_reabil.Active:=true;.IBQuery_reabil.First;not
Datamodule1.IBQuery_reabil.Eof do((Datamodule1.IBQuery_reabil.fieldbyname('id_zah').Value=id2)
and (Datamodule1.IBQuery_reabil.fieldbyname('id_ipr').Value=id1)) then
sovpadenie:=true;.IBQuery_reabil.next;;(sovpadenie=false)
then.Clear;(BitBtnAdd.Tag<>1)and(BitBtnAdd.Tag<>2)and(BitBtnAdd.Tag<>11)and(BitBtnAdd.Tag<>17)and(BitBtnAdd.Tag<>23)and(BitBtnAdd.Tag<>29)and(BitBtnAdd.Tag<>33)and(BitBtnAdd.Tag<>38)and(BitBtnAdd.Tag<>43)
then.Add('INSERT INTO Reabil (ID_IPR, ID_OBSYAG, ID_ZAH, ID_TERMIN,
ID_MISCE)');.Add('VALUES(:ID_IPR, :ID_OBSYAG, :ID_ZAH, :ID_TERMIN,
:ID_MISCE)');('ID_IPR').Value:=TreeView.Tag;('ID_OBSYAG').Value:=c_obm.Tag;('ID_ZAH').Value:=BitBtnAdd.Tag;('ID_Termin').Value:=c_termin.Tag;('ID_MISCE').Value:=c_misc.Tag;;.Caption:='Дані
записано';.Caption:='Не вдалося додати запис';;Label4.Caption:='Не можна
записати дані у заголовок';.Clear;.Add('UPDATE Reabil SET ID_OBSYAG=:ID_OBSYAG,
ID_TERMIN=:ID_TERMIN, ID_MISCE=:ID_MISCE where ID_IPR='+id1+' AND
ID_ZAH='+id2);('ID_OBSYAG').Value:=c_obm.Tag;('ID_Termin').Value:=c_termin.Tag;('ID_MISCE').Value:=c_misc.Tag;;.Caption:='Дані
перезаписано';.Caption:='Не вдалося відредагувати
запис';;;;.IBQuery_Reabil.Close;.IBQuery_Reabil.Open;;TFormReabil.c_obmChange(Sender:
TObject);:integer;.IBQuery_obsjag.first();i:=0 to c_obm.itemindex-1 do
begin.IBQuery_obsjag.Next;;_obm.Tag:=DataModule1.IBQuery_obsjag.fieldbyname('ID_OBSYAG').Value;;
TFormReabil.c_terminChange(Sender:
TObject);:integer;.IBQuery_termin.first();i:=0 to c_termin.itemindex-1 do
begin.IBQuery_termin.Next;;_termin.Tag:=DataModule1.IBQuery_termin.fieldbyname('ID_TERMIN').Value;_t.Visible:=true;;
TFormReabil.c_miscChange(Sender:
TObject);:integer;.IBQuery_misce.first();i:=0 to c_misc.itemindex-1 do
begin.IBQuery_misce.Next;;_misc.Tag:=DataModule1.IBQuery_misce.fieldbyname('ID_MISC').Value;_m.Visible:=true;;
TFormReabil.B_obClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Обсяги
реабілітації';.IBQuery_obsjag.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_obsjag;.Tag:=5;.ShowModal();;
TFormReabil.B_tClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Терміни
реабілітації';.IBQuery_termin.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_termin;.Tag:=4;.ShowModal();;
TFormReabil.B_mClick(Sender: TObject);(not
Assigned(FormDovidnik)) then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Місця
реабілітації';.IBQuery_misce.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_misce;.Tag:=6;.ShowModal();;
TFormReabil.c_obmDropDown(Sender:
TObject);_ob.Visible:=true;;
TFormReabil.TreeViewClick(Sender: TObject);,
id:integer;:string;:boolean;:=Trim(TreeView.Selected.Text);.IBQuery_z.Locate('ZAH',s,[]);:=DataModule1.IBQuery_z.FieldByName('ID_ZAH').AsInteger;.Tag:=kod;((BitBtnAdd.Tag=1)or(BitBtnAdd.Tag=2)or(BitBtnAdd.Tag=11)or(BitBtnAdd.Tag=17)or(BitBtnAdd.Tag=23)or(BitBtnAdd.Tag=29)or(BitBtnAdd.Tag=33)or(BitBtnAdd.Tag=38)or(BitBtnAdd.Tag=43))
then_obm.enabled:=false;_termin.enabled:=false;_misc.enabled:=false;_obm.ItemIndex:=-1;_termin.ItemIndex:=-1;_misc.ItemIndex:=-1;_obm.enabled:=true;_termin.enabled:=true;_misc.enabled:=true;_obm.ItemIndex:=-1;_termin.ItemIndex:=-1;_misc.ItemIndex:=-1;.Caption:='';:=false;not
Datamodule1.IBQuery_reabil.active then Datamodule1.IBQuery_reabil.active:=true;.IBQuery_reabil.First;not
Datamodule1.IBQuery_reabil.Eof
do((Datamodule1.IBQuery_reabil.fieldbyname('id_ipr').AsInteger=treeview.tag)and(Datamodule1.IBQuery_reabil.fieldbyname('id_zah').AsInteger=kod))
then:=true;_termin.tag:=Datamodule1.IBQuery_reabil.fieldbyname('id_termin').Asinteger;:=c_termin.tag;.IBQuery_termin.Locate('id_termin',id
,
[]);_termin.text:=Trim(Datamodule1.IBQuery_termin.fieldbyname('termin').Value);_obm.tag:=Datamodule1.IBQuery_reabil.fieldbyname('id_obsyag').Asinteger;:=c_obm.tag;.IBQuery_obsjag.Locate('id_obsyag',id
,
[]);_obm.text:=Trim(Datamodule1.IBQuery_obsjag.fieldbyname('obsyag').Value);_misc.tag:=Datamodule1.IBQuery_reabil.fieldbyname('id_misce').Asinteger;:=c_misc.tag;.IBQuery_misce.Locate('id_misc',id
, []);_misc.text:=Trim(Datamodule1.IBQuery_misce.fieldbyname('misc').Value);;.IBQuery_reabil.Next;;sovpadenie=false
then_obm.Text:='';_termin.Text:='';_misc.Text:='';;;;
TFormReabil.m_redClick(Sender: TObject);,
id2:integer;DataModule1.IBQuery do begin;:=TreeView.Tag;:= BitBtnAdd.Tag;.Clear;.Add('UPDATE
Reabil SET ID_IPR=:ID_IPR, ID_OBSYAG=:ID_OBSYAG, ID_ZAH=:ID_ZAH,
ID_TERMIN=:ID_TERMIN, ID_MISCE=:ID_MISCE WHERE id_ipr='+intToStr(id1)+' and
id_zah='+IntTostr(id2));('ID_OBSYAG').Value:=c_obm.Tag;('ID_Termin').Value:=c_termin.Tag;('ID_MISCE').Value:=c_misc.Tag;;.Caption:='Дані
перезаписано';.Caption:='Не вдалося відредагувати
запис';;;.IBQuery_Reabil.Close;.IBQuery_Reabil.Open;;.
//Текст модуля AddPasAddPas;
TFormredpas.m_exitClick(Sender: TObject);();;
TFormredpas.m_enterClick(Sender: TObject);:integer;:
Integer;:Textfile;, Key, result:string;_pas, new_pas:string;:='9';:='pas.toc';
//чтение(f,path);(f);not FileExists(path)
then(f);(f);(f,old_pas);(f);
//дешифрованиеi := 1 to Length(old_pas)
do:=(Ord(old_pas[i])-(Ord(Key[(Pred(i) mod Length(Key))+1])-Ord('0')));q<0
then Inc(q,256);_pas[i]:=Chr(q);:=old_pas;;;pas.text=old_pas
then_pas:=pas2.Text;
//шифрованиеi := 1 to Length(new_pas)
do:=(Ord(new_pas[i])+(Ord(Key[(Pred(i) mod
Length(Key))+1])-Ord('0')));q>=256 then Dec(q,256);_pas[i]:=Chr(q);:=new_pas;;
//запись(f,path);(f);(f, new_pas);(f);.MessageBox('Пароль
змінено','Увага',mb_Ok+mb_Iconinformation);();.MessageBox('Невірно введено
старий пароль','Увага',mb_Ok+mb_Iconinformation);;.Clear;.Clear;;.
//Текст модуля RedpacRedpac;
TFormRedpac.m_exitClick(Sender: TObject);();;
TFormRedpac.FormActivate(Sender:
TObject);:integer;DataModule1
do_sex.Clear;_osv.Clear;_gr.Clear;_prof.Clear;_obl.Clear;_r_obl.Clear;_nas_punkt.Clear;_r_nas_punkt.Clear;.Text:=Trim(ibquery3.fieldbyname('fio').Value);.Text:=Trim(ibquery3.fieldbyname('street').Value);.Text:=Trim(ibquery3.fieldbyname('index1').Value);.Text:=Trim(ibquery3.fieldbyname('work').Value);.Text:=Trim(ibquery3.fieldbyname('tel').Value);.Date:=ibquery3.fieldbyname('dr').AsDateTime;not
ibquery_O.active then ibquery_O.Active:=true;_O.Locate('id_chel',fio.Tag,
[]);not ibquery_sex.active then
ibquery_sex.open();_sex.first();not(ibquery_sex.eof)
do_sex.items.add(ibquery_sex.fieldbyname('SEX').asstring);_sex.next;;:=ibquery_O.fieldbyname('sex').value;.ibquery_sex.Locate('id_sex',kod,
[]);_sex.Text:=ibquery_sex.fieldbyname('sex').Value;_sex.Tag:=ibquery_sex.fieldbyname('id_sex').Value;_sex.first();_sex.Tag:=kod;
...not ibquery_rajon.Active then
ibquery_rajon.open();_rajon.first();not(ibquery_rajon.eof) do_r_nas_punkt.items.add(ibquery_rajon.fieldbyname('rajon').asstring);_rajon.next;;:=ibquery_O.fieldbyname('r_punkt').value;.ibquery_rajon.Locate('id_rajon',kod,
[]);_r_nas_punkt.Text:=ibquery_rajon.fieldbyname('rajon').Value;_r_nas_punkt.Tag:=ibquery_rajon.fieldbyname('id_rajon').Value;_rajon.first();_r_nas_punkt.Tag:=kod;;;
TFormRedpac.m_red_pacClick(Sender:
TObject);:integer;:string;:=IntToStr(fio.tag);(fio.Text<>'')and(c_sex.Text<>'')and(c_osv.Text<>'')and(c_gr.Text<>'')and(c_obl.Text<>'')and(c_prof.Text<>'')and(c_r_obl.Text<>'')and(c_nas_punkt.Text<>'')(c_r_nas_punkt.Text<>'')and(work.Text<>'')and(tel.Text<>'')and(street.Text<>'')and(index.Text<>'')
then:=YearsBetween(today,DateTimepicker1.Date);((res>=18) and (res<125))
thenDataModule1.IBQuery do begin;.Clear;.Add('UPDATE OS_karta SET fio=:fio,
osvita=:osvita, dr=:dr, index1=:index1, sex=:sex, gr_inv=:gr_inv,
id_prof=:id_prof, obl=:obl, r_obl=:r_obl, punkt=:punkt, r_punkt=:r_punkt,
tel=:tel, street=:street, work=:work where id_chel='+id);('fio').Value:=Trim(fio.Text);('osvita').Value:=c_osv.Tag;('dr').AsDate:=DateTimePicker1.Date;('index1').Value:=StrToInt(index.text);('sex').Value:=c_sex.Tag;('gr_inv').Value:=c_gr.Tag;('id_prof').Value:=c_prof.Tag;('obl').Value:=c_obl.Tag;('r_obl').Value:=c_r_obl.Tag;('punkt').Value:=c_nas_punkt.Tag;('r_punkt').Value:=c_r_nas_punkt.Tag;('tel').value:=Trim(tel.Text);('street').value:=Trim(street.Text);('work').value:=Trim(work.Text);;.MessageBox('Дані
перезаписано','Увага!',MB_OK+MB_Iconinformation);.MessageBox('Не вдалося відредагувати
запис','Увага!',MB_OK+MB_Iconerror);;;Application.MessageBox('Ви невірно
заповнили дату
народження','Увага!',MB_OK+MB_Iconerror);Application.MessageBox('Ви заповнили
не всі поля','Увага!',MB_OK+MB_Iconerror);.IBQuery3.Active:=false;.IBQuery3.Active:=true;.ibquery_O.Active:=false;.ibquery_O.Active:=true;.Close();;
TFormRedpac.SpeedButton_profClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Професії';.IBQuery_prof.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_prof;.Tag:=3;.ShowModal();;
TFormRedpac.SpeedButton_oblClick(Sender: TObject);(not
Assigned(FormDovidnik)) then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Oбласті';.IBQuery_obl.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_obl;.Tag:=9;.ShowModal();;TFormRedpac.SpeedButton_r_oblClick(Sender:
TObject);(not Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Райони
області';.IBQuery_r_obl.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_r_obl;.Tag:=8;.ShowModal();;
TFormRedpac.SpeedButton_punktClick(Sender: TObject);(not
Assigned(FormDovidnik))
then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Населений
пункт';.IBQuery_nas_punkt.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_punkt;.Tag:=10;.ShowModal();;
TFormRedpac.SpeedButton_r_punktClick(Sender: TObject);(not
Assigned(FormDovidnik)) then:=TFormDovidnik.Create(Self);.TabSheet2.TabVisible:=true;.PageControl1.ActivePage:=FormDovidnik.PageControl1.Pages[1];.PageControl1.Pages[1].Caption:='Райони
населеного
пункту';.IBQuery_rajon.Active:=true;.DBGrid7.DataSource:=DataModule1.ds_rajon;.Tag:=11;.ShowModal();;
TFormRedpac.telKeyPress(Sender: TObject; var Key: Char);not
(key in ['0'..'9', #8, '-', ')', '+', '(' ]):=#0;;
TFormRedpac.indexKeyPress(Sender: TObject; var Key: Char);not
(key in ['0'..'9', #8]) //,'a'..'z','A'..'Z',#8,#46]) or (key in
['а'..'я'])):=#0;;
TFormRedpac.c_osvChange(Sender: TObject);:integer;not
DataModule1.ibquery_osvita.active then
DataModule1.ibquery_osvita.active:=true;.ibquery_osvita.first();i:=0 to
c_osv.itemindex-1 do
begin.ibquery_osvita.Next;;_osv.Tag:=DataModule1.IBQuery_osvita.fieldbyname('ID_OSVITA').Value;;
TFormRedpac.c_grChange(Sender: TObject);:integer;not
DataModule1.IBQuery_gr.active then
DataModule1.IBQuery_gr.active:=true;.ibquery_gr.first();i:=0 to
c_gr.itemindex-1 do begin.ibquery_gr.Next;;_gr.Tag:=DataModule1.IBQuery_gr.fieldbyname('ID_GR_INV').Value;;
TFormRedpac.c_profChange(Sender: TObject);:integer;not
DataModule1.IBQuery_prof.active then
DataModule1.IBQuery_prof.active:=true;.ibquery_prof.first();i:=0 to
c_prof.itemindex-1 do begin.ibquery_prof.Next;;_prof.Tag:=DataModule1.IBQuery_prof.fieldbyname('ID_PROF').Value;_prof.Visible:=true;;
TFormRedpac.c_r_nas_punktChange(Sender: TObject);:integer;not
DataModule1.ibquery_rajon.active then
DataModule1.ibquery_rajon.active:=true;.ibquery_rajon.first();i:=0 to
c_r_nas_punkt.itemindex-1 do
begin.ibquery_rajon.Next;;_r_nas_punkt.Tag:=DataModule1.IBQuery_rajon.fieldbyname('ID_RAJON').Value;_r_punkt.Visible:=true;;
TFormRedpac.c_r_oblChange(Sender: TObject);:integer;not
DataModule1.IBQuery_r_obl.active then DataModule1.IBQuery_r_obl.active:=true;.ibquery_r_obl.first();i:=0
to c_r_obl.itemindex-1 do
begin.ibquery_r_obl.Next;;_r_obl.Tag:=DataModule1.IBQuery_r_obl.fieldbyname('ID_RAJON_OBL').Value;_r_obl.Visible:=true;;
TFormRedpac.c_nas_punktChange(Sender: TObject);:integer;not
DataModule1.IBQuery_nas_punkt.active then
DataModule1.IBQuery_nas_punkt.active:=true;.ibquery_nas_punkt.first();i:=0 to
c_nas_punkt.itemindex-1 do
begin.ibquery_nas_punkt.Next;;_nas_punkt.Tag:=DataModule1.IBQuery_nas_punkt.fieldbyname('ID_NAS_PUNKT').Value;_punkt.Visible:=true;;
TFormRedpac.c_oblChange(Sender: TObject);:integer;not
DataModule1.ibquery_obl.active then
DataModule1.ibquery_obl.active:=true;.ibquery_obl.first();i:=0 to
c_obl.itemindex-1 do
begin.ibquery_obl.Next;;_obl.Tag:=DataModule1.IBQuery_obl.fieldbyname('ID_OBL').Value;_obl.Visible:=true;;
.
Додаток В
Схема зв’язку таблиць
Рисунок В.1 - Схема взаємозв’язку таблиць