Configuring Order Approval for B2B in 1C-Bitrix
In corporate procurement, a regular employee cannot independently pay for a large order. They need approval from a manager or finance director. Without this logic on the Bitrix side, the buyer is forced to approve the order outside the system — via email or messenger — and then return to process it manually.
Approval Scheme
Standard B2B scenario: an employee creates an order with "Under Review" status → notification goes to the manager → manager in the cabinet approves or rejects → upon approval, the order goes to processing; upon rejection — employee receives notification with reason.
More complex schemes: approval by amount (up to 50K — not needed, 50K to 200K — one level, 200K+ — two levels), or approval by product category.
Implementation via Order Statuses
In Bitrix, an order has a status (b_sale_status). Add custom statuses:
-
APPROVAL— awaiting approval -
APPROVED— approved, sent to processing -
REJECTED— rejected
Adding statuses: CSaleStatus::Add() or via the admin panel Shop → Settings → Order Statuses.
When an employee (not company owner) creates an order — the OnSaleOrderSaved handler checks the user role. If the role requires approval and the amount is above threshold — the order status changes to APPROVAL, standard processing is temporarily suspended.
Notifications and Approval Interface
When transitioning to APPROVAL — email event B2B_ORDER_APPROVAL_REQUEST goes to the approver. In the email: list of items, amount, link to the approval page.
The approval page in the cabinet — list of orders with APPROVAL status for the current user (or for the company if they have the approver role). Buttons: "Approve" / "Reject" with a reason field. On click — AJAX request to the handler that changes the order status via CSaleOrder::UpdateStatus() and sends notification to the creator.
Multi-Level Approval
For a two-level scheme — Highload block order_approvals: UF_ORDER_ID, UF_APPROVER_ID, UF_LEVEL (1, 2), UF_STATUS, UF_COMMENT, UF_DATE. The order transitions to main processing only when all records have status approved. On rejection at any level — the order gets status REJECTED, the chain is broken.
Timelines
Single-level approval setup: 1 week. Multi-level scheme with flexible rules: 2-3 weeks.







