Разработка сайта оптовой компании на 1С-Битрикс
Оптовый сайт — это не витрина для конечного покупателя, а рабочий инструмент для дилеров и закупщиков. Здесь не нужны красивые баннеры и «хиты продаж». Нужна быстрая навигация по каталогу из десятков тысяч SKU, загрузка заказа по артикулу, актуальные остатки и цены, привязанные к группе контрагента. 1С-Битрикс с модулем «Торговый каталог» и штатной интеграцией с 1С покрывает эти задачи, но стандартную логику B2C-магазина приходится перестраивать.
B2B-каталог: типы цен и оптовые правила
Основа B2B-каталога — множественные типы цен. В таблице b_catalog_group создаются ценовые группы:
- Розничная — базовая, видна неавторизованным пользователям (если каталог открыт).
- Мелкий опт — для дилеров категории C.
- Средний опт — для дилеров категории B.
- Крупный опт — для дилеров категории A.
- Специальная — индивидуальные цены для ключевых клиентов.
Каждый тип цены привязывается к группе пользователей через настройки модуля catalog. Авторизованный дилер из группы «Крупный опт» видит свою колонку цен — остальные скрыты. Настройка выполняется в разделе «Торговый каталог» → «Типы цен» → «Группы покупателей».
Дополнительные параметры на уровне товара:
- Минимальная партия — свойство инфоблока, числовое. В компоненте корзины контролируется: нельзя заказать меньше указанного количества.
- Кратность заказа — свойство инфоблока. Количество в корзине округляется до ближайшего кратного значения (например, упаковка по 12 штук).
-
Единица измерения — штатное поле модуля каталога (
b_catalog_measure): штуки, упаковки, паллеты.
Авторизация дилеров и разграничение доступа
Регистрация дилера — не самостоятельная, а по заявке. Схема:
- На сайте — форма заявки: ИНН, название компании, контактное лицо, сфера деятельности, предполагаемый объём закупок.
- Заявка попадает в 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(). Если артикул не найден — строка подсвечивается красным с пояснением.
Загрузка 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С и записывает результат в свойство заказа.
Техническая сводка
| Компонент | Решение |
|---|---|
| Каталог | bitrix:catalog с фасетным индексом |
| Фильтрация | bitrix:catalog.smart.filter + AJAX |
| Корзина | Кастомный компонент с поддержкой Excel |
| Интеграция | CommerceML (каталог) + REST API (остатки, лимиты) |
| Документы | Highload-блок + mPDF |
| Права доступа | Группы пользователей → типы цен + разделы инфоблока |
Оптовый сайт на Битрикс — это прежде всего backend: обмен с 1С, типы цен, права, документооборот. Фронтенд вторичен — интерфейс должен быть функциональным и быстрым, а не эффектным.







