Представьте: интернет-магазин продаёт товары от 10 поставщиков. Приходит заказ с 5 позициями от 3 разных поставщиков. Без автоматизации менеджер вручную копирует строки заказа в Excel, формирует три письма и отправляет. На это уходит 15–20 минут на заказ. При 50 заказах в день — более 10 часов чистой рутины. Ошибки неизбежны: перепутанный адрес, неверный артикул, лишний товар.
Мы автоматизируем этот процесс под ключ. Настраиваем обработчики событий, HL-блоки и агенты, чтобы каждый поставщик получал только свои товары, а статусы отслеживались в реальном времени. Сертифицированные специалисты с 10-летним опытом реализовали более 50 проектов с мультипоставщиковой логикой.
Почему стандартные отгрузки Битрикс не подходят для дропшиппинга?
Стандартная модель заказов Битрикс предполагает, что весь заказ обрабатывается одним магазином. При дропшиппинге товары физически находятся у разных поставщиков, и каждый должен получить уведомление только о своих позициях. Если использовать один заказ с одной отгрузкой, поставщик увидит все товары, в том числе чужие, что нарушает логистику и конфиденциальность.
Как разбить заказ по поставщикам?
Существует три подхода к разбивке. Первый — единый заказ с отдельными уведомлениями: заказ остаётся целым, обработчик OnSaleOrderSaved отправляет каждому поставщику письмо только с его товарами. Это просто, но нет раздельного отслеживания статусов отгрузки. Второй — единый заказ с несколькими отгрузками: для каждого поставщика создаётся объект Shipment. Это нативный механизм Битрикс, дающий полный контроль над отгрузками и раздельные статусы. Третий — разбивка на дочерние заказы: родительский заказ и несколько дочерних по числу поставщиков. Это даёт полную независимость статусов, но сложнее в реализации и поддержке.
Для большинства проектов мы рекомендуем второй вариант: решение с несколькими отгрузками в 2 раза быстрее в разработке, чем с дочерними заказами, и обеспечивает ровный баланс функциональности и затрат. Ниже — сводка подходов:
| Вариант | Описание | Характеристика |
|---|---|---|
| Единый заказ + уведомления | Заказ остаётся единым, письма с фильтрацией по поставщику | Просто, нет раздельного статуса отгрузки |
| Единый заказ + несколько отгрузок | Создаётся Shipment для каждого поставщика | Полный контроль, раздельные статусы |
| Дочерние заказы | Родительский заказ + дочерние для поставщиков | Полная независимость, сложнее поддерживать |
Как мы реализуем мультипоставщиковую логику?
При сохранении заказа определяем поставщиков и создаём отгрузки. Функция getSupplierByProductId() читает свойство SUPPLIER_ID из b_iblock_element_property.
AddEventHandler('sale', 'OnSaleOrderSaved', function(\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $isNew = $event->getParameter('IS_NEW'); if (!$isNew) return; $basket = $order->getBasket(); $supplierItems = []; foreach ($basket->getOrderableItems() as $item) { $supplierId = getSupplierByProductId($item->getProductId()); if ($supplierId) { $supplierItems[$supplierId][] = $item; } } $shipmentCollection = $order->getShipmentCollection(); foreach ($supplierItems as $supplierId => $items) { $shipment = $shipmentCollection->createItem(); $shipment->setField('DELIVERY_ID', getSupplierDeliveryId($supplierId)); $shipment->setField('CUSTOM_PRICE_DELIVERY', 'N'); $shipmentItemCollection = $shipment->getShipmentItemCollection(); foreach ($items as $basketItem) { $shipmentItem = $shipmentItemCollection->createItem($basketItem); $shipmentItem->setQuantity($basketItem->getQuantity()); } } $order->save(); }); Подробнее о событии OnSaleOrderSaved — в документации.
Уведомления поставщикам
Каждый поставщик получает письмо или сообщение только со своими товарами. Отправка через \Bitrix\Main\Mail\Event::send() с кастомным шаблоном:
foreach ($supplierItems as $supplierId => $items) { $supplierEmail = getUserEmail($supplierId); \Bitrix\Main\Mail\Event::send([ 'EVENT_NAME' => 'SUPPLIER_ORDER_NOTIFY', 'LID' => SITE_ID, 'C_FIELDS' => [ 'SUPPLIER_EMAIL' => $supplierEmail, 'ORDER_ID' => $order->getId(), 'ORDER_ITEMS' => formatItemsForEmail($items), 'BUYER_ADDRESS' => getOrderDeliveryAddress($order), ], ]); } Шаблон SUPPLIER_ORDER_NOTIFY создаётся в «Почтовые события» административной части. Передача данных через REST API поставщика ускоряет обработку в 3 раза по сравнению с email — особенно при 50+ заказах в день.
Отслеживание статусов по поставщикам
HL-блок SupplierOrderStatus фиксирует статус каждой части заказа:
-
UF_ORDER_ID— ID заказа Битрикс -
UF_SUPPLIER_ID— поставщик -
UF_STATUS—new/confirmed/shipped -
UF_TRACKING_NUMBER— трек-номер
Агент проверяет, все ли поставщики установили shipped, и меняет статус основного заказа:
function checkAllSuppliersShippedAgent(): string { $connection = \Bitrix\Main\Application::getConnection(); $orders = $connection->query(" SELECT UF_ORDER_ID FROM b_hl_supplier_order_status GROUP BY UF_ORDER_ID HAVING COUNT(*) = SUM(CASE WHEN UF_STATUS = 'shipped' THEN 1 ELSE 0 END) AND UF_ORDER_ID IN ( SELECT ID FROM b_sale_order WHERE STATUS_ID NOT IN ('F','C') ) "); while ($row = $orders->fetch()) { $order = \Bitrix\Sale\Order::load($row['UF_ORDER_ID']); if ($order) { $order->setField('STATUS_ID', 'S'); $order->save(); } } return __FUNCTION__ . '();'; } Что входит в нашу работу?
- Анализ текущей структуры каталога и бизнес-процессов
- Проектирование архитектуры разбивки (выбор подхода, проектирование HL-блоков, обработчиков, агентов)
- Реализация кода: обработчики событий, агенты, почтовые шаблоны, интеграции с REST API поставщиков
- Настройка уведомлений и отслеживания статусов через HL-блок
- Тестирование на реальных заказах, исправление ошибок, оптимизация производительности
- Документация по поддержке и эксплуатации решения
- Гарантия бесперебойной работы после деплоя
Процесс работы: этапы и результаты
| Этап | Что делаем | Результат |
|---|---|---|
| Аналитика | Изучаем структуру каталога, товары, поставщиков, бизнес-процесс | Техническое задание с выбором варианта разбивки |
| Проектирование | Проектируем обработчики, HL-блок, агенты, почтовые шаблоны | Архитектура решения |
| Реализация | Пишем код, настраиваем отгрузки, уведомления, агент | Готовое решение на тестовом стенде |
| Тестирование | Проверяем на реальных заказах, исправляем ошибки | Стабильная работа |
| Деплой | Переносим на боевой сайт, настраиваем агент | Работающее решение |
Сроки и как мы работаем
Настройка занимает от 2 до 5 дней в зависимости от сложности. Мы работаем по прозрачному процессу: аналитика → проектирование → реализация → тестирование → деплой. Гарантируем бесперебойную работу решения. Получите консультацию — оценим ваш проект бесплатно и предложим оптимальный подход.
Наш опыт в разработке на Битрикс — более 10 лет, реализовали более 50 проектов с мультипоставщиковой логикой. Свяжитесь с нами — поможем автоматизировать дропшиппинг.







