When a Bitrix project already has a standard order component, but you need to add a step for selecting delivery time or a conditional jump for self-pickup — the standard logic breaks?
Clients lose conversions, and developers go into weeks of fixes. We are a team with 10+ years of experience developing on Bitrix and over 50 successful projects — we configure stepwise order checkout from scratch or modify the existing one. We configure the number of steps, order, AJAX switching, and additional fields. Evaluate your project in 1 day — just write to us. According to statistics, a properly configured stepwise checkout increases conversion by 1.3 times compared to a single-page form, by reducing cognitive load on the user. We solve tasks of any complexity: from adding one field to complex logic with conditional transitions, integration with 1C, and fiscalization.
How stepwise mode works
The component bitrix:sale.order.ajax with parameter DELIVERY_MODE = SPLIT_DELIVERY splits the checkout into steps. In the .default template folder, there are order_ajax.php and files step_*.php. Switching between steps is done by the JavaScript function orderAjax.gotoStep(). It sends the current step's data to the server and receives the next step's markup. It is important to preserve the structure of JS variables: arOrderAjaxFields, arDeliveryList, arPaySystemList. If these objects are not filled correctly — AJAX switching will break.
How to add a new step to the stepwise checkout?
The default template supports 3 steps. To add a new one (e.g., "Delivery time selection" or "Gift wrapping"), follow this algorithm:
- Create a copy of the template in
/local/components/bitrix/sale.order.ajax/templates/. - Add a file
step_delivery_time.phpwith the step markup. - Register the step in the JavaScript array
orderAjax.steps. - In the handler
OnSaleComponentOrderMakeOrder, save the additional step data in order properties.
Example JS code for registering a step
BX.message({STEP_DELIVERY_TIME: 'Select delivery time'}); orderAjax.steps.push('STEP_DELIVERY_TIME'); On the server, in the method initStep, we check if the step is present in the data.
Reasons for breaking the standard component with custom steps
The main reason is incompatibility with the expected data structure. Each step must return JSON with fields HTML, TITLE, DATA. If the format is broken, orderAjax does not update the step. The second reason is lack of handling new fields in the checkValid function. We always add validation for each custom field. According to official Bitrix documentation, copying the template to /local is the first step to preserve changes during core updates.
Configuring conditional step transitions
If self-pickup requires skipping the address step, this is implemented via a JS event:
BX.addCustomEvent('onSaleOrderAjaxStepChange', function(currentStep, nextStep) { if (currentStep === 'DELIVERY' && selectedDeliveryIsPickup()) { orderAjax.gotoStep('PAYMENT'); return false; } }); On the server, we remove the mandatory requirement for address fields for self-pickup — via a condition in OnSalePropertyValueCheck.
How to speed up AJAX switching between steps?
AJAX switching is already asynchronous, but speed can be increased by tagged caching for delivery and payment lists. Use Bitrix\Main\Data\Cache with tags sale_delivery and sale_pay_system. Also disable unnecessary GetList calls in the epilogue. With proper configuration, a step switches in 200–400 ms — 3 times faster than a full page reload.
Comparison: stepwise vs single-page checkout
| Parameter | Stepwise checkout | Single-page checkout |
|---|---|---|
| Conversion (average) | 68–72% | 55–60% |
| Fields on screen | up to 7 | up to 20 |
| Support for complex logic | conditional transitions, custom steps | only basic fields |
| Customization development time | 2–5 days | 1–2 days |
| Risk of errors with 1C integration | moderate (testing required) | low |
What is included in the work
- Documentation: technical specification with step descriptions, state diagram, operation manual.
- Access: configuring component access rights, roles for operators.
- Training: a session for administrators on managing custom steps.
- Support: 1-year warranty service, consultations on modifications.
Stages of work
| Stage | What we do | Result |
|---|---|---|
| Analytics | Audit of current checkout scheme, check integrations (1C, payment systems) | Technical specification with step descriptions |
| Design | Design step structure, conditional transition logic | State diagram |
| Implementation | Write custom template, add steps, configure AJAX | Working component in /local |
| Testing | Test on all scenarios (self-pickup, courier, card/cash payment) | Test checklist |
| Deployment | Upload to production server, tagged caching, documentation | Operation manual |
Timeline and guarantees
Configuration based on the standard component — 1–3 working days. Adding non-standard steps — 2–5 days. The cost is determined after analysis of your project and fixed in the contract. Our clients save up to 40% of time on modifications compared to DIY customization. All work comes with a 1-year warranty. The team is a certified 1C-Bitrix partner with over 10 years of experience and more than 50 implemented online stores. We use only licensed software.
Typical technical mistakes when customizing
- Template not copied to
/local— changes will be lost during core update. - New step not added to
orderAjax.steps— "Next" button does not appear. - Event
onSaleOrderAjaxStepChangenot handled for conditional transition — user gets stuck on a step. - Fiscalization (Federal Law 54-FZ) not considered when changing steps — receipts do not pass. We configure data transfer to ATOL Online or similar.
Before starting work, we check compliance with requirements from Wikipedia: 1C-Bitrix and AJAX.
Contact us — we will evaluate your project in 1 day. Get a consultation and a roadmap. Write to us — we will configure stepwise order checkout for your tasks.







