Типичная ситуация: оптовый закупщик присылает список из 50-200 артикулов в Excel, ожидая, что сайт позволит загрузить их одной кнопкой. Но стандартный магазин на Битрикс не умеет работать с множественными типами цен, автоматически привязанными к группам пользователей, и не загружает файлы напрямую в корзину. В результате — ручной ввод позиций, ошибки и потеря времени. Мы за 10+ лет разработали более 50 решений, которые превращают сайт в полноценный B2B-инструмент: интеграция с 1С, своими REST-ручками для остатков и кредитных лимитов, гибкая система цен и документов. Свяжитесь с нами — за 2 дня оценим ваш проект.
B2B-каталог: типы цен и оптовые правила
Основа B2B-каталога — множественные типы цен. В таблице b_catalog_group создаются ценовые группы:
| Тип цены | Для кого |
|---|---|
| Розничная | Неавторизованные пользователи |
| Мелкий опт | Дилеры категории C |
| Средний опт | Дилеры категории B |
| Крупный опт | Дилеры категории A |
| Специальная | Ключевые клиенты |
Каждый тип цены привязывается к группе пользователей через настройки модуля catalog. Авторизованный дилер видит только свою колонку цен. Дополнительно на уровне товара настраиваются минимальная партия, кратность заказа и единица измерения — свойства инфоблока, контролируемые в корзине.
Как настроить множественные типы цен для дилеров?
Мы подключаем несколько типов цен через штатный функционал «Торговый каталог» → «Типы цен» → «Группы покупателей». Для каждого типа создаём правило отображения: цена показывается только тем группам, которые привязаны. Если дилеру нужна скидка по объёму, добавляем правила корзины с условиями на сумму заказа. Это позволяет делать пороговые скидки без дополнительного кода.
Авторизация дилеров и разграничение доступа
Регистрация дилера — не самостоятельная, а по заявке. Схема:
- На сайте — форма заявки: ИНН, название компании, контактное лицо, сфера деятельности, предполагаемый объём закупок.
- Заявка попадает в CRM или в админку (раздел «Пользователи» → «Заявки на регистрацию»).
- Менеджер проверяет контрагента, создаёт учётную запись и назначает группу (мелкий/средний/крупный опт).
- Дилер получает доступ к личному кабинету и видит каталог со своими ценами.
Разграничение ассортимента (не только цен) реализуется через права доступа к разделам инфоблока. Например, группа «Крупный опт» видит раздел «Эксклюзивные коллекции», недоступный мелким дилерам.
Что входит в личный кабинет дилера?
Личный кабинет выходит далеко за рамки стандартного sale.personal.section. Ключевые разделы:
- История заказов — с фильтрацией по дате, статусу, сумме. Повторный заказ в один клик.
- Счета на оплату — PDF-документы, сформированные модулем sale или переданные из 1С.
- Акты сверки — файлы, загружаемые менеджером или генерируемые автоматически из 1С.
- Накладные и УПД — привязаны к заказам, доступны для скачивания.
- Кредитный лимит — отображение текущего лимита, использованной суммы и доступного остатка.
- Отсрочка платежа — информация о сроках и условиях.
Документы хранятся в Highload-блоке Documents: тип документа, номер, дата, файл, привязка к заказу и контрагенту. Загрузка из 1С — через REST API по расписанию. Формирование PDF счетов на стороне Битрикс — через библиотеку mPDF или TCPDF, подключаемую в обработчике события OnSaleOrderSaved. Шаблон счёта включает реквизиты компании, таблицу товаров, итоги, QR-код для оплаты.
Интеграция с 1С: CommerceML + REST
Обмен с 1С — ядро оптового сайта. Два канала:
CommerceML (штатный обмен):
- Номенклатура → инфоблок товаров.
- Цены по типам → b_catalog_price.
- Остатки по складам → b_catalog_store_product.
- Заказы: Битрикс → 1С (выгрузка) и обратно (статусы, отгрузки).
REST API (для оперативных данных):
- Актуальные остатки — запрос к 1С при открытии карточки товара (с кешированием на 5–10 минут).
- Кредитный лимит контрагента — запрос при авторизации и при оформлении заказа.
- Документы — выгрузка новых счетов и актов по расписанию.
Deep-dive: B2B-корзина с загрузкой Excel и типами цен
Стандартная корзина Битрикс рассчитана на розничного покупателя: выбрал товар, нажал «В корзину», перешёл к оформлению. В B2B-сценарии закупщик работает иначе. Он приходит с готовым списком из 50–200 позиций и хочет загрузить его за одно действие.
Быстрый заказ по артикулу
На странице «Быстрый заказ» — текстовое поле, куда вводятся пары «артикул — количество» по одной на строку:
ART-001 24
ART-002 48
ART-003 12
При отправке серверный обработчик парсит строки, ищет товары по свойству ARTICLE в инфоблоке (через CIBlockElement::GetList с фильтром), проверяет наличие и добавляет в корзину через \Bitrix\Sale\Basket::addItem(). Если артикул не найден — строка подсвечивается красным с пояснением.
Пример обработчика быстрого заказа
// Парсинг строк
$lines = explode("\n", $_POST['items']);
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), SITE_ID);
foreach ($lines as $line) {
list($art, $qty) = explode(' ', trim($line));
$res = CIBlockElement::GetList([], ['PROPERTY_ARTICLE' => $art], false, false, ['ID']);
if ($el = $res->Fetch()) {
$item = $basket->createItem('catalog', $el['ID']);
$item->setField('QUANTITY', (int)$qty);
}
}
$basket->save();
Загрузка Excel-файла
Более продвинутый вариант — загрузка XLS/XLSX. Обработчик на стороне сервера:
- Приём файла — через стандартную загрузку Битрикс (CFile::SaveFile).
- Парсинг — библиотека PhpSpreadsheet (подключается через Composer). Ожидаемый формат: столбец A — артикул, столбец B — количество. Первая строка — заголовок (пропускается).
- Валидация — проверка каждой строки: существование артикула, доступность товара для группы пользователя, соответствие минимальной партии и кратности.
- Формирование результата — таблица с колонками:
| Артикул | Название | Запрошено | Скорректировано | Остаток | Цена | Сумма | Статус |
|---|---|---|---|---|---|---|---|
| ART-001 | Товар А | 24 | 24 | 150 | — | — | OK |
| ART-002 | Товар Б | 48 | 48 | 30 | — | — | Частично (ост. 30) |
| ART-999 | — | 12 | — | — | — | — | Не найден |
- Подтверждение — пользователь видит результат, корректирует количество, подтверждает добавление в корзину.
Обработка типов цен в корзине
При добавлении товара в корзину цена определяется автоматически на основе группы пользователя. Логика:
- Определяется группа авторизованного пользователя (CUser::GetUserGroupArray()).
- По группе определяется доступный тип цены (CCatalogGroup::GetGroupsList()).
- Из b_catalog_price извлекается цена для товара по нужному типу.
- Если для товара настроены скидки по количеству (модуль «Правила корзины» — sale.discount), они применяются при пересчёте.
Дополнительная логика — пороговые скидки: при заказе на сумму свыше определённого порога автоматически применяется дополнительная скидка. Настраивается через правила корзины с условием «Сумма корзины больше N».
Как работает проверка кредитного лимита?
На этапе оформления заказа проверяется кредитный лимит контрагента. Данные берутся из 1С через REST API. Если сумма заказа превышает доступный лимит — выводится предупреждение, но заказ можно отправить (на усмотрение менеджера). Реализация — обработчик события OnSaleOrderBeforeSaved, который выполняет запрос к 1С и записывает результат в свойство заказа.
Что входит в работу
При разработке оптового сайта мы предоставляем:
- Техническое задание с описанием логики типов цен и прав.
- Настроенный обмен с 1С (CommerceML + REST).
- Личный кабинет дилера с документами.
- Корзину с поддержкой Excel и быстрого заказа.
- Интеграцию с платёжными системами и службами доставки.
- Исходный код и доступы к серверу.
- Руководство администратора и обучение сотрудников.
- Гарантийную поддержку 3 месяца после запуска.
Техническая сводка
| Компонент | Решение |
|---|---|
| Каталог | bitrix:catalog с фасетным индексом |
| Фильтрация | bitrix:catalog.smart.filter + AJAX |
| Корзина | Кастомный компонент с поддержкой Excel |
| Интеграция | CommerceML (каталог) + REST API (остатки, лимиты) |
| Документы | Highload-блок + mPDF |
| Права доступа | Группы пользователей → типы цен + разделы инфоблока |
Оптовый сайт на Битрикс — это прежде всего backend: обмен с 1С, типы цен, права, документооборот. Подробнее о формате обмена — CommerceML. Фронтенд вторичен — интерфейс должен быть функциональным и быстрым, а не эффектным. Закажите разработку — получите инструмент, который реально экономит время ваших дилеров. Экономия на обработке заказов достигает 300 000 руб в год за счёт автоматизации, а средний проект окупается за 4–6 месяцев. Свяжитесь с нами для консультации по вашему проекту.







