Розробка модуля управління складами 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка модуля управління складами 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

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

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

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

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розроблення модуля керування складами для 1С-Bitrix

У Bitrix вбудований облік складських залишків через модуль catalog: таблиці b_catalog_store (склади), b_catalog_store_product (залишки за складами та товарами). Для простих сайтів цього достатньо. Але коли з'являються кілька реальних складів з різною логікою резервування, пріоритетами відпускання, переміщенням між складами та інтеграцією з 1С — стандартний функціонал потребує суттєвого розширення.

Обмеження стандартного Bitrix

  • Немає поняття «зарезервовано» у розрізі замовлення — залишок або є, або немає
  • Немає логіки вибору складу для відпускання при оформленні замовлення
  • Немає обліку переміщень між складами з історією
  • Немає аналітики за оборотністю та дефіцитом

Розширення схеми даних

Модуль додає кілька таблиць поверх стандартних:

Таблиця b_catalog_store_reservation — резервування під замовлення:

Поле Тип Призначення
ID int auto_increment
STORE_ID int FK на b_catalog_store
PRODUCT_ID int ID торгового пропозиції
ORDER_ID int FK на b_sale_order
QUANTITY decimal(18,4) Кількість у резерві
RESERVED_AT datetime Коли зарезервовано
RELEASED_AT datetime Коли знято резерв (NULL якщо активний)

Таблиця b_catalog_store_movement — переміщення між складами:

Поле Тип Призначення
ID int auto_increment
FROM_STORE_ID int Склад-джерело
TO_STORE_ID int Склад-приймач
PRODUCT_ID int Товар
QUANTITY decimal(18,4) Кількість
STATUS enum DRAFT, IN_TRANSIT, COMPLETED, CANCELLED
CREATED_BY int ID користувача
COMPLETED_AT datetime Коли завершено

Резервування при оформленні замовлення

При створенні замовлення товари потребують резервування. Логіка підключається через обробник подіі OnSaleOrderSaved:

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderSaved',
    [ReservationService::class, 'onOrderSaved']
);

Метод onOrderSaved перевіряє, що статус замовлення передбачає резерв (наприклад, N — новий, P — оплачено). Для кожної позиції замовлення визначає склад-джерело та створює запис у b_catalog_store_reservation.

Вибір складу для відпускання

Стратегія вибору складу налаштовується в конфігурації модуля:

  • FIFO за датою приходу — спочатку відпускається більш старий товар
  • Найближчий склад — за геолокацією покупця (вимагає координат складів)
  • Пріоритет складу — поле SORT у b_catalog_store, менше = вищий пріоритет
  • Мінімальний залишок — спочатку спустошувати склади з найменшим запасом

Якщо на одному складі немає потрібної кількості, система автоматично розбиває відпускання по кількох складах.

Розрахунок доступного залишку

Доступний залишок = фізичний залишок мінус активні резерви:

public static function getAvailable(int $storeId, int $productId): float
{
    $physical = \Bitrix\Catalog\StoreProductTable::getList([
        'filter' => ['=STORE_ID' => $storeId, '=PRODUCT_ID' => $productId],
        'select' => ['AMOUNT'],
    ])->fetch()['AMOUNT'] ?? 0;

    $reserved = \Bitrix\Main\Application::getConnection()->query(
        "SELECT COALESCE(SUM(QUANTITY), 0) as RES
         FROM b_catalog_store_reservation
         WHERE STORE_ID = {$storeId}
           AND PRODUCT_ID = {$productId}
           AND RELEASED_AT IS NULL"
    )->fetch()['RES'] ?? 0;

    return max(0, (float)$physical - (float)$reserved);
}

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

Адміністративний інтерфейс

В адміністративній частині (/bitrix/admin/) додаються розділи:

  • Залишки за складами — матриця товар × склад з фізичним та доступним залишком, фільтрація за категорією та складом
  • Переміщення — створення документа переміщення, підтвердження приходу на склад-приймач
  • Резерви — список активних резервів з можливістю ручного зняття

Інтеграція з 1С

Якщо на проекті працює інтеграція з 1С через стандартний механізм (/bitrix/admin/1c_exchange.php), залишки з модуля синхронізуються через обробник подіі OnSuccessCatalogImport1C. Резерви при цьому не затираються — залишки з 1С інтерпретуються як фізичні, доступний залишок перераховується.

Терміни розроблення

Обсяг Склад Тривалість
Базовий Резервування при замовленні, доступний залишок, зняття резерву 6–8 днів
Стандартний + Переміщення між складами, стратегії відпускання, Admin-UI 12–16 днів
Розширений + Аналітика оборотності, інтеграція з 1С, мобільний інтерфейс для складу 20–28 днів