Будь ласка, використовуйте цей ідентифікатор, щоб цитувати або посилатися на цей матеріал:
https://er.chdtu.edu.ua/handle/ChSTU/9888Повний запис метаданих
| Поле DC | Значення | Мова |
|---|---|---|
| dc.contributor.advisor | Прокопенко , Тетяна Олександрівна | - |
| dc.contributor.author | Василенко, Дмитро Євгенійович | - |
| dc.date.accessioned | 2026-07-27T11:44:50Z | - |
| dc.date.available | 2026-07-27T11:44:50Z | - |
| dc.date.issued | 2026-06-10 | - |
| dc.identifier.uri | https://er.chdtu.edu.ua/handle/ChSTU/9888 | - |
| dc.description.abstract | У кваліфікаційній роботі бакалавра розроблено Web-орієнтовану інформаційну систему обліку даних виробничого підприємства. Розробку реалізовано на основі використання комплексу сучасних програмних інструментів та засобів. Обсяг пояснювальної записки кваліфікаційної роботи бакалавра складає 80 сторінок, в тому числі вступ, 3 розділи, висновки, додаток та список використаних джерел. Робота містить 10 рисунків та 50 інформаційних джерел. Перший розділ кваліфікаційної роботи присвячений опису сучасного стану досліджуваної теми, визначення ключових процесів, термінів та актуальності розробки. Здійснено аналітичний огляд існуючих програмних рішень або систем, оцінку їхніх переваг і недоліків. Обґрунтувано актуальність та доцільність створення нового продукту. Сформульовано мету роботи, описано функціональні вимоги та перелік завдань для реалізації проєкту. Другий розділ присвячений проектуванню архітектури webорієнтованої інформаційної системи, проєктуванню бази даних. Досліджено питання вибору засобів розробки web-орієнтованої ІС. У третьому розділі спроєктовано та реалізовано клієнтську і серверну частини системи, а також створено сучасний інтуїтивно зрозумілий UI/UXдизайн, який забезпечує зручну взаємодію користувача з інтерфейсом. Проведене комплексне тестування розробленого програмного забезпечення підтвердило повну відповідність системи висунутим функціональним вимогам, високу стабільність її роботи та готовність до практичного розгортання. | uk_UA |
| dc.language.iso | uk | uk_UA |
| dc.subject | web-орієнтована | uk_UA |
| dc.subject | React | uk_UA |
| dc.subject | інформаційна система | uk_UA |
| dc.subject | контроль відвідування занять студентами | uk_UA |
| dc.subject | фреймворк | uk_UA |
| dc.subject | Figma | uk_UA |
| dc.subject | Node.js | uk_UA |
| dc.subject | сервер | uk_UA |
| dc.subject | UI/UX-дизайн | uk_UA |
| dc.title | WEB-ОРІЄНТОВАНА ІНФОРМАЦІЙНА СИСТЕМА ОБЛІКУ ДАНИХ ВИРОБНИЧОГО ПІДПРИЄМСТВА | uk_UA |
| dc.type | Bachelor Thesis | uk_UA |
| Розташовується у зібраннях: | 126 Інформаційні системи та технології (Web-технології, web-дизайн) | |
Файли цього матеріалу:
| Файл | Опис | Розмір | Формат | |
|---|---|---|---|---|
| РЕП_БАК_Василенко _WEB-2211.pdf Restricted Access | 1.37 MB | Adobe PDF | Переглянути/Відкрити Запит копії |
Усі матеріали в архіві електронних ресурсів захищено авторським правом, усі права збережено.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
Факультет інформаційних технологій і систем
Кафедра інформаційних технологій проектування
ПОЯСНЮВАЛЬНА ЗАПИСКА
до кваліфікаційної роботи бакалавра
на тему:
«WEB-ОРІЄНТОВАНА ІНФОРМАЦІЙНА
СИСТЕМА ОБЛІКУ ДАНИХ ВИРОБНИЧОГО
ПІДПРИЄМСТВА»
Виконав студент групи WEB-2211,
спеціальності 126 –
Інформаційні системи та
технології,
освітня програма – Web-
технології Web-дизайн,
Василенко Д.Є.
Керівник д.т.н., проф. Прокопенко Т.О.
Рецензент директор ТОВ Andersen Алєсін
О.В.
Черкаси – 2026
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
Факультет Інформаційних Технологій і Систем_____________________________________
(повна назва)
Кафедра Інформаційних Технологій Проектування__________________________________
(повна назва)
Освітньо-кваліфікаційний рівень Бакалавр_________________________________________
(назва)
Спеціальність 126 – Інформаційні системи і технології_______________________________
(шифр і назва)
ЗАТВЕРДЖУЮ
Завідувач кафедри ІТП
___________ Тетяна ПРОКОПЕНКО
«_____» ______________20___ року
З А В Д А Н Н Я
НА КВАЛІФІКАЦІЙНУ РОБОТУ БАКАЛАВРА
_____________________ Василенко Дмитро Євгенійович ____________________
(прізвище, ім’я, по батькові)
1. Тема роботи Web-орієнтована інформаційна система обліку даних виробничого
підприємства __________
Керівник роботи, Прокопенко Тетяна Олександрівна_д.т.н., професор___________________
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
Затверджено наказом Черкаського державного технологічного університету від «_12_»
__березня_______ 2026 року N56/03-03________
2. Строк подання здобувачем роботи _____26.05.2026___________________________
3. Вихідні дані до роботи: Загальна інформація про об’єкт дослідження, інформація про
меоди та засоби розробки, структура БД, аналіз аналогів, базові технічні характеристики
розроблюваної системи.
4. Зміст розрахунково-пояснювальної записки (перелік питань, які потрібно розробити)
Вступ________________________________________________________________________
1. Опис предметної області. ___ ___________________________________________________
2. Аналіз існуючих аналогів._____________________________________________________
3.Постановка задачі _________________________________________________
4.Розробка архітектури системи.__________________________________________
5. Розробка структури бази даних________________________________________________
6. Обґрунтування технології та засобів реалізації.___________________________________
7.Вибір засобів розробки.__________________________________________
8.Рзробка дизайну системи обліку даних виробничого підприємства.________
Висновки._____________________________________________________________________
Перелік джерел та посилань._____________________________________________________
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів)
Презентація кваліфікаційної роботи____________________________________
АНОТАЦІЯ
У кваліфікаційній роботі бакалавра розроблено Web-орієнтовану
інформаційну систему обліку даних виробничого підприємства. Розробку
реалізовано на основі використання комплексу сучасних програмних
інструментів та засобів.
Обсяг пояснювальної записки кваліфікаційної роботи бакалавра
складає 80 сторінок, в тому числі вступ, 3 розділи, висновки, додаток та список
використаних джерел. Робота містить 10 рисунків та 50 інформаційних
джерел.
Перший розділ кваліфікаційної роботи присвячений опису сучасного
стану досліджуваної теми, визначення ключових процесів, термінів та
актуальності розробки. Здійснено аналітичний огляд існуючих програмних
рішень або систем, оцінку їхніх переваг і недоліків. Обґрунтувано
актуальність та доцільність створення нового продукту. Сформульовано мету
роботи, описано функціональні вимоги та перелік завдань для реалізації
проєкту.
Другий розділ присвячений проектуванню архітектури web-
орієнтованої інформаційної системи, проєктуванню бази даних. Досліджено
питання вибору засобів розробки web-орієнтованої ІС.
У третьому розділі спроєктовано та реалізовано клієнтську і серверну
частини системи, а також створено сучасний інтуїтивно зрозумілий UI/UX-
дизайн, який забезпечує зручну взаємодію користувача з інтерфейсом.
Проведене комплексне тестування розробленого програмного забезпечення
підтвердило повну відповідність системи висунутим функціональним
вимогам, високу стабільність її роботи та готовність до практичного
розгортання.
Ключові слова: web-орієнтована, інформаційна система, контроль
відвідування занять студентами, фреймворк, Node.js, Figma, React, сервер,
UI/UX-дизайн.
6. Консультанти розділів роботи
Прізвище, ініціали, та посада
Розділ Підпис, дата
консультанта
Завдання
Завдання прийняв
видав
7. Дата видачі завдання ______________________________________________
КАЛЕНДАРНИЙ ПЛАН
Строк виконання
№ Назва етапів кваліфікаційної роботи Примітка
етапів роботи
1 Опис предметної області.
2 Аналіз існуючих аналогів
3 Постановка задачі
4 Розробка архітектури системи.
5 Розробка структури бази даних
Обґрунтування технології та засобів
6 реалізації.
7 Вибір засобів розробки.
8 Застосування стеку технологій
Розробка дизайну системи обліку даних
9 виробничого підприємства
10 Висновки
Здобувач вищої освіти _______________ Дмитро ВАСИЛЕНКО
Керівник роботи _______________________ Тетяна ПРОКОПЕНКО
ABSTRACT
A Web-oriented information system for recording data of a manufacturing
enterprise has been developed in the bachelor's thesis, were chosen as the
development tools.
The volume of the explanatory note of the bachelor's qualification work is
80 pages, including the introduction, 3 sections, conclusions, appendix and the list
of used sources. The work contains 10 drawings and 50 references.
The first section of the qualification work is devoted to describing the
current state of the research topic, defining key processes, terms and relevance of
the development. An analytical review of existing software solutions or systems
was carried out, their advantages and disadvantages were assessed. The relevance
and feasibility of creating a new product was substantiated. The purpose of the
work was formulated, functional requirements and a list of tasks for the
implementation of the project were described.
The second section is devoted to designing the architecture of a web-
oriented information system, database design. The issue of choosing web-oriented
IS development tools was studied.
In the third section, the client and server parts of the system were designed
and implemented, and a modern intuitive UI/UX design was created, which
ensures convenient user interaction with the interface. Comprehensive testing of
the developed software confirmed the full compliance of the system with the
functional requirements, high stability of its operation and readiness for practical
deployment.
Keywords: web-oriented, information system, student attendance control,
framework, Node.js, Figma, React, server, UI/UX design.
ЗМІСТ
ВСТУП........................................................................................................... 3
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ............................................5
1.1 Особливості застосування інформаційних систем на виробничих
підприємствах...................................................................................................... 5
1.2 Аналіз існуючих інформаційних систем обліку даних підприємства
7
1.3 Постановка задачі..............................................................................11
Висновки до розділу 1.............................................................................16
РОЗДІЛ 2 ПРОЕКТУВАННЯ WEB-ОРІЄНТОВАНОЇ
ІНФОРМАЦІЙНОЇ СИСТЕМИ ОБЛІКУ ДАНИХ ВИРОБНИЧОГО
ПІДПРИЄМСТВА................................................................................................. 18
2.1 Розробка архітектури інформаційної системи................................18
2.2 Розробка структури бази даних........................................................25
2.3 Дослідження різних систем керування базами даних....................31
2.4 Створення бази даних інформаційної системи...............................37
Висновки до розділу 2.............................................................................42
РОЗДІЛ 3 РОЗРОБКА ПРОГРАМНОЇ ЧАСТИНИ..................................44
3.1 Вибір засобів та технологій розробки інформаційної системи....44
3.2 Розробка системи...............................................................................49
Висновки до розділу 3.............................................................................74
ВИСНОВКИ.................................................................................................77
СПИСОК ВИКОРИСАТНИХ ДЖЕРЕЛ....................................................80
ДОДАТКИ....................................................................................................84
Додаток А. Лістинг програмного коду..................................................84
ЧДТУ 262282.005 ПЗ
Зм. Лист № докумемента Підпис Дата
Розроб. Василенко Д.Є. Web-орієнтована інформаційна система обліку Літ. Лист Листів
Перев. Прокопенко Т.О. даних виробничого підприємства. Н 2 94
Реценз. Пояснювальна записка ФІТІС,
Н.контр. Прокопенко Т.О.
кафедра ІТП, Web-2211
Затв. Прокопенко Т.О.
ВСТУП
У сучасних умовах діяльність більшості виробничих підприємств
безпосередньо пов’язана з обробкою великого обсягу інформації. До таких
даних належать відомості про працівників, продукцію, замовлення, складські
операції, постачання та звітність. Використання паперових журналів або
розрізнених електронних таблиць поступово втрачає ефективність, оскільки
подібний підхід ускладнює контроль даних, збільшує ризик помилок і
потребує значних витрат часу на виконання рутинних операцій. У зв’язку з цим
підприємства все частіше впроваджують інформаційні системи, які
дозволяють автоматизувати основні процеси обліку та спростити роботу
персоналу.
Особливо актуальним є використання web-орієнтованих систем. На
відміну від локального програмного забезпечення, вони забезпечують доступ
до функціоналу через браузер без необхідності встановлення додаткових
програм на кожен комп’ютер. Це спрощує адміністрування системи, оновлення
програмного забезпечення та роботу користувачів у межах підприємства. Крім
того, web-технології дозволяють створювати більш гнучкі та зручні
інтерфейси для взаємодії з даними [1].
Автоматизація облікових процесів є важливою складовою ефективного
управління виробничим підприємством. Система обліку дає можливість
централізовано зберігати інформацію, контролювати залишки продукції на
складі, відстежувати виконання замовлень, аналізувати діяльність працівників
та формувати звітність. Завдяки цьому зменшується кількість помилок,
прискорюється обробка інформації та підвищується загальна ефективність
роботи підприємства [2].
Під час розробки сучасних web-застосунків широко використовуються
фреймворки та системи керування базами даних, які дозволяють швидше
створювати програмне забезпечення та підтримувати його структуру в
зрозумілому вигляді. Одним із популярних рішень для створення невеликих та
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 3
середніх web-систем є Flask — легкий Python-фреймворк, який забезпечує
необхідний набір інструментів для побудови серверної частини застосунку [3].
Для зберігання даних у невеликих інформаційних системах часто
використовується SQLite, оскільки ця СУБД не потребує окремого серверного
розгортання та є достатньо простою у використанні [4].
Об’єктом дослідження є процес обліку даних виробничого підприємства.
Предметом дослідження є методи та засоби розробки web-орієнтованих
інформаційних систем для автоматизації обліку виробничих процесів.
Метою роботи є розробка web-орієнтованої інформаційної системи
обліку даних виробничого підприємства, яка забезпечить централізоване
зберігання інформації, управління продукцією, замовленнями, працівниками
та складськими операціями.
Для досягнення поставленої мети необхідно виконати такі завдання:
проаналізувати особливості використання інформаційних систем на
виробничих підприємствах;
дослідити існуючі аналоги систем обліку;
визначити функціональні вимоги до системи;
розробити структуру бази даних;
обрати засоби програмної реалізації;
реалізувати web-застосунок;
створити користувацький інтерфейс;
провести тестування основних функцій системи.
Практичне значення роботи полягає у створенні інформаційної системи,
яка може бути використана для автоматизації базових процесів обліку на
невеликих виробничих підприємствах. Розроблений застосунок дозволяє
спростити роботу з даними, зменшити кількість ручних операцій та підвищити
зручність управління інформацією.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 4
РОЗДІЛ 1
АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ
1.1 Особливості застосування інформаційних систем на виробничих
підприємствах
У сучасних умовах діяльність виробничих підприємств тісно пов’язана з
використанням інформаційних технологій. Навіть невеликі підприємства
щоденно працюють із великою кількістю даних, які необхідно зберігати,
оновлювати та контролювати. До таких даних належать відомості про
працівників, продукцію, замовлення, складські залишки, постачання та інші
виробничі процеси. Використання паперової документації або окремих
електронних таблиць часто створює труднощі під час роботи з інформацією,
особливо коли обсяг даних постійно зростає [5].
Інформаційні системи дозволяють автоматизувати значну частину
рутинних операцій, пов’язаних із веденням обліку. Це дає можливість швидше
отримувати доступ до необхідної інформації, зменшувати кількість помилок та
спрощувати контроль над виробничими процесами. Крім того, централізоване
зберігання даних робить роботу підприємства більш організованою та
дозволяє уникнути дублювання інформації [2].
Особливістю виробничих підприємств є постійний рух матеріальних
ресурсів. Продукція надходить на склад, використовується у виробництві,
переміщується між відділами або передається клієнтам. Через це підприємству
необхідно постійно контролювати залишки товарів та фіксувати всі складські
операції. Якщо подібні процеси виконуються вручну, виникає ризик втрати
актуальності даних або появи помилок під час обліку [6].
Ще однією важливою складовою роботи підприємства є обробка
замовлень. У більшості випадків замовлення проходить кілька етапів:
створення, підтвердження, виконання та завершення. За відсутності
автоматизованої системи працівникам доводиться вручну контролювати стан
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 5
виконання кожного замовлення, що ускладнює роботу та збільшує витрати
часу [2].
Інформаційні системи також спрощують управління персоналом.
Керівництво підприємства може отримувати інформацію про працівників,
їхню активність та виконані операції. Це дозволяє швидше розподіляти
обов’язки між співробітниками та контролювати виконання поставлених
завдань [7].
Важливе значення для виробничих підприємств має формування
звітності. У процесі роботи виникає необхідність аналізувати кількість
замовлень, обсяги продукції, складські залишки та ефективність роботи
персоналу. Автоматизовані системи дозволяють створювати звіти значно
швидше, ніж ручна обробка інформації. Крім того, результати можуть
відображатися у вигляді таблиць, графіків та діаграм, що спрощує аналіз даних
[7].
У сучасних умовах особливо поширеними стали web-орієнтовані
інформаційні системи. Їх головною перевагою є можливість роботи через
браузер без встановлення окремого програмного забезпечення на кожен
комп’ютер. Такий підхід спрощує оновлення системи, адміністрування та
доступ користувачів до функціоналу підприємства [1].
Web-застосунки зазвичай будуються за клієнт-серверною архітектурою.
Серверна частина відповідає за обробку запитів, бізнес-логіку та роботу з
базою даних, а клієнтська частина забезпечує взаємодію користувача з
інтерфейсом. Подібний підхід дозволяє створювати більш структуровані та
зручні для підтримки системи [8].
Для розробки web-орієнтованих інформаційних систем часто
використовуються сучасні фреймворки. Одним із популярних рішень є Flask —
легкий Python-фреймворк для створення web-застосунків. Його популярність
пояснюється простотою, гнучкістю та можливістю поступового розширення
функціоналу без створення надмірно складної архітектури [3].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 6
Не менш важливою частиною інформаційної системи є база даних. Вона
використовується для централізованого зберігання інформації про роботу
підприємства. Для невеликих та середніх web-застосунків часто
використовується SQLite, оскільки ця система керування базами даних не
потребує окремого серверного розгортання та є достатньо простою у
використанні [4].
Під час розробки інформаційних систем необхідно враховувати питання
безпеки та розмежування доступу. Різні категорії користувачів повинні мати
доступ лише до тих функцій, які необхідні для виконання їхніх обов’язків.
Наприклад, адміністратор може керувати всією системою, менеджер —
працювати із замовленнями та продукцією, а працівник — переглядати або
оновлювати лише власні дані [9].
Окрему увагу слід приділяти зручності користувацького інтерфейсу.
Працівники підприємства не завжди мають високий рівень технічної
підготовки, тому система повинна бути простою та зрозумілою у використанні.
Надмірно складний інтерфейс може уповільнювати роботу користувачів та
створювати додаткові труднощі під час навчання персоналу [10].
Отже, використання інформаційних систем на виробничих
підприємствах дозволяє автоматизувати основні процеси обліку, спростити
управління ресурсами та підвищити ефективність роботи підприємства.
Застосування web-технологій і сучасних засобів розробки робить такі системи
більш доступними, зручними та придатними для подальшого розвитку.
1.2 Аналіз існуючих інформаційних систем обліку даних
підприємства
На сьогодні автоматизація облікових процесів є одним із ключових
напрямів розвитку сучасних підприємств. Більшість компаній використовують
спеціалізовані інформаційні системи для роботи із замовленнями,
складськими залишками, документацією, персоналом та фінансовими
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 7
операціями. Це пояснюється тим, що ручний облік або використання окремих
електронних таблиць уже не забезпечує достатньої швидкості роботи та
зручності управління даними, особливо в умовах постійного збільшення
обсягів інформації [2].
Сучасний ринок програмного забезпечення пропонує значну кількість
рішень для автоматизації підприємств. Такі системи можуть суттєво
відрізнятися за функціональністю, складністю, вартістю впровадження та
технічними особливостями. Частина рішень орієнтована на великі виробничі
компанії та корпорації, інші — на малий і середній бізнес [5].
Одним із найбільш поширених класів корпоративних систем є ERP-
системи. ERP (Enterprise Resource Planning) являють собою комплексні
рішення для управління ресурсами підприємства. Подібні системи дозволяють
об’єднати в одному середовищі роботу складу, виробництва, фінансів,
персоналу, закупівель та логістики [6].
Серед найбільш відомих ERP-рішень можна виділити SAP ERP. Дана
система активно використовується великими міжнародними компаніями та
виробничими підприємствами. SAP ERP забезпечує централізоване
управління бізнес-процесами та підтримує значну кількість модулів для
автоматизації різних напрямів діяльності підприємства [11].
Основною перевагою SAP ERP є висока масштабованість та широкий
функціонал. Система дозволяє працювати з великими обсягами даних,
підтримує інтеграцію з корпоративними сервісами та надає інструменти для
аналітики й планування ресурсів підприємства. Однак впровадження SAP ERP
потребує значних фінансових витрат і складного налаштування, що робить
систему менш доступною для невеликих підприємств [11].
Ще одним популярним рішенням є Microsoft Dynamics 365. Дана
платформа поєднує ERP та CRM-функціонал і дозволяє автоматизувати роботу
із замовленнями, клієнтами, складським обліком та фінансами. Важливою
перевагою системи є інтеграція з іншими сервісами Microsoft, зокрема Office
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 8
365 та Power BI [12].
Microsoft Dynamics 365 має сучасний web-інтерфейс та підтримує
хмарну інфраструктуру. Завдяки цьому користувачі можуть працювати із
системою через браузер або мобільні пристрої. Разом із тим для малого бізнесу
використання такої системи може бути надмірним через велику кількість
функцій та високу вартість ліцензування [12].
Серед сучасних корпоративних рішень також варто виділити Oracle ERP
Cloud. Система орієнтована насамперед на великі підприємства та підтримує
автоматизацію фінансового обліку, управління закупівлями, виробничими
процесами та аналітикою [15].
Oracle ERP Cloud побудована на хмарній архітектурі та підтримує
централізоване управління корпоративними даними. Серед переваг системи
можна виділити високий рівень безпеки, інтеграцію з іншими сервісами Oracle
та можливість масштабування. Водночас впровадження такої системи є
складним процесом, який потребує значних фінансових ресурсів і технічної
підтримки [15].
Окрім великих ERP-систем, на ринку існують більш компактні рішення
для малого та середнього бізнесу. Одним із популярних open-source продуктів є
Odoo. Дана система має модульну структуру та дозволяє поступово
підключати необхідний функціонал: складський облік, CRM, управління
персоналом, продажі та виробництво [16].
Перевагою Odoo є гнучкість та можливість адаптації під потреби
підприємства. Крім того, система має web-орієнтований інтерфейс і підтримує
роботу через браузер. Однак повноцінне налаштування Odoo також потребує
технічної підготовки та додаткового адміністрування [16].
Для автоматизації складського обліку часто використовуються
спеціалізовані WMS-системи (Warehouse Management System). Такі рішення
орієнтовані насамперед на контроль складських операцій, переміщення
продукції та управління залишками товарів [17].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 9
WMS-системи дозволяють автоматизувати процес приймання товарів,
списання продукції, інвентаризації та контролю переміщення матеріалів між
зонами складу. Використання подібних систем особливо актуальне для
підприємств із великою кількістю складських операцій та високим
товарообігом [17].
Попри значну кількість готових рішень, їх використання не завжди є
оптимальним для невеликих підприємств або навчальних проєктів. Багато
корпоративних систем мають надмірний функціонал, складну структуру та
високі вимоги до серверної інфраструктури. Крім того, впровадження готових
ERP-рішень часто супроводжується додатковими витратами на ліцензування,
підтримку та навчання персоналу [6].
У зв’язку з цим для невеликих підприємств доцільним може бути
створення власної web-орієнтованої інформаційної системи, яка реалізує лише
необхідний функціонал. Такий підхід дозволяє уникнути надлишкової
складності та адаптувати систему безпосередньо під потреби конкретного
підприємства [8].
Для створення подібних систем активно використовуються сучасні web-
технології. Одним із популярних рішень для backend-розробки є Python. Дана
мова програмування широко застосовується у web-розробці завдяки простому
синтаксису, великій кількості бібліотек та активній спільноті розробників [13].
Для створення web-застосунків на Python часто використовуються Flask
та Django. Django є більш масштабним фреймворком із великою кількістю
вбудованих компонентів. Flask, навпаки, є легшим та більш гнучким рішенням,
що дозволяє реалізовувати структуру проєкту відповідно до потреб розробника
[3].
Для невеликих web-орієнтованих систем Flask є доцільним вибором,
оскільки дозволяє швидко реалізувати основний функціонал без створення
надмірно складної архітектури. Крім того, Flask добре підходить для реалізації
систем із role-based доступом, модульною структурою та інтеграцією з базами
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 10
даних [3].
Важливим елементом будь-якої інформаційної системи є база даних. Для
невеликих web-застосунків часто використовується SQLite. Основною
перевагою цієї СУБД є простота інтеграції та відсутність необхідності
окремого серверного розгортання [4].
Отже, аналіз існуючих інформаційних систем показує, що сучасні
корпоративні рішення мають широкий функціонал та забезпечують
автоматизацію більшості бізнес-процесів підприємства. Водночас великі ERP-
системи часто є надто складними та дорогими для невеликих підприємств.
Саме тому для даної роботи доцільним є створення власної web-орієнтованої
інформаційної системи, яка забезпечить необхідний функціонал обліку без
надмірної складності та додаткових витрат.
1.3 Постановка задачі
У процесі діяльності сучасних виробничих підприємств формується
значний обсяг інформації, яка потребує постійного оновлення, обробки та
контролю. До таких даних належать відомості про продукцію, замовлення,
складські залишки, працівників, виконані операції та інші виробничі процеси.
У багатьох випадках облік подібної інформації все ще здійснюється за
допомогою паперової документації або окремих електронних таблиць, що
створює низку труднощів під час роботи з даними [2].
Однією з основних проблем ручного обліку є складність підтримки
актуальності інформації. Дані можуть дублюватися у різних документах,
змінюватися несвоєчасно або містити помилки, які виникають через людський
фактор. Крім того, при збільшенні кількості продукції та замовлень
працівникам стає складніше швидко знаходити необхідну інформацію та
контролювати її правильність [5].
Для виробничих підприємств особливо важливим є контроль складських
залишків та руху продукції. Продукція може надходити на склад,
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 11
використовуватися у виробничому процесі, списуватися або передаватися
клієнтам. Якщо подібні операції не автоматизовані, працівники змушені
вручну оновлювати інформацію про залишки товарів, що значно підвищує
ризик помилок та втрати актуальності даних [6].
Не менш важливим є процес роботи із замовленнями. На підприємствах
замовлення проходять кілька етапів обробки: створення, підтвердження,
виконання та завершення. За відсутності автоматизованої системи контроль
виконання таких операцій потребує значних витрат часу. Працівникам
доводиться вручну перевіряти статуси замовлень, оновлювати інформацію та
контролювати виконання окремих етапів роботи [7].
Ще однією проблемою є відсутність централізованого зберігання
інформації. Дані можуть знаходитися у різних документах, локальних файлах
або окремих таблицях, через що працівникам складніше отримувати доступ до
актуальної інформації. Подібний підхід ускладнює взаємодію між різними
відділами підприємства та збільшує ймовірність дублювання записів [18].
У сучасних умовах більшість підприємств переходять до використання
автоматизованих інформаційних систем, які дозволяють централізувати
роботу з даними та спростити виконання рутинних операцій. Подібні системи
забезпечують швидший доступ до інформації, автоматичне оновлення даних та
спрощення контролю за діяльністю підприємства [19].
Важливою особливістю сучасних інформаційних систем є використання
web-технологій. Web-орієнтовані системи дозволяють працювати через
браузер без необхідності встановлення окремого програмного забезпечення на
кожен комп’ютер. Це значно спрощує адміністрування системи та дозволяє
користувачам отримувати доступ до функціоналу з різних пристроїв [1].
Крім технічних переваг, web-орієнтований підхід забезпечує більш
просте оновлення програмного забезпечення. Усі зміни вносяться на сервері та
одразу стають доступними для користувачів без необхідності ручного
оновлення клієнтських програм. Подібний підхід є особливо зручним для
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 12
підприємств, де одночасно із системою працює велика кількість користувачів
[8].
Під час аналізу діяльності виробничих підприємств було встановлено,
що найбільш важливими процесами є:
облік продукції;
контроль складських залишків;
управління замовленнями;
облік працівників;
формування статистики та звітності.
Саме автоматизація зазначених процесів є основною задачею даної
роботи.
Метою розробки є створення web-орієнтованої інформаційної системи
обліку даних виробничого підприємства, яка забезпечить централізоване
зберігання інформації, автоматизацію основних облікових процесів та
спрощення роботи користувачів із даними підприємства.
Для досягнення поставленої мети необхідно реалізувати низку
функціональних задач. Насамперед система повинна забезпечувати підтримку
авторизації користувачів та механізм розмежування прав доступу [20].
У межах системи необхідно реалізувати кілька ролей користувачів:
адміністратор;
менеджер;
працівник.
Кожна категорія користувачів повинна мати доступ лише до тих функцій,
які необхідні для виконання її обов’язків. Наприклад, адміністратор повинен
мати повний контроль над системою та можливість керування користувачами.
Менеджер має працювати із замовленнями, продукцією та звітністю.
Працівник повинен мати доступ лише до обмеженого функціоналу системи
[20].
Однією з основних задач є створення модуля управління продукцією. У
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 13
системі необхідно реалізувати можливість додавання, редагування та
видалення товарів. Крім того, система повинна підтримувати зберігання
інформації про категорії продукції, ціни, кількість товарів та залишки на складі
[6].
Важливою задачею також є створення модуля замовлень. Користувачі
повинні мати можливість створювати замовлення, змінювати їх статуси та
переглядати інформацію про виконання. Крім того, система повинна
підтримувати прив’язку замовлень до продукції та відповідальних працівників
[2].
Для забезпечення контролю руху продукції необхідно реалізувати
складський модуль. Його призначенням є створення складських операцій,
автоматичне оновлення залишків продукції та збереження історії переміщення
товарів [17].
У процесі роботи підприємства також виникає необхідність аналізу
статистичних даних. Через це система повинна підтримувати формування
звітності та відображення основних показників діяльності підприємства [7].
Модуль звітності повинен забезпечувати:
перегляд статистики;
відображення графіків;
аналіз кількості замовлень;
контроль складських залишків;
експорт інформації у CSV-формат.
Під час розробки системи необхідно враховувати не лише
функціональні, але й нефункціональні вимоги. Однією з таких вимог є
продуктивність застосунку. Система повинна забезпечувати достатню
швидкість роботи навіть при збільшенні кількості записів у базі даних [21].
Не менш важливим є питання безпеки. У системі необхідно реалізувати
механізми захисту від несанкціонованого доступу, перевірку введених даних
та захист користувацьких сесій [20].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 14
Крім того, система повинна мати зрозумілу структуру та бути простою у
підтримці. Надмірно складна архітектура ускладнює подальший розвиток
проєкту та збільшує кількість помилок під час внесення змін до коду [8].
Окрему увагу необхідно приділити користувацькому інтерфейсу.
Працівники підприємства повинні мати можливість швидко знаходити
необхідний функціонал та працювати із системою без тривалого навчання.
Через це інтерфейс повинен бути логічно структурованим, зрозумілим та
візуально простим [10].
Для спрощення роботи користувачів система повинна містити:
sidebar-навігацію;
dashboard із основною статистикою;
таблиці для роботи з даними;
форми створення та редагування записів;
систему повідомлень про помилки та успішні операції.
Також необхідно забезпечити адаптивність інтерфейсу для коректної
роботи на ноутбуках та різних розмірах екранів. Це дозволить зробити систему
більш зручною для використання у повсякденній роботі підприємства [22].
Під час розробки системи важливо забезпечити модульність структури
проєкту. Розподіл функціоналу на окремі модулі дозволить зробити код більш
структурованим та спростить подальшу підтримку системи [8].
Таким чином, у межах даної роботи необхідно розробити web-
орієнтовану інформаційну систему обліку даних виробничого підприємства,
яка забезпечить автоматизацію основних облікових процесів, централізоване
зберігання інформації, підтримку role-based доступу та формування звітності.
Реалізація такої системи дозволить спростити роботу користувачів, зменшити
кількість ручних операцій та підвищити ефективність управління даними
підприємства.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 15
Висновки до розділу 1
У першому розділі було проведено аналіз особливостей використання
інформаційних систем на виробничих підприємствах, досліджено існуючі
програмні рішення та сформовано основні задачі майбутньої системи.
У результаті аналізу предметної області було встановлено, що сучасні
виробничі підприємства працюють із великим обсягом інформації, яка
потребує постійного оновлення та контролю. До таких даних належать
відомості про продукцію, складські залишки, замовлення, працівників та
виробничі операції. Використання паперової документації або окремих
електронних таблиць значно ускладнює роботу з інформацією та збільшує
ризик виникнення помилок [2].
Було визначено, що автоматизація облікових процесів дозволяє
централізувати зберігання даних, спростити роботу працівників та підвищити
ефективність управління підприємством. Крім того, використання web-
орієнтованих інформаційних систем забезпечує більш зручний доступ до
функціоналу через браузер та спрощує підтримку програмного забезпечення
[1].
Під час аналізу існуючих інформаційних систем було розглянуто сучасні
ERP-рішення, зокрема SAP ERP, Microsoft Dynamics 365, Oracle ERP Cloud та
Odoo. Проведений аналіз показав, що подібні системи мають широкий
функціонал та забезпечують автоматизацію більшості бізнес-процесів
підприємства. Водночас великі корпоративні рішення часто є надто складними
та дорогими для невеликих підприємств або навчальних проєктів [11].
Також було встановлено, що значна частина сучасних інформаційних
систем використовує web-технології та клієнт-серверну архітектуру. Подібний
підхід дозволяє спростити адміністрування системи, забезпечити
централізоване оновлення функціоналу та зробити роботу користувачів більш
зручною [8].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 16
У процесі постановки задачі було визначено основні функціональні
вимоги до майбутньої системи. Розроблюваний застосунок повинен
забезпечувати:
авторизацію користувачів;
розмежування прав доступу;
облік продукції;
контроль складських залишків;
управління замовленнями;
ведення інформації про працівників;
формування статистики та звітності.
Крім функціональних вимог, були визначені й нефункціональні вимоги
до системи. Застосунок повинен мати зрозумілу структуру, сучасний web-
інтерфейс, достатню продуктивність та базові механізми захисту даних [20].
У результаті проведеного аналізу було обґрунтовано доцільність
створення власної web-орієнтованої інформаційної системи обліку даних
виробничого підприємства, яка забезпечить автоматизацію основних процесів
роботи з інформацією та спростить управління даними підприємства.
Отримані результати є основою для подальшого етапу проєктування системи,
структури бази даних та програмної реалізації застосунку.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 17
РОЗДІЛ 2
ПРОЕКТУВАННЯ WEB-ОРІЄНТОВАНОЇ ІНФОРМАЦІЙНОЇ
СИСТЕМИ ОБЛІКУ ДАНИХ ВИРОБНИЧОГО
ПІДПРИЄМСТВА
2.1 Розробка архітектури інформаційної системи
Одним із найважливіших етапів створення програмного забезпечення є
проєктування архітектури системи. Саме архітектура визначає структуру
застосунку, взаємодію між окремими компонентами, принципи обробки даних
та загальну логіку роботи системи. Від правильності побудови архітектури
залежить не лише стабільність роботи програмного забезпечення, але й
зручність його підтримки та можливість подальшого розвитку [8].
Під час розробки інформаційної системи для виробничого підприємства
особливо важливо забезпечити зрозумілу структуру проєкту та логічний
розподіл функціоналу між окремими компонентами. Надмірно складна
архітектура може ускладнювати підтримку системи, збільшувати кількість
помилок та сповільнювати процес розробки нових функцій [25].
У межах даної роботи було прийнято рішення використовувати web-
орієнтований підхід до побудови системи. Такий вибір пояснюється тим, що
web-застосунки не потребують встановлення окремого програмного
забезпечення на кожен робочий комп’ютер. Для роботи із системою
користувачу достатньо браузера та доступу до локальної мережі або сервера
застосунку [1].
Web-орієнтований підхід також дозволяє значно спростити процес
оновлення системи. Усі зміни вносяться безпосередньо на сервері та
автоматично стають доступними для всіх користувачів. Це є більш зручним
рішенням порівняно з desktop-застосунками, де оновлення часто необхідно
встановлювати окремо на кожному пристрої [18].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 18
У процесі проєктування було обрано клієнт-серверну архітектуру.
Подібний підхід є одним із найбільш поширених у сучасній web-розробці та
використовується у більшості інформаційних систем.
Рисунок 2.1 — Загальна архітектура інформаційної системи.
Клієнтська частина системи відповідає за взаємодію користувача з
інтерфейсом, а серверна — за обробку запитів, виконання бізнес-логіки та
роботу з базою даних. Подібний розподіл функціоналу дозволяє зробити
систему більш структурованою та зручною для підтримки [8].
Користувач працює із системою через браузер, використовуючи web-
інтерфейс. Після виконання певної дії, наприклад створення замовлення або
редагування продукції, браузер надсилає HTTP-запит на сервер. Сервер
обробляє отриманий запит, взаємодіє з базою даних та повертає клієнту
відповідь у вигляді HTML-сторінки або оновлених даних [20].
Подібний підхід дозволяє централізувати обробку інформації та
забезпечити одночасну роботу кількох користувачів із системою. Крім того,
клієнт-серверна архітектура спрощує адміністрування та оновлення
застосунку [19].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 19
Для кращого розуміння принципу взаємодії між компонентами системи
була створена схема взаємодії клієнтської та серверної частини застосунку.
Рисунок 2.2 — Схема взаємодії клієнтської та серверної частини системи.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 20
На схемі відображено процес передавання HTTP-запитів між
користувачем, серверною частиною Flask-застосунку та базою даних SQLite.
Сервер виконує обробку запитів, перевіряє права доступу користувача, працює
з даними та формує відповідь для клієнтської частини системи.
У розроблюваній системі клієнтська частина реалізована за допомогою
HTML, CSS та JavaScript. HTML використовується для побудови структури
сторінок, CSS відповідає за оформлення інтерфейсу, а JavaScript забезпечує
динамічну поведінку окремих елементів системи [22].
Для реалізації серверної частини використовується Python-фреймворк
Flask. Даний framework забезпечує маршрутизацію, підтримку шаблонів,
авторизацію користувачів та взаємодію з базою даних. Однією з переваг Flask є
його гнучкість та можливість створення відносно простої структури проєкту
без надлишкового функціоналу [3].
Під час розробки архітектури було використано модульний підхід. Увесь
функціонал застосунку розподілений на окремі компоненти, кожен із яких
відповідає за власну частину системи. Подібний підхід дозволяє зробити
структуру проєкту більш зрозумілою та спрощує підтримку коду [20].
Основними компонентами системи є:
модуль авторизації;
модуль працівників;
модуль продукції;
модуль замовлень;
модуль складського обліку;
модуль звітності;
модуль роботи з базою даних.
Для демонстрації структури компонентів застосунку була створена
окрема схема модулів системи.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 21
Рисунок 2.3 — Структура модулів web-застосунку.
Як показано на схемі, кожен модуль містить власні маршрути, шаблони
та логіку обробки даних. Завдяки цьому зміни в одному компоненті мінімально
впливають на інші частини системи, що позитивно впливає на підтримку та
розвиток проєкту [8].
Модуль авторизації відповідає за вхід користувачів до системи,
підтримку сесій та перевірку прав доступу. Після введення логіна та пароля
сервер виконує перевірку облікових даних та створює користувацьку сесію
[20].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 22
Для реалізації role-based доступу використовується система ролей
користувачів. Кожен користувач має певний рівень доступу до функціоналу
системи. Наприклад, адміністратор має повний доступ до всіх модулів,
менеджер працює із замовленнями та продукцією, а працівник має доступ
лише до окремих функцій [20].
Модуль продукції використовується для роботи з товарами та
категоріями продукції. У межах цього модуля користувач може додавати нові
товари, редагувати інформацію про продукцію, переглядати залишки та
виконувати пошук товарів [6].
Модуль замовлень відповідає за створення та обробку замовлень.
Система підтримує зміну статусів замовлень, прив’язку продукції до
конкретного замовлення та призначення відповідального працівника [2].
Для контролю руху продукції використовується модуль складського
обліку. Його основною задачею є створення складських операцій та
автоматичне оновлення залишків продукції після виконання надходження або
списання товарів [17].
Окремим компонентом системи є модуль звітності. Він дозволяє
формувати статистику щодо діяльності підприємства, аналізувати кількість
замовлень, переглядати залишки продукції та відображати інформацію у
вигляді графіків і таблиць [7].
Для зберігання інформації у системі використовується база даних
SQLite. Усі дані про користувачів, продукцію, замовлення та складські операції
зберігаються централізовано у межах єдиної бази даних [4].
Взаємодія між Flask та базою даних реалізується за допомогою
SQLAlchemy. Використання ORM-підходу дозволяє працювати з таблицями
бази даних у вигляді Python-класів, що робить код більш зрозумілим та
спрощує підтримку системи [23].
Під час проєктування архітектури особлива увага приділялася простоті
структури застосунку. У межах даної роботи не використовуються
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 23
мікросервісна архітектура, складні frontend-фреймворки або надлишкові
серверні технології. Подібний підхід дозволяє зробити систему більш
зрозумілою та спростити процес її запуску, тестування та подальшої підтримки
[8].
Для організації структури проєкту було використано розподіл на окремі
директорії:
routes — маршрути Flask;
models — моделі бази даних;
templates — HTML-шаблони;
static — CSS, JavaScript та зображення;
services — бізнес-логіка;
utils — допоміжні функції.
Подібний розподіл дозволяє уникнути хаотичної структури коду та
робить проєкт більш зручним для підтримки [20].
Окрему увагу під час проєктування було приділено користувацькому
інтерфейсу. Система повинна забезпечувати швидкий доступ до основних
функцій та бути зрозумілою для користувачів без складного навчання [10].
Для цього в інтерфейсі застосунку використовуються:
sidebar-навігація;
dashboard-сторінка;
таблиці для роботи з даними;
форми створення та редагування записів;
система повідомлень про помилки та успішні операції.
Dashboard є центральною сторінкою системи та відображає основну
статистичну інформацію про діяльність підприємства. Користувач може
переглядати кількість замовлень, складські залишки, останні операції та інші
показники роботи системи [7].
Під час проєктування також враховувалися питання масштабованості.
Хоча система орієнтована насамперед на невеликі та середні підприємства,
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 24
структура застосунку дозволяє у майбутньому розширювати функціонал та
додавати нові модулі без суттєвої зміни архітектури [8].
Таким чином, у межах даної роботи була розроблена клієнт-серверна
архітектура web-орієнтованої інформаційної системи обліку даних
виробничого підприємства. Обрана структура забезпечує централізоване
зберігання інформації, підтримку role-based доступу, модульність проєкту та
зручну взаємодію користувачів із системою.
2.2 Розробка структури бази даних
Одним із найважливіших етапів проєктування інформаційної системи є
розробка структури бази даних. Саме база даних забезпечує централізоване
зберігання інформації, її обробку та взаємодію між окремими компонентами
системи. Від правильності побудови структури бази даних залежить
стабільність роботи застосунку, швидкість обробки інформації та можливість
подальшого розвитку системи [21].
У сучасних інформаційних системах база даних використовується для
зберігання практично всієї службової інформації. До таких даних можуть
належати облікові записи користувачів, інформація про продукцію,
замовлення, складські операції, категорії товарів та статистичні дані. Через це
структура бази даних повинна бути логічною, зрозумілою та забезпечувати
коректні зв’язки між окремими сутностями [26].
Під час розробки структури бази даних необхідно враховувати
особливості предметної області. Для виробничого підприємства важливо
забезпечити коректне зберігання інформації про товари, складські залишки,
працівників та замовлення. Крім того, система повинна підтримувати
можливість оновлення інформації, пошуку даних та формування звітності [2].
У межах даної роботи для зберігання інформації використовується
реляційна база даних SQLite. Дана система керування базами даних дозволяє
організувати централізоване зберігання інформації та підтримує роботу зі
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 25
зв’язками між таблицями [4].
SQLite була обрана через відносну простоту використання та відсутність
необхідності окремого серверного розгортання. Уся база даних зберігається у
вигляді одного файлу, що спрощує запуск проєкту та його перенесення між
різними середовищами [4].
Під час проєктування бази даних важливо забезпечити цілісність
інформації. Для цього використовуються первинні та зовнішні ключі, які
дозволяють встановлювати зв’язки між таблицями та уникати появи
некоректних записів [21].
Структура бази даних інформаційної системи була побудована з
урахуванням основних функціональних модулів застосунку. У системі
необхідно зберігати інформацію про:
користувачів;
працівників;
продукцію;
категорії товарів;
замовлення;
складські операції.
Для демонстрації структури бази даних була створена UML-діаграма
класів, яка відображає основні сутності системи та зв’язки між ними.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 26
Рисунок 2.4 — Діаграма класів інформаційної системи.
На діаграмі відображено основні таблиці бази даних, їх атрибути та
зв’язки між окремими сутностями. Використання UML-діаграми дозволяє
краще зрозуміти структуру системи та принцип взаємодії між даними [25].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 27
Однією з основних таблиць системи є таблиця users. Вона
використовується для зберігання облікових записів користувачів та реалізації
механізму авторизації [20].
Таблиця users містить такі основні поля:
ідентифікатор користувача;
логін;
пароль;
роль користувача;
дата створення запису.
Для забезпечення безпеки системи паролі користувачів повинні
зберігатися у хешованому вигляді. Це дозволяє зменшити ризик компрометації
облікових даних у випадку несанкціонованого доступу до бази даних [20].
У системі також використовується таблиця employees, яка призначена
для зберігання інформації про працівників підприємства. Дана таблиця містить
персональні та службові дані співробітників.
Основними полями таблиці employees є:
ідентифікатор працівника;
ПІБ;
посада;
відділ;
номер телефону;
email;
дата найму;
статус працівника.
Таблиця працівників використовується для ведення кадрового обліку та
прив’язки співробітників до замовлень або інших операцій системи [6].
Для зберігання інформації про продукцію використовується таблиця
products. Вона є однією з ключових частин системи, оскільки саме через неї
реалізується облік товарів та контроль складських залишків [5].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 28
Таблиця products містить:
ідентифікатор продукції;
назву товару;
опис;
ціну;
кількість на складі;
дату створення запису;
ідентифікатор категорії.
Кожен товар належить до певної категорії продукції. Для цього у системі
використовується окрема таблиця categories, яка дозволяє групувати товари за
типами та спрощує пошук продукції [26].
Таблиця categories містить:
ідентифікатор категорії;
назву категорії;
опис категорії.
Між таблицями categories та products реалізований зв’язок типу «один до
багатьох». Одна категорія може містити багато товарів, але кожен товар
належить лише до однієї категорії [21].
Для роботи із замовленнями у системі використовується таблиця orders.
Вона призначена для зберігання інформації про створені замовлення та
контроль їх виконання [2].
Таблиця orders містить:
ідентифікатор замовлення;
інформацію про продукцію;
кількість товару;
статус замовлення;
дату створення;
відповідального працівника;
коментар.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 29
Кожне замовлення пов’язане з конкретним працівником та продукцією.
Завдяки цьому система дозволяє контролювати виконання замовлень та
відповідальних осіб [7].
Для реалізації складського обліку використовується таблиця
warehouse_operations. Її призначенням є збереження історії всіх складських
операцій, пов’язаних із надходженням або списанням продукції [17].
Таблиця warehouse_operations містить:
ідентифікатор операції;
тип операції;
продукцію;
кількість товару;
дату виконання;
відповідального працівника.
Після створення складської операції система автоматично оновлює
залишки продукції у таблиці products. Подібний підхід дозволяє підтримувати
актуальність інформації про складські залишки [17].
Під час проєктування структури бази даних особлива увага приділялася
нормалізації даних. Нормалізація дозволяє зменшити дублювання інформації
та забезпечити більш ефективну роботу із записами [21].
Також важливим аспектом є забезпечення цілісності даних. Для цього у
таблицях використовуються:
первинні ключі;
зовнішні ключі;
обмеження цілісності;
перевірка типів даних.
Подібний підхід дозволяє уникнути появи некоректних записів та
забезпечити стабільність роботи системи [26].
У процесі проєктування також враховувалися питання продуктивності.
Хоча система орієнтована на невеликі та середні підприємства, структура бази
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 30
даних повинна забезпечувати достатню швидкість виконання запитів та
коректну роботу при збільшенні кількості записів [21].
Для взаємодії застосунку з базою даних використовується ORM-
бібліотека SQLAlchemy. Вона дозволяє працювати з таблицями у вигляді
Python-класів та спрощує виконання CRUD-операцій [23].
Використання ORM дозволяє зробити код більш зрозумілим та зменшує
кількість ручних SQL-запитів. Крім того, SQLAlchemy підтримує роботу зі
зв’язками між таблицями та автоматично генерує необхідні SQL-конструкції
[23].
Під час розробки структури бази даних також враховувалася можливість
подальшого розширення системи. За необхідності до структури можуть бути
додані нові таблиці, модулі або типи зв’язків без суттєвої зміни існуючої
архітектури [25].
Таким чином, у межах даної роботи була розроблена структура бази
даних web-орієнтованої інформаційної системи обліку даних виробничого
підприємства. Створена структура забезпечує централізоване зберігання
інформації, підтримку зв’язків між сутностями, цілісність даних та можливість
подальшого розвитку системи.
2.3 Дослідження різних систем керування базами даних
Під час розробки інформаційної системи одним із найважливіших етапів
є вибір системи керування базами даних. Саме СКБД відповідає за зберігання
інформації, обробку запитів, підтримку цілісності даних та взаємодію із
серверною частиною застосунку. Від правильності вибору системи керування
базами даних залежить стабільність роботи застосунку, швидкість обробки
інформації та можливість подальшого розвитку системи [26].
На сьогодні існує велика кількість систем керування базами даних, які
відрізняються за архітектурою, продуктивністю, складністю адміністрування
та сферою застосування. Одні системи орієнтовані на великі корпоративні
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 31
рішення з високим навантаженням, інші — на невеликі web-застосунки або
навчальні проєкти [24].
Найбільш поширеними реляційними СКБД у сучасній web-розробці є:
MySQL;
PostgreSQL;
SQLite;
Microsoft SQL Server;
Oracle Database.
Усі зазначені системи підтримують роботу з SQL-запитами, таблицями,
зв’язками між сутностями та механізмами забезпечення цілісності даних.
Водночас кожна з них має власні особливості, переваги та обмеження [27].
Однією з найбільш популярних систем керування базами даних є
MySQL. Дана СКБД активно використовується у web-розробці та
підтримується великою кількістю сучасних framework-рішень і серверних
платформ [28].
Популярність MySQL пояснюється відносною простотою налаштування,
хорошою продуктивністю та широким поширенням у web-застосунках.
Система підтримує багатокористувацький режим роботи, механізми
резервного копіювання та різні типи таблиць [28].
MySQL часто використовується у середніх та великих web-проєктах, де
необхідно забезпечити одночасну роботу великої кількості користувачів. Крім
того, дана СКБД підтримує інтеграцію з багатьма мовами програмування та
framework-рішеннями [27].
Попри значну популярність, MySQL має і певні недоліки. Для
повноцінної роботи системи необхідно окремо налаштовувати сервер бази
даних, виконувати адміністрування та контролювати конфігурацію
середовища. Для невеликих проєктів або навчальних систем це може
створювати додаткову складність [28].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 32
Ще однією поширеною СКБД є PostgreSQL. Дана система вважається
однією з найбільш функціональних open-source баз даних та активно
використовується у корпоративних web-системах [14].
PostgreSQL підтримує складні SQL-запити, транзакції, розширені
механізми безпеки та велику кількість інструментів для роботи з даними. Крім
того, система добре підходить для проєктів із високим навантаженням та
великим обсягом інформації [14].
Серед переваг PostgreSQL можна виділити:
підтримку складних зв’язків між таблицями;
високу стабільність;
підтримку транзакцій;
розширені механізми індексації;
можливість масштабування.
Подібні можливості роблять PostgreSQL популярним рішенням для
корпоративних інформаційних систем та великих web-платформ [29].
Разом із тим PostgreSQL є більш складною у налаштуванні та
адмініструванні порівняно з SQLite. Для невеликих застосунків частина
функціоналу PostgreSQL може бути надлишковою, а використання окремого
серверного середовища збільшує складність розгортання проєкту [29].
Серед комерційних рішень окремо варто виділити Microsoft SQL Server.
Дана система активно використовується у корпоративному середовищі та
підтримує інтеграцію з продуктами Microsoft [30].
Microsoft SQL Server забезпечує високу продуктивність, підтримує
складні аналітичні операції та дозволяє працювати з великими обсягами даних.
Однак система потребує окремого серверного середовища та має більш високі
вимоги до ресурсів [30].
Ще однією корпоративною СКБД є Oracle Database. Вона
використовується у великих підприємствах, банківських системах та
високонавантажених інформаційних платформах [31].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 33
Oracle Database підтримує масштабованість, кластеризацію, механізми
резервування та складні засоби адміністрування. Проте використання подібної
системи є доцільним насамперед для великих корпоративних проєктів із
високим навантаженням та складною інфраструктурою [31].
Для невеликих web-застосунків та навчальних систем часто
використовується SQLite. Дана система керування базами даних суттєво
відрізняється від більшості інших СКБД, оскільки не потребує окремого
серверного процесу [4].
У SQLite вся база даних зберігається у вигляді одного файлу. Подібний
підхід значно спрощує запуск проєкту, резервне копіювання та перенесення
системи між різними середовищами [4].
Однією з головних переваг SQLite є простота використання. Для роботи
із системою не потрібно окремо встановлювати сервер бази даних або
виконувати складне адміністрування. Це особливо важливо для навчальних
проєктів та невеликих інформаційних систем [32].
SQLite також має низькі вимоги до ресурсів та добре інтегрується з
Python-застосунками. Саме тому дана СКБД часто використовується разом із
Flask та іншими lightweight framework-рішеннями [20].
Серед переваг SQLite можна виділити:
простоту налаштування;
відсутність окремого серверного середовища;
швидкий запуск проєкту;
зручність резервного копіювання;
низькі вимоги до ресурсів;
хорошу інтеграцію з Python.
Крім переваг, SQLite має і певні обмеження. Дана система не орієнтована
на дуже високі навантаження та одночасну роботу великої кількості
користувачів. Крім того, можливості масштабування SQLite є більш
обмеженими порівняно з PostgreSQL або Oracle Database [32].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 34
Однак для невеликих і середніх web-застосунків можливостей SQLite
зазвичай достатньо. У межах даної роботи система використовується для
автоматизації облікових процесів виробничого підприємства, тому
використання SQLite є доцільним та виправданим рішенням [4].
Під час вибору СКБД також враховувалися особливості архітектури
застосунку. Оскільки система будується на базі Flask та має відносно просту
структуру, використання повноцінної серверної СКБД створювало б додаткову
складність без суттєвих переваг [20].
Крім того, SQLite дозволяє швидше виконувати розгортання системи та
спрощує процес тестування застосунку. Для запуску проєкту достатньо лише
файлу бази даних, що є зручним рішенням для навчального середовища та
локального використання [32].
Для кращого порівняння можливостей різних СКБД доцільно виділити
основні характеристики систем.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 35
Рисунок 2.5 — Порівняння основних характеристик сучасних СКБД
На рисунку відображено основні відмінності між SQLite, MySQL,
PostgreSQL та іншими популярними системами керування базами даних.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 36
Порівняння демонструє, що SQLite має меншу складність налаштування та
краще підходить для невеликих інформаційних систем.
У результаті проведеного дослідження було встановлено, що для
реалізації web-орієнтованої інформаційної системи обліку даних виробничого
підприємства найбільш доцільним є використання SQLite. Дана система
забезпечує необхідний функціонал, не потребує складного адміністрування та
добре підходить для невеликих і середніх web-застосунків.
Таким чином, використання SQLite дозволяє спростити структуру
проєкту, зменшити складність розгортання системи та забезпечити достатню
ефективність роботи бази даних у межах поставлених задач.
2.4 Створення бази даних інформаційної системи
Після проєктування структури бази даних наступним етапом розробки
інформаційної системи є її програмна реалізація. На цьому етапі створюються
таблиці бази даних, реалізуються зв’язки між сутностями та налаштовується
взаємодія серверної частини застосунку з даними [26].
У межах даної роботи реалізація бази даних виконувалася з
використанням ORM-бібліотеки SQLAlchemy. Використання ORM-підходу
дозволяє працювати з таблицями бази даних у вигляді Python-класів, що значно
спрощує розробку та підтримку системи [23].
Перевагою ORM є те, що розробнику не потрібно вручну створювати
велику кількість SQL-запитів для виконання базових операцій. Робота з
даними виконується через об’єкти Python, а SQLAlchemy автоматично генерує
необхідні SQL-конструкції для взаємодії з базою даних [23].
Для реалізації бази даних у системі було створено окремі моделі для
кожної сутності предметної області. Кожна модель відповідає окремій таблиці
бази даних та містить набір полів, зв’язків і службових атрибутів.
Однією з основних моделей системи є модель користувачів User. Вона
використовується для реалізації авторизації, role-based доступу та зберігання
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 37
облікових записів користувачів системи. У моделі зберігаються логін, email,
пароль, роль користувача та службова інформація про обліковий запис.
У моделі User реалізовано підтримку ролей користувачів, що дозволяє
обмежувати доступ до окремих функцій системи залежно від прав
користувача. Також модель підтримує інтеграцію з Flask-Login для роботи із
сесіями користувачів.
Приклад реалізації моделі користувача наведено нижче.
class User(UserMixin, db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
full_name = db.Column(db.String(180), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(255), nullable=False)
role = db.Column(db.String(32), nullable=False, default="worker")
Для зберігання інформації про працівників підприємства була створена
модель Employee. Дана модель містить персональні та службові дані
співробітників, включаючи ПІБ, посаду, відділ, контактну інформацію та дату
найму.
Крім основних полів, модель Employee містить зв’язок із моделлю User,
що дозволяє прив’язувати обліковий запис системи до конкретного працівника
підприємства. Також модель підтримує зв’язки із замовленнями та
складськими операціями.
Для реалізації обліку продукції використовується модель Product. Вона є
однією з ключових частин системи, оскільки через неї реалізується контроль
товарів та складських залишків.
Модель Product містить інформацію про:
назву продукції;
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 38
категорію;
опис;
закупівельну ціну;
ціну продажу;
кількість товару на складі.
Крім цього, модель підтримує зв’язки із замовленнями та складськими
операціями. Це дозволяє автоматично оновлювати залишки продукції та
контролювати рух товарів у системі.
Приклад реалізації моделі продукції наведено нижче.
class Product(db.Model):
__tablename__ = "products"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(180), nullable=False)
category_id = db.Column(db.Integer, db.ForeignKey("categories.id"))
price = db.Column(db.Numeric(12, 2), nullable=False)
quantity = db.Column(db.Integer, nullable=False, default=0)
Для групування товарів за типами у системі використовується модель
Category. Вона дозволяє організувати продукцію за категоріями та спрощує
процес пошуку товарів у системі.
Модель Category містить мінімальну кількість полів та підтримує зв’язок
типу «один до багатьох» із таблицею продукції. Одна категорія може містити
багато товарів, але кожен товар належить лише до однієї категорії.
Для роботи із замовленнями була реалізована модель Order. Її основним
призначенням є зберігання інформації про створені замовлення, контроль
статусів та зв’язок із продукцією і працівниками.
У моделі Order зберігаються:
номер замовлення;
відповідальний працівник;
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 39
продукція;
кількість товару;
статус замовлення;
коментарі;
дата створення та оновлення запису.
Наявність окремого поля статусу дозволяє контролювати процес
виконання замовлення та відстежувати його поточний стан у системі.
Для реалізації складського обліку використовується модель
WarehouseOperation. Вона призначена для збереження інформації про всі
операції, пов’язані з рухом продукції на складі.
У моделі WarehouseOperation зберігаються:
тип операції;
продукція;
кількість товару;
відповідальний працівник;
коментар;
результат операції;
дата створення запису.
Після виконання складської операції система автоматично оновлює
залишки товарів у таблиці продукції. Подібний підхід дозволяє підтримувати
актуальність інформації про складські залишки.
Приклад реалізації моделі складських операцій наведено нижче.
class WarehouseOperation(db.Model):
__tablename__ = "warehouse_operations"
id = db.Column(db.Integer, primary_key=True)
operation_type = db.Column(db.String(40), nullable=False)
quantity = db.Column(db.Integer, nullable=False)
resulting_quantity = db.Column(db.Integer, nullable=False)
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 40
Під час створення моделей особлива увага приділялася зв’язкам між
таблицями. У системі використовуються зв’язки типу:
один до одного;
один до багатьох.
Наприклад, між моделями User та Employee використовується зв’язок
«один до одного», тоді як між Category та Product — зв’язок «один до
багатьох». Подібний підхід дозволяє уникнути дублювання інформації та
забезпечує цілісність даних.
Для створення таблиць бази даних використовувалися механізми
SQLAlchemy та Flask-Migrate. Це дозволило автоматизувати процес створення
структури бази даних і спростити внесення змін до моделей під час розробки
системи [33].
Важливою особливістю реалізованої структури є підтримка
автоматичного створення часових міток. У більшості моделей
використовуються поля created_at та updated_at, які дозволяють зберігати
інформацію про дату створення та останнього оновлення записів.
Під час створення бази даних також враховувалися питання
продуктивності. Для полів, які часто використовуються під час пошуку, були
додані індекси. Наприклад, індексація використовується для логінів
користувачів, email-адрес та номерів замовлень. Це дозволяє пришвидшити
виконання запитів до бази даних.
Для забезпечення коректності даних у моделях використовуються
обмеження nullable=False, unique=True та зовнішні ключі. Подібний підхід
дозволяє уникнути появи некоректних записів та підтримує цілісність
інформації у системі [26].
У процесі розробки бази даних також враховувалася можливість
подальшого масштабування системи. Структура моделей дозволяє додавати
нові модулі та таблиці без суттєвого порушення існуючої архітектури. Це є
важливою перевагою для подальшого розвитку інформаційної системи [25].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 41
Таким чином, у межах даної роботи була реалізована база даних web-
орієнтованої інформаційної системи обліку даних виробничого підприємства.
Створена структура забезпечує централізоване зберігання інформації,
підтримку зв’язків між сутностями, автоматизацію обробки даних та
можливість подальшого розвитку системи.
Висновки до розділу 2
У другому розділі було виконано проєктування основних компонентів
web-орієнтованої інформаційної системи обліку даних виробничого
підприємства. У процесі роботи було розроблено архітектуру застосунку,
структуру бази даних, проведено дослідження сучасних систем керування
базами даних та реалізовано моделі для зберігання інформації.
Під час проєктування архітектури системи було обрано клієнт-серверний
підхід, який є одним із найбільш поширених у сучасній web-розробці. Даний
підхід дозволяє розділити клієнтську та серверну частини застосунку,
централізувати обробку інформації та забезпечити одночасну роботу кількох
користувачів із системою [8].
У межах архітектури застосунку було реалізовано модульний підхід до
організації проєкту. Система була поділена на окремі компоненти,
відповідальні за авторизацію користувачів, роботу із продукцією,
замовленнями, складськими операціями та звітністю. Подібна структура
дозволяє спростити підтримку коду та забезпечує можливість подальшого
розвитку системи [20].
Під час розробки структури бази даних було визначено основні сутності
предметної області та реалізовано зв’язки між ними. У системі створено
таблиці для зберігання інформації про користувачів, працівників, продукцію,
категорії товарів, замовлення та складські операції. Для демонстрації
структури бази даних була побудована UML-діаграма класів, яка відображає
взаємозв’язки між основними сутностями системи [26].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 42
У процесі дослідження систем керування базами даних було розглянуто
особливості MySQL, PostgreSQL, Microsoft SQL Server, Oracle Database та
SQLite. Проведений аналіз показав, що для реалізації невеликої web-
орієнтованої інформаційної системи найбільш доцільним є використання
SQLite. Дана СКБД не потребує окремого серверного середовища, має просту
структуру та добре інтегрується з Python-застосунками [32].
Під час реалізації бази даних використовувалася ORM-бібліотека
SQLAlchemy, яка дозволяє працювати з таблицями у вигляді Python-класів.
Використання ORM-підходу спростило реалізацію CRUD-операцій та зробило
структуру коду більш зрозумілою й зручною для підтримки [23].
У результаті другого розділу було сформовано повну структуру
інформаційної системи, визначено основні компоненти архітектури та
реалізовано базу даних застосунку. Отримані результати створюють основу
для наступного етапу роботи — програмної реалізації функціоналу системи та
розробки користувацького інтерфейсу.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 43
РОЗДІЛ 3
РОЗРОБКА ПРОГРАМНОЇ ЧАСТИНИ
3.1 Вибір засобів та технологій розробки інформаційної системи
Під час розробки сучасних інформаційних систем одним із
найважливіших етапів є вибір програмних засобів та технологій, які будуть
використовуватися для реалізації проєкту. Саме від обраного стеку технологій
залежить складність розробки, продуктивність застосунку, зручність
підтримки системи та можливість її подальшого масштабування [25].
У процесі вибору технологій для створення web-орієнтованої
інформаційної системи необхідно враховувати низку факторів:
складність функціоналу;
тип архітектури;
кількість користувачів;
вимоги до продуктивності;
складність розгортання;
доступність документації;
популярність технології;
швидкість розробки.
Для навчальних та невеликих корпоративних проєктів особливо важливо
забезпечити баланс між функціональністю системи та складністю її реалізації.
Використання надмірно складних технологій може значно ускладнювати
структуру проєкту та збільшувати час розробки без суттєвих переваг [18].
Одним із перших етапів вибору технологій є визначення мови
програмування для серверної частини застосунку. На сьогодні для backend-
розробки активно використовуються Java, C#, PHP, JavaScript та Python [34].
Java традиційно використовується у великих корпоративних системах.
Основними перевагами Java є висока продуктивність, масштабованість та
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 44
велика кількість enterprise-рішень. Для створення web-застосунків на Java
часто використовуються framework-рішення Spring та Spring Boot [35].
Попри значні можливості Java, дана мова програмування має і певні
недоліки. Насамперед це більш складний синтаксис та вища складність
розробки порівняно з Python. Для невеликих інформаційних систем
використання Java може бути надмірним та збільшувати загальну складність
проєкту [35].
Ще одним популярним рішенням є C# та платформа ASP.NET від
Microsoft [36]. Даний стек технологій активно використовується для створення
корпоративних web-застосунків та інтегрується з екосистемою Microsoft.
ASP.NET забезпечує високу продуктивність, підтримує сучасні
механізми безпеки та дозволяє створювати масштабовані web-системи.
Водночас використання даного стеку часто потребує більш складної серверної
інфраструктури та глибшої технічної підготовки розробника [36].
Для web-розробки також широко використовується JavaScript та
платформа Node.js [37]. Основною перевагою Node.js є можливість
використовувати одну мову програмування як для frontend, так і для backend-
частини застосунку.
Node.js добре підходить для створення асинхронних web-систем та
застосунків із великою кількістю одночасних підключень. Однак для реалізації
інформаційної системи обліку використання Node.js не є критично
необхідним, а сама структура backend-коду часто стає складнішою порівняно з
Python-рішеннями [37].
Серед сучасних мов програмування для web-розробки окремо варто
виділити Python. На сьогодні Python є однією з найпопулярніших мов
програмування у сфері web-розробки, автоматизації та роботи з даними [13].
Популярність Python пояснюється кількома причинами:
простим та зрозумілим синтаксисом;
великою кількістю бібліотек;
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 45
активною спільнотою розробників;
швидкістю створення програмного забезпечення;
хорошою документацією.
Python дозволяє реалізовувати web-застосунки з меншою кількістю коду
порівняно з багатьма іншими мовами програмування. Це є важливою
перевагою для навчальних і невеликих корпоративних проєктів [18].
Для створення web-застосунків на Python існує велика кількість
framework-рішень. Найбільш популярними серед них є Django та Flask [19].
Django є одним із найбільш відомих Python-фреймворків для web-
розробки. Він містить велику кількість вбудованих компонентів, включаючи
ORM, систему адміністрування, механізми авторизації та інструменти для
роботи з формами [19].
Перевагою Django є наявність великої кількості готового функціоналу.
Це дозволяє швидко створювати масштабні web-системи з мінімальною
кількістю сторонніх бібліотек [19].
Разом із тим Django має і певні недоліки. Через значну кількість
вбудованих компонентів структура проєкту стає складнішою, а частина
функціоналу може залишатися невикористаною. Для невеликих
інформаційних систем подібний підхід часто є надлишковим [3].
Альтернативою Django є Flask — lightweight framework для створення
web-застосунків на Python [20]. Flask використовує мінімалістичний підхід до
розробки та дозволяє самостійно формувати структуру проєкту.
Однією з головних переваг Flask є його гнучкість. Розробник може
використовувати лише ті компоненти та бібліотеки, які дійсно необхідні для
роботи системи. Це дозволяє уникнути надлишкової складності та зробити
структуру застосунку більш зрозумілою [20].
Flask також добре підходить для створення модульних інформаційних
систем із role-based доступом, роботою з базами даних та dashboard-
інтерфейсами. Крім того, даний framework добре інтегрується з SQLAlchemy,
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 46
Flask-Login та іншими популярними Python-бібліотеками [20].
У межах даної роботи було прийнято рішення використовувати саме
Flask, оскільки він забезпечує достатній функціонал для реалізації
інформаційної системи без надмірного ускладнення архітектури проєкту.
Для створення клієнтської частини web-застосунку необхідно також
обрати frontend-технології. На сьогодні найбільш популярними рішеннями є
React, Angular, Vue.js та класичний підхід із використанням HTML, CSS і
JavaScript [22].
React від компанії Meta є одним із найпоширеніших frontend-рішень для
створення SPA-застосунків [38]. React забезпечує компонентний підхід до
побудови інтерфейсу та підтримує динамічне оновлення контенту без повного
перезавантаження сторінки.
Разом із тим використання React значно ускладнює структуру проєкту.
Для роботи із React-застосунком необхідно використовувати окрему frontend-
збірку, npm-пакети та додаткові інструменти конфігурації [38].
Ще одним популярним frontend-framework є Angular від Google [39].
Angular дозволяє створювати великі SPA-застосунки та підтримує TypeScript,
dependency injection і модульну архітектуру.
Попри широкі можливості Angular, дана технологія є досить складною
для невеликих проєктів. Для реалізації інформаційної системи обліку
використання Angular створювало б надлишкову складність та збільшувало
обсяг frontend-коду [39].
Також для frontend-розробки широко використовується Vue.js [40].
Даний framework вважається більш простим порівняно з React та Angular і
часто застосовується для створення динамічних web-інтерфейсів.
Vue.js має хорошу документацію та відносно просту інтеграцію з
backend-застосунками. Однак для реалізації функціоналу даної системи
використання окремого frontend-framework не є необхідним [40].
У межах даної роботи було прийнято рішення використовувати HTML,
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 47
CSS та Vanilla JavaScript без застосування складних frontend-framework-
рішень. Подібний підхід дозволяє суттєво спростити структуру проєкту та
зменшити кількість залежностей [22].
Для формування HTML-сторінок у Flask використовується шаблонізатор
Jinja2 [21]. Він дозволяє динамічно генерувати сторінки та передавати дані із
серверної частини застосунку у frontend.
Jinja2 підтримує:
шаблони;
цикли;
умовні конструкції;
повторне використання компонентів;
динамічне відображення даних.
Подібний підхід дозволяє створювати більш структурований інтерфейс
без дублювання HTML-коду [21].
Наступним важливим етапом є вибір системи керування базами даних.
Для web-застосунків найбільш поширеними СКБД є MySQL, PostgreSQL та
SQLite [27].
PostgreSQL [14] забезпечує високу продуктивність та підтримує складні
SQL-запити. Дана СКБД добре підходить для великих корпоративних систем
та високонавантажених проєктів.
MySQL [28] також активно використовується у web-розробці та
підтримує багатокористувацький режим роботи. Однак для невеликих
інформаційних систем використання окремого серверного середовища може
бути надлишковим [28].
SQLite [32], на відміну від більшості серверних СКБД, не потребує
окремого серверного процесу. База даних зберігається у вигляді одного файлу,
що суттєво спрощує запуск та адміністрування системи [32].
Для даної роботи використання SQLite є найбільш доцільним рішенням,
оскільки система орієнтована на невеликі та середні підприємства й не
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 48
потребує складної серверної інфраструктури.
Для взаємодії Flask із базою даних використовується ORM-бібліотека
SQLAlchemy. Використання ORM дозволяє працювати з таблицями бази даних
у вигляді Python-класів та спрощує реалізацію CRUD-операцій [23].
Для реалізації системи авторизації використовується Flask-Login [20].
Дана бібліотека забезпечує підтримку користувацьких сесій, механізм входу до
системи та обмеження доступу до сторінок застосунку.
Для створення графіків та статистики у dashboard-інтерфейсі
використовується бібліотека Chart.js [24]. Вона дозволяє будувати інтерактивні
діаграми та відображати статистичні дані у зручному вигляді.
Під час вибору засобів розробки також враховувалися питання
підтримки та документації. Усі обрані технології мають активну спільноту
розробників, сучасну документацію та велику кількість прикладів
використання. Це спрощує процес розробки та подальшу підтримку системи
[20].
Таким чином, у результаті проведеного аналізу було обрано стек
технологій, який найбільш доцільно підходить для реалізації web-орієнтованої
інформаційної системи обліку даних виробничого підприємства.
Використання Python, Flask, SQLite, SQLAlchemy, Jinja2 та Vanilla JavaScript
дозволяє створити функціональний, зрозумілий та віднос
3.2 Розробка системи
Однією з ключових складових будь-якої інформаційної системи є
механізм авторизації користувачів та розмежування прав доступу. Саме
система авторизації забезпечує контроль доступу до функціоналу застосунку,
захист даних підприємства та ідентифікацію користувачів під час роботи із
системою [20].
Для інформаційної системи обліку даних виробничого підприємства
питання авторизації є особливо важливим, оскільки різні категорії
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 49
користувачів повинні мати доступ лише до тих функцій, які відповідають їхнім
посадовим обов’язкам. Наприклад, адміністратор повинен мати повний доступ
до системи, менеджер — працювати із замовленнями та продукцією, а
звичайний працівник — лише переглядати або змінювати окремі записи [25].
Під час розробки системи авторизації необхідно було реалізувати:
механізм входу користувача до системи;
підтримку сесій;
перевірку ролей користувачів;
захист сторінок від несанкціонованого доступу;
механізм виходу із системи;
збереження даних користувача між запитами.
Для реалізації авторизації у даній роботі використовується бібліотека
Flask-Login [20]. Дана бібліотека забезпечує підтримку користувацьких сесій,
автоматичне збереження інформації про поточного користувача та механізм
обмеження доступу до окремих маршрутів застосунку.
Використання Flask-Login значно спрощує реалізацію авторизації у
Flask-застосунках, оскільки бібліотека містить готові механізми для:
роботи із сесіями;
перевірки авторизації;
перенаправлення неавторизованих користувачів;
отримання інформації про поточного користувача.
У процесі розробки системи авторизації було створено модель User, яка
використовується для зберігання облікових записів користувачів системи.
Модель містить логін, email, пароль, роль користувача та службову інформацію
про обліковий запис.
Для інтеграції моделі користувача з Flask-Login клас User наслідується
від UserMixin, який надає базову функціональність для роботи з
користувацькими сесіями.
Приклад реалізації моделі користувача наведено нижче.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 50
class User(UserMixin, db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
full_name = db.Column(db.String(180), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(255), nullable=False)
role = db.Column(db.String(32), nullable=False, default="worker")
Під час створення системи авторизації особлива увага приділялася
безпеці зберігання паролів. У системі паролі користувачів не зберігаються у
відкритому вигляді. Для цього використовується механізм хешування, який
дозволяє зберігати лише зашифроване значення пароля [41].
Використання хешування суттєво підвищує безпеку системи та зменшує
ризик компрометації облікових даних у випадку несанкціонованого доступу до
бази даних [41].
Процес авторизації користувача у системі складається з кількох етапів:
1. відкриття сторінки входу;
2. введення логіна та пароля;
3. перевірка облікових даних;
4. створення користувацької сесії;
5. перенаправлення до dashboard-сторінки.
Для демонстрації алгоритму роботи авторизації була створена activity-
діаграма.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 51
Рисунок 3.1 — Activity-діаграма процесу авторизації користувача.
На діаграмі відображено процес перевірки облікових даних користувача
та створення сесії після успішного входу до системи. Якщо введені дані є
некоректними, система відображає повідомлення про помилку та повертає
користувача до форми авторизації.
Після успішної авторизації система створює користувацьку сесію та
зберігає інформацію про поточного користувача. Завдяки цьому користувач
може працювати із системою без повторного введення логіна та пароля під час
переходу між сторінками [20].
Для захисту сторінок від несанкціонованого доступу використовується
декоратор @login_required, який надається бібліотекою Flask-Login. Якщо
користувач не пройшов авторизацію, система автоматично перенаправляє його
на сторінку входу [20].
Приклад використання захисту маршруту наведено нижче.
@app.route("/dashboard")
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 52
@login_required
def dashboard():
return render_template("dashboard.html")
Окрім перевірки авторизації, у системі також реалізовано механізм role-
based доступу. Даний підхід дозволяє обмежувати доступ до окремих функцій
залежно від ролі користувача [42].
У межах системи реалізовано три основні ролі:
адміністратор;
менеджер;
працівник.
Адміністратор має повний доступ до всіх модулів системи, включаючи
керування користувачами та працівниками. Менеджер може працювати із
замовленнями, продукцією та звітністю. Працівник має доступ лише до
обмеженого функціоналу системи.
Для перевірки ролей у моделі користувача було реалізовано окремий
метод has_role(). Він дозволяє перевіряти наявність необхідної ролі у
поточного користувача.
Приклад реалізації перевірки ролей наведено нижче.
def has_role(self, *roles: str) -> bool:
return self.role in roles
Під час переходу користувача до окремих сторінок система перевіряє
його права доступу. Якщо користувач не має необхідної ролі, сервер повертає
повідомлення про відмову в доступі або перенаправляє його на dashboard-
сторінку.
Подібний підхід дозволяє забезпечити базовий рівень безпеки та
запобігти доступу до службових функцій сторонніх користувачів [42].
Для реалізації сторінки входу використовувалася HTML-форма з полями
логіна та пароля. Після надсилання форми сервер виконує перевірку введених
даних та здійснює авторизацію користувача.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 53
Приклад обробки форми авторизації наведено нижче.
user = User.query.filter_by(username=form.username.data).first()
if user and check_password_hash(user.password_hash, form.password.data):
login_user(user)
return redirect(url_for("dashboard"))
У процесі розробки також було реалізовано механізм виходу із системи.
Після виконання logout користувацька сесія видаляється, а доступ до
захищених сторінок стає недоступним без повторної авторизації [20].
Для підвищення зручності використання системи були реалізовані
повідомлення про помилки авторизації. Якщо користувач вводить
неправильний логін або пароль, система відображає відповідне повідомлення
без перезавантаження всієї структури застосунку.
Окрему увагу під час розробки було приділено структурі маршрутизації.
Усі маршрути, пов’язані з авторизацією, були винесені в окремий blueprint-
модуль. Подібний підхід дозволяє зробити структуру проєкту більш
зрозумілою та спрощує підтримку коду [20].
Для збереження інформації про користувачів у базі даних
використовуються індекси для полів username та email. Це дозволяє
пришвидшити виконання запитів під час авторизації користувачів та перевірки
унікальності облікових записів.
Під час створення системи авторизації також враховувалися питання
масштабованості. Обрана структура дозволяє у майбутньому додавати нові
ролі користувачів, розширювати механізми перевірки доступу та реалізовувати
додаткові функції без суттєвого порушення існуючої архітектури системи [25].
Однією з основних задач інформаційної системи обліку даних
виробничого підприємства є забезпечення централізованої роботи з
інформацією про продукцію та працівників. Саме ці модулі використовуються
найчастіше у повсякденній роботі підприємства, оскільки через них
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 54
здійснюється ведення товарного обліку, оновлення інформації про
співробітників та контроль основних даних системи [6].
Під час розробки модуля управління продукцією необхідно було
забезпечити можливість:
перегляду списку товарів;
створення нової продукції;
редагування товарів;
видалення записів;
пошуку продукції;
фільтрації за категоріями;
контролю складських залишків.
Для реалізації функціоналу модуля продукції у системі використовується
модель Product, яка взаємодіє з базою даних через SQLAlchemy ORM. Модель
містить інформацію про назву товару, категорію, ціну, кількість продукції та
службові часові мітки.
Під час розробки модуля особлива увага приділялася структурі
зберігання продукції. Кожен товар у системі має власний ідентифікатор, що
дозволяє уникнути дублювання записів та спрощує подальшу роботу із
замовленнями й складськими операціями [21].
Для організації продукції у системі реалізовано підтримку категорій
товарів. Це дозволяє групувати продукцію за типами та спрощує навігацію під
час роботи з великою кількістю записів.
Модель Category використовується для створення окремих категорій
продукції та підтримує зв’язок типу «один до багатьох» із таблицею товарів.
Приклад реалізації моделі категорій наведено нижче.
class Category(db.Model):
__tablename__ = "categories"
id = db.Column(db.Integer, primary_key=True)
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 55
name = db.Column(db.String(120), nullable=False, unique=True)
products = db.relationship("Product", back_populates="category")
Використання окремої таблиці категорій дозволяє уникнути дублювання
назв типів продукції та забезпечує більш структуровану організацію даних
[26].
Для реалізації інтерфейсу перегляду продукції у системі
використовуються HTML-таблиці, сформовані за допомогою шаблонізатора
Jinja2 [21]. У таблиці відображається основна інформація про товар:
назва;
категорія;
ціна;
кількість на складі;
дата створення.
Подібний підхід дозволяє користувачу швидко переглядати інформацію
про продукцію та виконувати базові операції без переходу між великою
кількістю сторінок.
Для підвищення зручності роботи було реалізовано систему пошуку
товарів за назвою. Пошук виконується через SQLAlchemy-запит із
використанням фільтрації записів.
Приклад реалізації пошуку продукції наведено нижче.
products = Product.query.filter(
Product.name.ilike(f"%{search_query}%")
).all()
Використання механізму пошуку дозволяє швидко знаходити необхідні
товари навіть при значній кількості записів у базі даних [21].
Окрему увагу під час розробки було приділено реалізації CRUD-
операцій. Система підтримує:
Create — створення записів;
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 56
Read — перегляд інформації;
Update — редагування;
Delete — видалення записів.
CRUD-функціонал є основою більшості інформаційних систем та
дозволяє реалізувати повноцінну роботу з даними підприємства [25].
Для створення нової продукції у системі використовується HTML-форма
із перевіркою введених даних. Користувач вводить інформацію про товар,
після чого сервер виконує перевірку коректності даних та створює запис у базі
даних.
Приклад створення нового товару наведено нижче.
product = Product(
name=form.name.data,
category_id=form.category.data,
price=form.price.data,
quantity=form.quantity.data
)
db.session.add(product)
db.session.commit()
Після створення товар автоматично відображається у загальному списку
продукції. Подібний підхід забезпечує швидке оновлення інформації у системі.
Для редагування товарів використовується окрема форма, яка
автоматично заповнюється поточними даними продукції. Після внесення змін
сервер оновлює відповідний запис у базі даних.
Приклад оновлення інформації про товар наведено нижче.
product.name = form.name.data
product.price = form.price.data
product.quantity = form.quantity.data
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 57
db.session.commit()
Операція видалення товарів також реалізована через SQLAlchemy ORM.
Перед видаленням система виконує перевірку прав доступу користувача та
підтвердження операції.
Для підвищення безпеки доступ до створення, редагування та видалення
продукції мають лише користувачі з ролями адміністратора або менеджера.
Подібний підхід дозволяє уникнути несанкціонованої зміни інформації [42].
Крім модуля продукції, у межах системи також реалізовано модуль
управління працівниками. Його призначенням є ведення кадрового обліку та
зберігання інформації про співробітників підприємства.
У системі для цього використовується модель Employee, яка містить:
ПІБ працівника;
посаду;
відділ;
контактну інформацію;
дату найму;
статус працівника.
Модель працівників підтримує зв’язок із моделлю користувачів, що
дозволяє прив’язувати обліковий запис системи до конкретного співробітника
підприємства. Подібний підхід спрощує організацію role-based доступу та
роботу із замовленнями [20].
Для відображення інформації про працівників використовується таблиця
зі списком співробітників. У таблиці відображаються:
ПІБ;
посада;
email;
телефон;
дата найму;
поточний статус.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 58
Під час розробки інтерфейсу особлива увага приділялася простоті
навігації та зручності роботи користувача. Для цього використовуються:
кнопки швидкого редагування;
пошук;
фільтрація;
pagination для великих списків записів.
Pagination дозволяє розділяти великі обсяги інформації на окремі
сторінки та зменшує навантаження на сервер під час формування HTML-
таблиць [43].
Для створення працівників реалізовано окрему форму введення даних.
Після заповнення форми система виконує перевірку коректності введеної
інформації та створює новий запис у базі даних.
Під час валідації перевіряються:
обов’язкові поля;
формат email;
унікальність облікового запису;
коректність телефонного номера.
Подібний підхід дозволяє зменшити кількість помилок та підтримувати
цілісність інформації у системі [21].
Для взаємодії між frontend та backend-частиною застосунку
використовуються стандартні HTTP-запити Flask. Після виконання операцій
система автоматично оновлює інформацію на сторінці та відображає
повідомлення про успішне виконання дії або помилки.
Для відображення повідомлень у Flask використовується механізм
flash().
Приклад використання flash-повідомлень наведено нижче.
flash("Працівника успішно створено", "success")
Подібний механізм дозволяє покращити взаємодію користувача із
системою та забезпечує більш зрозумілий інтерфейс [20].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 59
Під час розробки модулів продукції та працівників також враховувалися
питання масштабованості. Структура моделей дозволяє у майбутньому
додавати:
нові поля;
додаткові типи продукції;
нові категорії;
додаткові ролі працівників;
систему фільтрації та сортування.
Окрему увагу було приділено продуктивності роботи системи. Для
пришвидшення виконання SQL-запитів використовуються індекси для полів,
які часто застосовуються під час пошуку та фільтрації інформації [21].
У процесі розробки інтерфейсу також враховувалися сучасні підходи до
побудови dashboard-систем. Для оформлення сторінок використовувалися:
sidebar-навігація;
адаптивні таблиці;
card-компоненти;
модальні вікна;
кольорові статуси записів.
Подібний підхід дозволяє зробити інтерфейс більш зрозумілим та
спрощує роботу користувачів із системою [44].
Одним із найбільш важливих компонентів інформаційної системи
виробничого підприємства є модуль управління замовленнями та складським
обліком. Саме через даний модуль здійснюється контроль виконання
замовлень, оновлення інформації про залишки продукції та фіксація
складських операцій [7].
На виробничих підприємствах процес роботи із замовленнями
безпосередньо пов’язаний із рухом продукції на складі. Після підтвердження
або виконання замовлення система повинна автоматично оновлювати кількість
товарів та зберігати інформацію про зміни у базі даних. Якщо подібні операції
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 60
виконуються вручну, це значно підвищує ризик появи помилок та
неактуальних залишків продукції [17].
У межах даної роботи модуль замовлень реалізований із використанням
Flask, SQLAlchemy та SQLite. Для зберігання інформації про замовлення
використовується модель Order, яка містить дані про продукцію, кількість
товарів, статус замовлення, відповідального працівника та службову
інформацію про запис.
Основними задачами модуля замовлень є:
створення нових замовлень;
редагування інформації;
зміна статусу замовлення;
контроль виконання;
оновлення складських залишків;
створення складських операцій;
збереження історії змін.
Для створення нового замовлення у системі використовується HTML-
форма, через яку користувач вводить інформацію про товар, кількість
продукції та додаткові коментарі.
Після надсилання форми сервер виконує перевірку введених даних та
створює новий запис у базі даних.
Приклад створення нового замовлення наведено нижче.
order = Order(
product_id=form.product.data,
quantity=form.quantity.data,
employee_id=current_user.employee.id,
status="new"
)
db.session.add(order)
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 61
db.session.commit()
Після створення замовлення система автоматично відображає його у
списку активних замовлень. Для перегляду інформації використовується
таблиця, у якій відображаються:
номер замовлення;
продукція;
кількість товару;
статус;
відповідальний працівник;
дата створення.
Під час розробки інтерфейсу особлива увага приділялася відображенню
статусів замовлень. Для цього використовуються кольорові позначення:
нове замовлення;
у процесі виконання;
виконане;
скасоване.
Подібний підхід дозволяє користувачу швидко оцінювати поточний стан
замовлень без необхідності відкривати окремі сторінки [44].
Однією з ключових функцій модуля є зміна статусу замовлення. Після
виконання замовлення система повинна автоматично оновити складські
залишки продукції та створити запис про складську операцію [17].
Для демонстрації алгоритму роботи даного процесу була створена
activity-діаграма.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 62
Рисунок 3.2 — Activity-діаграма обробки замовлення.
На діаграмі відображено процес перевірки статусу замовлення,
оновлення кількості продукції та створення складської операції після
виконання замовлення. Якщо замовлення не завершене, система лише оновлює
його статус без зміни складських залишків.
Після зміни статусу замовлення сервер виконує перевірку залишків
продукції. Якщо кількість товару є достатньою, система автоматично зменшує
залишок на складі та створює відповідну складську операцію.
Приклад реалізації оновлення залишків продукції наведено нижче.
product.quantity -= order.quantity
db.session.commit()
Після оновлення залишків система створює запис у таблиці
WarehouseOperation. Це дозволяє зберігати історію всіх змін, пов’язаних із
рухом продукції на складі.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 63
Приклад створення складської операції наведено нижче.
operation = WarehouseOperation(
operation_type="expense",
product_id=product.id,
quantity=order.quantity,
employee_id=current_user.employee.id
)
db.session.add(operation)
db.session.commit()
Використання окремої таблиці складських операцій дозволяє
реалізувати базовий аудит змін у системі та спрощує контроль руху продукції
[17].
Для реалізації складського обліку у системі використовується модель
WarehouseOperation, яка містить:
тип операції;
продукцію;
кількість товару;
відповідального працівника;
дату створення операції;
коментар до операції.
Під час розробки модуля особлива увага приділялася автоматизації
роботи із залишками продукції. Усі зміни виконуються серверною частиною
системи автоматично після підтвердження відповідної дії користувача.
Подібний підхід дозволяє:
зменшити кількість ручних операцій;
уникнути помилок у підрахунках;
підтримувати актуальність складських залишків;
забезпечити цілісність інформації.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 64
Для захисту даних система виконує перевірку кількості продукції перед
підтвердженням замовлення. Якщо товару недостатньо, сервер повертає
повідомлення про помилку та блокує виконання операції.
Приклад перевірки залишків наведено нижче.
if product.quantity < order.quantity:
flash("Недостатня кількість товару на складі", "danger")
return redirect(url_for("orders.details", id=order.id))
Під час розробки також враховувалися питання цілісності даних. Для
уникнення помилок усі зміни, пов’язані із замовленнями та складськими
операціями, виконуються в межах однієї транзакції SQLAlchemy [23].
Подібний підхід дозволяє уникнути ситуацій, коли замовлення змінює
статус, але складські залишки не оновлюються через помилку виконання
запиту.
Окрему увагу було приділено структурі маршрутів Flask-застосунку. Усі
функції, пов’язані із замовленнями та складськими операціями, винесені в
окремі blueprint-модулі. Це дозволяє зробити структуру проєкту більш
зрозумілою та спрощує підтримку коду [20].
Для підвищення продуктивності роботи системи використовуються
SQLAlchemy relationship-зв’язки між моделями Order, Product, Employee та
WarehouseOperation. Завдяки цьому сервер може швидко отримувати пов’язану
інформацію без великої кількості окремих SQL-запитів [23].
У процесі розробки модуля також враховувалися питання
масштабованості. Поточна структура дозволяє у майбутньому реалізувати:
багаторівневу систему статусів;
підтвердження замовлень;
історію зміни статусів;
журнал дій користувачів;
систему резервування товарів;
автоматичне формування звітності.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 65
Для взаємодії користувача із системою використовуються flash-
повідомлення, які інформують про успішне створення замовлення, зміну
статусу або виникнення помилок. Подібний підхід робить інтерфейс більш
зрозумілим та покращує взаємодію користувача із застосунком [20].
Під час розробки web-орієнтованої інформаційної системи важливе
значення має не лише серверна логіка та структура бази даних, але й
користувацький інтерфейс застосунку. Саме через інтерфейс користувач
взаємодіє із системою, працює з даними та виконує основні операції. Через це
інтерфейс повинен бути зрозумілим, логічно структурованим та зручним для
повсякденного використання [44].
Для виробничих підприємств особливо важливо забезпечити швидкий
доступ до основного функціоналу системи. Працівники повинні мати
можливість швидко переглядати інформацію, створювати записи та
виконувати операції без складного навчання або тривалого пошуку необхідних
функцій [10].
У межах даної роботи користувацький інтерфейс був реалізований за
допомогою:
HTML;
CSS;
Vanilla JavaScript;
шаблонізатора Jinja2.
Використання класичного server-side підходу з Jinja2 дозволило
спростити структуру frontend-частини застосунку та уникнути необхідності
використання складних SPA-framework-рішень, таких як React або Angular
[21].
Під час розробки інтерфейсу особлива увага приділялася:
простоті навігації;
читабельності таблиць;
адаптивності інтерфейсу;
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 66
швидкому доступу до функціоналу;
візуальному розділенню модулів системи.
Для організації структури інтерфейсу використовується sidebar-
навігація, яка містить основні розділи системи:
dashboard;
продукція;
замовлення;
склад;
працівники;
звітність;
адміністрування.
Подібний підхід дозволяє користувачу швидко переходити між модулями
системи без необхідності відкривати велику кількість окремих сторінок [44].
Центральним елементом інтерфейсу є dashboard-сторінка, яка
відображається після успішної авторизації користувача. Dashboard виконує
роль головної інформаційної панелі та забезпечує швидкий доступ до
статистики системи.
На dashboard-сторінці відображаються:
кількість активних замовлень;
кількість товарів на складі;
останні складські операції;
статистика продукції;
інформація про користувача;
останні дії у системі.
Для реалізації dashboard використовуються card-компоненти та
статистичні блоки, які дозволяють компактно відображати основну
інформацію [24].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 67
Рисунок 3.3 — Use Case-діаграма взаємодії користувачів із системою.
На use case-діаграмі відображено основні сценарії взаємодії користувачів
із системою. Діаграма демонструє доступні функції для адміністратора,
менеджера та працівника, а також дозволяє візуалізувати role-based структуру
застосунку.
Під час розробки інтерфейсу важливу роль відігравало розмежування
доступу до функціоналу системи. Користувачі з різними ролями бачать різні
елементи інтерфейсу та мають доступ лише до дозволених функцій [42].
Наприклад:
адміністратор має доступ до всіх модулів;
менеджер працює із замовленнями та продукцією;
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 68
працівник має доступ лише до обмежених сторінок.
Для реалізації умовного відображення елементів інтерфейсу
використовуються можливості шаблонізатора Jinja2.
Приклад перевірки ролі користувача наведено нижче.
{% if current_user.role == "admin" %}
<a href="/admin/users">Керування користувачами</a>
{% endif %}
Подібний підхід дозволяє приховувати службовий функціонал від
користувачів без відповідних прав доступу [20].
Для відображення інформації у системі активно використовуються
таблиці. Табличний формат є найбільш зручним для роботи з великим обсягом
даних, зокрема продукцією, замовленнями та складськими операціями [44].
У таблицях реалізовано:
пошук;
сортування;
pagination;
кольорові статуси;
кнопки швидких дій.
Pagination використовується для розподілу великих списків записів на
окремі сторінки. Це дозволяє зменшити навантаження на сервер та покращити
швидкість завантаження інтерфейсу [43].
Під час створення форм введення даних особлива увага приділялася
валідації інформації. Система перевіряє:
обов’язкові поля;
формат email;
числові значення;
довжину текстових полів;
коректність введених даних.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 69
У випадку помилки система відображає повідомлення користувачу без
втрати вже введеної інформації. Подібний підхід покращує взаємодію
користувача із системою та зменшує кількість помилок під час роботи [20].
Для відображення повідомлень використовуються flash-повідомлення
Flask, які дозволяють інформувати користувача про:
успішне створення запису;
помилки авторизації;
зміну статусу замовлення;
помилки валідації;
успішне виконання операцій.
Приклад використання flash-повідомлення наведено нижче.
flash("Замовлення успішно оновлено", "success")
Під час розробки dashboard-системи також використовувалася бібліотека
Chart.js [24], яка дозволяє відображати статистичну інформацію у вигляді
графіків та діаграм.
У системі можуть використовуватися:
стовпчикові графіки;
кругові діаграми;
лінійні графіки;
статистика замовлень;
інформація про складські залишки.
Використання графіків дозволяє зробити dashboard більш
інформативним та спрощує аналіз даних користувачем [24].
Для реалізації адаптивності інтерфейсу використовуються CSS Flexbox
та Grid Layout [22]. Це дозволяє коректно відображати сторінки на ноутбуках
та різних розмірах екранів.
Під час розробки інтерфейсу також враховувалися сучасні підходи до
UI/UX-дизайну:
мінімалістичний стиль;
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 70
контрастні елементи навігації;
єдина кольорова схема;
візуальне групування інформації;
використання іконок та статусів.
Подібний підхід дозволяє зробити інтерфейс більш зрозумілим та
зменшує навантаження на користувача під час роботи із системою [44].
Для підвищення зручності навігації у системі реалізовано breadcrumb-
навігацію та активне підсвічування поточного розділу sidebar-меню. Це
дозволяє користувачу краще орієнтуватися у структурі застосунку.
У процесі розробки також враховувалися питання продуктивності
frontend-частини. Для цього:
мінімізується кількість JavaScript-коду;
використовується server-side rendering;
зменшується кількість AJAX-запитів;
оптимізується структура HTML-шаблонів.
Подібний підхід дозволяє забезпечити швидке завантаження сторінок та
стабільну роботу застосунку навіть на менш продуктивних пристроях [22].
Під час тестування інтерфейсу особлива увага приділялася:
коректності відображення сторінок;
роботі навігації;
адаптивності;
відображенню таблиць;
роботі форм;
перевірці повідомлень про помилки.
Для демонстрації роботи інтерфейсу доцільно навести приклади
основних сторінок системи.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 71
Рисунок 3.4 — Головна dashboard-сторінка системи.
На рисунку відображено головну інформаційну панель застосунку, яка
містить статистику замовлень, складських операцій та продукції.
Рисунок 3.5 — Сторінка управління продукцією.
На сторінці відображається таблиця продукції, система пошуку та
кнопки керування товарами.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 72
Рисунок 3.6 — Сторінка управління замовленнями.
Даний інтерфейс використовується для створення, редагування та
контролю замовлень у системі.
Рисунок 3.7 — Інтерфейс складського обліку.
На рисунку представлено сторінку перегляду складських операцій та
контролю залишків продукції.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 73
Рисунок 3.8 — Сторінка управління працівниками.
Сторінка містить інформацію про працівників підприємства та
інструменти керування кадровими записами.
Під час розробки інтерфейсу також враховувалася можливість
подальшого розширення системи. Поточна структура шаблонів дозволяє легко
додавати нові сторінки, модулі та елементи інтерфейсу без суттєвої зміни
існуючої архітектури застосунку [20].
Висновки до розділу 3
У третьому розділі було виконано програмну реалізацію web-
орієнтованої інформаційної системи обліку даних виробничого підприємства.
У процесі розробки було обрано засоби та технології створення застосунку,
реалізовано основні функціональні модулі системи, а також створено
користувацький інтерфейс для роботи з даними підприємства.
Під час вибору технологій для реалізації системи було проведено аналіз
сучасних засобів backend- та frontend-розробки. У результаті аналізу для
серверної частини застосунку було обрано мову програмування Python та
framework Flask, які забезпечують достатній функціонал для створення web-
орієнтованої інформаційної системи без надмірного ускладнення архітектури
проєкту [20].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 74
Для реалізації клієнтської частини використовувалися HTML, CSS,
Vanilla JavaScript та шаблонізатор Jinja2. Подібний підхід дозволив спростити
структуру frontend-частини застосунку та забезпечити швидке формування
динамічних web-сторінок [21].
У процесі реалізації системи було розроблено механізм авторизації
користувачів та role-based доступу. Для цього використовувалася бібліотека
Flask-Login, яка забезпечує підтримку користувацьких сесій та обмеження
доступу до окремих функцій системи [20].
У межах системи були реалізовані ролі адміністратора, менеджера та
працівника. Для кожної категорії користувачів визначено окремий рівень
доступу до функціоналу застосунку. Подібний підхід дозволив забезпечити
базовий рівень безпеки та обмежити доступ до службових функцій системи
[42].
Під час реалізації модуля управління продукцією було створено
функціонал для виконання CRUD-операцій із товарами та категоріями
продукції. Система підтримує створення, редагування, пошук та видалення
товарів, а також контроль складських залишків [6].
Крім модуля продукції, було реалізовано модуль управління
працівниками, який забезпечує ведення кадрового обліку та зберігання
інформації про співробітників підприємства. У системі підтримується
створення та редагування записів працівників, а також прив’язка облікових
записів користувачів до співробітників підприємства.
У процесі розробки модуля замовлень та складського обліку було
реалізовано механізм створення замовлень, зміну статусів та автоматичне
оновлення складських залишків після виконання операцій. Також у системі
реалізовано збереження історії складських операцій та контроль руху
продукції [17].
Для забезпечення цілісності даних використовувалися можливості
SQLAlchemy ORM та транзакційний механізм роботи з базою даних. Подібний
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 75
підхід дозволив уникнути помилок під час оновлення замовлень та складських
залишків [23].
Окрему увагу було приділено розробці користувацького інтерфейсу
системи. У застосунку реалізовано dashboard-сторінку, sidebar-навігацію,
таблиці для роботи з даними, форми введення інформації та систему
повідомлень про помилки й успішні операції.
Для відображення статистичної інформації використовувалася
бібліотека Chart.js, яка дозволяє будувати графіки та діаграми на dashboard-
сторінці [24].
У процесі розробки також враховувалися питання адаптивності та
зручності використання інтерфейсу. Реалізована структура шаблонів дозволяє
швидко додавати нові сторінки та розширювати функціонал системи без
суттєвої зміни існуючої архітектури [20].
У результаті третього розділу було створено функціональну web-
орієнтовану інформаційну систему обліку даних виробничого підприємства,
яка забезпечує централізоване зберігання інформації, підтримку role-based
доступу, автоматизацію складського обліку та зручну взаємодію користувачів
із системою. Отримані результати підтверджують можливість використання
сучасних web-технологій для створення ефективних інформаційних систем
автоматизації діяльності підприємств.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 76
ВИСНОВКИ
У результаті виконання дипломної роботи було розроблено web-
орієнтовану інформаційну систему обліку даних виробничого підприємства,
яка забезпечує автоматизацію основних процесів роботи з інформацією,
централізоване зберігання даних та підтримку role-based доступу користувачів.
У першому розділі роботи було проведено аналіз предметної області та
досліджено особливості використання інформаційних систем на виробничих
підприємствах. У процесі аналізу було встановлено, що використання
паперової документації або окремих електронних таблиць ускладнює контроль
даних, підвищує ризик появи помилок та знижує ефективність роботи
працівників підприємства [2].
Також у межах першого розділу було виконано аналіз існуючих
інформаційних систем та ERP-рішень, серед яких SAP ERP, Microsoft
Dynamics 365, Oracle ERP Cloud та Odoo. Проведений аналіз показав, що
сучасні корпоративні системи мають широкий функціонал, однак часто є надто
складними та дорогими для невеликих підприємств або навчальних проєктів
[11].
У результаті аналізу предметної області було сформовано основні
вимоги до майбутньої системи та визначено ключові задачі, які повинна
вирішувати інформаційна система:
авторизація користувачів;
управління продукцією;
складський облік;
робота із замовленнями;
управління працівниками;
формування статистики та звітності.
У другому розділі було виконано проєктування інформаційної системи.
У процесі роботи було розроблено клієнт-серверну архітектуру застосунку,
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 77
спроєктовано структуру бази даних та реалізовано UML-діаграми, які
відображають взаємодію компонентів системи [8].
Під час дослідження систем керування базами даних було проведено
порівняння SQLite, MySQL, PostgreSQL, Microsoft SQL Server та Oracle
Database. У результаті аналізу було встановлено, що для реалізації web-
орієнтованої інформаційної системи невеликого або середнього масштабу
найбільш доцільним є використання SQLite [32].
У межах другого розділу також було реалізовано структуру бази даних
системи. Для цього використовувалися SQLAlchemy ORM та SQLite, що
дозволило створити централізовану структуру зберігання інформації та
забезпечити підтримку зв’язків між основними сутностями системи [23].
У третьому розділі було виконано програмну реалізацію інформаційної
системи та розроблено основні функціональні модулі застосунку. Для
реалізації серверної частини використовувалися Python та Flask, а frontend-
частина була створена за допомогою HTML, CSS, Vanilla JavaScript та Jinja2
[20].
У процесі реалізації системи було створено:
модуль авторизації користувачів;
систему role-based доступу;
модуль управління продукцією;
модуль управління працівниками;
модуль замовлень;
модуль складського обліку;
dashboard-систему;
систему статистики та повідомлень.
Для забезпечення безпеки застосунку було реалізовано механізм
авторизації користувачів, підтримку сесій та перевірку ролей користувачів.
Крім того, у системі використовується хешування паролів та обмеження
доступу до службових функцій застосунку [41].
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 78
Під час реалізації складського обліку було створено механізм
автоматичного оновлення залишків продукції після виконання замовлень та
складських операцій. Це дозволяє підтримувати актуальність інформації та
зменшує кількість ручних операцій у системі [17].
Окрему увагу було приділено розробці користувацького інтерфейсу. У
системі реалізовано dashboard-сторінку, sidebar-навігацію, таблиці для роботи
з даними та адаптивний інтерфейс для взаємодії користувачів із застосунком
[44].
У результаті виконання дипломної роботи було досягнуто поставленої
мети — створено функціональну web-орієнтовану інформаційну систему
обліку даних виробничого підприємства, яка забезпечує автоматизацію
основних бізнес-процесів та спрощує роботу користувачів із даними
підприємства.
Розроблена система може бути використана як основа для подальшого
розвитку та розширення функціоналу. У майбутньому можливе додавання:
системи аналітики;
журналу дій користувачів;
email-сповіщень;
REST API;
інтеграції з іншими сервісами;
розширеної системи звітності.
Отримані результати підтверджують доцільність використання сучасних
web-технологій для автоматизації діяльності виробничих підприємств та
демонструють можливість створення ефективних інформаційних систем із
використанням Flask, SQLite та сучасних frontend-технологій.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 79
СПИСОК ВИКОРИСАТНИХ ДЖЕРЕЛ
1. Kappel G., Grillenberger A., Retschitzegger W., Schwinger W. Web
Engineering: The Discipline of Systematic Development of Web Applications.
Hoboken : Wiley, 2016. 626 p.
2. Laudon K. C., Laudon J. P. Management Information Systems: Managing the
Digital Firm. 16th ed. Harlow : Pearson, 2020. 669 p.
3. Grinberg M. Flask Web Development: Developing Web Applications with
Python. 2nd ed. Sebastopol : O’Reilly Media, 2018. 316 p.
4. SQLite Documentation. URL: SQLite Documentation (дата звернення:
17.05.2026).
5. Alter S. Information Systems: Foundation of E-Business. 5th ed. Upper
Saddle River : Prentice Hall, 2017. 560 p.
6. Monk E., Wagner B. Concepts in Enterprise Resource Planning. 5th ed.
Boston : Cengage Learning, 2016. 254 p.
7. Stair R., Reynolds G. Principles of Information Systems. 13th ed. Boston :
Cengage Learning, 2018. 768 p.
8. Pressman R., Maxim B. Software Engineering: A Practitioner's Approach. 9th
ed. New York : McGraw-Hill, 2019. 880 p.
9. Flask Documentation. URL: Flask Documentation (дата звернення:
17.05.2026).
10.Nielsen J. Usability Engineering. Burlington : Morgan Kaufmann, 2012. 362
p.
11.SAP ERP. URL: SAP ERP Official Website (дата звернення: 17.05.2026).
12.Microsoft Dynamics 365. URL: Microsoft Dynamics 365 Official Website
(дата звернення: 17.05.2026).
13.Python Documentation. URL: Python Documentation (дата звернення:
17.05.2026).
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 80
14.PostgreSQL Documentation. URL: PostgreSQL Documentation (дата
звернення: 17.05.2026).
15.Oracle ERP Cloud. URL: Oracle ERP Cloud Official Website (дата
звернення: 17.05.2026).
16.Odoo Documentation. URL: Odoo Documentation (дата звернення:
17.05.2026).
17.Richards G. Warehouse Management: A Complete Guide to Improving
Efficiency and Minimizing Costs in the Modern Warehouse. 4th ed. London :
Kogan Page, 2021. 512 p.
18.Turban E., Pollard C., Wood G. Information Technology for Management:
Driving Digital Transformation to Increase Local and Global Performance,
Growth and Sustainability. 11th ed. Hoboken : Wiley, 2021. 560 p.
19.Baltzan P. Business Driven Information Systems. 8th ed. New York :
McGraw-Hill Education, 2021. 672 p.
20.Flask Documentation. URL: Flask Documentation (дата звернення:
17.05.2026).
21.Elmasri R., Navathe S. Fundamentals of Database Systems. 7th ed. Boston :
Pearson, 2017. 1272 p.
22.Mozilla Developer Network Web Docs. URL: MDN Web Docs (дата
звернення: 17.05.2026).
23.Fowler M. Patterns of Enterprise Application Architecture. Boston : Addison-
Wesley, 2002. 533 p.
24.Date C. J. An Introduction to Database Systems. 8th ed. Boston : Pearson,
2003. 1024 p.
25.Sommerville I. Software Engineering. 10th ed. Boston : Pearson, 2015. 816 p.
26.Silberschatz A., Korth H., Sudarshan S. Database System Concepts. 7th ed.
New York : McGraw-Hill, 2019. 1376 p.
27.Coronel C., Morris S. Database Systems: Design, Implementation, &
Management. 13th ed. Boston : Cengage Learning, 2018. 832 p. Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 81
28.MySQL Documentation. URL: MySQL Documentation (дата звернення:
17.05.2026).
29.Momjian B. PostgreSQL: Introduction and Concepts. 2nd ed. Boston :
Addison-Wesley, 2020. 288 p.
30.Microsoft SQL Server Documentation. URL: Microsoft SQL Server
Documentation (дата звернення: 17.05.2026).
31.Oracle Database Documentation. URL: Oracle Database Documentation
(дата звернення: 17.05.2026).
32.SQLite Documentation. URL: SQLite Documentation (дата звернення:
17.05.2026).
33.Flask-Migrate Documentation. URL: Flask-Migrate Documentation (дата
звернення: 17.05.2026).
34.Sebesta R. Concepts of Programming Languages. 12th ed. Boston : Pearson,
2022. 768 p.
35.Spring Documentation. URL: Spring Documentation (дата звернення:
17.05.2026).
36.ASP.NET Documentation. URL: ASP.NET Documentation (дата звернення:
17.05.2026).
37.Node.js Documentation. URL: Node.js Documentation (дата звернення:
17.05.2026).
38.React Documentation. URL: React Documentation (дата звернення:
17.05.2026).
39.Angular Documentation. URL: Angular Documentation (дата звернення:
17.05.2026).
40.Vue.js Documentation. URL: Vue.js Documentation (дата звернення:
17.05.2026).
41.Menezes A., van Oorschot P., Vanstone S. Handbook of Applied
Cryptography. Boca Raton : CRC Press, 2018. 816 p.
42.Stuttard D., Pinto M. The Web Application Hacker's Handbook. 2nd ed.
Indianapolis : Wiley Publishing, 2011. 912 p. Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 82
43.Freeman E., Robson E. Head First Design Patterns. 2nd ed. Sebastopol :
O’Reilly Media, 2020. 694 p.
44.Tidwell J., Brewer C., Valencia A. Designing Interfaces: Patterns for Effective
Interaction Design. 3rd ed. Sebastopol : O’Reilly Media, 2020. 576 p.
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 83
ДОДАТКИ
Додаток А. Лістинг програмного коду
from flask_login import LoginManager
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import CSRFProtect
db = SQLAlchemy()
login_manager = LoginManager()
csrf = CSRFProtect()
login_manager.login_view = "auth.login"
login_manager.login_message = "Будь ласка, увійдіть до системи."
login_manager.login_message_category = "warning"
from flask_wtf import FlaskForm
from wtforms import PasswordField, StringField, SubmitField
from wtforms.validators import DataRequired, Email, Length
class LoginForm(FlaskForm):
username = StringField("Логін", validators=[DataRequired(),
Length(max=80)])
password = PasswordField("Пароль", validators=[DataRequired(),
Length(min=4)])
submit = SubmitField("Увійти")
class ProfileForm(FlaskForm):
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 84
full_name = StringField("ПІБ", validators=[DataRequired(),
Length(max=180)])
email = StringField("Email", validators=[DataRequired(), Email(),
Length(max=120)])
submit = SubmitField("Зберегти зміни")
from flask_wtf import FlaskForm
from wtforms import DateField, EmailField, SelectField, StringField,
SubmitField, TextAreaField
from wtforms.validators import DataRequired, Length, Optional
from ..utils.constants import EMPLOYEE_STATUSES
class EmployeeForm(FlaskForm):
full_name = StringField("ПІБ", validators=[DataRequired(),
Length(max=180)])
position = StringField("Посада", validators=[DataRequired(),
Length(max=120)])
department = StringField("Відділ", validators=[DataRequired(),
Length(max=120)])
phone = StringField("Телефон", validators=[Optional(),
Length(max=40)])
email = EmailField("Email", validators=[Optional(), Length(max=120)])
hire_date = DateField("Дата найму", validators=[DataRequired()],
format="%Y-%m-%d")
status = SelectField("Статус", choices=EMPLOYEE_STATUSES,
validators=[DataRequired()])
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 85
submit = SubmitField("Зберегти")
from flask_wtf import FlaskForm
from wtforms import IntegerField, SelectField, SubmitField, TextAreaField,
StringField
from wtforms.validators import DataRequired, Length, NumberRange,
Optional
from ..utils.constants import ORDER_STATUSES
class OrderForm(FlaskForm):
order_number = StringField("Номер замовлення",
validators=[DataRequired(), Length(max=40)])
employee_id = SelectField("Співробітник", coerce=int,
validators=[DataRequired()])
product_id = SelectField("Продукція", coerce=int,
validators=[DataRequired()])
quantity = IntegerField("Кількість", validators=[DataRequired(),
NumberRange(min=1)])
status = SelectField("Статус", choices=ORDER_STATUSES,
validators=[DataRequired()])
notes = TextAreaField("Примітки", validators=[Optional(),
Length(max=1000)])
submit = SubmitField("Зберегти")
class OrderStatusForm(FlaskForm):
status = SelectField("Статус", choices=ORDER_STATUSES,
validators=[DataRequired()])
submit = SubmitField("Оновити статус")
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 86
from __future__ import annotations
from datetime import datetime
from ..extensions import db
class Category(db.Model):
__tablename__ = "categories"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), nullable=False, unique=True,
index=True)
description = db.Column(db.Text, nullable=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow,
nullable=False)
products = db.relationship("Product", back_populates="category",
cascade="all, delete-orphan")
from __future__ import annotations
from datetime import date, datetime
from ..extensions import db
class Employee(db.Model):
__tablename__ = "employees"
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 87
id = db.Column(db.Integer, primary_key=True)
full_name = db.Column(db.String(180), nullable=False, index=True)
position = db.Column(db.String(120), nullable=False)
department = db.Column(db.String(120), nullable=False)
phone = db.Column(db.String(40), nullable=True)
email = db.Column(db.String(120), nullable=True, index=True)
hire_date = db.Column(db.Date, default=date.today, nullable=False)
status = db.Column(db.String(40), default="Активний", nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey("users.id"), unique=True,
nullable=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow,
nullable=False)
user = db.relationship("User", back_populates="employee")
orders = db.relationship("Order", back_populates="employee",
cascade="all, delete-orphan")
operations = db.relationship("WarehouseOperation",
back_populates="employee")
from __future__ import annotations
from datetime import datetime
from ..extensions import db
class Order(db.Model):
__tablename__ = "orders"
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 88
id = db.Column(db.Integer, primary_key=True)
order_number = db.Column(db.String(40), unique=True, nullable=False,
index=True)
employee_id = db.Column(db.Integer, db.ForeignKey("employees.id"),
nullable=False)
product_id = db.Column(db.Integer, db.ForeignKey("products.id"),
nullable=False)
quantity = db.Column(db.Integer, nullable=False)
status = db.Column(db.String(40), default="Нове", nullable=False)
notes = db.Column(db.Text, nullable=True)
stock_deducted = db.Column(db.Boolean, default=False, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow,
nullable=False)
updated_at = db.Column(db.DateTime, default=datetime.utcnow,
onupdate=datetime.utcnow, nullable=False)
employee = db.relationship("Employee", back_populates="orders")
product = db.relationship("Product", back_populates="orders")
operations = db.relationship("WarehouseOperation",
back_populates="order")
from __future__ import annotations
from datetime import datetime
from ..extensions import db
class Product(db.Model):
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 89
__tablename__ = "products"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(180), nullable=False, index=True)
category_id = db.Column(db.Integer, db.ForeignKey("categories.id"),
nullable=False)
description = db.Column(db.Text, nullable=True)
cost_price = db.Column(db.Numeric(12, 2), nullable=False, default=0)
price = db.Column(db.Numeric(12, 2), nullable=False, default=0)
quantity = db.Column(db.Integer, nullable=False, default=0)
created_at = db.Column(db.DateTime, default=datetime.utcnow,
nullable=False)
updated_at = db.Column(db.DateTime, default=datetime.utcnow,
onupdate=datetime.utcnow, nullable=False)
category = db.relationship("Category", back_populates="products")
orders = db.relationship("Order", back_populates="product")
operations = db.relationship("WarehouseOperation",
back_populates="product")
from __future__ import annotations
from datetime import datetime
from flask_login import UserMixin
from ..extensions import db
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 90
class User(UserMixin, db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False,
index=True)
full_name = db.Column(db.String(180), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False,
index=True)
password_hash = db.Column(db.String(255), nullable=False)
role = db.Column(db.String(32), nullable=False, default="worker")
is_active = db.Column(db.Boolean, default=True, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow,
nullable=False)
employee = db.relationship("Employee", back_populates="user",
uselist=False)
def has_role(self, *roles: str) -> bool:
return self.role in roles
from __future__ import annotations
from datetime import datetime
from ..extensions import db
class WarehouseOperation(db.Model):
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 91
__tablename__ = "warehouse_operations"
id = db.Column(db.Integer, primary_key=True)
product_id = db.Column(db.Integer, db.ForeignKey("products.id"),
nullable=False)
order_id = db.Column(db.Integer, db.ForeignKey("orders.id"),
nullable=True)
employee_id = db.Column(db.Integer, db.ForeignKey("employees.id"),
nullable=True)
operation_type = db.Column(db.String(40), nullable=False)
quantity = db.Column(db.Integer, nullable=False)
comment = db.Column(db.Text, nullable=True)
resulting_quantity = db.Column(db.Integer, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow,
nullable=False)
product = db.relationship("Product", back_populates="operations")
order = db.relationship("Order", back_populates="operations")
employee = db.relationship("Employee", back_populates="operations")
from __future__ import annotations
from flask import Flask, render_template
from config import Config
from .extensions import csrf, db, login_manager
def create_app(config_object: type[Config] | None = None) -> Flask:
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 92
app = Flask(__name__, instance_relative_config=True)
app.config.from_object(config_object or Config)
from pathlib import Path
Path(app.instance_path).mkdir(parents=True, exist_ok=True)
db.init_app(app)
csrf.init_app(app)
login_manager.init_app(app)
from .routes.auth import auth_bp
from .routes.dashboard import dashboard_bp
from .routes.admin import admin_bp
from .routes.employees import employees_bp
from .routes.products import products_bp
from .routes.orders import orders_bp
from .routes.warehouse import warehouse_bp
from .routes.reports import reports_bp
app.register_blueprint(auth_bp)
app.register_blueprint(dashboard_bp)
app.register_blueprint(admin_bp)
app.register_blueprint(employees_bp, url_prefix="/employees")
app.register_blueprint(products_bp, url_prefix="/products")
app.register_blueprint(orders_bp, url_prefix="/orders")
app.register_blueprint(warehouse_bp, url_prefix="/warehouse")
app.register_blueprint(reports_bp, url_prefix="/reports")
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 93
@app.errorhandler(403)
def forbidden(_error):
return render_template("errors/403.html"), 403
@app.errorhandler(404)
def not_found(_error):
return render_template("errors/404.html"), 404
@app.errorhandler(500)
def server_error(_error):
return render_template("errors/500.html"), 500
@app.cli.command("init-db")
def init_db_command() -> None:
"""Create all database tables."""
from . import models # noqa: F401
db.create_all()
print("Базу даних створено.")
return app
Арк.
ЧДТУ 262282.005 ПЗ
Змн. Арк. № докум. Підпис Дата 94