Разробка особистого кабінету B2B на 1С-Bitrix
Корпоративний покупець приходить у кабінет не за красивим інтерфейсом — йому потрібно за 2 хвилини знайти замовлення тримісячної давності, скачати накладну та перевірити, не вийшов ли він за кредитний ліміт. Якщо кабінет цього не дає, він перезванює менеджеру. Це і є метрика провалу: кількість звонків по питаннях, які повинні вирішуватися самостійно.
Принципальні відмінності B2B-кабінету від B2C
У рітейльному кабінету користувач бачить тільки свої замовлення. У B2B:
- Кілька співробітників однієї компанії з різними ролями
- Замовлення можуть створюватися від імені компанії, а не фізлиці
- Кредитний ліміт та задолженість — спільні для компанії
- Документи (рахунки, накладні) прив'язані до юрлиці
- Узгодження замовлень до їх підтвердження
Стандартний bitrix:sale.personal.orders не покриває жодного з цих сценаріїв.
Управління користувачами компанії
Центральна сутність — Company, пов'язана з користувачами Bitrix через Highload-блок b2b_company_users. Поля: UF_COMPANY_ID, UF_USER_ID, UF_ROLE, UF_ACTIVE, UF_CREATED_AT.
Ролі задаються через константи в модулі:
-
ROLE_OWNER— повні права, управляє співробітниками та реквізитами -
ROLE_BUYER— створює та бачить замовлення компанії -
ROLE_ACCOUNTANT— тільки документи та фінанси, без створення замовлень -
ROLE_VIEWER— тільки перегляд історії
Запрошення співробітника: власник вводить email → генерується токен → відправляється лист через CEvent::Send() з шаблоном B2B_COMPANY_INVITE → по посиланню створюється користувач Bitrix (або прив'язується існуючий) → створюється запис у b2b_company_users.
Замовлення: що потрібно сверх стандарту
Список замовлень компанії. Не користувача — компанії. CSaleOrder::GetList() з фільтром по UF_COMPANY_ID (користувацьке поле замовлення). Фільтрація по статусу, даті, менеджеру, який створив. Пошук по номеру замовлення та артикулу в складі — через CSaleBasket::GetList() з подальшим JOIN.
Статуси узгодження. Додаємо в b_sale_status кастомні статуси: APPROVAL_PENDING (чекає узгодження), APPROVED (узгоджено), REJECTED (відхилено). Переходи між статусами — через обробники события OnSaleStatusOrderChange. При зміні статусу відправляємо сповіщення через CEvent::Send().
Коментарі до замовлення. Висок завантажена елемент комунікації: покупець пишет побажання («доставити на склад №2»), менеджер відповідає. Реалізуємо через Highload-блок order_comments: UF_ORDER_ID, UF_USER_ID, UF_TEXT, UF_CREATED_AT, UF_IS_INTERNAL (менеджерський коментар, невидимий покупцю).
Документи з 1С
Інтеграція за схемою:
- У 1С налаштовується HTTP-сервіс (або регулярна вивезення XML) з документами по контрагенту
- Агент Bitrix (
CAgent::AddAgent) опитує сервіс кожні 2-4 години - Результат записується в Highload-блок
b2b_documents:UF_COMPANY_ID,UF_DOC_TYPE(invoice, waybill, reconciliation),UF_NUMBER,UF_DATE,UF_AMOUNT,UF_FILE_ID(абоUF_EXTERNAL_URL) - У кабінету — список з фільтрами, скачування PDF
Якщо 1С віддає PDF напряму — кешуємо у /upload/b2b/docs/{company_id}/ з ім'ям по номеру документа. Якщо віддає тільки метаданні — при кліку «Скачати» робимо запит до 1С та стрімимо файл через PHP без збереження на диск (для економії місця).
Фінансова зведення
Блок «Фінанси» на головній сторінці кабінету — агреговані дані:
- Поточний кредитний ліміт та використана сума (прогресс-бар)
- Прострочена задолженість з датою виникнення
- Сума замовлень за поточний місяць
Джерело — Highload-блок b2b_credit_status, синхронізується з 1С. Якщо дані застаріли більше ніж на 6 годин — показуємо попередження «Дані оновлюються».
При наявності прострочки свише допустимого порога — у шапці кабінету показуємо банер. Кнопка «Створити замовлення» блокується через перевірку у компоненті кошика.
Сповіщення
Налаштовуємо два канали:
Email: через поштові события Bitrix (CEventType, CEvent). Eventos: B2B_ORDER_CREATED, B2B_ORDER_STATUS_CHANGED, B2B_ORDER_APPROVED, B2B_DOCUMENT_READY. Шаблони редагуються у панелі управління адміністратора.
Внутрішні сповіщення: лічильник непрочитаних у кабінету. Highload-блок b2b_notifications: UF_USER_ID, UF_TYPE, UF_TEXT, UF_LINK, UF_IS_READ, UF_CREATED_AT. AJAX-запит кожні 30 секунд або через WebSocket (модуль pull).
Терміни
| Блок | Термін |
|---|---|
| Архітектура ролей та компаній | 2-3 тижні |
| Управління замовленнями компанії | 2-3 тижні |
| Документи та інтеграція з 1С | 2-4 тижні |
| Фінансовий блок | 1-2 тижні |
| Узгодження замовлень | 2-3 тижні |
| Сповіщення | 1-2 тижні |
| Тестування | 2-3 тижні |
Всього: 12-20 тижнів. Менше — при використанні готового каркаса кабінету. Більше — при нестандартній логіці узгодження або складному 1С-обміні.







