Налаштування дропшипінгу на 1С-Бітрікс
Магазин приймає замовлення, постачальник відвантажує напряму покупцю — логіка проста, реалізація ні. Стандартний модуль торгівлі 1С-Бітрікс не має вбудованої підтримки дропшипінгу: немає маршрутизації замовлень за постачальниками, немає синхронізації залишків у реальному часі, немає розподілу виплат. Усе це збирається з модулів і кастомного коду.
Архітектурна схема
Мінімальна дропшипінг-система на 1С-Бітрікс тримається на трьох елементах:
- Прив'язка товару → постачальник через властивість інфоблоку або HL-блок
- Маршрутизація замовлень — при створенні замовлення визначаємо, яким постачальникам передавати позиції
- Синхронізація залишків — постачальник передає актуальні дані через API або файл
Прив'язка товарів до постачальників
Два підходи. Перший — властивість SUPPLIER_ID в інфоблоку каталогу (тип «Прив'язка до елемента» або «Список»). Швидко, але незручно масштабувати.
Другий — HL-блок SupplierProduct:
| Поле | Тип | Опис |
|---|---|---|
UF_PRODUCT_ID |
integer | ID товару в b_iblock_element |
UF_SUPPLIER_ID |
integer | ID постачальника (b_user) |
UF_SUPPLIER_SKU |
string | Артикул товару у постачальника |
UF_SUPPLIER_PRICE |
float | Закупівельна ціна |
UF_STORE_ID |
integer | Склад постачальника (b_catalog_store) |
HL-блок зручніший: підтримує кількох постачальників для одного товару, зберігає закупівельні ціни окремо від роздрібних.
Обробник подій створення замовлення
При створенні замовлення обробник події OnSaleOrderSaved розбиває позиції за постачальниками та надсилає повідомлення:
// /local/php_interface/init.php
AddEventHandler('sale', 'OnSaleOrderSaved', ['\\Local\\Dropshipping\\OrderRouter', 'route']);
// /local/lib/Dropshipping/OrderRouter.php
namespace Local\Dropshipping;
use Bitrix\Main\Application;
class OrderRouter
{
public static function route(\Bitrix\Sale\Order $order): void
{
$supplierItems = [];
foreach ($order->getBasket() as $item) {
$productId = (int)$item->getProductId();
$supplierId = self::getSupplierByProduct($productId);
if ($supplierId) {
$supplierItems[$supplierId][] = [
'product_id' => $productId,
'name' => $item->getField('NAME'),
'quantity' => $item->getQuantity(),
'price' => $item->getPrice(),
'sku' => self::getSupplierSku($productId, $supplierId),
];
}
}
foreach ($supplierItems as $supplierId => $items) {
self::notifySupplier($order, $supplierId, $items);
}
}
private static function notifySupplier(\Bitrix\Sale\Order $order, int $supplierId, array $items): void
{
// Email-повідомлення або POST на вебхук постачальника
$supplier = self::getSupplierData($supplierId);
if (!empty($supplier['WEBHOOK_URL'])) {
self::sendWebhook($supplier['WEBHOOK_URL'], $order, $items);
} else {
self::sendEmail($supplier['EMAIL'], $order, $items);
}
}
}
Складський облік за постачальниками
Кожен постачальник отримує окремий склад у b_catalog_store. Залишки зберігаються в b_catalog_store_product. Це дозволяє бачити не лише загальний залишок, а й залишок конкретного постачальника.
// Створення складу для нового постачальника
$storeId = \CCatalogStore::Add([
'TITLE' => 'Склад постачальника ' . $supplierId,
'ACTIVE' => 'Y',
'XML_ID' => 'supplier_' . $supplierId,
'SORT' => 100,
]);
Терміни реалізації
| Конфігурація | Склад | Термін |
|---|---|---|
| Базова (1 постачальник, email-повідомлення) | HL-блок + обробник + шаблон листа | 3–5 днів |
| Стандартна (кілька постачальників, вебхуки) | + особистий кабінет постачальника + API | 2–3 тижні |
| Повна (синхронізація в реальному часі, аналітика) | + фід залишків + звіти + розподіл виплат | 1–2 місяці |







