Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

MonitorSystem

Тестове завдання: Система моніторингу цін конкурентів

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate 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).

🧪 Розгортання

  1. Створити базу Oracle (версія 11g або вище).
  2. Створення користувача:
    • Підключитися під користувачем SYSTEM.
    • Виконати скрипт create_user.sql з папки «Створення БД».
  3. Завантаження об’єктів користувача:
    • Увійти під створеним користувачем.
    • Виконати імпорт таблиць з файлу Tables.dmp (папка «Створення БД»).
    • Запустити файл user_objects.sql у тій самій папці.
  4. Налаштувати підключення:
    • У файлі dbconfig.ini прописати параметри підключення (сервер, порт, SID, логін, пароль).
  5. Запустити програму і перевірити підключення.

📖 Додаткова інформація

  • MainForm.pas — головна форма з грідом і кнопками
  • dbconfig.ini — налаштування для підключення до бази даних
  • Коментарі в коді
  • Обробка виключень (try..except) у критичних операціях

🧠 Автор

Volonin Artem Розробка: 2025 Delphi + Oracle + DevExpress + ODAC