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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка оптового раздела интернет-магазина на 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1163
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    653
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

Оптовый раздел внутри розничного магазина — это не отдельный сайт, а параллельная коммерческая логика для авторизованных B2B-клиентов. Один каталог, одна административная панель, но разные цены, правила оформления и документооборот. В Битрикс эта задача решается через типы цен, группы пользователей и доработку модуля sale.

Типы цен и права доступа: фундамент B2B

Вся ценовая архитектура B2B строится вокруг таблицы b_catalog_group. Каждая запись — отдельный тип цены: «Розничная», «Оптовая», «Дилерская», «VIP». Привязка типа цены к группе пользователей задаётся в настройках модуля catalog — раздел «Типы цен», колонка «Группы покупателей».

Механизм работает так:

  1. Пользователь авторизуется и попадает в группу (например, «Оптовики»)
  2. Компонент каталога вызывает CCatalogProduct::GetOptimalPrice(), который перебирает доступные типы цен для текущего пользователя
  3. Возвращается наименьшая из доступных цен (или цена с наивысшим приоритетом — зависит от настройки)

На практике одного механизма типов цен недостаточно. Реальные оптовые прайсы сложнее:

  • Индивидуальные скидки — контрагенту А скидка 12%, контрагенту Б — 18%. Решение: отдельная группа пользователей на каждого крупного контрагента со своим типом цены, либо правила корзины (sale.discount) с условием по группе.
  • Пороговые цены — при покупке от 100 штук цена одна, от 1000 — другая. В стандартном Битрикс это реализуется через диапазоны количества в ценах товара (b_catalog_price поддерживает QUANTITY_FROM / QUANTITY_TO).
  • Валютные цены — оптовые клиенты из разных стран видят цены в своей валюте. Типы цен можно задавать в разных валютах, конвертация — через модуль currency.

Важный нюанс: тип цены не привязывается к пользователю напрямую — только к группе. Если нужна индивидуальная цена для 200 контрагентов, создавать 200 групп нерационально. В таких случаях пишется обработчик события OnGetOptimalPrice, который подтягивает цену из внешнего источника (1С, ERP) через кеш.

Сценарий Реализация в Битрикс Ограничения
3–5 ценовых уровней Типы цен + группы пользователей Стандартный механизм, работает из коробки
Пороговые цены по количеству Диапазоны в b_catalog_price Не отображаются в карточке без доработки шаблона
Индивидуальный прайс на контрагента Событие OnGetOptimalPrice + внешний источник Требует кеширования, иначе — запрос к 1С на каждый товар
Скидка на категорию для группы Правила корзины sale.discount Не видна в каталоге до добавления в корзину

Минимальная партия и кратность заказа

Для оптовых товаров необходимы два параметра: минимальное количество для заказа и шаг (кратность). В стандартном Битрикс есть поле «Коэффициент единицы измерения» (b_catalog_measure_ratio), но оно работает только как множитель при добавлении в корзину.

Полноценная реализация требует:

  • Свойство инфоблока «Минимальная партия» — проверяется при добавлении в корзину через обработчик OnSaleBasketItemBeforeUpdate
  • Свойство «Кратность» — количество округляется вверх до ближайшего кратного значения
  • Отображение в карточке товара — вместо стандартного поля количества показывается селектор с шагом (10, 20, 30…) или поле с валидацией

Быстрый заказ по артикулу и загрузка из Excel

Оптовый клиент не листает каталог — он знает артикулы. Нужен интерфейс быстрого заказа:

  1. Форма «артикул + количество» — список строк, куда вбиваются данные. На стороне сервера артикул матчится с PROPERTY_CML2_ARTICLE или XML_ID элемента инфоблока, товар добавляется в корзину.

  2. Загрузка Excel/CSV — клиент выгружает файл из своей учётной системы. Парсер на стороне Битрикса (библиотека PhpSpreadsheet, подключённая через Composer) разбирает файл, находит товары, формирует корзину. Несопоставленные артикулы показываются в отчёте.

  3. Повтор предыдущего заказа — кнопка в личном кабинете, которая копирует состав заказа в текущую корзину. Реализуется через Bitrix\Sale\Basket::loadItemsForOrder().

Кредитные лимиты и отсрочка платежа

В B2B оплата часто происходит постфактум. Механизм кредитного лимита:

  • В профиле контрагента (расширенные свойства пользователя или UF_* поля) хранится лимит и текущая задолженность
  • При оформлении заказа обработчик OnSaleOrderBeforeSaved проверяет: сумма заказа + текущая задолженность ≤ кредитный лимит
  • Если лимит превышен — заказ не оформляется, пользователь видит сообщение с суммой доступного остатка
  • После оплаты (смена статуса оплаты через 1С-обмен или вручную) задолженность пересчитывается

Документооборот в личном кабинете

Оптовый клиент ожидает увидеть в личном кабинете:

  • Счета на оплату — генерируются автоматически при создании заказа. Шаблон PDF собирается через обработчик печати (sale_print) или внешнюю библиотеку (TCPDF/mPDF).
  • Акты сверки — подтягиваются из 1С через обмен. Хранятся как файлы, привязанные к пользователю через highload-блок.
  • Накладные и УПД — аналогично, выгружаются из 1С. Для юридической значимости могут подписываться ЭЦП.
  • История заказов с фильтрацией — по периоду, статусу, сумме. Стандартный компонент sale.personal.order дорабатывается или заменяется кастомным.

Отдельная корзина и разделение контекста

Технически в Битрикс корзина одна на пользователя. Если клиент может покупать и в розницу, и оптом, нужно разделение:

  • Вариант 1: тип сайта. Два сайта в одной установке Битрикс — розничный и оптовый. Корзины разделяются по FUSER_ID + LID (идентификатор сайта). Минус — дублирование настроек.
  • Вариант 2: свойство элемента корзины. Добавляется кастомное свойство BASKET_TYPE = wholesale. При оформлении фильтруются только оптовые позиции. Минус — сложнее в реализации, нужна доработка шаблона оформления.

На практике первый вариант надёжнее: два сайта с общим каталогом, разными шаблонами и независимыми корзинами. Переключение между «витринами» — по поддомену или разделу URL.

Интеграция с 1С для оптового раздела

Обмен с 1С для B2B-раздела включает дополнительные сущности, которые отсутствуют в стандартном CommerceML:

  • Контрагенты — синхронизация карточек контрагентов из 1С с профилями пользователей Битрикс. Маппинг по ИНН или XML_ID.
  • Взаиморасчёты — текущий долг, оплаты, кредитный лимит. Передаются через дополнительные XML-узлы или отдельный REST-запрос.
  • Индивидуальные прайсы — если ведутся в 1С, нужен механизм выгрузки в формате «контрагент → товар → цена». Стандартный обмен этого не поддерживает — пишется отдельный скрипт обмена.

Оптовый раздел — это всегда доработка, а не настройка из коробки. Объём работ зависит от глубины интеграции с учётной системой и требований к документообороту.