Настройка автоматического заказа товаров у поставщиков 1С-Битрикс
Автоматический заказ у поставщиков — это когда остаток товара падает ниже порога, система сама создаёт заявку поставщику без участия менеджера. Требуется: пороговые значения для каждого товара, привязка товаров к поставщикам, механизм создания и отправки заказа. Всё это строится поверх стандартных модулей Битрикс.
Настройка пороговых значений
Порог перезаказа задаётся для каждого товара. Два варианта хранения:
Вариант 1: пользовательские свойства инфоблока — REORDER_POINT (количество при котором заказывать) и REORDER_QTY (сколько заказывать). Задаются в карточке товара в административном разделе.
Вариант 2: отдельная таблица bl_reorder_settings с полями product_id, reorder_point, reorder_qty, supplier_id. Позволяет хранить несколько поставщиков на один товар с приоритетами.
Для автоматического расчёта пороговых значений используйте прогноз спроса из bl_sales_forecast: reorder_point = avg_daily_sales × lead_time_days × 1.2 (20% страховой запас).
Агент мониторинга остатков
function AutoReorderAgent(): string
{
$db = \Bitrix\Main\Application::getConnection();
// Товары ниже порога перезаказа
$result = $db->query("
SELECT
rs.product_id,
rs.reorder_qty,
rs.supplier_id,
SUM(sp.AMOUNT) AS current_stock
FROM bl_reorder_settings rs
LEFT JOIN b_catalog_store_product sp ON sp.PRODUCT_ID = rs.product_id
WHERE rs.active = 1
GROUP BY rs.product_id, rs.reorder_qty, rs.supplier_id
HAVING current_stock < rs.reorder_point
AND NOT EXISTS (
SELECT 1 FROM bl_supplier_orders so
WHERE so.product_id = rs.product_id
AND so.status IN ('pending', 'sent', 'confirmed')
)
");
while ($row = $result->fetch()) {
SupplierOrderService::create(
$row['supplier_id'],
$row['product_id'],
$row['reorder_qty']
);
}
return 'AutoReorderAgent();';
}
Условие NOT EXISTS предотвращает дублирование — не создаём новый заказ, если уже есть активный.
Отправка заказа поставщику
SupplierOrderService::create() создаёт запись в bl_supplier_orders и отправляет заявку способом, настроенным для данного поставщика:
-
Email: формирует PDF или Excel с позициями через
\PHPExcelили стандартные шаблоны Битрикс -
API: HTTP-запрос на эндпоинт поставщика через
\Bitrix\Main\Web\HttpClient - EDI: формирует ORDERS-сообщение в формате EDIFACT/XML и отправляет на FTP или по API
class SupplierOrderService
{
public static function create(int $supplierId, int $productId, float $qty): void
{
$orderId = SupplierOrderTable::add([
'SUPPLIER_ID' => $supplierId,
'PRODUCT_ID' => $productId,
'QTY' => $qty,
'STATUS' => 'pending',
'CREATED_AT' => new \Bitrix\Main\Type\DateTime(),
])->getId();
$supplier = SupplierTable::getById($supplierId)->fetch();
match($supplier['ORDER_METHOD']) {
'api' => self::sendViaApi($supplier, $orderId, $productId, $qty),
'email' => self::sendViaEmail($supplier, $orderId, $productId, $qty),
'edi' => self::sendViaEdi($supplier, $orderId, $productId, $qty),
};
SupplierOrderTable::update($orderId, ['STATUS' => 'sent']);
}
}
Приём подтверждения и прихода товара
Поставщик подтверждает заказ и указывает ожидаемую дату поставки. Если у поставщика есть API с вебхуками — обновляйте статус автоматически. Иначе — менеджер вручную обновляет статус в административном разделе.
При фактическом приходе товара менеджер создаёт документ поступления через «Склад → Документы → Поступление» в b_catalog_store_document. Это автоматически увеличивает остатки в b_catalog_store_product.
Что настраиваем
- Таблицы
bl_reorder_settingsиbl_supplier_ordersс нужными статусами - Агент
AutoReorderAgentс логикой сравнения остатков и пороговых значений - Класс
SupplierOrderServiceс адаптерами под email, API, EDI - Административный интерфейс просмотра активных заказов поставщикам
- Уведомления менеджеру о созданных автозаказах и просроченных подтверждениях







