Доработка Битрикс при создании CRM-систем на заказ: нюансы
Почему стандартный Битрикс не всегда подходит для CRM на заказ

«1С-Битрикс: Управление сайтом» и «Битрикс24» часто используют как основу для CRM — но стоит понимать: это не специализированные CRM-платформы. Они подходят для быстрого старта, решения базовых задач маркетинга и продаж (лиды, воронка, email-рассылки, телефония), однако при уникальных бизнес-процессах коробка начинает мешать.
Сдерживающие моменты следующие:
- Ограничения типовой модели сущностей: стандартные Лиды → Сделки → Контакты → Компании не учитывают, например, сложные цепочки согласования, множественные роли клиентов, итерации продукта или специфические статусы оплаты;
- Жесткая логика работы стадий сделки: например, в B2B-проектах заказ часто должен пройти согласование одновременно у нескольких департаментов. Коробка такой сценарий не поддерживает без доработки;
- Несовместимость с существующими сервисами: если в компании уже есть своя ERP, кастомный каталог или интеграция с платежными шлюзами, требуется расширение API, а иногда ремаппинг систем авторизации или правил синхронизации;
- Интерфейс ориентирован на массовое использование: лишние вкладки, элементы, действия требуют очистки UI, иначе сотрудники теряют скорость в повседневной работе;
- Масштабируемость: стандартные компоненты ориентированы на работу с десятками или сотнями клиентов. Когда речь идет о тысячах карточек, десятках аналитиков, — система требует оптимизации и переработки рутин.
Именно поэтому компаниям со сложной моделью продаж приходится идти по пути доработки Битрикс — а это уже полноценный ИТ-проект, где важно соблюдать техническую дисциплину.
Основные направления доработки Битрикс под CRM: от интерфейса до бизнес-логики
Когда заходит речь о доработке CRM на Битрикс, она редко ограничивается добавлением нескольких пользовательских полей. Как правило, изменения затрагивают архитектуру, права, интерфейс и правила интеграций.
Структура сущностей: редизайн ядра
На этапе проектирования большинство CRM на Битрикс требует:
- Создание новых сущностей помимо стандартных (например, «Заявка на продукт», «Договор», «Координатор проекта»);
- Установку связи между сущностями в формате многие-ко-многим;
- Использование Highload-блоков для хранения специфических данных с высокой нагрузкой (например, кастомных метрик);
- Добавление бизнес-правил, которые завязаны не только на стадии сделки, но и на внешние события (например, ответ от интеграции с 1С).
Всё это реализуется с использованием D7 ORM и событийной модели. Старый API (CModule, CUserType, CIBlockElement и пр.) — неподдерживаемый технический долг в таких проектах.
Создание кастомных рутин и бизнес-процессов
Если в коробке используется дизайнер бизнес-процессов, его функциональность часто оказывается недостаточной. Например:
- нельзя задать ветвление логики в зависимости от внешнего сервиса;
- невозможно пересчитывать показатели сделки по собственным формулам;
- нет сценариев с логгером состояний или «откатами».
В таких случаях пишутся собственные модули, которые обрабатывают события (например, OnAfterCrmDealUpdate) и совершают нужные действия — от отправки webhook’а до изменения статуса в нескольких связанных сущностях.
Матрица доступа: права по ролям и контекстам
Корпоративная CRM требует гибкой модели доступа — когда менеджер видит только свои сделки, руководитель отдела — всех подчиненных, а аналитик может читать, но не менять.
Битрикс это реализует через механизм ролевой модели прав, однако в проектах с десятками условий часто приходится:
- расширять работу с правами через кастомный AccessProvider;
- внедрять промежуточную логику оценки доступов (например, с учетом подразделения, юрлица или контракта);
- проверять права в REST-запросах при интеграциях с мобильными приложениями или чатами;
- совмещать штатные ограничения CRM и внешнюю систему авторизации (например, LDAP или SAML-провайдер).
Небрежный подход к контролю доступа приводит к утечкам, ошибкам сотрудников и искажению аналитики.
Интеграции: расширение API и обмен с внешними системами
CRM редко работает изолированно. Важнейшие встраивания:
- 1С (обмен номенклатурой, заказами, данными клиентов);
- ВАТС (телефония, запись разговоров, отображение звонков в карточке сделки);
- платёжные системы (условия расчёта, статусы оплаты, автоформирование актов/счетов);
- мобильное приложение (например, CRM-портал с урезанным интерфейсом);
- кастомные маркетинговые платформы (SMS, email, push и др.).
Интеграции требуют расширения или даже полного построения REST API в контроллерах. Также важно учитывать нагрузку — при высокочастотных обращениях применяются очереди (RabbitMQ, Gearman), кеширование, throttling.
Кастомизация интерфейса: не просто «покраска», а UX
Продуктивность системы напрямую зависит от удобства интерфейса. Особенно это критично на этапе внедрения — если сотрудники не понимают, куда кликать, они возвращаются в Excel.
Зоны доработки UI:
- создание своих виджетов в карточке сущностей (например, карта маршрута для логиста);
- переработка CRM-форм (удаление лишних полей, автозаполнение, групповое редактирование);
- внедрение собственных фильтров и таблиц с аналитикой;
- встраивание графиков BI или диаграмм прямо в CRM-раздел (через iframe, библиотеки D3)
Работа с UI — это не верстка ради дизайна. Хорошая CRM-интерфейсная доработка экономит до 20–30% времени операторов ежедневно.
Кастомизация vs использование маркетплейс-решений: в каких случаях доработка оправдана
Перед тем как писать собственный модуль, стоит проверить Bitrix24.Market и интеграционные каталоги. Готовые решения могут покрыть до 40–60% типовых задач — важно только критически подходить к выбору.
Где маркетплейс — лучшее решение
- Простая интеграция с классической телефонией, почтовиками (SMTP, Gmail), стандартными облачными хранилищами (Dropbox, Яндекс.Диск);
- Шаблоны бизнес-процессов: согласование документов, выдача задания, распределение лидов;
- Виджеты онлайн-чата, формы сбора заявок, callback;
- Примитивные подключения магазинов к CRM (Magento, OpenCart), если нет уникальной бизнес-логики.
Когда кастомизация неизбежна
Есть ряд критериев, по которым готовый модуль может быть заведомо неудовлетворительным:
- Частота изменений: если бизнес-процесс прописан сегодня, а завтра его меняют — нужен контролируемый код, не зависимый от закрытого решения;
- Нестандартная логика: например, сделки, завязанные на геолокацию, зону доставки, повторяющиеся заказы с умной сменой менеджера;
- Жесткие требования безопасности: корпоративные клиенты часто требуют локальной установки, защиты REST API, логирования всего взаимодействия;
- Нестабильность или отсутствие поддержки SDK у маркетплейс-решения;
- Слишком много костылей при адаптации готового модуля к запретам или исключениям в бизнесе.
Правило простое: если чужой модуль нужно «обойти» или «допилить» — целесообразнее сразу написать свой на D7 с учетом корпоративных требований.
Сравнение подходов
| Критерий | Маркетплейс | Кастомная доработка |
| Скорость внедрения | Быстро (1-3 дня) | Средне (1-3 недели) |
| Гибкость логики | Ограничена | Полная контроль |
| Стоимость поддержки | Зависит от поставщика | Ваша зона ответственности |
| Обновляемость | Автоматическая (не всегда корректная) | Требует plan-подхода |
Перед началом доработки необходимо провести аудит доступных решений, составить сценарии юзкейсов и обсудить их с техническим архитектором проекта. Это позволяет избежать излишней сложности и сэкономить бюджет.
Особенности работы с ядром Битрикс при глубокой доработке
Глубокая доработка CRM на платформе Битрикс требует системного подхода: работа с ядром напрямую — рискованный путь. Ошибка в архитектуре на ранней стадии способна привести к долгой, дорогой и малоподдерживаемой системе уже через полгода эксплуатации.
Расширение без «ломания» ядра
Главное правило: ядро нельзя модифицировать напрямую. Любые изменения в файлах системных модулей исчезнут при обновлении или приведут к падению системы. Вместо этого следует использовать официальные механизмы расширения:
- Собственные модули — изолированные пространства имен и логики, с управляемыми зависимостями и возможностью установки/обновления через административный интерфейс;
- События — подписка на внутренние ходы системы (например,
OnAfterCrmDealUpdate,OnBeforeUserAdd,OnBeforeIBlockSectionUpdateи др.), позволяет встраиваться «по правилам»; - Расширение стандартных компонентов без изменения оригинального поведения — через локальные копии компонентов (
/local/components) или шаблонную переопределяющую верстку.
Пример правильного подключения бизнес-логики через событие:
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'crm',
'OnAfterCrmDealUpdate',
['\\Vendor\\Module\\EventHandlers', 'onDealUpdated']
);
Такой подход оставляет ядро нетронутым и сохраняет полную совместимость с будущими обновлениями.
Событийная модель и модульность: залог масштабируемости
Для каждого блока логики стоит заводить отдельный модуль с четкой ответственностью. Например:
vendor.crm.workflow— специфичные бизнес-процессы;vendor.crm.analytics— обработчики аналитических событий и расчет показателей;vendor.crm.externalsync— интеграция с внешними системами.
Так формируется устойчивая архитектура с возможностью отключения/развития отдельных направлений без риска для остальной системы.
Когда поведение должно изменяться динамически (например, обработка смены статуса в зависимости от загруженного модуля), событийная модель позволяет строить реактивную логику — чисто и управляемо.
Обновления: управление совместимостью и проверка кода
Обновления Битрикс — источник риска при доработке. Вот несколько рекомендаций, чтобы не потерять функционал после апдейта:
- Никогда не изменяйте исходный код системы — даже через копирование файлов;
- Выносите нестандартные действия в собственные модули или агенты с проверкой на установленную версию;
- Используйте систему контроля версий (Git) и автоматические тесты перед выкладкой;
- Периодически запускайте
SiteUpdateв режиме dry-run (тестовая локальная копия), чтобы выявить потенциальные несовместимости; - Используйте
Performance Monitorперед и после обновления — инструмент покажет деградацию производительности или критичные ошибки кэширования.
Официальная документация Битрикс рекомендует оформлять все изменения в модули с подключением через registerModule() и includeModule() — это упрощает техническую поддержку.
Performance Monitor и производительность при сложных сценариях
С ростом нагрузки (много пользователей, параллельные продажи, внешние интеграции) любая CRM начинает страдать, если ее архитектура не была рассчитана на масштабирование. Ключ к стабильности — раннее тестирование узких мест. Вот на что обрщать внимание:
- Страница карточки сделки: если в ней содержится десятки мелких запросов без кэширования, производительность падает кратно при большом количестве обращений;
- Формы/таблицы с большим числом полей и правил отображения (особенно с фильтрацией по HL-блокам);
- Бизнес-процессы внутри CRM, которые запускаются при каждом изменении объекта и не сбалансированы по елочности выполнения (например, сценарий с шагом в 5 вложенных условий);
- Параллельные обращения REST API (например, мобильное приложение, синхронизация с сервисами и автоматизированные отчеты запускаются в одно и то же время).
Здесь помогает модуль «Производительность» и интеграция с внешними средствами (NewRelic, Sentry, Datadog), которые показывают задержки, ошибки и узкие места.
Чего точно не стоит делать при доработке CRM на Битрикс
Ошибки в архитектуре CRM на Битрикс — не абстрактные проблемы, а вполне конкретные причины потери клиентов, данных и репутации. Вот практический список того, чего следует избегать при доработке.
Прямая модификация ядра
Это самая грубая и распространенная ошибка, особенно в проектах с новичками или фрилансерами. Изменение файлов /bitrix/modules, /bitrix/components, crm/classes без вынесения в собственные модули приведет к:
- потере всех доработок при обновлении;
- конфликтам компонентов и нестабильной работе;
- сложностям при переносе на другие инстанции (dev/stage/prod);
- невозможности работы с поддержкой Битрикс (в случае лицензии — теряется гарантия стабильности).
Костыли в ORM и смешивание старого и нового API
На одной странице можно встретить вызовы типа:
$rsDeals = CCrmDeal::GetList(...); // старый API $arDeal = Bitrix\Crm\DealTable::getById(...); // новый D7 ORM
Такая мешанина приводит к двойным запросам, потере кэширования и трудностям в поддержке. ORM D7 — приоритет для всех новых решений. Старый API допустим только для обратной совместимости и переходных этапов миграции.
Игнорирование масштабирования
Например, фильтрация выпадающего списка по 3000 записям клиентов, с рендерингом в UI по полной выборке — гарантированный провал под реальной нагрузкой. CRM должна проектироваться как модуль крупного интернет-ресурса, где есть:
- ленивая подгрузка (infinite scroll);
- кеш элементов и результатов SQL-запросов;
- отложенные операции (через очереди или cron);
- разделение логик на микросервисы при необходимости.
Без этих принципов Битрикс начнет «падать» при росте данных.
Жесткий хардкод вместо структур
Пример плохой практики:
if ($companyId == 482) {
$manager = 127;
}
Это надо заменять на: HL-блок «Настройки» → параметр «менеджер по умолчанию для компании». Так решается ряд задач:
- фронт-офис может менять параметры без разработчика;
- все настройки централизованы и документированы;
- произвольное изменение бизнес-логики становится возможным без изменения кода;
- система не превращается в «клубок if’ов» и тяжело тестируемый монолит.
Как построить устойчивую архитектуру CRM на Битрикс
Когда CRM строится на заказ, особенно крупная, важно изначально задать правильную архитектуру. Это не только вопрос модулей и событий, но и всей экосистемы: кто и как взаимодействует, как обновлять, как тестировать, и главное — как поддерживать устойчивость этой системы на 3–5 лет эксплуатации.
Модульный подход
Разбивайте всю логику проекта на независимые модули по слою ответственности:
- Логика бизнес-задач: отдельный модуль с обработчиками сделок, бизнес-процессов, рутин;
- Интеграции: модуль на REST или SOAP, отдельные сущности-адаптеры;
- Интерфейсный уровень: кастомные компоненты и шаблоны без логики — только визуализация;
- Фоновые обработки: агенты, cron-задачи, построение отчетов;
- Журналирование и аналитика: отдельный слой логирования событий (на уровне HL-блока или стороннего решения — ELK, Graylog и пр.).
Сильное разделение логики облегчает поддержку, деплой, тестирование и масштабирование проекта. Кроме того, появляется возможность передавать развитие отдельных блоков разным подрядчикам или внутрикомандам без риска перезаписать код друг друга.
В следующем блоке мы рассмотрим схемы интеграций, работу с внешними сервисами и архитектуру масштабируемых CRM на Битрикс.
