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







