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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка модуля личного кабинета 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

В Битрикс есть готовый компонент system.auth.registration и страницы личного кабинета в поставке, но их хватает только для простейшего случая: изменить имя и посмотреть заказы. Как только появляется задача «показать бонусные баллы, историю начислений, привязанные карты лояльности, несколько адресов доставки с картой и документы по B2B-договору» — стандартный кабинет становится отправной точкой для переработки, а не готовым решением.

Что отличает полноценный личный кабинет

Базовый кабинет в Битрикс — набор разрозненных компонентов, каждый из которых обращается к БД самостоятельно, без общего слоя данных. В результате страница профиля может делать 15–20 SQL-запросов при загрузке. Модуль личного кабинета строится иначе: один агрегирующий сервис собирает данные пользователя при входе, кеширует их в сессии и отдаёт всем компонентам из единого источника.

Архитектура: слои кабинета

Профильный сервис (UserProfileService) — центральный класс, инкапсулирующий всю логику работы с данными пользователя:

class UserProfileService {
    private int $userId;
    private array $cache = [];

    public function getOrders(array $filter = [], int $page = 1): OrderCollection {
        return \Bitrix\Sale\OrderTable::getList([
            'filter' => array_merge(['=USER_ID' => $this->userId], $filter),
            'order'  => ['DATE_INSERT' => 'DESC'],
            'limit'  => 10,
            'offset' => ($page - 1) * 10,
        ]);
    }

    public function getLoyaltyBalance(): int {
        if (!isset($this->cache['loyalty'])) {
            $this->cache['loyalty'] = LoyaltyTable::getBalanceForUser($this->userId);
        }
        return $this->cache['loyalty'];
    }
}

Компоненты кабинета получают сервис через DI-контейнер Bitrix\Main\DI\ServiceLocator. Каждый компонент отвечает за одну секцию: заказы, адреса, настройки уведомлений, документы.

Роутинг. Для каждой секции — отдельный URL (/cabinet/orders/, /cabinet/addresses/, /cabinet/documents/). Реализуется через кастомный обработчик в urlrewrite.php или через модуль main с регистрацией правил через UrlRewriter::setRule.

Детально: управление адресами доставки

Штатно Битрикс хранит один адрес в профиле пользователя. Для нескольких адресов нужна собственная таблица:

CREATE TABLE myvendor_user_address (
    id          SERIAL PRIMARY KEY,
    user_id     INT NOT NULL,
    label       VARCHAR(100),           -- "Дом", "Работа"
    city        VARCHAR(100),
    street      VARCHAR(200),
    building    VARCHAR(20),
    apartment   VARCHAR(20),
    lat         DECIMAL(10, 7),
    lng         DECIMAL(10, 7),
    is_default  BOOLEAN DEFAULT false,
    created_at  TIMESTAMP DEFAULT NOW()
);

Поля lat / lng заполняются через Яндекс.Геокодер при сохранении адреса. При оформлении заказа пользователь выбирает адрес из списка — данные подставляются в b_sale_order_props без ручного ввода.

Секция документов для B2B

B2B-пользователи часто запрашивают счета, акты, УПД. Модуль связывает документы (генерируемые модулем печатных форм) с профилем пользователя через таблицу myvendor_user_document. В кабинете — фильтрация по типу документа, периоду, статусу, кнопка скачивания PDF. Права на просмотр документов проверяются через группы пользователей.

Уведомления

Пользователь управляет подписками на уведомления: email, SMS, push. Каждый канал — отдельная запись в myvendor_notification_pref. При отправке уведомления из бизнес-логики приложение сначала проверяет предпочтения пользователя, и только потом выбирает канал доставки.

Безопасность кабинета

  • Все операции изменения данных (смена email, пароля, адреса) требуют подтверждения через код на email/SMS
  • CSRF-защита через стандартный механизм Битрикс (bitrix_sessid)
  • Rate limiting на попытки смены пароля через таблицу myvendor_rate_limit
  • Маскирование телефона в отображении (показывать только последние 4 цифры)

Сроки разработки

Масштаб Состав Срок
Базовый Профиль + заказы + несколько адресов 3–4 недели
Средний + лояльность + документы + уведомления 6–8 недель
Полный + B2B-функции + API для мобильного приложения 10–14 недель

Важно зафиксировать список секций кабинета до старта разработки — добавление новой крупной секции (например, программы лояльности) в середине проекта требует пересмотра профильного сервиса и схемы данных.