Setting up a step-by-step order processing process in 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages

Configuring Step-by-Step Order Checkout in 1C-Bitrix

Step-by-step checkout in Bitrix is the operating mode of the bitrix:sale.order.ajax component with the parameter DELIVERY_MODE = SPLIT_DELIVERY. The buyer goes through several steps: buyer details → delivery method → payment method → confirmation. The most common problem clients come with: either the steps do not switch correctly on AJAX requests, or they need to add an extra step (such as delivery time selection) that the standard component does not have.

How the Step-by-Step Mode Works

The component is split into steps via the template. The template folder /bitrix/components/bitrix/sale.order.ajax/templates/.default/ contains order_ajax.php — the main template file — and a set of step_*.php files. Step switching is the JavaScript function orderAjax.gotoStep(), which sends the current step's data to the server and receives the markup for the next step.

When working with a custom template, it is important to preserve the structure of the JS variables the component expects: arOrderAjaxFields, arDeliveryList, arPaySystemList. If these objects are not correctly populated, AJAX step switching will break.

Configuring the Number and Order of Steps

The standard template supports 3 steps. To add a step (for example, "Select delivery time" or "Gift wrapping"):

  1. Create a copy of the template in /local/components/bitrix/sale.order.ajax/templates/
  2. Add a new file step_delivery_time.php with the step markup
  3. Add the step to the JavaScript steps array orderAjax.steps
  4. In the OnSaleComponentOrderMakeOrder handler, save the additional step data to order properties

Configuring Conditional Step Transitions

If certain delivery types (pickup) require skipping the address step — this is implemented via a JS step-change event:

BX.addCustomEvent('onSaleOrderAjaxStepChange', function(currentStep, nextStep) {
    if (currentStep === 'DELIVERY' && selectedDeliveryIsPickup()) {
        orderAjax.gotoStep('PAYMENT'); // skip the address step
        return false;
    }
});

On the server, address fields must correspondingly be made non-required for pickup — via a condition in the OnSalePropertyValueCheck handler.

Configuration Timeline

Configuring step-by-step checkout based on the standard component (template modification, step order, conditional logic) — 1–3 working days. Adding non-standard steps with data saved to order properties — 2–5 days.