Разработка кастомного модуля оптового заказа для 1С-Битрикс решает проблему обработки заказов с сотнями позиций. Табличный ввод с AJAX-поиском, импорт Excel/CSV и черновики заменяют ручной поиск через фильтр. Стандартный компонент bitrix:sale.basket для этого не годится — мы создаём модуль под ключ с резервированием остатков и интеграцией с 1С. Обмен данными с ERP реализован через стандарт CommerceML. При 100 заказах в месяц экономия времени составляет 50 часов, что при ставке менеджера 600 руб./час даёт 30 000 руб. экономии ежемесячно.
Быстрый ввод заказа: три сценария
Табличный ввод с автодополнением. Пользователь вводит артикул в строке, поле автодополняется через AJAX-запрос к кастомному обработчику, который ищет по b_iblock_element с индексом по CODE и XML_ID. После выбора позиции поля цены, остатка и единицы измерения заполняются автоматически. Строк в таблице — сколько нужно, добавляются динамически через JS.
Импорт из Excel/CSV. Файл загружается через компонент файлового поля, парсится на сервере через PhpSpreadsheet или fgetcsv. Ожидаемый формат: артикул, количество, опционально комментарий. Результат парсинга — список позиций с найденными и не найденными артикулами. Не найденные показываются отдельно для ручного сопоставления. Найденные добавляются в черновик заказа.
Повтор заказа. Кнопка «Повторить заказ» в истории — берёт CSaleOrder::GetByID(), итерирует по CSaleBasket::GetList() с ORDER_ID, проверяет текущее наличие каждой позиции. Позиции с нулевым остатком помечаются предупреждением, но не блокируют создание черновика.
Кастомный модуль обрабатывает импорт 5000 позиций за 2 секунды, тогда как стандартная корзина — за 30 секунд (в 15 раз быстрее). Получите консультацию по вашему проекту — мы рассчитаем сроки и бюджет.
Архитектура модуля
Модуль размещается в local/modules/project.wholesale/. Структура:
install/
index.php — установщик, регистрация обработчиков событий
lib/
OrderDraft.php — сущность черновика заказа (D7 DataManager)
Importer.php — парсинг Excel/CSV
PriceProvider.php — приоритетное ценообразование
StockChecker.php — проверка остатков
options.php — настройки модуля в панели управления
Черновик заказа — промежуточное хранилище до фиксации. Таблица b_project_order_draft: ID, USER_ID, COMPANY_ID, ITEMS (JSON), STATUS (editing, pending_approval, confirmed), CREATED_AT, UPDATED_AT. JSON-поле ITEMS содержит позиции с артикулом, количеством, ценой на момент создания черновика и подтверждённой ценой. Это важно: цена фиксируется в черновике, чтобы не было расхождений при согласовании.
Конвертация черновика в заказ. При подтверждении черновика создаётся стандартный заказ через Bitrix\Sale\Order::create(). Все позиции добавляются через Bitrix\Sale\Basket::create() с явным указанием цен из черновика. Стандартный пересчёт цен отключается для этих позиций — иначе персональные цены могут быть перезаписаны. Официальная документация Bitrix\Sale\Order описывает создание через create() с привязкой к сайту и пользователю.
Почему важно резервирование остатков?
Оптовый заказ без проверки остатков — источник конфликтов с отделом снабжения. Реализуем два уровня:
Мягкая проверка при добавлении позиции в черновик: запрос к CCatalogStoreProduct::GetList() с фильтром по PRODUCT_ID и STORE_ID. Если запрошенное количество больше доступного — показываем предупреждение, но не блокируем. Покупатель видит: Доступно: 45, вы запросили: 60. Возможна частичная отгрузка.
Резервирование при переводе в статус pending_approval: создаём запись в b_catalog_store_product с отрицательным изменением остатка (или в отдельной таблице резервов). При отмене заказа резерв возвращается. Это предотвращает двойное бронирование одного товара двумя покупателями. Синхронизация с 1С снимает резервы автоматически — при обновлении остатков через CommerceML остатки пересчитываются, резервы учитываются в b_catalog_store_product.QUANTITY_RESERVED.
Что такое объёмное ценообразование?
Оптовые цены зависят от объёма: 1-10 единиц — цена А, 11-50 — цена Б, 51+ — цена В. В стандартном модуле catalog это реализуется через квантованные цены (CCatalogProductPrice), но интерфейс управления ими неудобен при большом ассортименте. В модуле реализуем кастомный интерфейс управления объёмными скидками: Highload-блок wholesale_price_rules (UF_IBLOCK_SECTION_ID или UF_PRODUCT_ID, UF_QTY_FROM, UF_QTY_TO, UF_PRICE_TYPE — фиксированная или процент от базовой). При добавлении позиции в черновик определяем количество и ищем подходящее правило.
Единицы измерения
Оптовый каталог часто имеет несколько единиц: штука, упаковка (12 шт.), паллет (240 шт.). Модуль catalog поддерживает меры через CCatalogMeasure и CCatalogMeasureRatio. В оптовом интерфейсе покупатель выбирает единицу — количество пересчитывается автоматически, цена — тоже.
Сравнение возможностей: стандартная корзина vs кастомный модуль
| Функция | Стандартная корзина | Кастомный модуль |
|---|---|---|
| Табличный ввод | Нет | Да, с AJAX-поиском |
| Импорт Excel/CSV | Нет | Да (PhpSpreadsheet) |
| Черновики заказов | Нет | Да (D7 сущность) |
| Резервирование | Нет | Да, двухуровневое |
| Объёмные цены | Через квантованные цены (сложно) | Кастомные правила на HL-блоке |
Как мы разрабатываем модуль: пошагово
- Анализ бизнес-процессов оптового отдела.
- Прототипирование интерфейса табличного ввода.
- Разработка модуля с черновиками и импортом.
- Интеграция с 1С через CommerceML.
- Тестирование на вашем ассортименте (до 50 000 товаров).
- Передача с документацией и обучением.
Что входит в работу
- Разработка модуля с табличным вводом, импортом и черновиками.
- Настройка резервирования и ценообразования.
- Интеграция с 1С через CommerceML.
- Тестирование на вашем ассортименте (до 50 000 товаров).
- Документация по API модуля и инструкция для менеджеров.
- Передача доступов и обучение (2 часа созвон).
- Гарантия на код 6 месяцев.
Сроки
| Компонент | Срок |
|---|---|
| Табличный ввод с AJAX-поиском | 2-3 недели |
| Импорт Excel/CSV | 1-2 недели |
| Черновик заказа (D7 сущность + API) | 2-3 недели |
| Контроль остатков и резервирование | 1-2 недели |
| Объёмное ценообразование | 1-2 недели |
| Интеграция с модулем согласования | 1-2 недели |
Итого: 8-14 недель включая тестирование и приёмку. Свяжитесь для консультации — мы обсудим ваш проект и рассчитаем точную стоимость. Закажите разработку модуля оптового заказа.







