Разработка функционала запроса цены (RFQ) на 1С-Битрикс
На B2B-сайтах цены часто не публикуются открыто: они зависят от объёма, региона, условий договора или просто регулируются вручную. Вместо кнопки «Купить» нужна кнопка «Запросить цену» — RFQ (Request for Quotation). Стандартный модуль sale Битрикс под эту задачу не подходит: он заточен под публичную цену и немедленную оплату. 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() (внутренние уведомления Битрикс) и 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 (сделки, товарные позиции)
- Раздел истории заявок в личном кабинете покупателя







