Самая низкая цена в прайсе: почему закупка у двух поставщиков бывает дороже
На учебной корзине считаем товары и две доставки, находим границу по объёму и определяем, каких условий не хватает автоматическому выбору поставщика.

В этой статье
Интеграция собрала прайсы поставщиков и выделила самую низкую цену в каждой строке. Кажется, осталось автоматически отправить заказы. Но если товары уедут с двух складов вместо одного, экономия в строках может исчезнуть ещё до приёмки поставки. Для магазина полезнее сравнивать стоимость исполнимой закупки целиком.
Начать стоит с простого расчёта на одной корзине. Он покажет, какие условия нужно передавать в систему выбора поставщика и где автоматическое правило пока нельзя оставлять без проверки. Ниже — учебные цены, не предложения реальных компаний.
Две дешёвые строки дают дорогую корзину
Магазину нужны по одной единице товаров X и Y. У поставщика А товар X стоит 900 рублей, Y — 1 100 рублей. Доставка всей этой закупки на склад магазина стоит 200 рублей. Итого у А: 900 + 1 100 + 200 = 2 200 рублей.
У поставщика Б товар X стоит 850 рублей, Y — 1 200 рублей, а доставка — 250 рублей. Вся закупка у Б обойдётся в 850 + 1 200 + 250 = 2 300 рублей. Если выбрать только минимальные цены строк, X закажем у Б, а Y — у А. Сумма товаров уменьшится до 1 950 рублей, но две доставки добавят 450 рублей. Итог — 2 400 рублей, на 200 дороже закупки целиком у А.
В этой модели товары полностью сопоставимы, доступны в нужном количестве и приезжают в одинаковый допустимый срок. Налоги учтены одинаковым способом, прочие расходы равны. Стоимость каждой доставки фиксирована и не меняется от распределения этих двух товаров. В реальной задаче каждое такое допущение надо подтвердить, иначе сравниваются разные условия.

Объём может изменить решение
Теперь закупаем несколько одинаковых пар X и Y. Предположим, что указанные цены и фиксированная доставка сохраняются при любом рассматриваемом количестве пар. Тогда закупка у А стоит 2 000 рублей за каждую пару плюс 200 рублей доставки. Разделённая закупка — 1 950 рублей за пару плюс 450 рублей за две доставки.
Разделение экономит 50 рублей на каждой паре, но добавляет 250 рублей доставки. На пяти парах варианты равны: оба стоят 10 200 рублей. На шести парах закупка у А стоит 12 200 рублей, а разделённая — 12 150 рублей. Разница всего 50 рублей. Если обработка второго заказа требует дополнительных оплачиваемых действий, их тоже надо включить в сравнение.
Это граница только нашей модели. У поставщика может быть минимальная сумма заказа, кратность упаковки, порог бесплатной доставки или другой тариф для тяжёлого груза. Тогда стоимость меняется ступенями, а найденное число пять перестаёт быть правилом. Система должна считать по действующим условиям конкретной поставки, а не хранить однажды найденный порог как универсальный.

Сначала сопоставимость, затем минимум
Одинаковое название ещё не означает одинаковую закупочную единицу. Цена за штуку, упаковку из десяти штук и коробку с несколькими упаковками требует приведения к согласованной единице. Важны точный вариант товара, комплектность и допустимая замена. Дешёвая строка с неподходящим вариантом не участвует в выборе наравне с нужным товаром.
Проверьте дату цены и доступность количества. Остаток в прайсе может относиться к моменту формирования файла; магазин должен понимать, когда наличие подтверждается поставщиком. Если требуется резервирование, его результат является отдельным условием. Сам факт загрузки прайса не гарантирует исполнение закупки.
Срок тоже лучше задать как ограничение. Если товар нужен к определённой дате, поставка позже неё не становится подходящей только из-за низкой цены. Нельзя сравнивать срочную подтверждённую поставку с ожиданием поступления как два одинаковых способа выполнить заказ. Сначала исключают неприемлемые варианты, затем считают стоимость оставшихся.
Что поручить интеграции
До разработки запишите входные данные: нормализованные товары и единицы, требуемые количества, доступные склады, условия доставки и минимального заказа, актуальность цен и допустимые сроки. Для каждого поля должно быть понятно, из какого источника оно приходит и как обрабатывается отсутствие значения. Неизвестную доставку нельзя молча приравнять к нулю.
В ответе полезно показывать не только выбранного поставщика, но и состав суммы: товары, доставки, другие учтённые расходы. Рядом — ограничения и неизвестные условия, из-за которых решение требует подтверждения. Это позволяет менеджеру объяснить выбор и заметить устаревший тариф до отправки заказа.
Проверять правило удобно на заранее согласованных учебных корзинах: маленькой, более крупной, с недоступным товаром и с переходом через тарифный порог. Ожидаемый результат считают отдельно. Такой набор помогает принять реализацию, но не доказывает, что все будущие прайсы и ограничения обработаны правильно. В этой статье разобрана арифметика; работа конкретного модуля на стенде не проверялась.
Автоматизация выбора поставщика приносит понятный результат, когда оптимизирует исполнимую закупку с известными расходами. Если система умеет сравнивать пока только цены строк, это полезная подсказка менеджеру. Право самостоятельно размещать заказ стоит давать после того, как в расчёте появились условия, способные изменить итог.
The integration collected supplier price lists and identified the lowest price in each row. It seems we just need to automatically send orders. But if goods leave from two warehouses instead of one, the savings in individual rows may disappear even before acceptance testing. For a store, it is more useful to compare the total cost of the executable purchase.
Start with a simple calculation on a single cart. It will show what conditions need to be passed to the supplier selection system and where an automatic rule cannot be left unchecked. Below are test prices, not offers from real companies.
Two Cheap Rows Result in an Expensive Cart
The store needs one unit each of products X and Y. Supplier A sells product X for 900 rubles and Y for 1,100 rubles. Delivery of this entire purchase to the store warehouse costs 200 rubles. Total for A: 900 + 1,100 + 200 = 2,200 rubles.
Supplier B sells item X for 850 rubles, Y for 1,200 rubles, and shipping costs 250 rubles. The entire purchase from B totals 850 + 1,200 + 250 = 2,300 rubles. If we select only the lowest row prices, we order X from B and Y from A. The product total drops to 1,950 rubles, but two shipments add 450 rubles. The final cost is 2,400 rubles, which is 200 rubles more than buying everything from A.
In this model, products are fully comparable, available in the required quantities, and arrive within the same acceptable timeframe. Taxes are accounted for identically, and other costs are equal. The cost of each delivery is fixed and does not change based on the distribution of these two items. In a real-world scenario, each of these assumptions must be verified; otherwise, different conditions are being compared.

Volume can change the decision
Now we purchase multiple identical pairs of X and Y. Assume the stated prices and fixed shipping remain constant for any quantity of pairs considered. Then, purchasing from A costs 2,000 rubles per pair plus 200 rubles for delivery. A split purchase costs 1,950 rubles per pair plus 450 rubles for two shipments.
Splitting saves 50 rubles per pair but adds 250 rubles in shipping. For five pairs, the options are equal: both cost 10,200 rubles. For six pairs, purchasing from Supplier A costs 12,200 rubles, while the split option costs 12,150 rubles. The difference is only 50 rubles. If processing the second order requires additional billable actions, those must also be included in the comparison.
This threshold applies only to our model. The supplier may have a minimum order value, packaging multiples, a free shipping threshold, or a different rate for heavy cargo. In such cases, costs change in steps, and the number five ceases to be a rule. The system must calculate based on the actual conditions of the specific shipment, not store a previously found threshold as a universal constant.

First compatibility, then minimum
The same name does not mean the same procurement unit. The price per unit, a pack of ten, or a box containing multiple packs requires conversion to a consistent unit. The exact product variant, completeness, and acceptable substitutions matter. A cheap line item with an unsuitable variant does not participate in the selection on equal footing with the required product.
Check the price date and quantity availability. Stock levels in the price file may reflect the moment the file was generated; the store must understand when availability is confirmed by the supplier. If reservation is required, its result is a separate condition. The mere fact of loading the price file does not guarantee that a purchase will be executed.
The deadline should also be set as a constraint. If a product is needed by a specific date, a delivery arriving later is not suitable simply because the price is lower. You cannot compare an urgent confirmed delivery with waiting for stock arrival as two equivalent ways to fulfill an order. First, eliminate unacceptable options, then calculate the cost of the remaining ones.
What to entrust to the integration
Before development, record the input data: normalized products and units, required quantities, available warehouses, delivery conditions and minimum order requirements, price freshness, and acceptable deadlines. For each field, it must be clear where the data comes from and how missing values are handled. Unknown delivery options must not be silently equated to zero.
The response should show not only the selected supplier but also the cost breakdown: products, delivery fees, and other accounted expenses. Alongside, display constraints and unknown conditions that require the decision to be confirmed. This allows the manager to explain the choice and spot outdated tariffs before sending the order.
Testing the rule is convenient on pre-approved sample carts: a small one, a larger one, one with unavailable items, and one crossing the tariff threshold. The expected result is calculated separately. This set helps validate the implementation but does not prove that all future price lists and restrictions are processed correctly. This article covers the arithmetic; the specific module's behavior on the staging environment was not verified.
Automated supplier selection yields clear results when optimizing executable purchases with known costs. If the system can only compare line prices, it serves as a useful hint for the manager. The right to place orders independently should be granted only after the calculation includes conditions capable of changing the final outcome.





Обсуждение 0
Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.
Пока никто не написал. Начни обсуждение.