Реализация учета прихода, продажи и остатков товара на PHP

Реализация учета прихода, продажи и остатков товара на PHP

от автора

в

Создание системы учета прихода, продажи и остатков товара на PHP — задача, которая на первый взгляд может показаться сложной. Однако с правильным подходом и пониманием основных принципов её реализация становится вполне достижимой. В этой статье мы подробно рассмотрим, как шаг за шагом создать такую систему, охватив ключевые аспекты, технические детали и практические примеры.

Шаг 1: Создание базы данных

Первый шаг — разработка структуры базы данных. Мы будем использовать MySQL, так как это один из самых популярных и удобных вариантов для веб-приложений.

Таблица товаров

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    price DECIMAL(10, 2) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Таблица приходов

CREATE TABLE stock_in (
    id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (product_id) REFERENCES products(id)
);

Таблица продаж

CREATE TABLE sales (
    id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (product_id) REFERENCES products(id)
);

Таблица остатков

CREATE TABLE stock (
    product_id INT PRIMARY KEY,
    quantity INT NOT NULL,
    FOREIGN KEY (product_id) REFERENCES products(id)
);

Эти таблицы покрывают все основные аспекты нашей системы: товары, приходы, продажи и остатки.

Шаг 2: Реализация пользовательского интерфейса

Переходим к созданию пользовательского интерфейса. Для простоты будем использовать HTML и CSS, а также небольшие фрагменты JavaScript для улчушения взаимодействия.

Страница добавления товара

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Добавить товар</title>
</head>
<body>
    <h1>Добавить новый товар</h1>
    <form action="add_product.php" method="post">
        <label for="name">Название товара:</label>
        <input type="text" id="name" name="name" required>
        <br>
        <label for="description">Описание:</label>
        <textarea id="description" name="description"></textarea>
        <br>
        <label for="price">Цена:</label>
        <input type="number" step="0.01" id="price" name="price" required>
        <br>
        <input type="submit" value="Добавить">
    </form>
</body>
</html>

Обработка формы добавления товара

<?php
// add_product.php
require 'db_connection.php';

$name = $_POST['name'];
$description = $_POST['description'];
$price = $_POST['price'];

$sql = "INSERT INTO products (name, description, price) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssd", $name, $description, $price);

if ($stmt->execute()) {
    echo "Товар успешно добавлен!";
} else {
    echo "Ошибка: " . $stmt->error;
}

$conn->close();
?>

Шаг 3: Учет приходов и продаж

Для учета приходов и продаж нам потребуются аналогичные формы и обработчики.

Страница учета прихода

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Учет прихода</title>
</head>
<body>
    <h1>Учет прихода товара</h1>
    <form action="stock_in.php" method="post">
        <label for="product_id">Товар:</label>
        <select id="product_id" name="product_id">
            <?php
            require 'db_connection.php';
            $result = $conn->query("SELECT id, name FROM products");
            while ($row = $result->fetch_assoc()) {
                echo "<option value='{$row['id']}'>{$row['name']}</option>";
            }
            ?>
        </select>
        <br>
        <label for="quantity">Количество:</label>
        <input type="number" id="quantity" name="quantity" required>
        <br>
        <input type="submit" value="Добавить">
    </form>
</body>
</html>

Обработка формы прихода

<?php
// stock_in.php
require 'db_connection.php';

$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];

$sql = "INSERT INTO stock_in (product_id, quantity) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $product_id, $quantity);

if ($stmt->execute()) {
    // Обновляем таблицу остатков
    $update_sql = "INSERT INTO stock (product_id, quantity) VALUES (?, ?)
                   ON DUPLICATE KEY UPDATE quantity = quantity + ?";
    $update_stmt = $conn->prepare($update_sql);
    $update_stmt->bind_param("iii", $product_id, $quantity, $quantity);
    $update_stmt->execute();

    echo "Приход успешно учтен!";
} else {
    echo "Ошибка: " . $stmt->error;
}

$conn->close();
?>

Страница учета продаж

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Учет продаж</title>
</head>
<body>
    <h1>Учет продаж товара</h1>
    <form action="sales.php" method="post">
        <label for="product_id">Товар:</label>
        <select id="product_id" name="product_id">
            <?php
            require 'db_connection.php';
            $result = $conn->query("SELECT id, name FROM products");
            while ($row = $result->fetch_assoc()) {
                echo "<option value='{$row['id']}'>{$row['name']}</option>";
            }
            ?>
        </select>
        <br>
        <label for="quantity">Количество:</label>
        <input type="number" id="quantity" name="quantity" required>
        <br>
        <input type="submit" value="Продать">
    </form>
</body>
</html>

Обработка формы продажи

<?php
// sales.php
require 'db_connection.php';

$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];

// Проверяем наличие товара на складе
$check_sql = "SELECT quantity FROM stock WHERE product_id = ?";
$check_stmt = $conn->prepare($check_sql);
$check_stmt->bind_param("i", $product_id);
$check_stmt->execute();
$check_stmt->bind_result($current_quantity);
$check_stmt->fetch();
$check_stmt->close();

if ($current_quantity >= $quantity) {
    $sql = "INSERT INTO sales (product_id, quantity) VALUES (?, ?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ii", $product_id, $quantity);

    if ($stmt->execute()) {
        // Обновляем таблицу остатков
        $update_sql = "UPDATE stock SET quantity = quantity - ? WHERE product_id = ?";
        $update_stmt = $conn->prepare($update_sql);
        $update_stmt->bind_param("ii", $quantity, $product_id);
        $update_stmt->execute();

        echo "Продажа успешно учтена!";
    } else {
        echo "Ошибка: " . $stmt->error;
    }
} else {
    echo "Ошибка: Недостаточно товара на складе.";
}

$conn->close();
?>

Шаг 4: Вывод остатков

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

Страница остатков

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Текущие остатки</title>
</head>
<body>
    <h1>Текущие остатки товаров</h1>
    <table border="1">
        <tr>
            <th>Товар</th>
            <th>Количество</th>
        </tr>
        <?php
        require 'db_connection.php';
        $result = $conn->query("SELECT p.name, s.quantity FROM stock s JOIN products p ON s.product_id = p.id");
        while ($row = $result->fetch_assoc()) {
            echo "<tr><td>{$row['name']}</td><td>{$row['quantity']}</td></tr>";
        }
        ?>
    </table>
</body>
</html>

Автор статьи:

Обновлено:

30.05.2024


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *