Payments are experiencing issues due to temporary restrictions in Russia. If your payment does not go through, please submit a support request.Our support team is available 24/7 — we are always here to help with hosting and server issues.We are now accepting requests for dedicated server rental and colocation services in our data center.Reminder: we recommend enabling backups for additional data protection.A new VPS/VDS lineup with NVMe storage and improved performance is now available.Maintenance work on some servers has been completed. All services are operating normally.
Article5 min readViews2

Discount Changed the Total and Broke Delivery: What Ozon Updates for 1C-Bitrix Teach Us

Recent fixes to the Ozon modules show how bonuses, rounding, and user switching can disrupt order transmission from 1C-Bitrix to delivery. We examine which scenarios a store must verify.

Comments 0

A package on a scale next to a label printer and an order processing system
In this article

On September 23, the update history for the 1C-Bitrix Marketplace added a fix for the Ozon delivery module: the plan_bound_missing error could occur after applying bonuses, discounts, or final rounding. The change description includes a critical detail: price is no longer used as an identifier for physical packaging; instead, the cost of each package is recalculated from the final prices of the already saved order without losing kopecks.

The next day, another Ozon integration module clarified the reason why an order cannot be delivered and changed how confirmed phone numbers are handled: the number is tied to a specific buyer and must be requested again after a user switch. This is not a single general error, nor is it an update to the 1C-Bitrix platform itself. However, these two adjacent changes clearly demonstrate how sensitive delivery has become to order data and the state of the user session.

Why a Discount Can Break Delivery

In a simple store, an item's cost appears as a single number. In a working online store, it has multiple states: base price, payer-type price, catalog discount, coupon, bonuses, rounding, cost allocation across bundles, and the final order total. The delivery service receives data after some of these transformations have already occurred.

The problem arises when an integration uses a monetary value not only as a sum but also as a technical flag. Before the discount, two entities match; after the discount, they no longer do. If the price served as an indirect identifier for a shipping unit, a change of a few rubles or even kopecks can break the link between products, packaging, and delivery calculations.

It is more reliable to treat the saved order as the source of truth. First, the store must fully apply discounts, bonuses, and rounding, then allocate the cost across packaging units, and only then send the data to an external service. Recalculation on the integration side must not create a new version of the order that differs from what the buyer and manager see.

What a store owner should check

A single order without a discount is insufficient for testing. The minimum set of scenarios must include a standard catalog discount, a promo code, bonus deduction, a combination of a discount with paid delivery, and an order with multiple packages. A separate case is needed where a fractional amount arises after distribution, requiring rounding to kopecks.

It is useful to compare four values: the cart total before checkout, the saved order total, the sum of goods transferred to delivery, and the total monetary value of shipping units in the delivery service response. They must align according to a pre-defined rule. If one system rounds each item while another rounds only the total, the discrepancy must be accounted for explicitly, not hidden by randomly adjusting the last item.

Repeated actions must also be tested. An order may be recalculated after a change in address, delivery method, cart composition, or buyer profile. The integration must either regenerate valid shipping units—packages for shipment—or display a clear reason for refusal. An old delivery request must not silently remain attached to the new version of the order.

The phone number and user session are part of the same chain.

Re-verifying a phone number after another user logs in prevents a critical class of errors. On a shared computer, at a manager's checkout, or after an account switch, the previous customer's number must not automatically become the contact for the new order.

For the store, this means testing not only form fields but also transitions between states: logging out of one account, logging into another, selecting a saved address, returning to the cart, and placing an order. Data confirmed in one session cannot be assumed valid for another user without verifying ownership.

How to update without new failures

Before installing a new module version, you need a backup of the database and files, but that is not enough. First, apply the update to a site copy and run test orders with real discount rules. The test must proceed to creating a shipment request with the carrier, not stop at the 'Order Placed' page.

After updating, review the integration log to ensure it can link the order, calculation attempt, generated packages, and the external service response. It is helpful to show the customer a clear message while saving the technical reason for the administrator. Never display an unprocessed API response in the public area: it may contain extraneous data or markup fragments.

The combination of discounts, bonuses, and delivery is tested as a single process. If each module is tested separately, the store might successfully calculate a discount and independently obtain a shipping rate, yet still lose the order during the transfer of final totals. Such integration points require more attention than the list of features in a solution card.

Discussion 0

Share your experience and ask questions. Comments without links appear after editorial review.

No comments yet. Start the discussion.