Мультипоставщиковая логика заказов в 1С-Битрикс

Представьте: интернет-магазин продаёт товары от 10 поставщиков. Приходит заказ с 5 позициями от 3 разных поставщиков. Без автоматизации менеджер вручную копирует строки заказа в Excel, формирует три письма и отправляет. На это уходит 15–20 минут на заказ. При 50 заказах в день — более 10 часов чисто
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Мультипоставщиковая логика заказов в 1С-Битрикс
Простой
~1 день

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • 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 Appointment Booking Widget for a Medical Center
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    805
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1163

Представьте: интернет-магазин продаёт товары от 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_STATUSnew / 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 проектов с мультипоставщиковой логикой. Свяжитесь с нами — поможем автоматизировать дропшиппинг.