Setting up order exchange between 1C and 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
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    745
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Configuring Order Exchange Between 1C and 1C-Bitrix

Order exchange is a two-way process: the website sends new orders to 1C, and 1C returns updated statuses. The key question during configuration is the mapping of order statuses between the two systems, which is unique for every project. Incorrect mapping causes buyers to see outdated statuses, or worse — receive an "Order Completed" notification while the item is still in the warehouse.

Sending Orders from the Website to 1C

Orders are transmitted in CommerceML format in the orders.xml file. 1C retrieves the file at the next exchange session. Settings on the 1C-Bitrix side:

Settings → Product Settings → Online Store → Order Exchange:

  • Export orders: enable
  • Statuses for export: select the statuses that should be sent to 1C. Typically "New" (N) and "Paid" (P). Cancelled and completed orders do not need to be transmitted — they create unnecessary overhead
  • Period: from the date of last exchange — the safest option; does not re-transmit already processed orders

The order XML contains: buyer details, line items with quantities and prices, selected delivery method, order properties (address, phone, comment).

Status Mapping

Statuses in 1C and on the website have different names and do not always correspond one-to-one. Standard mapping is configured in:

Store → Settings → Order Statuses → [status] → 1C Identifier

Example of a typical mapping for UT 11:

1C Status 1C-Bitrix Status Code Description
In progress P Accepted, transferred for processing
Ready for shipment D Being assembled / Ready
Handed to courier F In delivery
Completed FF Delivered, closed
Cancelled by client C Cancelled

Without correct mapping, 1C will log an "Unknown status" error when updating the status, and the update will not be applied.

Common Issues

Order duplication. If an exchange session was interrupted after the file was transmitted but before 1C's confirmation was received — the orders will be transmitted again at the next session. Protection: the unique order identifier in the XML matches the website's ACCOUNT_NUMBER; 1C checks for the existence of the document before creating it.

Loss of order properties. Non-standard properties (UTM tags, promo codes, client type) are not transmitted via the standard XML. They are added via the OnSaleOrderExport1C event handler. After adding a property, make sure the corresponding attributes for storing it exist in 1C.

Amount discrepancies. 1C recalculates discounts according to its own rules and arrives at a different total amount. Solution: transmit line item prices already inclusive of discounts, and pass the discount as a separate line in the order items.

Real-Time Order Exchange via Events

If orders need to reach 1C immediately upon placement (without waiting for the next exchange session) — use the 1C REST API or an HTTP request in the OnSaleOrderSaved event handler:

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderSaved',
    function(\Bitrix\Main\Event $event) {
        $order = $event->getParameter('ENTITY');
        if ($order->isNew()) {
            \MyProject\Exchange\OrderPusher::push($order->getId());
        }
    }
);

Setup Timeline

Configuring order exchange with status mapping — 4–8 hours. With non-standard properties and handlers — 1–2 days. With real-time push order delivery — +1 day.