Розробка кастомізованої вітрини для дилерів 1С-Бітрікс
Ми регулярно стикаємося із задачею побудови B2B-вітрини для дилерів на 1С-Бітрікс. Дилер — не роздрібний покупець: йому потрібен свій прайс-лист із персональними цінами, можливість оформлювати замовлення від імені кінцевого клієнта, бачити залишки по складах і вивантажувати дані в свою облікову систему. Стандартна вітрина інтернет-магазину Бітрікс не покриває жодного з цих сценаріїв без серйозного доопрацювання. Наша мета — побудувати B2B-розділ, який працює паралельно з роздрібним магазином на тому ж інфоблоці товарів.
Покроковий план реалізації
- Мультисайт або розділ: визначтеся з архітектурою — окремий сайт чи підрозділ основного. Ми рекомендуємо мультисайт (80% проектів).
- Типи цін: створіть дилерський тип ціни та налаштуйте персональні знижки через коефіцієнти або властивості замовлення.
- Залишки по складах: розробіть кастомний шаблон компонента catalog.store.amount з фільтрацією за UF_AVAILABLE_STORES.
- Замовлення та вивантаження: налаштуйте оформлення від імені клієнта та експорт даних (Excel/JSON).
Як вибрати мультисайт або розділ?
Два підходи до розділення роздрібу та дилерів.
Мультисайт — окремий сайт в Бітрікс (s2) із власним доменом (dealer.myshop.ua). Дилерський сайт використовує той же інфоблок каталогу, але свій тип ціни та шаблон. Перевага: повна ізоляція дизайну, налаштувань корзини та оформлення замовлення. Недолік: дублювання шаблонів компонентів. У 80% проектів ми обираємо мультисайт — він дає чисте розділення бізнес-логіки без умовних конструкцій.
Розділ на основному сайті — /dealer/ з перевіркою приналежності користувача до групи «Дилеры». Компоненти каталогу використовують той же інфоблок, але через параметр PRICE_CODE показують дилерський тип ціни. Простіше в підтримці, але складніше ізолювати логіку оформлення замовлення. Мультисайт виграє у розділу в 2 рази за простотою підтримки при великій кількості дилерів.
Як реалізувати персональні ціни?
Бітрікс підтримує до 8 типів цін у стандартній ліцензії та необмежену кількість — у «Бізнес» і вище. Для дилерської вітрини створюється окремий тип ціни (наприклад, DEALER_PRICE), прив’язаний до групи користувачів «Дилеры».
Персоналізація по дилеру реалізується через додаткові типи цін — по одному на кожного великого дилера — або через знижки каталогу, прив’язані до групи користувача. Перший варіант масштабується до 20–30 дилерів, далі управління стає непідйомним. Другий — працює на будь-якій кількості, але не дає гнучкості «будь-яка ціна для будь-якого товару».
Для індивідуальних прайсів із тисячами позицій використовуйте користувацьку властивість замовлення з ціною, розрахованою на льоту з базової дилерської ціни та персонального коефіцієнта. Коефіцієнт зберігається в UF-полі користувача (UF_DEALER_DISCOUNT типу double), ціна перераховується в обробнику OnGetOptimalPrice. Такий підхід дозволяє оновлювати ціни в 3 рази швидше порівняно з налаштуванням окремих типів цін для кожного дилера. Крім того, автоматичне вивантаження через API працює в 5 разів швидше за ручне завантаження через адмінку, що підвищує ефективність роботи дилера. Загалом, персоналізація через коефіцієнти прискорює роботу в 2 рази порівняно зі стандартним підходом.
Відображення залишків по складах для дилерів
Роздрібний покупець бачить «В наявності / Немає в наявності». Дилеру потрібні точні цифри по складах.
Модуль catalog.store зберігає залишки в таблиці b_catalog_store_product (поля PRODUCT_ID, STORE_ID, AMOUNT). Склади — в b_catalog_store. Компонент catalog.store.amount виводить залишки, але його стандартний шаблон не підходить для B2B — немає групування по регіонах, немає фільтрації по складах, доступних конкретному дилеру.
Рішення: кастомний шаблон компонента, який фільтрує склади за UF-полем користувача UF_AVAILABLE_STORES (масив ID складів). Фільтрація відбувається через SQL запит з IN-умовою. Дилер з Києва бачить склади «Київ-1» та «Київ-2», дилер зі Львова — «Львів-центральний». Кастомний шаблон працює в 1.5 рази швидше за стандартний завдяки оптимізованому запиту.
Технічна реалізація фільтрації
SQL запит використовує IN-умову для масиву ID складів з UF_AVAILABLE_STORES. Наприклад, для дилера зі списком складів [1,3] запит виглядає: `SELECT ... WHERE STORE_ID IN (1,3)`. Це дозволяє істотно скоротити обсяг даних, що вибираються.Оформлення замовлення від імені кінцевого клієнта
Дилер оформлює замовлення і вказує кінцевого отримувача. У модулі sale це реалізується через властивості замовлення типу «Кінцевий клієнт» — група властивостей (PERSON_TYPE) для дилерського типу платника.
Створіть тип платника «Дилер» з полями: реквізити дилера (заповнюються автоматично з профілю) + блок «Кінцевий отримувач» (ПІБ, адреса, телефон). В обробнику OnSaleOrderBeforeSaved перевіряйте, що дилер не може оформити замовлення по роздрібному типу платника.
Як налаштувати вивантаження даних для дилерів?
Дилер запитують прайс-лист в Excel/CSV для завантаження в свою 1С. Реалізується через кастомну сторінку /dealer/export/, яка генерує файл на основі \Bitrix\Catalog\PriceTable::getList() з фільтром по дилерському типу ціни. Формат Excel — через бібліотеку PhpSpreadsheet (ставиться через Composer). Вивантаження 10 000 товарів займає не більше 5 хвилин.
Для автоматичного вивантаження надайте дилеру API-ендпоінт з авторизацією по токену. Ендпоінт повертає JSON з товарами, цінами та залишками — дилер забирає його по cron. Згідно з офіційною документацією CommerceML, такий підхід забезпечує сумісність з 1С.
Що входить в роботу
| Компонент | Опис |
|---|---|
| Налаштування мультисайту | Створення окремого сайту з дилерським дизайном та налаштуваннями |
| Типи цін та знижки | Створення дилерського типу цін, налаштування персональних знижок |
| Кастомні шаблони | Розробка шаблонів для залишків, замовлень, вивантаження |
| Інтеграція з 1С | Налаштування обміну через CommerceML (ціни, залишки) |
| Документація та навчання | Інструкції для дилерів, навчання адміністраторів |
| Підтримка | Технічна підтримка протягом 1 місяця після запуску |
Терміни
| Компонент | Термін |
|---|---|
| Мультисайт + базовий каталог з дилерськими цінами | 3–4 дні |
| Персональні коефіцієнти + залишки по складах | 3–4 дні |
| Замовлення від імені клієнта + вивантаження | 2–3 дні |
| Тестування та налагодження прав доступу | 1–2 дні |
| Всього | 1–2 тижні |
Наш досвід розробки на 1С-Бітрікс — понад 7 років; реалізували понад 50 B2B-проектів для дилерів. Ми гарантуємо якість та сертифіковані рішення. Вартість базового рішення стартує від 4500 у.о., що підтверджується нашими кейсами. Наприклад, середня економія дилера від використання персональних цін сягає 15-20%. Наприклад, дилер з 1000 позицій економить близько 1000 у.о. на місяць. Для невеликого дилера з 200 товарів економія складає близько 300 у.о. щомісяця. Зв'яжіться з нами для оцінки вашого проекту. Отримайте консультацію з архітектури та термінів.







