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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка модуля оптового замовлення 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

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

Оптовий покупець не працює через кошик. Він завантажує список артикулів зі своєї ERP, вказує кількість та чекає підтвердження. Якщо портал пропонує йому шукати кожну позицію вручну через фільтр та додавати по одній — він піде до конкурента, у якого є Excel-імпорт.

Швидкий ввід замовлення: три сценарії

Стандартний компонент bitrix:sale.basket не підходить для оптових замовлень. Розробляється окремий модуль з трьома режимами введення позицій:

Табличний ввід з автозаповненням. Користувач вводить артикул у рядку, поле автозаповнюється через AJAX-запит до bitrix:catalog.search або до кастомного обробника, який шукає в b_iblock_element з індексом за CODE та XML_ID. Після вибору позиції — поля ціни, остатку та одиниці вимірювання заповнюються автоматично. Рядків у таблиці — скільки потрібно, додаються динамічно через JavaScript.

Імпорт з Excel/CSV. Файл завантажується через стандартний компонент файлового поля, парситься на сервері через PhpSpreadsheet (або fgetcsv для CSV). Очікуваний формат: артикул, кількість, опціонально — коментар. Результат парсингу: список позицій із знайденими/ненайденими артикулами. Ненайдені — показуються окремо з можливістю ручного сопоставлення. Знайдені — додаються в чернетку замовлення.

Повтор замовлення. Кнопка «Повторити замовлення» в історії — бере CSaleOrder::GetByID(), ітерує по CSaleBasket::GetList() з ORDER_ID, перевіряє поточне наявність кожної позиції. Позиції з нульовим остатком помічаються попередженням, але не блокують створення чернетки.

Архітектура модуля

Модуль розміщується в 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() з явним указанням цін із чернетки. Стандартний перерахунок цін відключається для цих позицій — інакше персональні ціни можуть бути перезаписані.

Контроль остатків та резервування

Оптове замовлення без перевірки остатків — джерело конфліктів з відділом постачання. Реалізуємо два рівні:

м'яка перевірка при додаванні позиції в чернетку: запит до 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. В оптовому інтерфейсі покупець вибирає одиницю — кількість перераховується автоматично, як і ціна.

Часові рамки

Компонент Час
Табличний ввід з AJAX-пошуком 2-3 тижні
Імпорт Excel/CSV 1-2 тижні
Чернетка замовлення (D7 сутність + API) 2-3 тижні
Контроль остатків та резервування 1-2 тижні
Обсягове ціноутворення 1-2 тижні
Інтеграція з модулем узгодження 1-2 тижні

Разом: 8-14 тижнів включаючи тестування та приймання.