Розробка модуля попереднього замовлення 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка модуля попереднього замовлення 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка модуля передзамовлення 1С-Бітрікс

Передзамовлення — це можливість оплатити товар до його появи у продажу: новинку, яка ще не надійшла на склад, або лімітоване видання із закритою датою старту продажів. На відміну від «сповістити про надходження», передзамовлення передбачає реальний платіж або резервування коштів. Стандартний b_sale_order не підтримує стан «товар недоступний, але прийнято передзамовлення» — немає статусу відкладеного виконання, немає дедлайну, немає масової активації.

Модель даних

Модуль vendor.preorder:

  • b_vendor_preorder_campaign — кампанії передзамовлення: id, iblock_element_id (товар), sku_id, name, available_from (дата початку продажів), preorder_from, preorder_to, limit_qty (ліміт передзамовлень), reserved_qty, payment_type (full/deposit), deposit_amount, deposit_percent, status (draft/active/closed/fulfilled)
  • b_vendor_preorder_order — передзамовлення: id, campaign_id, user_id, order_id (посилання на b_sale_order), qty, paid_amount, status (pending/paid/confirmed/shipped/cancelled), created_at
  • b_vendor_preorder_notify_queue — черга сповіщень при активації

Кампанія передзамовлення

Кампанія прив'язана до конкретного товару або SKU. Параметри:

  • Тип оплати: повна передоплата або завдаток (фіксована сума або відсоток від ціни)
  • Ліміт: максимальна кількість передзамовлень — limit_qty. При досягненні ліміту форма закривається
  • Період: preorder_from / preorder_to — коли приймаються передзамовлення
  • Дата поставки: available_from — коли товар реально надійде, відображається покупцю

Створення передзамовлення

class PreorderService
{
    public function create(int $campaignId, int $userId, int $qty): PreorderResult
    {
        $campaign = CampaignTable::getById($campaignId)->fetch();

        if ($campaign['STATUS'] !== 'active') {
            return PreorderResult::error('Кампанія неактивна');
        }

        if ($campaign['LIMIT_QTY'] && ($campaign['RESERVED_QTY'] + $qty) > $campaign['LIMIT_QTY']) {
            return PreorderResult::error('Ліміт передзамовлень вичерпано');
        }

        // Визначаємо суму для оплати
        $productPrice = $this->getProductPrice($campaign['SKU_ID']);
        $payAmount    = $campaign['PAYMENT_TYPE'] === 'deposit'
            ? ($campaign['DEPOSIT_AMOUNT'] ?: $productPrice * $campaign['DEPOSIT_PERCENT'] / 100)
            : $productPrice * $qty;

        // Створюємо замовлення в sale з кастомним статусом
        $order = \Bitrix\Sale\Order::create(SITE_ID, $userId);
        $order->setField('STATUS_ID', 'PRE'); // кастомний статус «Передзамовлення»
        // ...додаємо товар у кошик...
        $order->save();

        PreorderOrderTable::add([
            'CAMPAIGN_ID'  => $campaignId,
            'USER_ID'      => $userId,
            'ORDER_ID'     => $order->getId(),
            'QTY'          => $qty,
            'PAID_AMOUNT'  => $payAmount,
            'STATUS'       => 'pending',
        ]);

        // Атомарно збільшуємо лічильник резерву
        CampaignTable::incrementReserved($campaignId, $qty);

        return PreorderResult::success($order->getId());
    }
}

Активація передзамовлень при надходженні товару

Коли товар надходить на склад, менеджер переводить кампанію в статус fulfilled. Агент масово обробляє передзамовлення:

public static function activateCampaign(int $campaignId): void
{
    $preorders = PreorderOrderTable::getList([
        'filter' => ['CAMPAIGN_ID' => $campaignId, 'STATUS' => 'paid'],
        'order'  => ['CREATED_AT' => 'ASC'], // першими підтверджуємо раніше оформлені
    ])->fetchAll();

    foreach ($preorders as $preorder) {
        // Змінюємо статус основного замовлення на стандартний «В обробці»
        $order = \Bitrix\Sale\Order::load($preorder['ORDER_ID']);
        $order->setField('STATUS_ID', 'N');
        $order->save();

        PreorderOrderTable::update($preorder['ID'], ['STATUS' => 'confirmed']);

        // Ставимо в чергу сповіщення покупцю
        NotifyQueueTable::add(['PREORDER_ID' => $preorder['ID']]);
    }
}

Відображення на картці товару

Компонент vendor:preorder.button:

  • Якщо кампанія активна: показує форму передзамовлення з ціною, датою поставки, кількістю місць, що залишилися
  • Якщо ліміт вичерпано: «Передзамовлення закрито» з кнопкою підписки на звичайне сповіщення
  • Зворотній відлік до дати старту продажів (JavaScript)
  • Прогрес-бар заповнення ліміту: «Зарезервовано 47 із 100»

Адміністративний інтерфейс

  • Створення та управління кампаніями
  • Список передзамовлень по кампанії з фільтром по статусу оплати
  • Кнопка «Активувати кампанію» — запускає масове підтвердження
  • Експорт списку передзамовлень у CSV для логіста
  • Статистика: конверсія в оплату, середній чек передзамовлення

Терміни розробки

Етап Термін
ORM-таблиці, модель кампаній 1 день
Сервіс створення передзамовлень, атомарний резерв 2 дні
Інтеграція з b_sale_order, кастомний статус 1 день
Активація кампанії, агент масового підтвердження 2 дні
Віджет картки товару 1 день
Адміністративний інтерфейс 2 дні
Тестування 1 день

Разом: 10 робочих днів. Для завдатку з доплатою при активації — додаткова інтеграція з платіжною системою: +2 дні.