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

 

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

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

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

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








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

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

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

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

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



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

Керівник роботи доц., к. т. н. Євтушенко Олександр Іванович






Кривий Ріг


Анотація


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

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

Зміст


Анотація

Вступ

1. Постановка завдання

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

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

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

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

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

1.6 Джерела розробки

2. Теоретичні дослідження технології використання мови SQL при розробці ГВС

2.1 Основні відомості про мову SQL

2.2 Типи даних SQL

2.3 Структура запитів до окремих таблиць

2.3.1 Оператор SELECT

2.3.2 Вибірка за умовою

2.3.3 Агрегатні функції

2.3.4 Сортування записів

2.4 Багатотабличні запити

2.4.1 Об'єднання таблиць

2.4.2 Використання оператора EXISTS

2.4.3 Використання об'єднання UNION

3. Основи технології СОМ при проектуванні ГВС

3.1 Базові поняття

3.2 Об'єкт СОМ

3.3 Інтерфейс

3.4 Інтерфейс IUnknown

3.5 Сервер СОМ

3.6 Реалізація СОМ в Delphi

3.6.1 Клас TComObject

3.6.2 Клас TTypedComObject

3.6.3 Інтерфейс IUnknown

3.6.4 Клас TComObjectFactory

3.6.5 Клас TTypedComObjectFactory

3.6.6 Клас TComClassManager

4. Опис функціональних можливостей і програмної реалізації розроблюваної системи

4.1 Функціональне призначення і технологічні особливості розробки

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

4.3 Опис моделі і структури таблиць бази даних

4.4 Інтерфейс користувача розроблюваної системи

4.5 Опис основних процедур і функцій системи, що розробляється

5. Економічне обґрунтування доцільності розробки програмного продукту

5.1 Організаційно-економічна частина

5.2 Розрахунок витрат праці на розробку програмного продукту

5.3 Витрати на ручну обробку інформації

5.4 Витрати на автоматизовану обробку інформації

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

6.1 Аналіз небезпечних і шкідливих виробничих чинників при роботі на компютері

6.2 Заходи щодо нормалізації робочої обстановки при роботі на компютері

6.3 Пожежна безпека

Висновки

Список літератури

Додаток А


Вступ


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

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

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

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

обіг товар гнучка delphi

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

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

Щоб реалізувати поставлену задачу потрібно обрати оптимальну мову програмування. Для вирішення цієї ЗАВДАННЯ найбільш підходить Delphi. Ця мова програмування має великі можливості щодо створення прикладного програмного забезпечення. Дозволяє створювати різноманітні програмні продукти у тому числі і програмні продукти для роботи з базами даних.

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

1. Постановка завдання


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


Найменування розробки: розробка елементів гнучкої спеціалізованої системи приватного підприємства. Система пройшла практичну апробацію і може бути впроваджена в ПП "Кришталь".


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


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

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


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


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

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

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

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

·help. hlp - довідковий файл системи.


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


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


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


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

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

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

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

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

·IBM-сумісний комп'ютер, не нижче Pentium IІ, RAM-128Mb, SVGA-800*600*16bit;

·Вільний простір на жорсткому диску не менш 2Мб;

Додаткове програмне забезпечення: інсталяція пакету MS Office.


1.6 Джерела розробки


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

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

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

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

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

2. Теоретичні дослідження технології використання мови SQL при розробці ГВС


2.1 Основні відомості про мову SQL


Мова SQL була розроблена фірмою IBM для своєї системи управління базами даних Db/2. Потім ця мова стала загальновизнаним стандартом при роботі з базами даних. Фактично, взаємодія користувача з сучасними СУБД здійснюється лише за допомогою цієї мови. На даний момент існує декілька стандартів, що описують цю мову.

По своїй структурі мова поділяється на три частини. У розділі DDL (Data Definition Language) зібрані команди, які задають структуру тих або інших об'єктів бази даних. До них відносяться таблиці, індекси, домени та інші структурні обєкти. Розділ DML (Data Manipulation Language) надає розробнику набір команд, що дозволяють маніпулювати даними. З їх допомогою можна розробляти вибірки даних, видаляти, додавати і змінювати записи. Розділ DCL (Data Control Language) складається із засобів, які визначають права доступу до об'єктів бази даних. Наприклад, дозволяють доступ до даних або забороняють його.

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


Рис.2.1 Взаємодія з базою даних за допомогою SQL


2.2 Типи даних SQL


Кожне значення, що зберігається в базі даних, має свій тип. Мова SQL, звичайно, підтримує типізацію значень. Основні типи даних приведені в таблиці 2.1.


Таблиця 2.1. Типи даних SQL

НазваОписTEXTПоля цього типу можуть зберігати рядок символів необмеженої довжиниCHARУ полях цього типа зберігається рядок тексту обмеженої довжини. У аргументі вказується максимальний розмір рядкаDECТип задає десяткове число. Аргумент складається з двох частин - розрядності і точності. Розрядність визначає кількість значущих цифр, з яких складається число. Точність визначає число цифр після коми. Точність не може бути більше розрядності. Якщо точність дорівнює нулю, то число є цілимNUMERICТип є двійником типу DECINTТип призначений для зберігання цілих чисел. Можливі значення знаходяться в проміжку від - 2 147 483 648 до 2 147 483 648SMALLINTТип призначений для зберігання цілих чисел. Можливі значення знаходяться в проміжку від - 32 768 до 32 768FLOATТип призначений для зберігання чисел з плаваючою крапкою. В аргументі вказується число, що визначає мінімальну точністьREALТип призначений для зберігання чисел з плаваючою крапкою. Цей тип відрізняється від типу FLOAT лише точністюDOUBLEТип відрізняється від REAL підвищеною точністюDATAТип призначений для зберігання дати TIMEТип призначений для зберігання часу

2.3 Структура запитів до окремих таблиць


Досить поширеним є завдання здобуття даних з однієї або декількох таблиць і формування на їх основі яких-небудь звітів. В даному розділі будуть викладені базові поняття SQL і способи створення відповідних запитів.


2.3.1 Оператор SELECT

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

[[ALL] | DISTINCT] { * | елемент_select [. елемент_select]. }{базова_таблиця | вираз} [псевдонім]

[. {базова_табліця | вистава} [псевдонім]].

[Where умова]

[GROUP BY назва поля (полів) [HAVING фраза]]:


2.3.2 Вибірка за умовою

Вибірку за умовою реалізує оператор WHERE. Оператор є частиною виразу SELECT і слугує для задання умов відбору записів в результуючий набір. В ході виконання запиту відбувається перевірка всіх записів на відповідність умові відбору. Як приклад можна привести досить простий запит:State,City,Company FROM CustomerState = 'CA'

При обробці запиту був виконаний відбір всіх записів, поля State який має значення СА.

Можна виробити вибірку по співпадаючих значеннях полів. Наприклад, необхідно знайти компанії, в яких телефон і факс мають один і той же номер. Умова запиту в цьому випадку буде досить простою:Company,Phone,Fax FROM CustomerPhone = Fax

Видалення повторних значень

Для здобуття результатів без значень, що повторюються, використовується оператор DISTINCT. Наприклад:DISTINCT Country FROM Customer

Обчислювані поля

Автоматичне обчислення значень полів доволі часто застосовується в найрізноманітніших запитах. Приклад відповідного запиту виглядає доволі просто:Onhand,onorder, (Onhand*onorder) AS

Вираз, (Onhand Onorder) AS Сума FROM Parts

В даному прикладі проводиться добуток і сума значень полів Onhand і Onorder.

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

Запит SELECT може також включати числові і текстові константи. Як приклад можна привести наступний запит:OnHand,OnOrder,'MUL', (OnHand + 1) AS Плюс,SUB, (OnHand - 1) AS Мінус FROM Parts

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

Оператори порівняння і логічні оператори

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

Логічні оператори дозволяють задати в запиті логічні умови. Оператор AND реалізує логічне "І. Оператор OR реалізує логічне "АБО. Вираз з його використанням, вважатиметься вірним, якщо хоча б одна з умов є істиною. Оператора NOT означає логічне заперечення. Його дія зводиться до того, що він інвертує логічну умову, перед якою його розташовують.

Як приклад можна привести запит, що дозволяє вибрати співробітників, які отримують заробітну плату в певному числовому проміжку. Дані будуть братися з таблиці Employee:LastName,FirstName,Salary FROM EmployeeSalary >= 25000 AND Salary <= 30000

В результаті виконання запиту повертаються імена співробітників із заробітною платою від 25 до 30 тисяч включно. В даному випадку оператор AND використовується для завдання діапазону вибраних значень.

Тепер можна змінити даний запит. Можна відшукати всіх співробітників, для яких окрім приведених вище умов поле PhoneЕxt яких має значення 22:LastName,FirstName,Salary,PhoneExt FROM EmployeeSalary >= 25000 AND Salary <= 30000 and PhoneExt = '22'

Якщо ж потрібно буде відшукати співробітників, поле Phoneext яких має значення, не рівне 22, запит буде трохи змінений:LastName,FirstName,Salary,PhoneExt FROM EmployeeSalary >= 25000 AND Salary <= 30000 and not PhoneExt = '22'

Як видно з тексту запиту, логічна умова NOT дозволила виключити непотрібні номери.

Тепер можна розглянути приклад запиту з використанням оператора OR. припустимо, що менеджерові знадобилося отримати списки всіх співробітників з прізвищем Johnson. Або тих співробітників, які отримують заробітну плату більше 45 000. Скласти запит буде нескладно:LastName,FirstName,Salary FROM EmployeeLastName = 'Johnson' or Salary > 45000

Варто звернути увагу на дію оператора Оr. У наборі даних були включені записи, значення поля Salary яких перевищувало 40 000, і ті записи, в яких поле Lastname мало значення Johnson.

Використання оператора IN

Оператор IN визначає масив значень, в який може входити або не входити значення поля даного запису. Наприклад, необхідно вибрати співробітників із заробітною платою 40 000, 55 500 і 25 000. Запит потрібно буде переробити:LastName,FirstName,Salary FROM EmployeeSalary = 40000 or Salary = 55500 or Salary = 25000

Проте цей же запит можна написати в коротшій і красивішій формі за допомогою оператора IN:LastName,FirstName,Salary FROM EmployeeSalary IN (40000, 55500, 25000)

В якості аргументів операторові IN були передані значення полів, по яким виконувався відбір записів.

Оператор IN може використовуватися і для пошуку символьних значень. Припустимо, що нам необхідно з'ясувати назви компаній, що знаходяться в містах Christiansted, Grand Cayman і St. Thomas. Ці дані міститися в таблиці Customer. Запит знову знадобиться трохи змінити:Company,City FROM CustomerCity IN (Christiansted,Grand Cayman,St. Thomas)

Використання оператора BETWEEN

Оператор BETWEEN використовується для створення діапазону значень, які використовуються для установки умови відбору записів. Цей оператор чутливий до порядку перерахування параметрів, що визначають кордони діапазону. Як приклад можна привести простий запит:CustomerID,EmployeeID,ShipName FROM OrdersEmployeeID BETWEEN 3 AND 5

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

Наступний приклад показує, як можна вибрати номери замовлень, виконаних за певний проміжок часу від 04.07.1996 до 08.07.1996:OrderlD,OrderDate,ShipName FROM OrdersOrderDate BETWEEN '07.04.1996' AND '07.08.1996'

Припустимо, що вимоги змінилися. Тепер необхідно вибрати ті номери замовлень, які не потрапляють у вказаний проміжок часу і вага вантажу в яких складає більше ста одиниць. В цьому випадку запит виглядатиме інакше:OrderID,OrderDate,ShipName,Freight FROM OrdersOrderDate NOT BETWEEN '07.04.1996' AND '07.08.1996' AND Freight > 100

Використання оператора LIKE

Оператор LIKE використовується для вибору всіх записів, в які входить підстрока, вказана як параметр. Як умова оператор також приймає спеціальні символи. Символ підкреслення замінює будь-який один символ, а знак відсотка позначає будь-яка кількість символів.

Припустимо, що необхідно вибрати компанію, в назві якої не вистачає декількох букв. В цьому випадку назву можна позначити як S? mons? bistro. Відповідний запит буде використовувати вказаний оператор LIKE:CompanyName,ContactName FROM CustomersCompanyName LIKE 'S_rnons_bistro'

Можна скласти запит, в якому буде здійснений пошук якоїсь підстроки, що входить в запис. Припустимо, що необхідно знайти всі компанії, в назвах яких зустрічається послідовність символів "ric.

Задачу виконує нескладний запит:CompanyName,ContactName FROM CustomersCompanyName LIKE %Ric%

Можна розширити умови відбору даних. Припустимо, що необхідно знайти всі компанії, в назві яких зустрічається поєднання символів г? с, тобто символ в середині підстроки невідомий.CompanyName,ContactName FROM CustomersCompanyName LIKE %R_c%


2.3.3 Агрегатні функції

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

Оператор COUNT повертає кількість записів, що задовольняють умові запиту.

Оператор SUM підсумовує значення записів поля.

Оператора AVG обчислює середнє значення записів поля.

Оператор МАХ повертає найбільше значення даного поля.

Оператора MIN повертає найменше значення даного нуля.

Агрегатні функції використовуються подібно до імен полів в запиті, а справжні імена полів передаються їм як аргументи. З операторами SUM і AVG можуть використовуватися лише числові поля. З операторами COUNT, MAX і MIN можуть використовуватися числові і символьні поля. В разі вживання функцій МАХ і MIN до символьних полів їх значення будуть трансльований в Ascii-код. Мінімальному значенню функції відповідатиме символ алфавіту, що знаходиться ближче до його початку, максимальному - що знаходиться ближче до кінця.

Нижче наведений запит, який обирає з таблиці Orders середнє значення ваги вантажу з поля Freight, мінімальне значення ваги вантажу, максимальне значення ваги вантажу, його сумарне значення і кількість вантажів, вагу яких складає більше трьохсот одиниць.AVG (Freight) AS Середнє, MIN (Freight) AS Мін, MAX (Freight) AS Макс, SUM (Freight) AS Сумарне, COUNT (Freight) AS Кількість FROM OrdersFreight >300

Функція COUNT робить підрахунок всіх записів. Для того, щоб обмежити повтори, слід використовувати оператора DISTINCT. Цей оператор знаходиться перед назвою поля, всередині функції COUNT. Запит, що демонструє цей механізм, показаний нижче:COUNT (DISTINCT City) AS Число_міст FROM Customers

В ході виконання запиту з оператором DISTINCT було зафіксовано 69 записів. Без використання оператора - 91. Для виключення повторів при використанні функцій AVG і SUM теж може бути використаний цей оператор.

Оператор GROUP BY використовується для визначення полів, до яких можуть застосовуватися агрегатні функції. У випадку, якщо цей оператор явно не вказаний, всі поля, вказані у вираженні SELECT, трактуються як аргументи агрегатних функцій. Поля, вказані як параметри оператора GROUP BY, стають такими, що групують. Всі записи результуючого набору, що мають однакові значення групуючих полів, утворюють єдину групу. Далі до кожної такої групи буде застосована агрегатна функція. Фактично, оператор GROUP BY надає можливість об'єднувати поля і агрегатні функції в єдиному запиті.

Вищесказане ілюструє запит, що відшукує міста, в яких знаходяться фірми, кількість цих міст і максимальне значення поштового індексу для фірми, розташованої в даному місті:City, COUNT (*) AS Кількість, MAX (PostalCode) AS Поштовий_індекс FROM Customers GROUP BY City

Легко відмітити, що поле City не входить в агрегатну функцію як параметр, тому воно було оголошене з використанням оператора GROUP BY. В ході виконання запиту були вибрані міста, і для кожного з міст було підраховано кількість входжень.

Цей приклад можна ускладнити. Можна створити запит, який отримує лише ті міста, які повторюються в таблиці більше двох разів, і при цьому в кінцевий результат не повинне включатися місто Buenos Aires. Оператора WHERE в даному випадку використовувати не вийде, оскільки він працює лише з окремими записами, а не з масивами. Доведеться використовувати оператора HAVING, який є аналогом оператора WHERE, але може працювати з агрегатними функціями. Сам запит буде сильно змінений:City, COUNT (*) AS Кількість, MAX (PostaTCode) AS

Поштовий_індекс FROM Customers Where City <> 'Buenos Aires'BY City HAVING COUNT (*) >=3


2.3.4 Сортування записів

Оператор ORDER BY використовується для впорядковування записів результуючого набору даних. Записи сортуються відповідно до порядку слідкування полів і їх значень. Якщо сортування виконуватиметься за зростанням, то слід використовувати параметр ASC. Для сортування за убуванням використовується параметр DESC. Як приклад можна привести нескладний SQL - запит:CompanyName,ContactName,City FROM CustomersBY City

Сортування записів виконується по полю City.

До створеного запиту можна додати сортування по кількості міст в порядку убування записів:City, COUNT (*) AS Кількість, MAX (PostalCode) AS Поштовий_індекс FROM Customers Where City <> 'Buenos Aires'BY City HAVING COUNT (*) >=3BY Кількість DESC, City ASC

Потрібно звернути увагу на те, що в якості аргументу параметра ORDER BY було використано назву поля, оскільки його значення є результатом агрегатної функції COUNT. Для включення сортування за убуванням був вказаний параметр DESC, розташований після назви поля.


2.4 Багатотабличні запити


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


2.4.1 Об'єднання таблиць

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

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

Для розгляду принципів роботи багатотабличних запитів потрібно створити простий приклад. припустимо, що необхідно дізнатися назви суден з вантажем, які відправила кожна компанія, вага відправленого вантажу, дату його відправки, контактну особу і її телефон:Orders. ShipName AS Судно, Orders. Freight AS

Вага_вантажу, Orders. OrderDateДата_Відправки, Customers. ContactName, Customers. PhoneCustomers, OrdersCustomers. CustomerID=Orders. CustomerID

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

Цей запит можна ускладнити. припустимо, що необхідно отримати інформацію саме про ті судна, вантаж яких більше 500 тонн і був відправлений з 17.03.1998 по 17.07.1998:Orders. ShipName AS Судно, Orders. Freight AS Вага_вантажу, Orders. OrderDate AS Дата_Відправки, Customers. ContactName, Customers. PhoneCustomers, OrdersCustomers. CustomerID = Orders. CustomerID AND Freight > 500 AND. OrderDate BETWEEN '03.17.1998' AND '07.17.1998'

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


2.4.2 Використання оператора EXISTS

Логічні оператори EXIST і NOT EXIST повертають значення True або False залежно від наявності записів, що задовольняють умову пошуку. Як правило, оператор EXISTS використовується з вкладеними запитами. Для ілюстрації принципів його вживання можна використати досить простий запит:TitleOfCourtesy, FirstName, LastName FROM EmployeesEXISTS

(SELECT * FROM OrdersFreight > 1000)BY LastName

В підзапиті обираються рядки, значення яких більше 1000. Оскільки подібні рядки існують, то операторові WHERE передається значення True і вираз SELECT обирає відповідні записи.

Можна змінити умову, що накладається на полі Freight, і використовувати замість оператора EXISTS оператор NOT EXISTS:TitleOfCourtesy. FirstName. LastName FROM EmployeesNOT EXISTS

(SELECT * FROM OrdersFreight > 2000)BY LastName

Результат виконання запиту буде аналогічний попередньому. Потрібно визначити, чому так сталося. Оператор NOT EXISTS повертає значення True тільки в тому випадку, якщо жоден запис не задовольнятиме даній умові. Оскільки жодне судно не перевезло більш ніж 2 тисячі тонн вантажу, то жоден із записів не буде обраний.

2.4.3 Використання об'єднання UNION

Оператор UNION використовується для об'єднання результатів двох і більше запитів в єдиний набір полів і записів. Коли результати запитів підлягають об'єднанню, їх стовпці виводу мають бути сумісні. Це означає, що всі запити повинні показувати однакове число стовпців в одному і в тому ж порядку. І всі співпадаючі поля повинні бути одного і того ж типу. Це ілюструється простим запитом:CUSTOMERID FROM CustomersCUSTOMERID FROM Orders

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

3. Основи технології СОМ при проектуванні ГВС


Технологія COM (Component Object Model - модель багатокомпонентних об'єктів) є платформно-незалежна розподілена об'єктно-орієнтована система, що забезпечує взаємодію між своїми компонентами. Технологія СОМ є основою для технологій OLE, ACTIVEX і багато інших.

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

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


3.1 Базові поняття


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

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

Об'єкт працює у складі сервера СОМ. Сервер СОМ може бути виконавчим файлом або динамічною бібліотекою. У будь-якому випадку, він обовязково надає додатку опис об'єктів, що входять до його складу. Для доступу до методів об'єкту клієнт повинен отримати показники на відповідні інтерфейси. Використовуючи методи об'єкту, клієнт може викликати його служби і звертатися до його властивостей. Взаємодія між об'єктом і клієнтом забезпечується засобами СОМ і приховано від клієнта. На рисунку 3.1 представлена схема, що зображає вище наведене. Об'єкт СОМ може знаходитися в іншому процесі, бібліотеці або навіть на іншій машині. Клієнтський додаток працюватиме з ним точно так, як і якби він знаходився в адресному просторі додатку. Механізм, що дозволяє клієнтові викликати функції "видалених" об'єктів, називається маршалінгом.


Рис.3.1 Схема взаємодії клієнта і обєкта


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

За створення об'єкту відповідає спеціальний об'єкт СОМ, званий фабрикою класів. Після створення об'єкту наступає фаза його ініціалізації, в ході якої прочитуються настройки з системного реєстру і завантажуються необхідні стартові дані. За ці процеси відповідають спеціальні об'єкти СОМ, які називаються моникерами. З будь-яким об'єктом СОМ поставляється бібліотека типів, в якій описуються його властивості, методи і інтерфейси. Дана бібліотека створюється за допомогою спеціальної мови опису інтерфейсу Interface Defini-tion Language (IDL).


3.2 Об'єкт СОМ


Об'єкт є звичайним об'єктом із специфічною реалізацією ряду властивостей. Фізично він реалізований у вигляді виконуваного коду, який виконує яку-небудь функцію і має один і більше інтерфейсів. Кожен об'єкт СОМ реалізує екземпляр відповідного класу. Об'єкт може мати будь-яке число інтерфейсів, і кожен інтерфейс має свій власний покажчик. Основна різниця СОМ-ОБ'ЕКТА від об'єкту ООП полягає в тому, що він успадковує не реалізацію інтерфейсів, а тільки їх оголошення. Якщо якому-небудь об'єкту потрібний успадкований метод іншого об'єкту, то він викликає його - даний механізм називається включенням.

Кожен об'єкт СОМ має свій унікальний ідентифікаційний номер. Наприклад, який-небудь об'єкт "знає про те, що інший об'єкт має інтерфейс з необхідним методом. Якщо сторонній розробник перевизначив даний метод, то інформація,

яку має перший об'єкт, буде невірною. Тобто, виникне помилка зі всіма наслідками. Механізм агрегування дозволяє використовувати інтерфейси інших об'єктів, передаючи визиваючому об'єкту покажчики на них.


3.3 Інтерфейс


Інтерфейс є сполучною ланкою між об'єктом СОМ і клієнтським додатком. Через інтерфейс додаток може коректно звернутися до об'єкту і отримати від нього дані. Інтерфейс є групою логічно і семантично зв'язаних методів, що забезпечують взаємодію між сервісом сервера СОМ і його клієнтом. Будь-який інтерфейс однозначно ідентифікується глобальним унікальним ідентифікатором GUID (Globally Unique Identifier). Цей ідентифікатор є 128-бітовим номером, вірогідність повторення якого прямує до нуля. Даний номер для інтерфейсів називається IID (Interface Identifiers). Також інтерфейс має ім'я, перед яким ставиться символ "I. Ідентифікатор інтерфейсу дозволяє уникнути конфлікту імен між різними версіями даного інтерфейсу або інтерфейсами інших об'єктів.

Всі об'єкти СОМ підтримують базовий інтерфейс IUnknown. Даний інтерфейс має метод QueryInterface, використовуючи який, клієнтський додаток може отримати інформацію про всі інтерфейси об'єкту. Разом з об'єктом СОМ поставляється бібліотека типів, в якій на мові IDL описуються методи інтерфейсу. Оскільки об'єкти СОМ зберігаються в двійковому форматі (компільованому вигляді), то це забезпечує їх незалежність від конкретної мови програмування, що і робить цю технологію універсальною.

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


Рис.3.2 Структура інтерфейсу


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


3.4 Інтерфейс IUnknown


Інтерфейс IUnknown є базовим інтерфейсом для всіх об'єктів. Він управляє механізмом обліку посилань і дозволяє клієнтам отримувати покажчики на інші інтерфейси даного об'єкту, використовуючи метод QueryInterface. Всі інтерфейси, прямо або побічно, беруть свій початок від цього інтерфейсу. У віртуальній таблиці VTable три методи інтерфейсу IUnknown розташовано першими, а за ними слідують власні методи інтерфейсу.

Метод QueryInterface повертає покажчик на інтерфейс об'єкту, ідентифікатор IID якого указує на запрошуваний інтерфейс. Якщо об'єкт не має інтерфейсу з даним IID, то метод повертає значення NULL.

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

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

Збільшення лічильника посилань виконується методом AddRef. Метод повертає збільшений на одиницю кількість посилань на об'єкт. Даний метод повинен викликатися, коли покажчик на інтерфейс передається якому-небудь об'єкту.

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


3.5 Сервер СОМ


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

Розрізняють три типи серверів:

Внутрішній сервер (In-process server) є бібліотекою DLL, що підключається до клієнтського додатку і працює з ним в одному адресному просторі. Як приклад можна привести елемент управління ACTIVEX, що відображається на веб - сторінці. Елемент управління запускається всередині деякого процесу браузера.

Схема відображена на рисунку 3.3


Рис.3.3 Внутрішній сервер


Локальний сервер (Local server) створюється окремим процесом, що працює на тій же машині, що і клієнтський додаток.

Віддалений сервер (Remote server) є динамічною бібліотекою або додатком, який виконується на іншій машині. Віддалений сервер використовує технологію Distributed COM (DCOM) для надання доступу до інтерфейсів.

Як показано рисунку 3.4, якщо об'єкт СОМ розташований поза поточним процесом на тій же машині, що і клієнт, або на віддаленій, то отримуваний клієнтом вказівник інтерфейсу посилається на спеціальний proxy-об'єкт СОМ, який функціонує всередині клієнтського процесу. Проксі надає клієнтові ті ж інтерфейси, що і об'єкт, що викликається, СОМ на локальному або віддаленому сервері. Отримавши виклик від клієнта, проксі упаковує його параметри і за допомогою спеціальних служб операційної системи передає його серверу. На стороні сервера розташований спеціальний об'єкт СОМ - заглушка (Stub). Він розпаковує виклик і передає його необхідному об'єкту СОМ. Результати повертаються тим же шляхом, але в зворотному порядку.

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

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

приймати покажчик на інтерфейс з процесу сервера і робити доступним покажчик на проксі в процесі клієнта;

передавати аргументи виклику інтерфейсу таким чином, неначе вони прийшли від клієнта, і розміщувати аргументи в процес віддаленого


Рис.3.4 Схема локального і віддаленого серверів


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


3.6 Реалізація СОМ в Delphi


Об'єкт СОМ описується звичайним класом TCOMObject, який створений безпосередньо від класу TObject. Всі властивості і методи об'єкту описуються в оголошенні класу. При створенні об'єкту СОМ з ним зв'язується допоміжний клас CoClass, який описує всі його інтерфейси. При створенні об'єкта до імені його класу додається приставка Со і створюється CoClass цього об'єкту.

Опис CoClass розташований в бібліотеці типів. Стандартне оголошення класу забезпечує створення коду об'єкту, який буде скомпільований в двійковий код. CoClass забезпечує представлення екземпляра класу в відповідності із специфікою СОМ і гарантує коректне звернення клієнта до об'єкту.


3.6.1 Клас TComObject

Клас TComObject є базовим класом, на основі якого створюються прості класи СОМ, такі як, наприклад, розширення оболонок. Клас TComObject є СОМ-об'єктом, який підтримує інтерфейси IUnknown і ISupportErrorInfo. Клас реалізує прості об'єкти, що володіють базовим списком можливостей:

Об'єкт володіє ідентифікатором класу CLSID, який використовується для створення екземплярів класу з використанням фабрики класу.

Об'єкт підтримує агрегацію за допомогою методів інтерфейсу IUnknown.

Об'єкт підтримує безпечні виклики і обробку виключних ситуацій OLE, використовуючи інтерфейс IProvideErrorInfo.

Об'єкт використовує в роботі інтерфейс IErrorInfo.

Клас TComObject може використовуватися як базовий клас для створення класів об'єктів СОМ, які повинні мати ідентифікатор класу (CLSID). Ідентифікатор CLSID, як було сказано раніше, використовується для реєстрації класу в реєстрі і для створення його екземпляра ззовні за допомогою виклику фабрики класу.

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

Для створення об'єкту СОМ і включення його в агрегат використовується метод CreateAggregated, який створює новий об'єкт як частину агрегату. У параметрі Controller указується загальний інтерфейс IUnknown, що управляє, і передається властивості Controller.

Метод CreateFromFactory використовується для створення об'єкту і його ініціалізації. У властивості Factory вказується фабрика класу об'єкту. Після створення об'єкту метод Initialize дозволяє провести його ініціалізацію. В ході ініціалізації лічильник посилань на об'єкт збільшується на одиницю.

Властивость RefCount містить число посилань на об'єкт. Властивість RefCount визначає, коли створений об'єкт може бути знищений. Коли властивостям привласнюється нульове значення, об'єкт знищується, оскільки з ним не працює жоден клієнт. Значення властивості збільшується методом AddRef інтерфейсу IUnknown і реалізується методом ObjAddRef. Зменшення значення властивості проводиться за допомогою методу ObjRelease, реалізовуючи метод Release інтерфейсу IUnknown.

Метод ObjQueryInterface дозволяє з'ясувати, чи має даний об'єкт СОМ інтерфейс з ідентифікатором, заданим IID. Даний метод є реалізацією методу QueryInterface інтерфейсу IUnknown.


3.6.2 Клас TTypedComObject

Клас TTypedComObject є прямим спадкоємцем класу TComObject. Він призначений для створення об'єктів СОМ з використанням бібліотеки типів. Клас TTypedComObject має інтерфейс IProvideClassInfo, до складу якого входить єдиний метод, призначений для отримання покажчика на CoClass об'єкту.

Метод GetClassInfo є реалізацією методу GetClassInfo інтерфейсу IProvideClassInfo.


3.6.3 Інтерфейс IUnknown

Інтерфейс IUnknown є базовим для всіх інтерфейсів. Він є прямим нащадком класу Interface, на основі якого в Delphi будуються всі інтерфейси.

До складу інтерфейсу входять методи AddRef, Release і QueryInterface, які розглядалися раніше.

У коді Delphi інтерфейс IUnknown підміняє собою клас Interface.


3.6.4 Клас TComObjectFactory

Клас TComObjectFactory є фабрикою класу для об'єктів СОМ, які є нащадками від класу TComObject. Клас TComObjectFactory забезпечує функціонування інтерфейсів IUnknown, IClassFactory і IClassFactory2. Інтерфейс IClassFactory створює об'єкт, приймаючи як параметр його ідентифікатор CLSID. Інтерфейс IC1 assFactory2 використовується для забезпечення ліцензування об'єкту СОМ. Створення об'єкту фабрики класу може бути ініційоване ззовні за допомогою функції API CoCreateClassObject. Для створення об'єкту також можуть бути використані функції CreateComObject і CreateOleObject. Якщо створюється декілька об'єктів одного класу, ефективніше викликати фабрику класу, отримуючи покажчик на його інтерфейс IClassFactory і використовуючи його власні методи. Для управління фабриками класів на сервері СОМ використовується спеціальний клас TComClassManager, доступ до якого можна отримати, використовуючи функцію ComClassManager.

Метод CreateComObject ініціює виклик конструктора класу TComObjectFactory. Конструктор Create створює фабрику класу під час запуску сервера. Конструктор фабрики класу описується в секції ініціалізації модуля, що включає сервер СОМ. У параметрі ComServer указується сервер СОМ, у складі якого функціонуватиме об'єкт. У параметрі ComClass указується тип класу, який використовується методом GetFactoryFromClass ме-неджера класів для ідентифікації фабрики. Параметр CLASSID задає ідентифікатор класу, що створюється цією фабрикою, а параметр Instancing задає спосіб створення об'єкту. Цей спосіб регламентується одним з перерахованих нижче значень:

Значення ciInternal вказує, що об'єкт створюється в процесі як сервер СОМ. Інші додатки не можуть створити екземпляр об'єкту

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

Значення ciSingleInstance вказує, що для кожного клієнта, який звернувся до сервера СОМ, створюється власний екземпляр об'єкту. Всі об'єкти створюються в єдиному екземплярі сервера.

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

У параметрі ThreadingModel задається спосіб взаємодії сервера і клієнта. Значення параметра перераховані нижче:

Значення tmSingle вказує, що сервер послідовно виконує запити клієнтів.

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

Значення tmFree указує, що об'єкт може одночасно використовуватися довільним числом клієнтів.

Значення tmBoth вказує, що клієнт може використовувати моделі tmApartment або tmFree.

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

Метод RegisterClassObject реєструє клас створюваного об'єкту. Додатки, що містять сервер СОМ, викликають цей метод при запуску відповідного сервісу. Метод UpdateRegistry викликається для реєстрації об'єкту СОМ або видалення

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

У властивості ERRORIID міститься GUID інтерфейсу, в якому відбулася помилка. Властивість ShowErrors включає або відключає показ повідомлень про помилки при створенні об'єкту. Якщо властивість має значення True, то повідомлення про виникаючі помилки виводиться в інформаційному вікні.


3.6.5 Клас TTypedComObjectFactory

Клас TTypedComObjectFactory є прямим спадкоємцем класу TComObjectFactory. Він використовується для створення об'єктів класу TypedComObject.

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

Метод GetInterfaceTypeInfo повертає інформацію про об'єкт СОМ, який створений даною фабрикою.


3.6.6 Клас TComClassManager

Клас TComClassManager використовується для управління фабриками класів. Екземпляр класу TComClassManager повертається функцією ComClassManager, яка міститься в модулі ComObj. pas. Цей екземпляр управляє фабриками класів об'єктів, власником яких є даний сервер СОМ. Екземпляр класу отримує від сервера СОМ список фабрик і оновлює його при створенні нового об'єкту або знищенні старого. Розробникові надаються методи, що дозволяють управляти фабриками класів.

Функція ComClassManager повертає посилання на екземпляр класу. А метод ForEachFactory послідовно виконує певні дії над всіма фабриками класів даного

сервера СОМ. У параметрі ComServer указується сервер СОМ, а в параметрі FactoryProc - посилання на метод, що виконує необходні дії.

Метод GetFactoryFromClass повертає фабрику класу для класу, вказаного в параметрі ComClass. А метод GetFactoryFromClassID повертає фабрику класу, приймаючи як вхідний параметр ідентифікатор класу CLASSID.

4. Опис функціональних можливостей і програмної реалізації розроблюваної системи


4.1 Функціональне призначення і технологічні особливості розробки


Як мова програмування для реалізації поставленого завдання був вибраний Delphi 6. В ході розробки системи був використаний компоненти, що входять до складу пакету ADOTable Lib. Необхідність використання даного пакету обумовлена тим, що стандартні компоненти палітри BDE не мають можливості зберігати базу даних в одному файлі і для роботи програми необхідна установка BDEAdministrator.

В ході розробки системи також були використані контролери автоматизації MS Office. Використання контролерів автоматизації COM серверів значно спростило процес розробки інтерфейсу користувача і виведення інформації проектованої системи. Для коректної роботи системи необхідна установка MS Office.


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


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


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


.3 Опис моделі і структури таблиць бази даних


База даних представлена 6 таблицями в форматі ADOTable.

Таблиці бази даних мають наступну структуру:


Таблиця 4.1. Структура полів таблиці. "Довідник контрагентів" - sp_kontr

Назва поляТип поляОписkod_kontrAutoIncКод контрагента (ключове поле) name_kontrString [25] Назва контрагентаadress_kontrString [50] Адрес контрагентаphone_kontrString [25] Телефон контрагентаtypeString [1] Тип (Юридична або фізична особа) innString [12] Ідентифікаційний номерnnsString [12] Номер налогового посвідченняedrpString [8] Код ЕДРПdirString [30] П.І.П. директораbuhString [30] П.І.П. гол. бухгалтераn_paspString [8] Серія і номер паспортаdate_paspDateДата видачі паспортаv_paspString [60] Ким виданий паспортschet1String [11] Номер 1-го рахункуschet2String [11] Номер 2-го рахункуschet3String [11] Номер 3-го рахункуkod_b1Small IntegerКод 1-го банкуkod_b2Small IntegerКод 2-го банкуkod_b3Small IntegerКод 3-го банку

Таблиця 4.2. Структура полів таблиці. "Довідник банків і їх реквізитів" - sp_bank

Назва поляТип поляОписkod_bAutoIncКод банку (ключове поле) name_bString [100] Назва банкуmfoString [6] МФОegrpouString [8] ЕГРПОУ

Таблиця 4.3. Структура полів таблиці. "Довідник груп товарів" - groops

Имя поляТип поляОписkod_groopAutoincКод групи товару (ключове поле) name_groopString [25] Назва групи товарівProcentNumberПроцент вартості послуги від загальної вартості

Таблиця 4.4. Структура полів таблиці. "Довідник товарів" - sp_tov

Назва поляТип поляОписkod_tovAutoincКод товару (ключове поле) kod_groopIntegerКод групи товарівname_tovString [50] Назва товаруedString [5] Одиниці виміруkolLarge IntegerКількість одиниць на складіpriceCurrencyЗакупочна цінаprice_otpCurrencyЦіна продажу

Таблиця 4.5. Структура полів таблиці. "Рух товарів" - documents_id

Назва поляТип поляОписidAutoincrementКод записи (ключове поле) No_docLarge IntegerНомер накладноїdate_docDateДата оформлення накладноїkod_kontrIntegerКод контрагентаsummaCurrencyСума закупки / продажу

Таблиця 4.6. Структура полів таблиці. "Довідник структури руху товарів" - sostav_doc

Назва поляТип поляОписIDAutoincКод записи (ключове поле) No_docIntegerНомер накладноїkod_tovIntegerКод товаруkolIntegerКількість товарів

Структурна схема взаємозвязку таблиць бази даних представлена на рисунку 4.2


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


4.4 Інтерфейс користувача розроблюваної системи


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

Використання додатків MS Office як елементи інтерфейсу дозволяє максимально спростити процес формування і висновку на друк необхідних документів і інформації про статистику руху товарів.

У програмі використовується 13 форм, ієрархія яких представлена на рисунку 4.3


Рис. 4.3 Ієрархія форм.


Головне меню системи має наступну структуру:


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


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

При обранні підпункту меню Довідник контрагентів на екрані зявиться вікно (рис.4.5), в якому можна додати, видалити або змінити дані про контрагентів.


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


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

При натисненні кнопки Додати в таблицю "Довідник контрагентів" автоматично додає новий запис. На екрані зявиться вікно "Карточка контрагента" (рис.4.6).


Рис.4.6 Вікно "Карточка контрагента" в режимі "Приватна особа"


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

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


Рис.4.7 Вікно "Рахунок контрагента"


Тут необхідно ввести номер рахунку контрагента. Обрати банк можна із раніше сформованого довідника реквізитів банків.


Рис.4.8 Вікно "Довідник реквізитів банку"


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

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



Підпункт меню "Довідники" "Довідник груп товарів" виводить на екран вікно, в якому можна ввести відповідні відомості. Вікно має наступний вигляд:


Рис.4.9 Вікно "Довідник груп товарів"


Вікно Довідника товарів має наступну структуру:


Рис.4.10 Вікно "Довідник товарів"


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

Кнопка "Довідник груп" дає можливість користувачеві швидко перейти до відповідного вікна.

На цьому формування довідників системи закінчується.

При виборі підпункту меню Операції - Закупка товарів на екрані з'явиться наступне вікно:


Рис.4.11 Вікно "Закупка товарів"


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

Кнопка "Підбір" виводить на екран вікно "Довідник товарів", в якому необхідно вибрати відповідну позицію. Після цього необхідно ввести кількість товару. Сума закупки і підсумкова сума обчислюються автоматично.

Підпункт меню Операції - Продаж товарів виводить на екран вікно із схожою структурою.


Рис.4.12 Вікно "Продаж товарів"


Але при натисненні кнопки "Підбір" на екрані з'явиться вікно з інформацією про товари на складі.


Рис.4.13 Вікно "Товари на складі"


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

При введенні кількості товару, що відпускається, якщо воно перевищує кількість товару, що є на складі, на екран виводиться повідомлення про те, що товарів в такій кількості немає.

Вікно "Статистика закупок" дозволяє розглянути інформацію про закупку товарів за певний період.


Рис.4.14 Вікно "Статистика закупок"


Кнопка "Детальніше" виводить на екран детальну інформацію про закупки товарів.

Аналогічний вигляд має вікно "Статистика продажу".

Кнопки "Друк" у вікнах статистики дозволяють сформувати "Книгу закупок" і "Книгу продажу" за вибраний період у вигляді файлу у форматі MS Excel.

Аналогічну операцію можна провести, вибравши в меню підпункти Документи - Книга закупок і Документи - Книга продажу. При цьому на екрані зявиться вікно, в якому необхідно вибрати діапазон дат:


Рис.4.15 Вікно "Вибір діапазону дат"


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

Підпункт меню Довідка - виводить на екран докладну індексовану довідкову систему про функціональні можливості системи.


4.5 Опис основних процедур і функцій системи, що розробляється


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

При виборі пункту меню "Контрагенти" на екрані з'явиться вікно, в якому представлений відсортований список.

В даному випадку і далі скрізь послідовний пошук по частковому збігу був організований за допомогою методу Locate компоненту Table:Tkontrag. Edit1Change (Sender: TObject);. Locate ('name_kontr',edit1. Text, [loCaseInsensitive,loPartialKey]); // пошук без врахування реєстру по частковому збігу;

Оброблювач події OnClick кнопки "Додати" має наступний вид:Tkontrag. BitBtn1Click (Sender: TObject);. Insert; // вставка запису в таблицю: =false; // ознака того, що форма зявиться в режимі вставки нового запису. showmodal; // виведення на екран вікна в модальному режимі;

При подвійному натисненню по вибраному запису, на екрані з'явиться вікно, в якому можна відредагувати дані. При цьому таблиця БД переходить в режим редагування.Tkontrag. BitBtn2Click (Sender: TObject);. Edit;: =true; // ознака того, що форма з'явиться в режимі редагування. ShowModal;;

При натисненні виводиться запит на підтвердження. Це було реалізовано за допомогою стандартної функції MessageDlg.MessageDlg ('Ви впевнені в тому, що хочете видалити+(ADOTable1. FieldByName ('name_kontr'). AsString) +

'? ',mtConfirmation, [mbYes,mbNo],0) = mrYes then. Delete;

Форма введення реквізитів контрагентів містить візуальні компоненти введення даних, такі як DBText і DBComboBox (для полів вибору із списку), кожний з яких пов'язаний з відповідним полем таблиці.

При появі форми в режимі редагування відбувається наступні дії:

. Формується список рахунків контрагента:. Enabled: =false; // кнопка "Змінити рахунок" не активна. Items. Clear; // список рахунків очищаєтьсяkontrag. ADOTable1schet1. AsString<>'' then // якщо номер рахунку введений він додається в список. Items. Add ('Р/р № '+kontrag. ADOTable1schet1. AsString);kontrag. ADOTable1schet2. AsString<>'' then. Items. Add ('Р/р № '+ kontrag. ADOTable1Schet2. AsString);kontrag. ADOTable1schet3. AsString<>'' then. Items. Add ('Р/р № '+kontrag. ADOTable1Schet3. AsString);

. В компонент datetimepicker1 заноситься дата видачі паспорта, яка зберігається у відповідному полі таблиці.kontrag. ADOTable1Date_pasp. AsDateTime<> strtodate ('30.12.1899') then. Date: =kontrag. ADOTable1Date_pasp. AsDateTimedatetimepicker1. Date: =date;

. В залежності від типу контрагента буде обрана відповідна позиція в списку типів (компонент combobox1)kontrag. ADOTable1TyPe. AsString='О' // якщо тип - "організація"combobox1. ItemIndex: =0 // обрана перша позиція в спискуcombobox1. ItemIndex: =1; // інакше - другаchange (sender);;

Зовнішній вигляд форми змінюється залежно від того, чи є контрагент приватною особою або організацією. У першому випадку передбачено введення паспортних даних, в другому - інформації про контактних осіб організації. Так само, залежно від вибраного типу вводиться або код МФО (для приватної особи), або ЕДРПОУ (для організацій).Tkarta.comboBox1Change (Sender: TObject);combobox1. ItemIndex=0 then // якщо це організація. Visible: =true;. Visible: =false;. Caption: ='ЕДРПОУ'else begin. Visible: =true;. Visible: =false;. Caption: ='МФО'; end;

При виборі із списку номера рахунку - стає активною кнопка "Змінити", яка виводить на екран форму bank_rekv.

При натисненні кнопки "Додати" на екрані з'явиться аналогічна форма. Проте, оскільки система передбачає можливість зберігання інформації тільки про три рахунки, в системі передбачений захист.listbox1. Items. Count<3 then // якщо введено менше трьох рахунків. Items. Add (''); // додавання строки в список. ItemIndex: =listbox1. Items. Count-1; // обрана остання позиціяelse begin showmessage ('Можна ввести тільки три номера рахунків! '); exit; end;_rekv. Edit1. Text: ='';_rekv. ShowModal;

При закритті форми в відповідне поле таблиці заноситься тип контрагента ("О" - організація, "Ч" - приватна особа):combobox1. ItemIndex of

: kontrag. ADOTable1TyPe. AsString: ='О';

: kontrag. ADOTable1TyPe. AsString: ='Ч';

і дата видачі паспорта:. ADOTable1Date_pasp. AsDateTime: =datetimepicker1. Date;

Обов'язковим для введення є тільки ім'я клієнта, тому в обробнику події OnCloseQuery, що виникає при запиті на закриття форми написаний наступний код:Tkarta. FormCloseQuery (Sender: TObject; var CanClose: Boolean);(dbedit1. Text='') and (flag=true) then('Введіть найменування контрагента! ');: =false;;;

Розглянемо детальніше основні процедури модуля введення банківських реквізитів. При появі форми, залежно від порядкового номера обраного в списку рахунку, компонент dbedit1 буде пов'язаний з відповідним полем таблиці. У компонент edit1 буде занесене найменування банку, взяте з відповідного довідника.karta. ListBox1. ItemIndex of

: begin // перший номер рахунку. DataField: ='schet1'; // компонент повязаний з полем 'schet1'sp_bank. ADOTable1. Locate ('kod_b',kontrag. ADOTable1kod_b1. AsInteger, []) // якщо обраний банкedit1. Text: =sp_bank. ADOTable1name_b. AsString // назва банкуedit1. Text: ='';;;

При натисненні кнопки "Довідник банків" на екрані зявиться форма в режимі перегляду:Tbank_rekv. BitBtn1Click (Sender: TObject);_bank. DBGrid1. ReadOnly: =true; // дані виводяться тільки для перегляду: =true; // ознака того, що дані виводяться тільки для перегляду_bank. ShowModal;

Інтерфейс вікна "Довідник реквізитів банків" реалізований за допомогою компонентів ADOTable, DataSourse, DBGrid.

При закритті форми код обраного банку заноситься у відповідне поле таблиці.vibor then // якщо форма відкрита в режимі обранняkarta. ListBox1. ItemIndex of // порядкові номери рахунків

: kontrag. ADOTable1Kod_b1. AsInteger: =ADOTable1Kod_b. asinteger;

: kontrag. ADOTable1Kod_b2. AsInteger: =ADOTable1Kod_b. asinteger;

: kontrag. ADOTable1Kod_b3. AsInteger: =ADOTable1Kod_b. asinteger;; bank_rekv. Edit1. Text: =ADOTable1Name_b. AsString;else // якщо форма в режимі редагуванняADOtable1. Modified= true then. Post;

Введення даних в довідник товарів реалізований за допомогою майстер-детальних зв'язків між двома таблицями - groops (MasterSource) і sp_tov (DetalSource). Таким чином, в правій частині вікна відображається список товарів вибраної категорії.

Форма "Закунка товарів" може бути викликана в двох режимах - здійснення операції закупки товарів і перегляд складу обраною накладною (в режимі редагування). В першому випадку змінна red=true, в другому - false. Номер накладної вноситься у відповідне поле автоматично (наступний+1).TNakladnaya_p. FormShow (Sender: TObject);a: integer;not red then // якщо не в режимі перегляду: =false; combobox4. Items. Clear; // очистка списку контрагентів. Value: =0; // очистка поля загальної суми закупки. Last; // перехід на наступний запис в таблиці: =ADOtable2no_doc. AsInteger+1; // номер накладної. Insert; // додавання записуno_doc. AsInteger: =a;. Post;. Filter: ='no_doc='+inttostr (ADOtable2no_doc. AsInteger); // таблиця sostav_doc фільтрується за номером накладної. Filtered: =true;. ADOTable1. First;not kontrag. ADOTable1. Eof do // формування списку контрагентів із довідника. Items. Add (kontrag. ADOTable1name_kontr. AsString); // додавання найменування в список. ADOTable1. Next; // перехід на наступну запис;. ItemIndex: =-1;// далі слідують оператори, які виконуються при появі форми в режимі перегляду: =true;. Filter: ='no_doc='+inttostr (ADOtable2no_doc. AsInteger);. Filtered: =true;. Items. Clear;. Items. Add (prihod. ADOQuery1name_kontr. AsString); // імя контрагента. ItemIndex: =0; floatedit1. Value: =0; // обнулення параметрів. First;not ADOtable1. Eof do. Value: =0;. Value: =floatedit1. Value+ADOtable1cena. AsFloat; // обчислення загальної суми. Next; end; end;

Розробка форми "Закупка товарів" на етапі проектування:

При натисненні кнопки "Підбір" на екрані зявиться форма "Довідник товарів" в режимі перегляду. При цьому зовнішній вид форми зміниться.TNakladnaya_p. BitBtn2Click (Sender: TObject);. Insert; // вставка запису. dbgrid1. ReadOnly: =true; // . BitBtn2. Visible: =true; tovar. BitBtn3. Visible: =false; // Кнопка "Підбір" стане видимою, кнопка "Вийти" невидимою. BitBtn5. Visible: =false; // Кнопка "Видалити" стане невидимою. DBGrid2. ReadOnly: =true;. DBNavigator1. Enabled: =false;_t: =true; // форма в режимі перегляду. ShowModal; end;

Поля таблиці "Сума" стануть обчислюваними:TNakladnaya_p. ADOTable1CalcFields (DataSet: TDataSet);cena. AsCurrency: =tovar. ADOTable2price. AsCurrency * ADOTable1kol. AsInteger; // закупочна ціна одиниці товару помножується на кількість;

При зміні поля кількість також відбувається перерахунок загальної суми закупки:TNakladnaya_p. ADOTable1kolChange (Sender: TField);not ADOtable1. Eof do // перебір всіх записів відфільтрованого набору. Value: =floatedit1. Value+ADOtable1cena. AsFloat;. Next;;

При натисненні кнопки "Записати" виконується оформлення приходу із занесенням даних у відповідні таблиці.TNakladnaya_p. BitBtn1Click (Sender: TObject);

// дані заносяться в таблицю накладних. Edit;date_doc. AsDateTime: =datetimepicker1. Date; // дата закупкиsumma. AsCurrency: =floatedit1. Value; // сума закупки. Locate ('name_kontr',combobox4. Text, []); // пошук в таблиці - довідника контрагентів обраного пункту спискуkod_kontr. AsInteger: =ADOTable4kod_kontr. AsInteger; // код контрагентаdoc. AsString: ='p'; // вид операції - закупка. Post;: =true;

// дані заносяться в таблицю, яка зберігає інформацію про подробиці замовлення. First;not ADOtable1. Eof do // додається товар, який був закуплений. ADOTable1. Locate ('kod_tov',ADOtable1kod_tov. AsInteger, []); // пошук відповідного запису по коду товару. ADOTable1. Edit; // перехід в режим редагквання. ADOTable1kol. AsInteger: =ostatki. ADOTable1kol. AsInteger+ADOtable1kol. AsInteger;. ADOTable1. Post; ADOtable1. Next;;. ADOTable1. Active: =false; // оновлення даних таблиці. ADOTable1. Active: =true;;;

Подібним чином реалізована операція продажу товарів.

Система дозволяє вести статистику закупок і продажу товарів.

Дані статистики виводяться на основі набору компоненту ADOQuery, що містить наступний SQL-запит.p. doc, p. date_doc, p. no_doc,p. summa, до. name_kontr from documents_id p left join kontragenty до on до. kod_kontr=p. kod_kontr where p. doc='p' order by p. date_doc

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

Кнопка "Фільтр" дозволяє вивести статистику за певний період:TPrihod. BitBtn2Click (Sender: TObject);. Filter: ='date_doc>='+''''+DateToStr (DateTimePicker1. Date) +''''+'and date_doc<='

+''''+DateToStr (DateTimePicker2. Date) +'''';. Filtered: =true;. Checked: =false;;

Прапорець "Показати все" дозволяє повернутися до початкового набору:TPrihod. CheckBox1Click (Sender: TObject);checkbox1. Checked then. Filtered: =False;;

Кнопка "Подробиці" дозволяє вивести повну інформацію обраної накладної. При цьому на екрані з'явиться форма "Закупка товарів" в режимі перегляду даних.TPrihod. BitBtn4Click (Sender: TObject);: =true; // дані тільки для перегляду_p. ADOTable2. Locate ('no_doc',ADOQuery1no_doc. AsInteger, []); // пошук обраного номера накладної_p. DateTimePicker1. Date: =ADOQuery1date_doc. AsDateTime; // установка дати_p. DBGrid1. ReadOnly: =true; // редагування заборонено_p. FloatEdit1. ReadOnly: =true;_p. BitBtn1. Enabled: =false; // кнопки неактивні_p. BitBtn2. Enabled: =false;_p. ShowModal;;

Так само реалізована можливість ведення статистики про продаж товарів.

Система передбачає формування 4-х вихідних документів: Прайс-лист товарів, Книга товарів на складі, Книга закупок і Книга продажу.

Перший з цих документів формується на підставі набору за допомогою наступного SQL-запиту:g. name_groop,t. name_tov, t. ed, t. price_otp from sp_tov t left join groops g on g. kod_groop=t. kod_groop order by g. name_groop,t. name_tov

Дані формується на основі двох таблиць - groops (довідник груп товарів) і sp_tov (довідник товарів).

Дані виводяться в автоматично створюваний файл MS Excel.

Обробник події OnClick відповідного пункту меню буде мати такий вигляд:Tmain. N19Click (Sender: TObject);i,j: integer; r: string;: =CreateOleObject ('Excel. Application'); // створення обєкта MS Excel: =e. workbooks. add; // додання робочої книги

// Формування заголовку звіту(1,'A1: C1',true); // обєднання комірок: =workbook. worksheets [1]. cells [1,1]; // завдання робочого діапазону комірок: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108; // вирівнювання по горизонталі і по центру. verticalalignment: =-4108; // вирівнювання по вертикалі і по центру. rowheight: =50; // установка товщини границь. font. size: =20; // розмір шрифту. font. bold: =true; // тип написання - "жирний". font. color: =clRed; // колір - червоний. value: ='Прайс-лист від '+datetostr (date); // виведення тексту заголовку, який містить поточну дату: =3; // номер строкиj: =1 to 3 do // формування заголовків стовпцівj of // j - номер стовпця

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =75;. font. bold: =true;. interior. color: =rgb (160,240,240); // визначення кольору заливки комірок. borders. linestyle: =1;. borders. weight: =3;. value: =' Найменування ';;

.;. First; // перехід на перший запис набору(1,'A4: C4',true); // обєднання комірок для виводу назви групи товару: =workbook. worksheets [1]. cells [4,1];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. font. bold: =true;. value: =ADOquery1name_groop. AsString; // назва групи товару: =ADOquery1name_groop. AsString; // в цій змінній буде зберігатися поточна назва групи товару: =i+1; // номер рядкаnot ADOquery1. Eof do // перебір всіх записів: =i+1; if r<>ADOquery1name_groop. AsString then // якщо група товарів змінилась(1,'A'+inttostr (i) +': C'+inttostr (i),true); // обєднання комірок: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108; range. font. bold: =true;. value: =ADOquery1name_groop. AsString;: =i+1; end;: =ADOquery1name_groop. AsString; // виведення назви групи товарів: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOquery1name_tov. asstring; // виведення назви товарів. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,2];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOQuery1ed. asstring; // виведення одиниці виміру.. borders. linestyle: =1; range. borders. weight: =2;: =workbook. worksheets [1]. cells [i,3];: =workbook. worksheets [1]. range [cell,cell];. numberformat: ='_-* # ##0,00 грн. _-; - * # ##0,00 грн. _-; _-* "-"?? грн. _-; _-@_-'; // формат комірки - грошовий. value: =ADOQuery1price_otp. AsFloat; // виведення ціни продажу. borders. linestyle: =1;. borders. weight: =2;. Next;;. visible: =true; // візуалізація додатку;

Так само передбачено формування звіту "Книга товарів на складі", заснованого на наборі даних за допомогою наступного SQL-запиту:g. name_groop,t. name_tov, t. ed, t. price, t. kol, t. price_otp from sp_tov t left join groops g on g. kod_groop=t. kod_groop where t. kol>0 order by g. name_groop,t. name_tov

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

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

При виборі пунктів меню "Книга закупок" і "Книга продажу" на екрані зявиться форма. Сформовані документи основані на наступних SQL-запитах::k. name_kontr,d. date_doc,d. summa,d. no_doc, d. doc from documents_id d left join kontragenty k where k. kod_kontr=d. kod_kontr and d. doc='p' order by d. date_doc:k. name_kontr,d. date_doc,d. summa,d. no_doc, d. doc from documents_id d left join kontragenty k where k. kod_kontr=d. kod_kontr and d. doc='r' order by d. date_doc

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

Документи "Книга закупок" і "Книга продажу" формуються на основі шаблонів (Книга закупок. xlt і Книга продажу. xlt).

Шаблони містять текстові константи, які будуть використані для підстановки інформації.

При виконанні даної процедури була використана функція FindAndInsert, яка дозволяє знаходити рядок FindText і підставляти на її місце рядок ReplacementText.FindAndInsert (FindText,replacementText: string): boolean;range: variant;: =e. cells. replace (what: =findtext,replacement: =replacementtext);;

При натисненні кнопки "ДОбре" форми проводиться фільтрація даних по ви-бранному діапазону дат і формування документів на основі шаблонів.Tv_date. BitBtn1Click (Sender: TObject);AppPath: array [0.255] of char;: TStringList;: integer; sum: real;kn=1 then // ознака того, що формується "Книга закупок". SQL. Clear;. SQL. Add ('select k. name_kontr,d. date_doc,d. summa,d. no_doc, d. doc from documents_id d left join kontragenty k where k. kod_kontr=d. kod_kontr and d. doc='+''''+'p'+''''+'and d. date_doc >='+''''+datetostr (datetimepicker1. Date) +''''+' and d. date_doc <='+''''+datetostr (datetimepicker2. Date) +''''+' order by d. date_doc'); // внесення зміни в SQL-запит згідноо обраним датам. Active: =true;(255,AppPath); // визначаємо директорію, де знаходиться файл_f: =APPPATH; // путь до файлу: =CreateOleObject ('Excel. Application');: =e. workbooks. add (s_f+'\Книга закупок. xlt" '); // створення книги на основі шаблону('##data',datetostr (date)); // пошук і заміна тексту, в даному випадку дати формування документа

Виведення даних на основі відповідних наборів проводиться описаним вище способом.

При виборі підпункту меню Довідка виводиться файл довідкової системи.

Для виведення файлу довідки була використана функція WinHelpWindHelp (Wnd: HWnd; HelpFile: PChar; Command: Word; Data: Longint): Bool

Дана функція викликає механізм Windows отримання довідкової інформації з командою Command. Параметри функції:: ідентифікатор вікна; HelpFile: ім'я файлу довідкової інформації (що закінчується порожнім символом), ім'я маршруту, що включає при необхідності ім'я маршруту; Command: одна з команд help_Context, help_HelpOnHelp, help_Index, help_Key, help_Quit або help_SetIndex; Data: номер ідентифікатора контексту, якщо Command має значення help_Context, або ключове слово довідкової теми (що закінчується порожнім символом), якщо Command має значення help_Key.

Оскільки довідкова система не має складної розгалуженої структури ідентифікатори контексту і ключові слова використані не були. Обробник події ObClick для даного пункту меню буде наступним:TForm1. N4Click (Sender: TObject);(Form1. Handle, 'help. hlp', HELP_CONTEXT, 1);;

5. Економічне обґрунтування доцільності розробки програмного продукту


5.1 Організаційно-економічна частина


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

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

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

Система виконує наступні функції: збір і обробка інформації про рух товарів.

5.2 Розрахунок витрат праці на розробку програмного продукту


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


Таблиця 5.1. Затрати на витратні матеріали

№Найменування матеріалуЗатрати, шт. Ціна, грн. /шт. Сума, грн. п/п1Допоміжна література2701402Компакт диски10110Разом: 150

Основні виробничі фонди:

Програмне забезпечення Borland Delphi 6.0 - 1 шт за ціною 400 грн.;

Комп'ютер з такою комплектацією: процесор - Celeron 440 2.0, материнська плата - Intel 945GC, ОЗП - 512 (DDR2), НЖМД, ГБ - 80.0 (SATA), відео - Integrated (PCX), мультимедіа - DVD+/-RW, з програмним забезпеченням - 1 шт. за ціною 1925 грн.;

Монітор 19 Acer AL1916WAsd TFT - 1 шт. за ціною 1200 грн.

Загальна сума виробничих фондів складає - 3525 грн.

Амортизація складає 15% у квартал від залишкової вартості, тобто А = Ф*На, де Ф - залишкова вартість на початок кварталу, На - норма амортизації.

квартал 3525*0,15=528,75 грн.квартал (3525-528,75) *0,15=449,44 грн.квартал (3525-528,75-449,44) *0,15=382,02 грн.квартал (3525-528,75-449,44-382,02) *0,15=324,72 грн.


Разом амортизація = 1684,93 грн.


Таблиця 5.2. Основна заробітна плата розробників ПП

№ п/пВиконавціТрудомісткість, люд. дн. Оклад, грн. Затрати по з/п, грн. 1Програміст71200365,22

Додаткова заробітна плата розробників ІС складає 20 % від основної заробітної плати:


,22 * 0,20 = 73,04 грн.


Фонд заробітної плати є сумою основної і додаткової заробітної плати:


,22 + 73,04 = 438,26 грн.


Відрахування на заробітну плату складає:

,2% - пенсійний фонд;

,5% - соціальне страхування;

,3% - відрахування в державний фонд сприяння зайнятості;

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

Разом відрахування на соціальні потреби складають 37,3% від фонду оплати праці:


,26 * 0,373 = 163,47 грн.


Накладні витрати складають 250 % від величини основної заробітної плати:


,22 * 2,5 = 913,05 грн.


Таблиця 5.3. Калькуляція

№ п/пНайменування статей витратЗатрати, грн. 1Амортизація1684,932Витратні матеріали1502Основна заробітна плата розробників365,223Додаткова заробітна плата розробників73,044Відрахування на соціальне страхування163,475Накладні витрати913,05Разом витрат: Зк= 3349,71

5.3 Витрати на ручну обробку інформації


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


Зр = Оn * Ц * Гд / Нв, де


Оn - об'єм інформації, що обробляється вручну, Мбайт;

Ц - вартість однієї години роботи, грн. /час;

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

Нв - норма вироблення, Мбайт/ година.

В даному випадку:

Оn = 25 Мбайт (загальний розмір оброблюваних даних);

Ц = 6,44 грн. / година;

Гд = 2.5 (встановлений експериментально);

Нв = 0.004 Мбайт / година.

З цього виходить, що витрати на ручну обробку інформації будуть рівні:


Зр = 25 * 6,44 * 2,5/0,004 = 100585,94 грн.


5.4 Витрати на автоматизовану обробку інформації


,


де - година автоматизованої обробки, рік.;

- вартість однієї години машинного часу, грн. /рік;

- година роботи оператора, рік.;

- вартість однієї години роботи оператора, грн. /рік.

Для даного випадку:= 180 год.,

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



к - кількість відпрацьованих годин за рік;

к1 - щоденні втрати 9-10% (відпустка, декретна відпустка та ін.)

к2 - внутрішні втрати робочого часу, 1 - 2% (пільгові години, перерви та ін.).


К = д * р * м


д - середня кількість робочих днів у місяці = 21;

р - тривалість робочого дня = 8;

м - кількість робочих місяців за рік = 11;


К = 21 * 8 * 11 = 1848 годин за рік.

= 1663,2 год.


Час роботи оператора = 1663,2 годин за рік

Вартість однієї години машинної години дорівнює:


Цм = Цэ*Р


Цэ - вартість 1квт електроенергії (0,24 грн.)

Р - споживана потужність комп'ютера в рік 300 Вт


Цм=0,24*0,3=0,07грн/рік, t0 = 180 год,

Ц0 =1100/ 21/8=6,55 грн. (заробітна плата бухгалтера 1100 грн)


Отже, витрати на автоматизовану обробку інформації дорівнюють:


За=180*0,07+180* (6,55+0,07) =1204,20 грн.


Таким чином, річна економія від упровадження дорівнює:


Еу = 100585,94 - 1204,20 - 3349,71 = 96032,03 грн.


Економічний ефект від використання програмного забезпечення за рік визначається по формулі, грн.:


.

Ег=96032,03 - 3349,71*0,2= 95362,09 грн.


Ефективність розробки може бути оцінена по формулі:


.

Ер=95362,09 * 0,4/3349,71= 11,39


Якщо Ер > 0, 20, то наша розробка є економічно доцільною.

Вартісна оцінка результатів застосування програмного забезпечення за розрахунковий період Т визначається по формулі:


,


де Т - розрахунковий період;

Рt - вартісна оцінка результатів t розрахункового періоду, грн.;

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

Дисконтуюча функція має вигляд:


= 1/ (1 + р) t,


де р - коефіцієнт дисконтування (р = Ен = 0,2, Ен - нормативний коефіцієнт ефективності капітальних вкладень).

Таким чином,


.


Якщо програмне забезпечення заміняє ручну працю, отже, набір корисних результатів у принципі не міняється. У якості оцінки результатів застосування програмного забезпечення за рік береться різниця (економія) витрати, які виникають у результаті використання програмного забезпечення, тобто Рt = Еу.

Припускається, що дана розробка без змін та доробок буде використовуватись на протязі п'яти років. Тоді вартісна оцінка результатів застосування програмного забезпечення (економія) за розрахунковий період Т = 3 роки складатиме:


=96032,03+80026,70+66688,91+55574,09= 298321,73 грн.


Економічний ефект від використання програмного забезпечення за розрахунковий період Т = 3 роки складатиме:


Ет = 298321,73 - 3349,71= 294972,02 грн.


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

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


6.1 Аналіз небезпечних і шкідливих виробничих чинників при роботі на компютері


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

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

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

Оптимальні норми температури, відносної вологості і швидкості руху повітря в робочій зоні виробничого приміщення відповідно до ГОСТ 12.1.005-88 приведені в таблиці 6.1

Таблиця 6.1. Оптимальні норми температури, відносної вологості і швидкості руху повітря

Період РокуКатегорія роботиТемпература, оСВідносна волог. повітря, %Швидкість руху повітря, не більше, м/сХолодний і перехіднийлегка20-2360-400,2Теплийлегка22-2560-400,2

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

знижується гострота зору, слуху;

підвищується кров'яний тиск;

знижується увага.

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

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

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

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

роду і величини напруги і струму;

частоти електричного струму;

шляхи проходження струму через тіло людини;

тривалість дії на організм людини;

умов зовнішнього середовища.

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

Друге викликає розкладання крові і плазми, значні порушення їх фізико-хімічних складів і тканин в цілому.

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

Будь-яка з цих дій струму може привести до електротравми. Електротравми поділяються на два види:

місцеві;

електроудари.

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

Спектр випромінювання комп'ютерного монітора включає рентгенівську, ультрафіолетову і інфрачервону області, а також широкий діапазон електромагнітних хвиль інших частот. В ряді експериментів було виявлено, що електромагнітні поля з частотою 60 Гц (що виникають навколо ліній електропередач, відеотерміналів і навіть внутрішньої електропроводки) можуть ініціювати біологічні зрушення (аж до порушення синтезу ДНК) в клітках тварин. На відміну від рентгенівських променів електромагнітні хвилі володіють незвичайною властивістю: небезпека їх дії зовсім не обов'язково зменшується при зниженні інтенсивності опромінювання, певні електромагнітні поля діють на клітини лише при малих інтенсивностях випромінювання або на конкретних частотах - в "вікнах прозорості. Джерело високої напруги комп'ютера - рядковий трансформатор - поміщається в задній або бічній частині терміналу, рівень випромінювання з боку задньої панелі дисплея вищий, причому стінки корпусу не екранують випромінювання. Тому користувач повинен знаходитися не ближче чим на 1,2 м від задніх або бічних поверхонь сусідніх терміналів.

За наслідками вимірювання електромагнітних випромінювань встановлено, що максимальна напруженість електромагнітного поля на кожусі відеотерміналу складає 3.6 В\м, проте в місці знаходження оператора її величина відповідає фоновому рівню (0.2-0.5 В\м); градієнт електростатичного поля на відстані 0.5м менше 300 В\см є в межах допустимого.

На відстані 5 см від екрану ВТ інтенсивність електромагнітного випромінювання складає 28-64В\м залежно від типу приладу. Ці значення знижуються до 0.3-2.4 В\м на відстані 30 см від екрану (мінімальна відстань очей оператора до площини екрану).

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

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

При статичній електризації напруга щодо землі досягає десятка, а іноді і сотень тисяч вольт. Значення струмів при цих явищах складають, як правило, долі мікроампера (0.0001-1мА). Людина починає відчувати струм величиною 0.6-1.5мА. По ГОСТ 12.1.038-82 напруга електричного струму не повинна перевищувати 42В в приміщеннях без підвищеної небезпеки, якими являються приміщення ВЦ.


6.2 Заходи щодо нормалізації робочої обстановки при роботі на компютері


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

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

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

визначити потрібний для операторів рівень освітленості лицьових панелей дисплеїв зовнішніми джерелами світла;

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

між екраном і документом 1: 5 - 1: 10;

між екраном і поверхнею робочого столу 1: 5;

між екраном і клавіатурою, а також між клавіатурою і документом - не більше 1: 3;

між екраном і навколишніми поверхнями 1: 3 - 1: 10.

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

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

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

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

Окрім освітленості, великий вплив на діяльність оператора впливає колір забарвлення приміщення і спектральні характеристики використовуваного світла. Згідно СНіП II-4-79 рекомендується, щоб стеля відображала 80-90%, стіни - 50-60%, підлога - 15-30% падаючого на них світла. До того ж колір володіє деякою психологічною фізіологічною дією. Наприклад, тони "теплої" гамми (червоний, оранжевий, жовтий) створюють враження бадьорості, збудження, зниження відчуття часу і відчуття тепла. "Холодні" тони (синій, зелений, фіолетовий) створюють враження спокою і викликають у людини відчуття прохолоди. Предмети і поверхні, забарвлені в "холодні" кольори, здаються менше, ніж забарвлені в "теплі" тони (при їх однаковій світлості) і як би віддаляються від того, що дивиться.

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

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

Освітленість на поверхні столу в зоні розміщення робочого документа повинна бути 300 - 500 лк. Освітлення не повинне створювати відблисків на поверхні екрану. Освітленість поверхні екрану не повинна перевищувати 300 лк.

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

Для освітлення приміщень з ПЕВМ слід застосовувати світильники з дзеркальною параболічною решіткою. Допускається використання багатолампових світильників з електромагнітними пускорегулюючими пристроями.

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


6.3 Пожежна безпека


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

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

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

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

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

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

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

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

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

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

В даному приміщенні застосовні сигналізатори типу ІП 104, які спрацьовують при перевищенні температури в приміщенні + 600С. І сигналізатори типу ІП 212, які спрацьовують при скупченні диму в приміщенні.

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

Висновки


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

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

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

Головним результатом виконання даної дипломної роботи було створення програми яка зможе автоматизувати процес зберігання та доступу к документам в локальній мережі підприємства. Система була розроблена з використанням технології доступу до баз даних АDО в середі Delphі 6.0.

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

Список літератури


1.Александровский А.Д. Delphi 5. Разработка корпоративных приложений. Среда визуальной разработки RAD </?T=1056155926&action=redirect&owner_id=22128&global_id=588106&url=http%3a%2f%2fwww%2ebiblion%2eru%2fcgi%2dbin%2fWebObjects%2fshop%2ewoa%2fwa%2faspurl%3fpid%3d277%26sku%3d43071&cat=a045/a005/a010>

.Архангельский А.Я. Интегрированная среда разработки Delphi (версии 1 - 5). Практическое пособие с примерами. - М.: Издательство Бином, 2002.

.Архангельский А.Я. Delphi 7. Справочное пособие. - М.: Издательство Бином, 2003.

.Архангельский А.Я. Object Pascal в Delphi. - М.: Издательство Бином, 2002.

.Архангельский А.Я. Приемы программирования в Delphi. Версии 5-7. - М.: Издательство Бином, 2003.

.Архангельский А. Я.100 компонентов библиотеки Delphi 5. - М.: Бином-пресс, 1999.

.Архангельский А.Я. Интегрированная среда разработки Delphi. - М.: Бином-пресс, 1999.

.Архангельский А.Я. Интегрированная среда разработки Delphi. - М.: Бином-пресс, 1999.

.Архангельский А.Я. Программирование в Delphi 7. - М.: Бином-пресс, 2004. - 1152 с.

. Бобровский С. Delphi 5 - CПб.: Питер, 2000

. Гаевский А. Разработка программных приложений на Delphi 6 - М.: Киев, 2000.

. Галисеев, Г.В. Программирование в среде Delphi 8 for.net. Самоучитель.: - М.: Издательский дом "Вильяме", 2004.

. Глинский Я.Н., Анохин В.Е., Ряжская В.А. Turbo Pascal 7.0 и Delphi. Учебное пособие. СПб.: ДиаСофтЮП, 2003. - 208 с.

. Гофман В., Хомоненко А. Delphi 6. CПб.: БХВ-Петербург, 2004.

. Грибачев К.Г. Delphi и Model Driven Architecture. Разработка приложений баз данных. - СПб. Питер, 2004.

. Грибачев К. Тонкие базы данных и инструменты для их разработки в Delphi и C++Builder. - КомпьютерПресс, 2003, № 7,8.

. Дарахвелидзе П.Г., Марков Е.П. Delphi - среда визуального программирования. СПб.: BHV - Санкт-Петербург, 1999. - 352с.

. Елманова Н., Трепалин С., Тенцер А. Delphi 6 и технология COM. - CПб.: Питер, 2002. - 640 с.

. Калверт Ч. Delphi 5. Энциклопедия пользователя. СПб.: ДиаСофтЮП, 2003.

. Климова Л.М. "Delphi 7. Самоучитель. М.: ИД КУДИЦ-ОБРАЗ, 2005. - 480с.

. Корняков В.Н. Программирование документов и приложений MS Office в Delphi. - CПб.: БХВ-Петербург, 2005. - 496 с.

. Коцюбинский А.О., Грошев С.В. Язык программирования Delphi 5 - М.: "Издательство Триумф", 1999

.Леонтьев В. Delphi 5 - М.: Москва "Олма-Пресс", 1999

.Мадрел Тео. Разработка пользовательского интерфейса/ Пер. с англ. - М.: ДМК, 2001.

.Матросов А.В. и др. MS Office ХР: разработка приложений / Матро-

.сов А.В., Новиков Ф.А., Усаров Г.Е., Харитонова И.А. / Под

.ред.Ф.А. Новикова. - СПб.: БХВ-Петербург, 2003.

. Немнюгин С.А. Программирование - CПб.: Питер, 2000.

. Озеров В. Delphi. Советы программистов (2-е издание). - СПб.: Символ - Плюс, 2002.

. Пономарев В. Самоучитель Delphi 7. CПб.: БХВ-Петербург, 2005.

. Ревнч Ю.В. Нестандартные приемы программирования на Delphi. - СПб.: БХВ-Петербург, 2005.

. Ремизов Н. Delphi - CПб.: Питер, 2000

. Симонович С.В., Евсеев Г.А. Занимательное программирование: Delphi. - М.: АСТ-ПРЕСС Кнрга, 2001. - 368 с.

.Тейксера Стив, Пачеко Ксавье "DELPHI 7 Руководство разработчика" в 2-х томах. - М.: Издательский дом "Вильямс", 2003г.

.Фараонов В. Система программирования Delphi. CПб.: БХВ-Петербург, 2005.

. Ханекамп Д. Вилькен П. Программирование под Windows/ Пер. с нем. - М.: ЭКОМ, 1996.

. Хомоненко А. Д Delphi 7. CПб.: БХВ-Петербург, 2005. - 1216с.: ил.

.#"center">Додаток А


Вихідний текст модулів системиmain_menu; // Головна форма, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Menus, ExtCtrls, ComCtrls, jpeg, ImgList, DB, ADOTable,comobj,, DBGrids;= class (TForm): TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TTimer;: TStatusBar;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TImageList;: TADOQuery;name_groop: TStringField;name_tov: TStringField;ed: TStringField;price_otp: TCurrencyField;: TADOQuery;name_groop: TStringField;name_tov: TStringField;ed: TStringField;price: TCurrencyField;kol: TLargeintField;price_otp: TCurrencyField;: TDataSource;N4Click (Sender: TObject);N3Click (Sender: TObject);N5Click (Sender: TObject);N8Click (Sender: TObject);Timer1Timer (Sender: TObject);N16Click (Sender: TObject);N12Click (Sender: TObject);N14Click (Sender: TObject);N7Click (Sender: TObject);N17Click (Sender: TObject);N24Click (Sender: TObject);N10Click (Sender: TObject);N23Click (Sender: TObject);N19Click (Sender: TObject);N20Click (Sender: TObject);N21Click (Sender: TObject);N22Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: Tmain;: boolean;,workbook,cell,range,cell1,cell2: VARIANT;: integer;sotr, kontr, tov, ostat, prihody, nakl, Unit1, Unit2, Unit54, Unit3,Unit4,unit53, Unit5;

{$R *. dfm}Tmain. N4Click (Sender: TObject);_t: =false;. BitBtn2. Visible: =false;. BitBtn3. Visible: =true;. BitBtn5. Visible: =true;. DBGrid2. ReadOnly: =false;. DBNavigator1. Enabled: =true;. Showmodal;Tmain. N3Click (Sender: TObject);. Caption: ='Карточка контрагента';. Show;Tmain. N5Click (Sender: TObject);_prod: =false;. BitBtn1. visible: =true;. BitBtn2. Caption: =Вихід;Tmain. N8Click (Sender: TObject);_r: =false;_rashod. DBGrid1. ReadOnly: =false;_rashod. FloatEdit1. ReadOnly: =false;_rashod. BitBtn1. Enabled: =true;_rashod. BitBtn2. Enabled: =true;_rashod. showmodal;Tmain. Timer1Timer (Sender: TObject);. Panels [1]. Text: =TimeToStr (Time);;Tmain. N16Click (Sender: TObject);;Tmain. N12Click (Sender: TObject);(main. Handle, 'help. hlp', HELP_CONTEXT, 1);;Tmain. N14Click (Sender: TObject);. show;Tmain. N7Click (Sender: TObject);: =false;_p. DBGrid1. ReadOnly: =false;_p. FloatEdit1. ReadOnly: =false;_p. BitBtn1. Enabled: =true;_p. BitBtn2. Enabled: =true;_p. Enabled: =true;_p. ShowModal;Tmain. N17Click (Sender: TObject);. ShowModal;;Tmain. N24Click (Sender: TObject);: =false;_bank. DBGrid1. ReadOnly: =false;_bank. ShowModal;Tmain. N10Click (Sender: TObject);_gr. ShowModal;Tmain. N19Click (Sender: TObject);i,j: integer;: string;. Active: =false;. Active: =true;: =cREATEoLEoBJECT ('Excel. Application');: =e. workbooks. add;(1,'A1: C1',true);: =workbook. worksheets [1]. cells [1,1];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. rowheight: =50;. font. size: =20;. font. bold: =true;. font. color: =clRed;. value: ='Прайс-лист от '+datetostr (date);;: =3;j: =1 to 3 doj of

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =75;. font. bold: =true;. interior. color: =rgb (160,240,240);;. borders. linestyle: =1;. borders. weight: =3;. value: ='Найменування';;

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =10;. font. bold: =true;. interior. color: =rgb (160,240,240);;. borders. linestyle: =1;. borders. weight: =3;. value: ='Од. вим. ';;

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =20;. font. bold: =true;. interior. color: =rgb (160,240,240);;. borders. linestyle: =1;. borders. weight: =3;. value: ='Ціна';;;. First;(1,'A4: C4',true);: =workbook. worksheets [1]. cells [4,1];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. font. bold: =true;. value: =ADOquery1name_groop. AsString;: =ADOquery1name_groop. AsString;: =i+1;not ADOquery1. Eof do: =i+1;r<>ADOquery1name_groop. AsString then(1,'A'+inttostr (i) +': C'+inttostr (i),true);: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. font. bold: =true;. value: =ADOquery1name_groop. AsString;: =i+1;;: =ADOquery1name_groop. AsString;: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOquery1name_tov. asstring;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,2];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOQuery1ed. asstring;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,3];: =workbook. worksheets [1]. range [cell,cell];. numberformat: ='_-* # ##0,00 грн. _-; - * # ##0,00 грн. _-; _-* "-"?? грн. _-; _-@_-';. value: =ADOQuery1price_otp. AsFloat;. borders. linestyle: =1;. borders. weight: =2;. Next;;. visible: =true;;Tmain. N20Click (Sender: TObject);i,j: integer;,sum2: real;: string;. Active: =false;. Active: =true;: =cREATEoLEoBJECT ('Excel. Application');: =e. workbooks. add;(1,'A1: E1',true);: =workbook. worksheets [1]. cells [1,1];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. rowheight: =50;. font. size: =20;. font. bold: =true;. font. color: =clRed;. value: ='Звіт "Товари на складі" от '+datetostr (date);;: =3;j: =1 to 5 doj of

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =55;. font. bold: =true;. interior. color: =rgb (160,240,240);;. borders. linestyle: =1;. borders. weight: =3;. value: ='Найменування';;

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =10;. font. bold: =true;. interior. color: =rgb (160,240,240);;. borders. linestyle: =1;. borders. weight: =3;. value: ='Од. вим. ';;

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =10;. font. bold: =true;. interior. color: =rgb (160,240,240);;. borders. linestyle: =1;. borders. weight: =3;. value: ='Кіл. ';;

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =20;. font. bold: =true;. interior. color: =rgb (160,240,240);;. borders. linestyle: =1;. borders. weight: =3;. value: ='Ціна закуп., грн';;

: begin cell: =workbook. worksheets [1]. cells [i,j];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. columnwidth: =20;. font. bold: =true;. interior. color: =rgb (160,240,240);;. borders. linestyle: =1;. borders. weight: =3;. value: ='Сума';;;. First;(1,'A4: E4',true);: =workbook. worksheets [1]. cells [4,1];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. font. bold: =true;. value: =ADOquery2name_groop. AsString;: =ADOquery2name_groop. AsString;: =i+1;: =0; sum2: =0;. First;not ADOquery2. Eof do: =i+1;r<>ADOquery2name_groop. AsString then(1,'A'+inttostr (i) +': D'+inttostr (i),true);: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. verticalalignment: =-4108;. font. bold: =true;. borders. linestyle: =1;. borders. weight: =2;. value: ='Всього';: =workbook. worksheets [1]. cells [i,5];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. font. bold: =true;. numberformat: ='_-* # ##0,00 грн. _-; - * # ##0,00 грн. _-; _-* "-"?? грн. _-; _-@_-';. borders. linestyle: =1;. borders. weight: =2;. value: =sum1;: =sum2+sum1;: =0;: =workbook. worksheets [1]. cells [i,2];: =workbook. worksheets [1]. range [cell,cell];. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,3];: =workbook. worksheets [1]. range [cell,cell];. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,4];: =workbook. worksheets [1]. range [cell,cell];. borders. linestyle: =1;. borders. weight: =2;: =i+1;(1,'A'+inttostr (i) +': E'+inttostr (i),true);: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. font. bold: =true;. borders. linestyle: =1;. borders. weight: =2;. value: =ADOquery2name_groop. AsString;: =i+1;;: =ADOquery2name_groop. AsString;: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOquery2name_tov. asstring;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,2];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOQuery2ed. asstring;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,3];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOQuery2kol. AsInteger;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,4];: =workbook. worksheets [1]. range [cell,cell];. numberformat: ='_-* # ##0,00 грн. _-; - * # ##0,00 грн. _-; _-* "-"?? грн. _-; _-@_-';. value: =ADOQuery2price. AsFloat;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,5];: =workbook. worksheets [1]. range [cell,cell];. numberformat: ='_-* # ##0,00 грн. _-; - * # ##0,00 грн. _-; _-* "-"?? грн. _-; _-@_-';. value: =ADOQuery2price. AsFloat*ADOquery2kol. AsInteger;. borders. linestyle: =1;. borders. weight: =2;: =sum1+ADOquery2price. AsFloat*ADOquery2kol. AsInteger;. Next;;: =i+1;(1,'A'+inttostr (i) +': D'+inttostr (i),true);: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. verticalalignment: =-4108;. font. bold: =true;. borders. linestyle: =1;. borders. weight: =2;. value: ='Итого';: =workbook. worksheets [1]. cells [i,5];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. font. bold: =true;. numberformat: ='_-* # ##0,00 грн. _-; - * # ##0,00 грн. _-; _-* "-"?? грн. _-; _-@_-';. borders. linestyle: =1;. borders. weight: =2;. value: =sum1;: =i+1;(1,'A'+inttostr (i) +': D'+inttostr (i),true);: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. verticalalignment: =-4108;. font. bold: =true;. borders. linestyle: =1;. borders. weight: =2;. value: ='Всього по складу';: =workbook. worksheets [1]. cells [i,5];: =workbook. worksheets [1]. range [cell,cell];. horizontalalignment: =-4108;. verticalalignment: =-4108;. font. bold: =true;. numberformat: ='_-* # ##0,00 грн. _-; - * # ##0,00 грн. _-; _-* "-"?? грн. _-; _-@_-';. borders. linestyle: =1;. borders. weight: =2;: =sum2+sum1;. value: =sum2;: =workbook. worksheets [1]. cells [i,2];: =workbook. worksheets [1]. range [cell,cell];. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,3];: =workbook. worksheets [1]. range [cell,cell];. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,4];: =workbook. worksheets [1]. range [cell,cell];. borders. linestyle: =1;. borders. weight: =2;. visible: =true;;Tmain. N21Click (Sender: TObject);: =1;_date. ShowModal;Tmain. N22Click (Sender: TObject);: =2;_date. ShowModal;.kontr; // "Довідник контрагентів", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, DB, ADOTable, Grids, DBGrids, Buttons, ExtCtrls;= class (TForm): TDBGrid;: TDataSource;: TADOTable;name_kontr: TStringField;adress_kontr: TStringField;phone_kontr: TStringField;type: TStringField;inn: TStringField;nns: TStringField;edrp: TStringField;dir: TStringField;buh: TStringField;n_pasp: TStringField;date_pasp: TDateField;v_pasp: TStringField;schet1: TStringField;kod_b1: TSmallintField;schet2: TStringField;kod_b2: TSmallintField;schet3: TStringField;kod_b3: TSmallintField;kod_kontr: TAutoIncField;: TPanel;: TBitBtn;: TBitBtn;: TBitBtn;: TGroupBox;: TEdit;: TBitBtn;BitBtn1Click (Sender: TObject);BitBtn2Click (Sender: TObject);BitBtn3Click (Sender: TObject);Edit1Change (Sender: TObject);BitBtn4Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: Tkontrag;: boolean;add_kontrag, Unit4;

{$R *. dfm}Tkontrag. BitBtn1Click (Sender: TObject);. Insert;: =false; // /dobavit. showmodal;;Tkontrag. BitBtn2Click (Sender: TObject);. Edit;: =true;. ShowModal;;Tkontrag. BitBtn3Click (Sender: TObject);MessageDlg ('Вы уверены в том, что хотите удалить'+(ADOTable1. FieldByName ('name_kontr'). AsString) +

'? ',mtConfirmation, [mbYes,mbNo],0) = mrYes then. Delete;;Tkontrag. Edit1Change (Sender: TObject);. Locate ('name_kontr',edit1. Text, [loCaseInsensitive,loPartialKey]);;Tkontrag. BitBtn4Click (Sender: TObject);;.Unit4; // "Карточка контрагента", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Mask, DBCtrls, ComCtrls, Buttons,kontr;= class (TForm): TLabel;: TLabel;: TDBEdit;: TComboBox;: TGroupBox;: TDBEdit;: TLabel;: TLabel;: TDBEdit;: TLabel;: TDBEdit;: TGroupBox;: TLabel;: TDBEdit;: TLabel;: TDBEdit;: TGroupBox;: TLabel;: TDBEdit;: TLabel;: TDBComboBox;: TDateTimePicker;: TGroupBox;: TListBox;: TBitBtn;: TLabel;: TGroupBox;: TDBEdit;: TDBEdit;: TBitBtn;: TLabel;: TLabel;: TBitBtn;: TBitBtn;FormShow (Sender: TObject);BitBtn1Click (Sender: TObject);ListBox1Click (Sender: TObject);ComboBox1Change (Sender: TObject);FormClose (Sender: TObject; var Action: TCloseAction);FormCloseQuery (Sender: TObject; var CanClose: Boolean);BitBtn2Click (Sender: TObject);BitBtn3Click (Sender: TObject);BitBtn4Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: Tkarta;,flag: boolean;Unit53;

{$R *. dfm}Tkarta. FormShow (Sender: TObject);. Enabled: =false;. Items. Clear;kontrag. ADOTable1schet1. AsString<>'' then. Items. Add ('Р/р № '+kontrag. ADOTable1schet1. AsString);kontrag. ADOTable1schet2. AsString<>'' then. Items. Add ('Р/р № '+ kontrag. ADOTable1Schet2. AsString);kontrag. ADOTable1schet3. AsString<>'' then. Items. Add ('Р/р № '+kontrag. ADOTable1Schet3. AsString);kontrag. ADOTable1Date_pasp. AsDateTime<> strtodate ('30.12.1899') then. Date: =kontrag. ADOTable1Date_pasp. AsDateTimedatetimepicker1. Date: =date;kontrag. ADOTable1TyPe. AsString='О'combobox1. ItemIndex: =0combobox1. ItemIndex: =1;change (sender);;Tkarta. BitBtn1Click (Sender: TObject);_rekv. ShowModal;;Tkarta. ListBox1Click (Sender: TObject);. Enabled: =true;;Tkarta.comboBox1Change (Sender: TObject);combobox1. ItemIndex=0 then. Visible: =true;. Visible: =false;. Caption: ='ЕДРПОУ'else. Visible: =true;. Visible: =false;. Caption: ='ДРФО';;Tkarta. FormClose (Sender: TObject; var Action: TCloseAction);flag=true then begincombobox1. ItemIndex of

: kontrag. ADOTable1TyPe. AsString: ='О';

: kontrag. ADOTable1TyPe. AsString: ='Ч';;. ADOTable1Date_pasp. AsDateTime: =datetimepicker1. Date;. ADOTable1. Post;if f=false then kontrag. ADOTable1. Delete;;Tkarta. FormCloseQuery (Sender: TObject; var CanClose: Boolean);(dbedit1. Text='') and (flag=true) then('Введіть найменування контрагента! ');: =false;;;Tkarta. BitBtn2Click (Sender: TObject);: =false;;Tkarta. BitBtn3Click (Sender: TObject);: =true;;Tkarta. BitBtn4Click (Sender: TObject);listbox1. Items. Count<3 then. Items. Add ('');. ItemIndex: =listbox1. Items. Count-1;else begin showmessage ('Можно ввести лише три номера рахунку! '); exit; end;_rekv. Edit1. Text: ='';_rekv. ShowModal;;.Unit53; // "Банківські реквізити", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Mask, DBCtrls, Buttons;_rekv = class (TForm): TGroupBox;: TDBEdit;: TLabel;: TLabel;: TBitBtn;: TEdit;BitBtn1Click (Sender: TObject);FormShow (Sender: TObject);FormClose (Sender: TObject; var Action: TCloseAction);

{ Private declarations }

{ Public declarations };_rekv: Tbank_rekv;: boolean;Unit54, Unit4, kontr;

{$R *. dfm}Tbank_rekv. BitBtn1Click (Sender: TObject);_bank. DBGrid1. ReadOnly: =true;: =true;_bank. ShowModal;Tbank_rekv. FormShow (Sender: TObject);. SetFocus;karta. ListBox1. ItemIndex of

: begin. DataField: ='schet1';sp_bank. ADOTable1. Locate ('kod_b',kontrag. ADOTable1kod_b1. AsInteger, [])edit1. Text: =sp_bank. ADOTable1name_b. AsStringedit1. Text: ='';;

: begin dbedit1. DataField: ='schet2';sp_bank. ADOTable1. Locate ('kod_b',kontrag. ADOTable1kod_b2. AsInteger, [])edit1. Text: =sp_bank. ADOTable1name_b. AsStringedit1. Text: ='';;

: begin. DataField: ='schet3';sp_bank. ADOTable1. Locate ('kod_b',kontrag. ADOTable1kod_b3. AsInteger, [])edit1. Text: =sp_bank. ADOTable1name_b. AsStringedit1. Text: ='';;;;Tbank_rekv. FormClose (Sender: TObject; var Action: TCloseAction);karta do. Items. Clear;. ADOTable1. post;. ADOTable1. Edit;kontrag. ADOTable1schet1. AsString<>'' then. Items. Add ('Р/р№ '+kontrag. ADOTable1schet1. AsString);kontrag. ADOTable1schet2. AsString<>'' then. Items. Add ('Р/р № '+ kontrag. ADOTable1Schet2. AsString);kontrag. ADOTable1schet3. AsString<>'' then. Items. Add ('Р/р № '+kontrag. ADOTable1Schet3. AsString);;;.Unit54; // "Довідник банків", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, DBCtrls, Grids, DBGrids, DB, DBTables, ADOTable;_bank = class (TForm): TDBGrid;: TDBNavigator;: TDataSource;: TADOTable;name_b: TStringField;mfo: TStringField;egrpou: TStringField;kod_b: TAutoIncField;FormClose (Sender: TObject; var Action: TCloseAction);

{ Private declarations }

{ Public declarations };_bank: Tsp_bank;Unit53, Unit4, kontr;

{$R *. dfm}Tsp_bank. FormClose (Sender: TObject; var Action: TCloseAction);vibor thenkarta. ListBox1. ItemIndex of

: kontrag. ADOTable1Kod_b1. AsInteger: =ADOTable1Kod_b. asinteger;

: kontrag. ADOTable1Kod_b2. AsInteger: =ADOTable1Kod_b. asinteger;

: kontrag. ADOTable1Kod_b3. AsInteger: =ADOTable1Kod_b. asinteger;;_rekv. Edit1. Text: =ADOTable1Name_b. AsString;elseADOtable1. Modified= true then. Post;;.tov; // "Довідник товарів", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DB, ADOTable, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls,,nakl;= class (TForm): TDataSource;: TDataSource;: TADOTable;: TADOTable;name_groop: TStringField;kod_groop: TAutoIncField;: TButton;name_tov: TStringField;price: TCurrencyField;ed: TStringField;kod_groop: TIntegerField;kod_tov: TAutoIncField;: TPanel;: TDBGrid;: TPanel;: TDBNavigator;: TDBGrid;: TPanel;price_otp: TCurrencyField;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;BitBtn1Click (Sender: TObject);BitBtn2Click (Sender: TObject);BitBtn3Click (Sender: TObject);FormCloseQuery (Sender: TObject; var CanClose: Boolean);BitBtn4Click (Sender: TObject);

// procedure Button1Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: Ttovar;add_tov, prihody, Unit3;

{$R *. dfm}Ttovar. BitBtn1Click (Sender: TObject);;Ttovar. BitBtn2Click (Sender: TObject);;Ttovar. BitBtn3Click (Sender: TObject);MessageDlg ('Ви впевнені в тому, що хочете видалити запис? ',mtConfirmation, [mbYes,mbNo],0) = mrYes then. Delete;;Ttovar. FormCloseQuery (Sender: TObject; var CanClose: Boolean);fl_t then_p. ADOTable1kod_tov. AsInteger: =ADOtable2kod_tov. AsInteger;_p. ADOTable1. Post;;;Ttovar. BitBtn4Click (Sender: TObject);_gr. ShowModal;;.ostat; // "Товари на складі", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, DB, ADOTable, Grids, DBGrids, ExtCtrls, ComCtrls,, DBCtrls, FloatEdit;= class (TForm): TDBGrid;: TPanel;: TBitBtn;: TBitBtn;: TDBGrid;: TDataSource;: TADOTable;name_groop: TStringField;kod_groop: TAutoIncField;: TADOTable;name_tov: TStringField;ed: TStringField;price: TCurrencyField;price_otp: TCurrencyField;kod_groop: TIntegerField;kod_tov: TAutoIncField;: TDataSource;kol: TLargeintField;: TFloatEdit;: TLabel;: TADOQuery;BitBtn2Click (Sender: TObject);FormCloseQuery (Sender: TObject; var CanClose: Boolean);BitBtn1Click (Sender: TObject);FormShow (Sender: TObject);

{ Private declarations }

{ Public declarations };: TOstatki;Unit1, nakl,main_menu;

{$R *. dfm}TOstatki. BitBtn2Click (Sender: TObject);;TOstatki. FormCloseQuery (Sender: TObject; var CanClose: Boolean);fl_prod =true then_rashod. ADOTable1kod_tov. AsInteger: =ADOtable1kod_tov. AsInteger;_rashod. ADOTable1. Post;;;TOstatki. BitBtn1Click (Sender: TObject);. N20Click (Sender);;TOstatki. FormShow (Sender: TObject);. Active: =false;. Active: =true;. Active: =false;. Active: =true;. First;. Value: =0;not ADOtable1. Eof do. Value: =floatedit1. Value+ADOtable1price. AsFloat*ADOtable1kol. AsInteger;. Next;;;.

nakl; // "Закупка товарів", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons, Grids, DBGrids, ComCtrls, DB, ADOTable,, DBCtrls,kontr, FloatEdit, ExtCtrls;_p = class (TForm): TDBGrid;: TADOTable;: TDataSource;kol: TIntegerField;ID: TAutoIncField;kod_tov: TIntegerField;No_doc: TIntegerField;cena: TCurrencyField;: TDataSource;: TADOTable;date_doc: TDateField;kod_kontr: TIntegerField;summa: TCurrencyField;kod_kat: TSmallintField;No_doc: TLargeintField;: TADOTable;name_kontr: TStringField;adress_kontr: TStringField;phone_kontr: TStringField;type: TStringField;inn: TStringField;nns: TStringField;edrp: TStringField;dir: TStringField;buh: TStringField;n_pasp: TStringField;date_pasp: TDateField;v_pasp: TStringField;schet1: TStringField;kod_b1: TSmallintField;schet2: TStringField;kod_b2: TSmallintField;schet3: TStringField;kod_b3: TSmallintField;kod_kontr: TAutoIncField;doc: TStringField;: TPanel;: TLabel;: TLabel;: TComboBox;: TDateTimePicker;: TDBEdit;: TPanel;: TBitBtn;: TFloatEdit;: TLabel;: TLabel;: TBitBtn;: TBitBtn;nt: TStringField;cena_ed: TCurrencyField;ed: TStringField;ComboBox2KeyPress (Sender: TObject; var Key: Char);ComboBox3KeyPress (Sender: TObject; var Key: Char);ComboBox4KeyPress (Sender: TObject; var Key: Char);ComboBox5KeyPress (Sender: TObject; var Key: Char);FormShow (Sender: TObject);ADOTable1CalcFields (DataSet: TDataSet);FormCreate (Sender: TObject);ADOTable1katChange (Sender: TField);ADOTable1BeforePost (DataSet: TDataSet);ADOTable1kolChange (Sender: TField);BitBtn1Click (Sender: TObject);FormCloseQuery (Sender: TObject; var CanClose: Boolean);BitBtn2Click (Sender: TObject);BitBtn3Click (Sender: TObject);

{ Private declarations }

{ Public declarations };_p: TNakladnaya_p;,b,c: integer;: real;_t,zap: boolean;prihody, tov, ostat;

{$R *. dfm}TNakladnaya_p.comboBox2KeyPress (Sender: TObject; var Key: Char);: =#0;TNakladnaya_p.comboBox3KeyPress (Sender: TObject; var Key: Char);: =#0;TNakladnaya_p.comboBox4KeyPress (Sender: TObject; var Key: Char);: =#0;TNakladnaya_p.comboBox5KeyPress (Sender: TObject; var Key: Char);: =#0;TNakladnaya_p. FormShow (Sender: TObject);a: integer;not red then: =false; combobox4. Items. Clear;. Value: =0;. Last;: =ADOtable2no_doc. AsInteger+1;. Insert;no_doc. AsInteger: =a;. Post;. Filter: ='no_doc='+inttostr (ADOtable2no_doc. AsInteger);. Filtered: =true;. ADOTable1. First;not kontrag. ADOTable1. Eof do. Items. Add (kontrag. ADOTable1name_kontr. AsString);. ADOTable1. Next;;. ItemIndex: =-1;: =true;. Filter: ='no_doc='+inttostr (ADOtable2no_doc. AsInteger);. Filtered: =true;. Items. Clear;. Items. Add (prihod. ADOQuery1name_kontr. AsString);. ItemIndex: =0;. Value: =0;. First;not ADOtable1. Eof do. Value: =0;. Value: =floatedit1. Value+ADOtable1cena. AsFloat;. Next;;;TNakladnaya_p. ADOTable1CalcFields (DataSet: TDataSet);cena. AsCurrency: =tovar. ADOTable2price. AsCurrency * ADOTable1kol. AsInteger;;TNakladnaya_p. FormCreate (Sender: TObject);. Date: =date;;TNakladnaya_p. ADOTable1katChange (Sender: TField);. ADOTable2. Active: =false;. ADOTable2. Active: =true;;TNakladnaya_p. ADOTable1BeforePost (DataSet: TDataSet);no_doc. AsInteger: =ADOtable2no_doc. AsInteger;;TNakladnaya_p. ADOTable1kolChange (Sender: TField);not ADOtable1. Eof do. Value: =floatedit1. Value+ADOtable1cena. AsFloat;. Next;;TNakladnaya_p. BitBtn1Click (Sender: TObject);. Edit;date_doc. AsDateTime: =datetimepicker1. Date;summa. AsCurrency: =floatedit1. Value;. Locate ('name_kontr',combobox4. Text, []);kod_kontr. AsInteger: =ADOTable4kod_kontr. AsInteger;doc. AsString: ='p';. Post;: =true;. First;not ADOtable1. Eof do. ADOTable1. Locate ('kod_tov',ADOtable1kod_tov. AsInteger, []);. ADOTable1. Edit;. ADOTable1kol. AsInteger: =ostatki. ADOTable1kol. AsInteger+ADOtable1kol. AsInteger;. ADOTable1. Post;. Next;;. ADOTable1. Active: =false;. ADOTable1. Active: =true;;;TNakladnaya_p. FormCloseQuery (Sender: TObject;CanClose: Boolean);not zap then begin. Last;. Delete;. First;not ADOtable1. Eof do. Delete;;;;TNakladnaya_p. BitBtn2Click (Sender: TObject);. Insert;. dbgrid1. ReadOnly: =true;. BitBtn2. Visible: =true;. BitBtn3. Visible: =false;. BitBtn5. Visible: =false;. DBGrid2. ReadOnly: =true;. DBNavigator1. Enabled: =false;_t: =true; // podbor. ShowModal;;TNakladnaya_p. BitBtn3Click (Sender: TObject);ADOtable1. RecordCount>0 then. Delete;;.Unit1; // "Продаж товарів", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DB, Grids, DBGrids, ADOTable, ComCtrls, StdCtrls, Mask, DBCtrls,, Buttons, ExtCtrls;_rashod = class (TForm): TADOTable;: TADOTable;: TDataSource;: TDBGrid;No_doc: TIntegerField;kod_tov: TIntegerField;kol: TIntegerField;kod_kat: TSmallintField;ID: TAutoIncField;: TADOTable;: TDataSource;date_doc: TDateField;kod_kontr: TIntegerField;summa: TCurrencyField;No_doc: TLargeintField;id: TAutoIncField;cena: TCurrencyField;name_kontr: TStringField;adress_kontr: TStringField;phone_kontr: TStringField;type: TStringField;inn: TStringField;nns: TStringField;edrp: TStringField;dir: TStringField;buh: TStringField;n_pasp: TStringField;date_pasp: TDateField;v_pasp: TStringField;schet1: TStringField;kod_b1: TSmallintField;schet2: TStringField;kod_b2: TSmallintField;schet3: TStringField;kod_b3: TSmallintField;kod_kontr: TAutoIncField;doc: TStringField;: TPanel;: TLabel;: TLabel;: TDBEdit;: TComboBox;: TLabel;: TDateTimePicker;: TPanel;: TBitBtn;: TBitBtn;: TFloatEdit;: TLabel;: TBitBtn;nt: TStringField;ed: TStringField;cen_pr: TCurrencyField;FormShow (Sender: TObject);ADOTable1CalcFields (DataSet: TDataSet);BitBtn1Click (Sender: TObject);BitBtn2Click (Sender: TObject);FormCreate (Sender: TObject);ADOTable1BeforePost (DataSet: TDataSet);ADOTable1kolChange (Sender: TField);BitBtn3Click (Sender: TObject);FormCloseQuery (Sender: TObject; var CanClose: Boolean);

{ Private declarations }

{ Public declarations };_rashod: Tn_rashod;,fl_prod: boolean;kontr, ostat, tov,unit2;

{$R *. dfm}Tn_rashod. FormShow (Sender: TObject);a: integer;not red_r then: =false;. Value: =0;. Last;: =ADOtable2no_doc. AsInteger+1;. Insert;no_doc. AsInteger: =a;. Post;. Filter: ='no_doc='+inttostr (ADOtable2no_doc. AsInteger);. Filtered: =true;. ADOTable1. First;. Items. Clear;not kontrag. ADOTable1. Eof do. Items. Add (kontrag. ADOTable1name_kontr. AsString);. ADOTable1. Next;;. ItemIndex: =-1;// redakt: =true;. Filter: ='no_doc='+inttostr (ADOtable2no_doc. AsInteger);. Filtered: =true;. Items. Clear;. Items. Add (rashod. ADOQuery1name_kontr. AsString);. ItemIndex: =0;. First;. Value: =0;not ADOtable1. Eof do. Value: =floatedit1. Value+ADOtable1cena. AsFloat;. Next;;;Tn_rashod. ADOTable1CalcFields (DataSet: TDataSet);cena. AsCurrency: =ostatki. ADOTable1price_otp. AsCurrency * ADOTable1kol. AsInteger;;Tn_rashod. BitBtn1Click (Sender: TObject);. Edit;doc. AsString: ='r';date_doc. AsDateTime: =datetimepicker1. Date;summa. AsCurrency: =floatedit1. Value;. Locate ('name_kontr',combobox1. Text, []);kod_kontr. AsInteger: =ADOTable4kod_kontr. AsInteger;. Post;: =true;. First;not ADOtable1. Eof do. ADOTable1. Locate ('kod_tov',ADOtable1kod_tov. AsInteger, []);. ADOTable1. Edit;. ADOTable1kol. AsInteger: =ostatki. ADOTable1kol. AsInteger-ADOtable1kol. AsInteger;. ADOTable1. Post;. Next;;. ADOTable1. Active: =false;. ADOTable1. Active: =true;;;Tn_rashod. BitBtn2Click (Sender: TObject);. Insert;_prod: =true; // podbor. BitBtn1. visible: =false;. BitBtn2. Caption: ='Подбор';. ShowModal;;Tn_rashod. FormCreate (Sender: TObject);. Date: =date;Tn_rashod. ADOTable1BeforePost (DataSet: TDataSet);no_doc. AsInteger: =ADOtable2no_doc. AsInteger;;Tn_rashod. ADOTable1kolChange (Sender: TField);ADOtable1kol. AsInteger>ostatki. ADOTable1kol. AsInteger then begin('Кількість товарів превищує запаси на складі! ');kol. AsInteger: =0;end;. Value: =0;. First;not ADOtable1. Eof do. Value: =floatedit1. Value+ADOtable1cena. AsFloat;. Next;;Tn_rashod. BitBtn3Click (Sender: TObject);. Delete;;Tn_rashod. FormCloseQuery (Sender: TObject; var CanClose: Boolean);not zap then begin. Last;. Delete;. First;not ADOtable1. Eof do. Delete;;;;.

prihody; // "Статистика закупок", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DB, ADOTable, Grids, DBGrids, StdCtrls, Buttons, ComCtrls,, DBTables;= class (TForm): TDBGrid;: TDataSource;: TADOQuery;date_doc: TDateField;no_doc: TLargeintField;summa: TCurrencyField;name_kontr: TStringField;: TTable;doc: TStringField;: TPanel;: TGroupBox;: TLabel;: TLabel;: TDateTimePicker;: TDateTimePicker;: TBitBtn;: TBitBtn;: TBitBtn;: TCheckBox;: TBitBtn;BitBtn1Click (Sender: TObject);BitBtn4Click (Sender: TObject);FormCreate (Sender: TObject);FormShow (Sender: TObject);BitBtn2Click (Sender: TObject);CheckBox1Click (Sender: TObject);BitBtn3Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: TPrihod;: boolean;nakl, otch, main_menu;

{$R *. dfm}TPrihod. BitBtn1Click (Sender: TObject);. Close;TPrihod. BitBtn4Click (Sender: TObject);: =true;_p. ADOTable2. Locate ('no_doc',ADOQuery1no_doc. AsInteger, []);_p. DateTimePicker1. Date: =ADOQuery1date_doc. AsDateTime;_p. DBGrid1. ReadOnly: =true;_p. FloatEdit1. ReadOnly: =true;_p. BitBtn1. Enabled: =false;_p. BitBtn2. Enabled: =false;_p. ShowModal;;TPrihod. FormCreate (Sender: TObject);. Date: =date;;TPrihod. FormShow (Sender: TObject);. Active: =false;. Active: =true;;TPrihod. BitBtn2Click (Sender: TObject);. Filter: ='date_doc>='+''''+DateToStr (DateTimePicker1. Date) +''''+'and date_doc<='

+''''+DateToStr (DateTimePicker2. Date) +'''';. Filtered: =true;. Checked: =false;;TPrihod. CheckBox1Click (Sender: TObject);checkbox1. Checked then. Filtered: =False;;TPrihod. BitBtn3Click (Sender: TObject);. N21Click (Sender);.Unit2; // "Статистика продажу", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DBTables, DB, ADOTable, Buttons, ComCtrls, StdCtrls, Grids,, ExtCtrls;= class (TForm): TDBGrid;: TDataSource;: TADOQuery;date_doc: TDateField;no_doc: TLargeintField;summa: TCurrencyField;name_kontr: TStringField;doc: TStringField;: TPanel;: TGroupBox;: TLabel;: TLabel;: TDateTimePicker;: TDateTimePicker;: TBitBtn;: TBitBtn;: TBitBtn;: TCheckBox;: TBitBtn;BitBtn3Click (Sender: TObject);BitBtn4Click (Sender: TObject);BitBtn1Click (Sender: TObject);FormCreate (Sender: TObject);FormShow (Sender: TObject);BitBtn2Click (Sender: TObject);CheckBox1Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: TRashod;_r: boolean;Unit1, nakl, main_menu;

{$R *. dfm}TRashod. BitBtn3Click (Sender: TObject);. N22Click (Sender);;TRashod. BitBtn4Click (Sender: TObject);_r: =true;_rashod. ADOTable2. Locate ('no_doc',ADOQuery1no_doc. AsInteger, []);_rashod. DateTimePicker1. Date: =ADOQuery1date_doc. AsDateTime;_rashod. DBGrid1. ReadOnly: =true;_rashod. FloatEdit1. ReadOnly: =true;_rashod. BitBtn1. Enabled: =false;_rashod. BitBtn2. Enabled: =false;_rashod. ShowModal;;TRashod. BitBtn1Click (Sender: TObject);;TRashod. FormCreate (Sender: TObject);. Date: =date;;TRashod. FormShow (Sender: TObject);. Active: =false;. Active: =true;;TRashod. BitBtn2Click (Sender: TObject);. Filter: ='date_doc>='+''''+DateToStr (DateTimePicker1. Date) +''''+'and date_doc<='

+''''+DateToStr (DateTimePicker2. Date) +'''';. Filtered: =true;. Checked: =false;;TRashod. CheckBox1Click (Sender: TObject);checkbox1. Checked then. Filtered: =false;.Unit5; // "Вибор діапазона дат - формування книг", Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ComCtrls, StdCtrls, Buttons, DB, comobj, ADOTable,main_menu;_date = class (TForm): TLabel;: TLabel;: TDateTimePicker;: TDateTimePicker;: TBitBtn;: TBitBtn;: TADOQuery;name_kontr: TStringField;date_doc: TDateField;summa: TCurrencyField;no_doc: TLargeintField;: TADOQuery;name_kontr: TStringField;date_doc: TDateField;summa: TCurrencyField;no_doc: TLargeintField;doc: TStringField;BitBtn1Click (Sender: TObject);

{ Private declarations }

{ Public declarations };_date: Tv_date;,cell,range,workbook: variant;_f: string;

{$R *. dfm}FindAndInsert (FindText,replacementText: string): boolean;range: variant;: =e. cells. replace (what: =findtext,replacement: =replacementtext);;Tv_date. BitBtn1Click (Sender: TObject);AppPath: array [0.255] of char;: TStringList;: integer;: real;kn=1 then. SQL. Clear;. SQL. Add ('select k. name_kontr,d. date_doc,d. summa,d. no_doc, d. doc from documents_id d left join kontragenty k where k. kod_kontr=d. kod_kontr and d. doc='+''''+'p'+''''+'and d. date_doc >='+''''+datetostr (datetimepicker1. Date) +''''+' and d. date_doc <='+''''+datetostr (datetimepicker2. Date) +''''+' order by d. date_doc');. Active: =true;(255,AppPath);_f: =APPPATH;: =cREATEoLEoBJECT ('Excel. Application');: =e. workbooks. add (s_f+'\Книга закупок. xlt" ');('##data',datetostr (date));. First;: =3; sum: =0;not ADOquery1. Eof do: =i+1;: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOquery1date_doc. AsDateTime;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,2];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOquery1no_doc. AsInteger;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,3];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOQuery1name_kontr. AsString;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,4];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOQuery1summa. AsCurrency;. borders. linestyle: =1;. borders. weight: =2;: =sum+ADOQuery1summa. AsCurrency;. Next;;: =i+2;: =workbook. worksheets [1]. cells [i,4];: =workbook. worksheets [1]. range [cell,cell];. value: =sum;. borders. linestyle: =1;. borders. weight: =2;. SQL. Clear;. SQL. Add ('select k. name_kontr,d. date_doc,d. summa,d. no_doc, d. doc from documents_id d left join kontragenty k where k. kod_kontr=d. kod_kontr and d. doc='+''''+'r'+''''+'and d. date_doc >='+''''+datetostr (datetimepicker1. Date) +''''+' and d. date_doc <='+''''+datetostr (datetimepicker2. Date) +''''+' order by d. date_doc');. Active: =true;(255,AppPath);_f: =APPPATH;: =cREATEoLEoBJECT ('Excel. Application');: =e. workbooks. add (s_f+'\Книга продажу. xlt" ');('##data',datetostr (date));. First;: =3; sum: =0;not ADOquery2. Eof do: =i+1;: =workbook. worksheets [1]. cells [i,1];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOquery2date_doc. AsDateTime;. borders. linestyle: =1;. borders. weight: =2; : =workbook. worksheets [1]. cells [i,2];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOquery2no_doc. AsInteger;. borders. linestyle: =1; . borders. weight: =2; : =workbook. worksheets [1]. cells [i,3];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOQuery2name_kontr. AsString;. borders. linestyle: =1;. borders. weight: =2;: =workbook. worksheets [1]. cells [i,4];: =workbook. worksheets [1]. range [cell,cell];. value: =ADOQuery2summa. AsCurrency;. borders. linestyle: =1;. borders. weight: =2;: =sum+ADOQuery2summa. AsCurrency;. Next;;: =i+2;: =workbook. worksheets [1]. cells [i,4];: =workbook. worksheets [1]. range [cell,cell];. value: =sum;. borders. linestyle: =1;. borders. weight: =2;;. visible: =true;;.


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

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ