Типова ситуація: оптовий закупник надсилає список з 50-200 артикулів в Excel, очікуючи, що сайт дозволить завантажити їх однією кнопкою. Але стандартний магазин на Бітрікс не вміє працювати з множинними типами цін, автоматично прив'язаними до груп користувачів, і не завантажує файли безпосередньо в кошик. В результаті — ручне введення позицій, помилки та втрата часу. Ми за 10+ років розробили понад 50 рішень, які перетворюють сайт на повноцінний B2B-інструмент: інтеграція з 1С, власними REST-ручками для залишків та кредитних лімітів, гнучка система цін і документів. Зв'яжіться з нами — за 2 дні оцінимо ваш проект.
B2B-каталог: типи цін та оптові правила
Основа B2B-каталогу — множинні типи цін. У таблиці b_catalog_group створюються цінові групи:
| Тип ціни | Для кого |
|---|---|
| Роздрібна | Неавторизовані користувачі |
| Дрібний опт | Дилери категорії C |
| Середній опт | Дилери категорії B |
| Крупний опт | Дилери категорії A |
| Спеціальна | Ключові клієнти |
Кожен тип ціни прив'язується до групи користувачів через налаштування модуля catalog. Авторизований дилер бачить лише свою колонку цін. Додатково на рівні товару налаштовуються мінімальна партія, кратність замовлення та одиниця виміру — властивості інфоблоку, контрольовані в кошику.
Як налаштувати множинні типи цін для дилерів?
Ми підключаємо кілька типів цін через штатний функціонал «Торговий каталог» → «Типи цін» → «Групи покупців». Для кожного типу створюємо правило відображення: ціна показується лише тим групам, які прив'язані. Якщо дилеру потрібна знижка за обсягом, додаємо правила кошика з умовами на суму замовлення. Це дозволяє робити порогові знижки без додаткового коду.
Авторизація дилерів та розмежування доступу
Реєстрація дилера — не самостійна, а за заявкою. Схема:
- На сайті — форма заявки: ІПН, назва компанії, контактна особа, сфера діяльності, передбачуваний обсяг закупівель.
- Заявка потрапляє в CRM або в адмінку (розділ «Користувачі» → «Заявки на реєстрацію»).
- Менеджер перевіряє контрагента, створює обліковий запис і призначає групу (дрібний/середній/крупний опт).
- Дилер отримує доступ до особистого кабінету і бачить каталог зі своїми цінами.
Розмежування асортименту (не тільки цін) реалізується через права доступу до розділів інфоблоку. Наприклад, група «Крупний опт» бачить розділ «Ексклюзивні колекції», недоступний дрібним дилерам.
Що входить в особистий кабінет дилера?
Особистий кабінет виходить далеко за рамки стандартного sale.personal.section. Ключові розділи:
- Історія замовлень — з фільтрацією за датою, статусом, сумою. Повторне замовлення в один клік.
- Рахунки на оплату — PDF-документи, сформовані модулем sale або передані з 1С.
- Акти звірки — файли, що завантажуються менеджером або генеруються автоматично з 1С.
- Накладні та УПД — прив'язані до замовлень, доступні для завантаження.
- Кредитний ліміт — відображення поточного ліміту, використаної суми та доступного залишку.
- Відстрочка платежу — інформація про строки та умови.
Документи зберігаються в Highload-блоці Documents: тип документа, номер, дата, файл, прив'язка до замовлення та контрагента. Завантаження з 1С — через REST API за розкладом. Формування PDF рахунків на стороні Бітрікс — через бібліотеку mPDF або TCPDF, що підключається в обробнику події OnSaleOrderSaved. Шаблон рахунку включає реквізити компанії, таблицю товарів, підсумки, QR-код для оплати.
Інтеграція з 1С: CommerceML + REST
Обмін з 1С — ядро оптового сайту. Два канали:
CommerceML (штатний обмін):
- Номенклатура → інфоблок товарів.
- Ціни за типами → b_catalog_price.
- Залишки за складами → b_catalog_store_product.
- Замовлення: Бітрікс → 1С (вивантаження) і назад (статуси, відвантаження).
REST API (для оперативних даних):
- Актуальні залишки — запит до 1С при відкритті картки товару (з кешуванням на 5–10 хвилин).
- Кредитний ліміт контрагента — запит при авторизації та при оформленні замовлення.
- Документи — вивантаження нових рахунків та актів за розкладом.
Deep-dive: B2B-кошик із завантаженням Excel та типами цін
Стандартний кошик Бітрікс розрахований на роздрібного покупця: обрав товар, натиснув «В кошик», перейшов до оформлення. У B2B-сценарії закупник працює інакше. Він приходить з готовим списком з 50–200 позицій і хоче завантажити його за одну дію.
Швидке замовлення за артикулом
На сторінці «Швидке замовлення» — текстове поле, куди вводяться пари «артикул — кількість» по одній на рядок:
ART-001 24
ART-002 48
ART-003 12
При відправці серверний обробник парсить рядки, шукає товари за властивістю ARTICLE в інфоблоці (через CIBlockElement::GetList з фільтром), перевіряє наявність і додає в кошик через \Bitrix\Sale\Basket::addItem(). Якщо артикул не знайдено — рядок підсвічується червоним з поясненням.
Приклад обробника швидкого замовлення
// Парсинг рядків
$lines = explode("\n", $_POST['items']);
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), SITE_ID);
foreach ($lines as $line) {
list($art, $qty) = explode(' ', trim($line));
$res = CIBlockElement::GetList([], ['PROPERTY_ARTICLE' => $art], false, false, ['ID']);
if ($el = $res->Fetch()) {
$item = $basket->createItem('catalog', $el['ID']);
$item->setField('QUANTITY', (int)$qty);
}
}
$basket->save();
Завантаження Excel-файлу
Більш просунутий варіант — завантаження XLS/XLSX. Обробник на стороні сервера:
- Прийом файлу — через стандартне завантаження Бітрікс (CFile::SaveFile).
- Парсинг — бібліотека PhpSpreadsheet (підключається через Composer). Очікуваний формат: стовпець A — артикул, стовпець B — кількість. Перший рядок — заголовок (пропускається).
- Валідація — перевірка кожного рядка: існування артикула, доступність товару для групи користувача, відповідність мінімальній партії та кратності.
- Формування результату — таблиця з колонками:
| Артикул | Назва | Запитано | Скориговано | Залишок | Ціна | Сума | Статус |
|---|---|---|---|---|---|---|---|
| ART-001 | Товар А | 24 | 24 | 150 | — | — | OK |
| ART-002 | Товар Б | 48 | 48 | 30 | — | — | Частково (зал. 30) |
| ART-999 | — | 12 | — | — | — | — | Не знайдено |
- Підтвердження — користувач бачить результат, коригує кількість, підтверджує додавання в кошик.
Обробка типів цін у кошику
При додаванні товару в кошик ціна визначається автоматично на основі групи користувача. Логіка:
- Визначається група авторизованого користувача (CUser::GetUserGroupArray()).
- За групою визначається доступний тип ціни (CCatalogGroup::GetGroupsList()).
- З b_catalog_price вилучається ціна для товару за потрібним типом.
- Якщо для товару налаштовані знижки за кількістю (модуль «Правила кошика» — sale.discount), вони застосовуються при перерахунку.
Додаткова логіка — порогові знижки: при замовленні на суму понад певний поріг автоматично застосовується додаткова знижка. Налаштовується через правила кошика з умовою «Сума кошика більше N».
Як працює перевірка кредитного ліміту?
На етапі оформлення замовлення перевіряється кредитний ліміт контрагента. Дані беруться з 1С через REST API. Якщо сума замовлення перевищує доступний ліміт — виводиться попередження, але замовлення можна відправити (на розсуд менеджера). Реалізація — обробник події OnSaleOrderBeforeSaved, який виконує запит до 1С і записує результат у властивість замовлення.
Що входить в роботу
При розробці оптового сайту ми надаємо:
- Технічне завдання з описом логіки типів цін і прав.
- Налаштований обмін з 1С (CommerceML + REST).
- Особистий кабінет дилера з документами.
- Кошик з підтримкою Excel і швидкого замовлення.
- Інтеграцію з платіжними системами та службами доставки.
- Вихідний код та доступи до сервера.
- Керівництво адміністратора та навчання співробітників.
- Гарантійну підтримку 3 місяці після запуску.
Технічна зведення
| Компонент | Рішення |
|---|---|
| Каталог | bitrix:catalog з фасетним індексом |
| Фільтрація | bitrix:catalog.smart.filter + AJAX |
| Кошик | Кастомний компонент з підтримкою Excel |
| Інтеграція | CommerceML (каталог) + REST API (залишки, ліміти) |
| Документи | Highload-блок + mPDF |
| Права доступу | Групи користувачів → типи цін + розділи інфоблоку |
Оптовий сайт на Бітрікс — це передусім backend: обмін з 1С, типи цін, права, документообіг. Докладніше про формат обміну — CommerceML. Фронтенд вторинний — інтерфейс має бути функціональним і швидким, а не ефектним. Замовте розробку — отримаєте інструмент, який реально економить час ваших дилерів. Зв'яжіться з нами для консультації по вашому проекту.







