Автоматизація ведення бази даних індивідуальних програм реабілітації інвалідів

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

Автоматизація ведення бази даних індивідуальних програм реабілітації інвалідів

РЕФЕРАТ

Темою дипломного проекту є «Автоматизація ведення бази даних індивідуальних програм реабілітації інвалідів».

Об’єкт дослідження: система ведення індивідуальних програм реабілітацій інвалідів.

Мета роботи - дослідити сферу роботи МСЕК та розробити автоматизовану систему ведення індивідуальних програм реабілітацій інвалідів.

Загальна частина 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 - Схема взаємозв’язку таблиць

Похожие работы на - Автоматизація ведення бази даних індивідуальних програм реабілітації інвалідів

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!