Розробка функціоналу запиту ціни (RFQ) на 1С-Бітрікс
На B2B-сайтах ціни часто не публікуються відкрито: вони залежать від обсягу, регіону, умов договору або просто регулюються вручну. Замість кнопки «Купити» потрібна кнопка «Запросити ціну» — RFQ (Request for Quotation). Стандартний модуль sale 1С-Бітрікс для цього завдання не підходить: він заточений під публічну ціну і негайну оплату. RFQ — це окремий процес: заявка → обробка менеджером → виставлення комерційної пропозиції → узгодження → замовлення.
Архітектура процесу
RFQ-запит проходить кілька статусів: new → processing → quoted → accepted → rejected → ordered. Після статусу accepted клієнт може оформити замовлення за погодженою ціною через стандартний модуль sale.
Таблиця заявок bl_rfq:
CREATE TABLE bl_rfq (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES b_user(ID),
status VARCHAR(30) DEFAULT 'new',
manager_id INT,
comment TEXT,
manager_note TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
expires_at TIMESTAMP,
order_id INT
);
Позиції заявки bl_rfq_items:
CREATE TABLE bl_rfq_items (
id SERIAL PRIMARY KEY,
rfq_id INT REFERENCES bl_rfq(id) ON DELETE CASCADE,
product_id INT NOT NULL, -- ID елемента інфоблока
sku_id INT, -- ID торгової пропозиції
quantity NUMERIC(10,3),
unit VARCHAR(20),
price_requested NUMERIC(12,2), -- ціна, яку просить клієнт (опціонально)
price_quoted NUMERIC(12,2), -- ціна, яку пропонує менеджер
comment TEXT
);
Інтерфейс додавання до RFQ
Кнопка «Запросити ціну» замінює кнопку «У кошик» на картках товарів — або співіснує з нею, якщо частина товарів має публічну ціну.
Логіка показу: у result_modifier.php компонента catalog.element перевіряємо властивість товару PROPERTY_PRICE_ON_REQUEST або відсутність ціни в $arResult['ITEM_PRICES']:
$showRFQ = ($arResult['ITEM_PRICES'][0]['PRICE'] ?? 0) === 0
|| $arResult['ITEM']['PROPERTIES']['PRICE_ON_REQUEST']['VALUE'] === 'Y';
$arResult['SHOW_RFQ'] = $showRFQ;
Кнопка надсилає AJAX-запит з product_id, sku_id, quantity до контролера RfqController::addItemAction().
RFQ-кошик
Клієнт може додати кілька позицій перед відправкою — аналог кошика, але для запитів. Дані зберігаються в сесії ($_SESSION['RFQ_ITEMS']) або в таблиці bl_rfq зі статусом draft. При відправці заявки статус змінюється на new, менеджер отримує сповіщення.
Обробка в CRM і сповіщення
При переході заявки в статус new створюється лід або угода в CRM через \Bitrix\Crm\LeadTable::add() або REST API crm.deal.add. До угоди додаються товарні позиції з bl_rfq_items через crm.deal.productrows.set.
Сповіщення менеджеру — через \Bitrix\Im\Notify::send() (внутрішні сповіщення Бітрікс24) і email через \Bitrix\Main\Mail\Event::send() з шаблоном події RFQ_NEW_REQUEST.
Виставлення КП і конвертація в замовлення
Менеджер в адміністративному інтерфейсі заповнює price_quoted для кожної позиції, ставить статус quoted. Клієнт отримує email з посиланням на особистий кабінет, де бачить КП. При натисканні «Прийняти» — статус accepted, після чого створюється замовлення в b_sale_order із зафіксованими цінами через CSaleOrder::Add() з примусовою передачею PRICE у позиціях.
Кейс: дистриб'ютор промислового обладнання
Ситуація: 4 000 SKU без публічних цін, менеджери обробляли запити через email вручну, час відповіді — 2–3 дні.
Реалізація:
- RFQ-кошик з можливістю додати кілька товарів
- Автоматичне створення угоди в Бітрікс24 CRM при відправці заявки
- Особистий кабінет покупця з історією заявок і статусами
- Email-сповіщення менеджеру (негайно) і клієнту (при зміні статусу)
- Конвертація прийнятого КП в замовлення однією кнопкою
Результат: час обробки заявки скоротився до 4 годин, менеджери перестали втрачати запити в пошті.
| Етап | Термін |
|---|---|
| Проектування схеми і статусної машини | 2 дні |
| Бекенд: таблиці, контролери, агенти | 4 дні |
| Фронтенд: кнопка, RFQ-кошик, особистий кабінет | 4 дні |
| Інтеграція з CRM | 2 дні |
| Email-сповіщення і тестування | 2 дні |
Що входить у розробку
- Проектування статусної машини RFQ і моделі даних
- Заміна/доповнення кнопки «У кошик» для товарів без публічної ціни
- RFQ-кошик з AJAX-управлінням позиціями
- Адміністративний інтерфейс обробки заявок із виставленням цін
- Інтеграція з CRM-модулем Бітрікс24 (угоди, товарні позиції)
- Розділ історії заявок в особистому кабінеті покупця







