Catalog · How the catalog works
MonitorSystem
Тестове завдання: Система моніторингу цін конкурентів
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
🧾 Система моніторингу цін конкурентів
📌 Загальна інформація
Мета проєкту: Розробити настільну програму для моніторингу цін конкурентів з можливістю перегляду, редагування та збереження даних у базу Oracle.
Технології:
- Мова програмування: Delphi XE4 або вище
- База даних: Oracle 11g або вище
- Компоненти доступу: ODAC (DevArt)
- Інтерфейс: DevExpress VCL (TcxGrid, TcxDateEdit, TcxCheckedComboBox)
- Інформація в БД: Тестові данні з цінами конкурентів завантажені з 01.10.2025 по 18.10.2025
🖥 Інтерфейс користувача
Елементи керування:
- TcxCheckedComboBox — вибір конкурентів (множинний вибір, можливість "Усі").
- TcxDateEdit — вибір дати моніторингу.
- Кнопки дій:
Завантажити— завантаження цін з бази данихЗберегти— запис змін у базуСкасувати— відміна незбережених змін
Таблиця даних (TcxGrid):
- Стовпці товарів + динамічні стовпці конкурентів (формуються на основі вибору користувача).
- Ціни впорядковуються за назвами конкурентів.
- Режим редагування:
- Для поточних дат — дозволено редагування
- Для минулих дат — лише перегляд
🎨 Візуалізація змін цін
Програма автоматично порівнює ціну з попереднім моніторингом:
| Стан ціни | Колір комірки |
|---|---|
| Ціна зросла | Світло-червоний |
| Ціна знизилась | Світло-зелений |
| Без змін | Без підсвітки |
Використовується подія OnCustomDrawCell для налаштування стилів у TcxGrid.
⚙️ Функціональність
3.1 Завантаження даних
- При виборі дати моніторингу програма викликає процедуру
PRICE_MONITORING.get_prices, яка повертає таблицю цін за вибраних конкурентів. - Якщо дані для цієї дати відсутні, формується список усіх активних товарів із порожніми значеннями цін.
- Дані відображаються в TcxGrid, де для кожного конкурента динамічно створюються стовпці.
- Для кожного запису автоматично визначається, чи змінилася ціна відносно попередньої дати моніторингу.
3.2 Збереження даних
- Після внесення змін користувач натискає кнопку «Зберегти», що викликає процедуру
PRICE_MONITORING.save_prices. - Всі зміни перевіряються на:
- коректність числових значень (ціна > 0);
- відсутність дублікатів (
PRODUCT_ID + COMPETITOR_ID + MONITOR_DATE); - наявність обов’язкових полів.
- Оновлення та вставка виконуються в межах однієї транзакції через компонент
TOraTransaction, щоб уникнути часткового збереження.
3.3 Скасування змін
- Кнопка «Скасувати» відновлює дані до останнього збереженого стану.
- Для цього повторно виконується запит
get_pricesз поточною датою моніторингу. - Незбережені зміни у гріді очищуються, і користувач повертається до стабільної версії даних.
🗃 Структура бази даних
| Таблиця | Призначення | Основні поля |
|---|---|---|
| PRODUCTS | Список товарів | ID, NAME, STATUS |
| COMPETITORS | Список конкурентів | ID, NAME, STATUS |
| PRICES | Ціни товарів по конкурентам | PRODUCT_ID, COMPETITOR_ID, MONITOR_DATE, PRICE |
Поле STATUS NUMBER(1) використовується для позначення активності (1 – активний, 0 – неактивний).
📦 Пакет PRICE_MONITORING
get_prices(p_date, p_competitors)
Повертає вибірку цін для заданої дати і списку конкурентів.
save_prices(p_prices)
Зберігає або оновлює записи в таблиці PRICES.
get_prev_price(p_product_id, p_competitor_id, p_monitor_date)
Повертає попередню ціну конкурента по товару.
🧩 Транзакції
- Використовується коротка транзакція при збереженні.
- Всі операції виконуються під контролем
TOraTransaction(ODAC).
🧪 Розгортання
- Створити базу Oracle (версія 11g або вище).
- Створення користувача:
- Підключитися під користувачем
SYSTEM. - Виконати скрипт
create_user.sqlз папки «Створення БД».
- Підключитися під користувачем
- Завантаження об’єктів користувача:
- Увійти під створеним користувачем.
- Виконати імпорт таблиць з файлу
Tables.dmp(папка «Створення БД»). - Запустити файл
user_objects.sqlу тій самій папці.
- Налаштувати підключення:
- У файлі
dbconfig.iniпрописати параметри підключення (сервер, порт, SID, логін, пароль).
- У файлі
- Запустити програму і перевірити підключення.
📖 Додаткова інформація
MainForm.pas— головна форма з грідом і кнопкамиdbconfig.ini— налаштування для підключення до бази даних- Коментарі в коді
- Обробка виключень (
try..except) у критичних операціях
🧠 Автор
Volonin Artem Розробка: 2025 Delphi + Oracle + DevExpress + ODAC

