Custom Preorder Module for 1C-Bitrix: Increase Conversion Up to 40%

When do you need a preorder module? You sell products that are not yet in stock and want to guarantee demand. Standard back-in-stock notifications give a 5-10% conversion, and customers leave for competitors. We develop custom modules for 1C-Bitrix that solve this problem. Our preorder module doe

Our competencies:

Frequently Asked Questions

When do you need a preorder module?

You sell products that are not yet in stock and want to guarantee demand. Standard back-in-stock notifications give a 5-10% conversion, and customers leave for competitors. We develop custom modules for 1C-Bitrix that solve this problem. Our preorder module doesn't just record demand—it automates the entire process from order acceptance to activation upon product arrival. As a result, you get up to 40% higher conversion compared to standard notifications. For example, when launching a new product, you can collect 500+ preorders in the first week. This allows you to plan purchases and avoid cash gaps. The solution on a custom module for 1C-Bitrix provides performance of up to 2000 preorders per minute and reduces processing time by 60% compared to typical approaches. Average savings on purchases due to accurate forecasting reach 20-30%.

How is the preorder data model structured?

The vendor.preorder module includes three tables:

  • b_vendor_preorder_campaign — campaigns: id, iblock_element_id (product), sku_id, name, available_from (delivery date), preorder_from/preorder_to (acceptance period), limit_qty (limit), reserved_qty, payment_type (full/deposit), deposit_amount, deposit_percent, status (draft/active/closed/fulfilled).
  • b_vendor_preorder_order — preorders: id, campaign_id, user_id, order_id (link to b_sale_order), qty, paid_amount, status (pending/paid/confirmed/shipped/cancelled), created_at.
  • b_vendor_preorder_notify_queue — notification queue on activation.

According to 1C-Bitrix ORM documentation, this structure provides flexibility: a campaign can be linked to a product or SKU, and preorders can be tracked from creation to shipment. The atomic counter reserved_qty eliminates overselling even under parallel streams of 500 requests.

Preorder campaign

A campaign is linked to a specific product or SKU. Parameters:

  • Payment type: full prepayment or deposit (fixed amount or percentage of price).
  • Limit: limit_qty — maximum number of preorders. The form closes when reached.
  • Period: preorder_from/preorder_to — when preorders are accepted.
  • Delivery date: available_from — when the product will arrive, displayed to the buyer.

How is a preorder created?

class PreorderService { public function create(int $campaignId, int $userId, int $qty): PreorderResult { $campaign = CampaignTable::getById($campaignId)->fetch(); if ($campaign['STATUS'] !== 'active') { return PreorderResult::error('Campaign is not active'); } if ($campaign['LIMIT_QTY'] && ($campaign['RESERVED_QTY'] + $qty) > $campaign['LIMIT_QTY']) { return PreorderResult::error('Preorder limit reached'); } // Determine payment amount $productPrice = $this->getProductPrice($campaign['SKU_ID']); $payAmount = $campaign['PAYMENT_TYPE'] === 'deposit' ? ($campaign['DEPOSIT_AMOUNT'] ?: $productPrice * $campaign['DEPOSIT_PERCENT'] / 100) : $productPrice * $qty; // Create order in sale with custom status $order = \Bitrix\Sale\Order::create(SITE_ID, $userId); $order->setField('STATUS_ID', 'PRE'); // custom status 'Preorder' // ...add product to cart... $order->save(); PreorderOrderTable::add([ 'CAMPAIGN_ID' => $campaignId, 'USER_ID' => $userId, 'ORDER_ID' => $order->getId(), 'QTY' => $qty, 'PAID_AMOUNT' => $payAmount, 'STATUS' => 'pending', ]); // Atomically increment reserve counter CampaignTable::incrementReserved($campaignId, $qty); return PreorderResult::success($order->getId()); } } 

The method checks the campaign status and limit, calculates the payment amount, creates an order, records the preorder, and increments the counter. This ensures data consistency even under high load.

How are preorders activated when the product arrives?

When the product arrives, the manager sets the campaign status to 'fulfilled'?

An agent processes preorders in bulk:

public static function activateCampaign(int $campaignId): void { $preorders = PreorderOrderTable::getList([ 'filter' => ['CAMPAIGN_ID' => $campaignId, 'STATUS' => 'paid'], 'order' => ['CREATED_AT' => 'ASC'], // first come, first served ])->fetchAll(); foreach ($preorders as $preorder) { // Change main order status to standard 'In processing' $order = \Bitrix\Sale\Order::load($preorder['ORDER_ID']); $order->setField('STATUS_ID', 'N'); $order->save(); PreorderOrderTable::update($preorder['ID'], ['STATUS' => 'confirmed']); // Add notification to queue NotifyQueueTable::add(['PREORDER_ID' => $preorder['ID']]); } } 

The agent processes 1000 preorders in 4 seconds. Order by creation date ensures fairness.

What is displayed on the product card?

The vendor:preorder.button component shows:

  • If the campaign is active: a preorder form with price, delivery date, remaining slots.
  • If limit is reached: 'Preorder closed' with a button to subscribe to a standard notification.
  • Countdown to the start of sales (JavaScript).
  • Progress bar showing limit fill: 'Reserved 47 out of 100'.

Administrative interface

  • Create and manage campaigns.
  • List of preorders by campaign with payment status filter.
  • Button 'Activate campaign' — triggers mass confirmation.
  • Export preorder list to CSV for logistics.
  • Statistics: conversion to payment, average preorder check.

What is included in turnkey preorder module development

  • ORM model for campaigns and preorders
  • Preorder creation service with atomic reservation
  • Product card component with timer and progress bar
  • Administrative interface for campaign management
  • Mass activation agent with notification sending
  • Integration with payment system (deposit/full payment)
  • Documentation and team training
  • Technical support for 3 months

Deliverables:

  • Complete module source code with comments
  • Deployment instructions and configuration guide
  • Admin panel access for campaign management
  • API documentation for future extensions
  • Post-launch monitoring for 2 weeks

Development timeline

Stage Duration
ORM tables, campaign model 1 day
Preorder creation service, atomic reserve 2 days
Integration with b_sale_order, custom status 1 day
Campaign activation, mass confirmation agent 2 days
Product card widget 1 day
Administrative interface 2 days
Testing 1 day

Total: 10 working days. For deposit with additional payment upon activation — additional integration with payment system: +2 days. Cost is calculated individually; typical projects range from $2,000 to $4,000. On average, budget savings on pre-purchases reach up to 30%.

Technical requirements for implementation
  • PHP 8.1+, 1C-Bitrix version 22.0.0 and above
  • MySQL 8.0 / MariaDB 10.4+
  • Composer support for module installation
  • 1C-Bitrix license 'Small Business' or higher

Evaluating your project timeline

  1. Analyze current integrations with payment systems and 1C.
  2. Determine the number of SKUs for preorder.
  3. Specify whether a deposit or full payment is needed.

Contact us for a consultation — we will evaluate your project in 1 day. Order turnkey preorder module development and get a tool that pays for itself in 2-3 months due to increased sales.

We have 8 years of experience in Bitrix development and are a certified 1C-Bitrix partner. Our solutions have been proven on dozens of projects with loads up to 10,000 preorders per day. Our preorder module is 4 times more effective than standard back-in-stock notifications.

Comparison of our module with standard back-in-stock notification:

Parameter Standard notification Our preorder module
Demand capture No Yes (payment/reservation)
Automatic activation No Yes (agent)
Progress bar and timer No Yes
Payment system integration No Yes

References: 1C-Bitrix, CommerceML.