Налаштування мультискладу OpenCart

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

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування мультискладу OpenCart
Середня
~2-3 робочих дні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування мультисклада OpenCart

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

Що таке мультисклад в OpenCart

Стандартна установка OpenCart зберігає остатки в єдиній таблиці oc_product (quantity + subtract). Для роботи з кількома складами потрібен модуль, що додає таблиці виду oc_location, oc_product_location, і логіку списання при замовленні.

Популярні рішення:

  • Journal3 Warehouse — вбудований у тему Journal3
  • Multi Warehouse Pro від Opencart.com — офіційне розширення
  • модуль XLDevelopment — гнучке налаштування пріоритетів складу
  • Кастомна розробка через Events + Model override

Архітектура рішення

Базова схема при кастомній реалізації:

CREATE TABLE oc_location (
  location_id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(128),
  address TEXT,
  status TINYINT(1)
);

CREATE TABLE oc_product_to_location (
  product_id INT,
  location_id INT,
  quantity INT DEFAULT 0,
  PRIMARY KEY (product_id, location_id)
);

При оформленні замовлення подія catalog/model/checkout/order/addOrder/after триггерит кастомний observer, який списує остатки з потрібного складу за правилом пріоритету (найближчий до покупця, перший непустий, конкретний склад для товару).

Налаштування через extension

Крок 1 — встановлення модуля

Завантаження через admin > Extensions > Installer. Модуль реєструє події через oc_event:

// install.php модуля
$this->model_setting_event->addEvent([
    'code'    => 'multi_warehouse',
    'trigger' => 'catalog/model/checkout/order/addOrder/after',
    'action'  => 'extension/multi_warehouse/model/warehouse/subtractStock',
    'status'  => 1,
    'sort_order' => 1
]);

Крок 2 — створення складів

У розділі Extensions > Multi Warehouse > Locations створюються склади з атрибутами: назва, адреса, пріоритет, прив'язка до зон доставки.

Крок 3 — розподіл товарів

У карточці товару з'являється вкладка «Склади». Для кожного складу указується доступне кількість. При включеному subtract система працює з агрегованим остатком.

Крок 4 — правила вибору складу

Стратегії списання:

  • FIFO по пріоритету — бере зі складу з найменшим priority
  • Найближчий до покупця — за mapping shipping zone
  • Специфічний для товару — жорстка прив'язка товару до складу
  • Змішаний — списує з кількох складів при дефіциті на одному (split fulfillment)

Інтеграція з поставщиками

Для дропшиппінгу або VMI остатки оновлюються по API:

// Обновлення остатків складу через кастомний API endpoint
// admin/controller/api/warehouse.php

public function updateStock(): void {
    $json = [];
    $location_id = (int)$this->request->post['location_id'];
    $updates = $this->request->post['products']; // [{product_id, quantity}]

    foreach ($updates as $item) {
        $this->model_extension_warehouse->setLocationStock(
            (int)$item['product_id'],
            $location_id,
            (int)$item['quantity']
        );
    }
    $json['success'] = count($updates) . ' товарів оновлено';
    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));
}

Поставщик робить POST /index.php?route=api/warehouse/updateStock з токеном у заголовку — остатки оновлюються без доступу в адмінку.

Відображення на фронтенді

За замовчуванням покупець видить сумарний остаток. Можна вивести доступність по складу:

{% if product.locations %}
  <ul class="warehouse-availability">
  {% for loc in product.locations %}
    <li>{{ loc.name }}:
      {% if loc.quantity > 0 %}в наявності ({{ loc.quantity }} шт.)
      {% else %}нема в наявності{% endif %}
    </li>
  {% endfor %}
  </ul>
{% endif %}

Актуально для B2B-магазинів, де покупець вибирає склад самовивозу.

Резервування та повернення

Важливий момент — резервування остатків при оплаті замовлення, а не при його створенні. Модуль повинен обробляти статуси:

Статус замовлення Дія з остатком
Pending Без змін або м'яке резервування
Processing Жорстке списання
Shipped Підтвердження відгрузки
Cancelled Повернення на склад
Refunded Повернення за правилом складу повернень

Для цього настраюються події на catalog/model/checkout/order/addOrderHistory/after.

Звітність

Корисні SQL-запити для контролю остатків:

-- Остатки по складам
SELECT l.name AS location, p.model, ptl.quantity
FROM oc_product_to_location ptl
JOIN oc_location l ON l.location_id = ptl.location_id
JOIN oc_product p ON p.product_id = ptl.product_id
WHERE ptl.quantity < 5
ORDER BY l.name, p.model;

-- Рух по складу за період
SELECT DATE(oh.date_added), SUM(op.quantity)
FROM oc_order_history oh
JOIN oc_order_product op ON op.order_id = oh.order_id
WHERE oh.order_status_id = 2 -- Processing
  AND oh.date_added BETWEEN '2025-01-01' AND '2025-01-31'
GROUP BY DATE(oh.date_added);

Терміни та трудозатрати

Налаштування готового модуля з 2–3 складами: 2–3 дні. Кастомна розробка з нуля (пріоритети, API поставщика, split fulfillment): 1–2 тижні. Інтеграція з зовнішньою WMS (1C, МойСклад) додає ще 3–5 днів на маппінг даних та тестування.