Разработка кастомного модуля 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С-Битрикс

Расширение функциональности через правки ядра — худшее, что можно сделать в 1С-Битрикс. После каждого обновления платформы правки слетают, поддержка становится кошмаром, а понять «что и зачем изменено» через год невозможно. Кастомный модуль — правильный способ добавить нестандартную функциональность без вмешательства в ядро.

Архитектура модуля Битрикс

Модуль 1С-Битрикс — это директория в /bitrix/modules/<vendor>.<modulename>/ со строго определённой структурой. Битрикс использует соглашение об именовании: <vendor>.<name>, где vendor — краткое имя разработчика.

vendor.modulename/
├── install/
│   ├── index.php          # Класс установщика (extends CModule)
│   ├── db/
│   │   └── mysql/
│   │       ├── install.sql   # SQL для создания таблиц
│   │       └── uninstall.sql # SQL для удаления таблиц
│   └── files/             # Файлы, копируемые при установке
│       └── bitrix/
│           └── components/
├── lib/                   # Классы в пространстве имён Vendor\Modulename\
│   ├── Repository.php
│   ├── Service.php
│   └── Orm/
│       └── EntityTable.php  # ORM-сущность (D7)
├── lang/
│   ├── ru/
│   │   └── install/
│   │       └── index.php    # Языковые метки
│   └── en/
├── options.php            # Страница настроек модуля
└── include.php            # Подключается при \Bitrix\Main\Loader::includeModule()

Класс установщика

Установщик наследует CModule и реализует методы DoInstall() и DoUninstall():

// vendor.modulename/install/index.php
class vendor_modulename extends CModule
{
    public string $MODULE_ID          = 'vendor.modulename';
    public string $MODULE_VERSION     = '1.0.0';
    public string $MODULE_NAME        = 'Название модуля';
    public string $MODULE_DESCRIPTION = 'Описание модуля';
    public string $PARTNER_NAME       = 'Vendor';

    public function DoInstall(): void
    {
        RegisterModule($this->MODULE_ID);
        $this->InstallDB();
        $this->InstallFiles();
        $this->InstallEvents();
    }

    public function InstallDB(): void
    {
        global $DB;
        $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/vendor.modulename/install/db/mysql/install.sql');
    }

    public function InstallEvents(): void
    {
        RegisterModuleDependences(
            'main', 'OnPageStart',
            'vendor.modulename', '\Vendor\Modulename\EventHandlers', 'onPageStart'
        );
    }

    public function DoUninstall(): void
    {
        $this->UnInstallEvents();
        $this->UnInstallDB();
        UnRegisterModule($this->MODULE_ID);
    }
}

ORM D7: работа с данными

Современные модули используют ORM Битрикс D7 вместо прямых SQL-запросов. Класс таблицы объявляется через наследование \Bitrix\Main\ORM\Data\DataManager:

namespace Vendor\Modulename\Orm;

use Bitrix\Main\ORM\Data\DataManager;
use Bitrix\Main\ORM\Fields\{IntegerField, StringField, DatetimeField, BooleanField};

class RequestTable extends DataManager
{
    public static function getTableName(): string
    {
        return 'vendor_modulename_requests';
    }

    public static function getMap(): array
    {
        return [
            new IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
            new StringField('NAME', ['required' => true, 'size' => 255]),
            new StringField('EMAIL', ['size' => 255]),
            new BooleanField('ACTIVE', ['default_value' => true]),
            new DatetimeField('CREATED_AT'),
        ];
    }
}

Использование:

// Получить записи
$result = RequestTable::getList([
    'filter' => ['ACTIVE' => true],
    'select' => ['ID', 'NAME', 'EMAIL'],
    'order'  => ['CREATED_AT' => 'DESC'],
]);

// Добавить запись
RequestTable::add(['NAME' => 'Test', 'EMAIL' => '[email protected]']);

События (Events)

Модуль может подписываться на события платформы и генерировать собственные. Регистрация обработчика события:

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',                    // модуль
    'OnSaleOrderBeforeSaved',  // событие
    ['\Vendor\Modulename\EventHandlers', 'onOrderBeforeSaved']
);

Генерация собственного события для расширяемости:

$event = new \Bitrix\Main\Event('vendor.modulename', 'OnRequestAdded', ['REQUEST' => $request]);
$event->send();

Административный интерфейс

Раздел в административной панели регистрируется через пункт меню (/bitrix/menu.php или автоматически через файл menu.php в папке модуля). Страницы административного раздела располагаются в /bitrix/admin/vendor_modulename_*.php.

Для современных проектов административный интерфейс реализуется как Inertia/React SPA или как классические битриксовые административные страницы с использованием CAdminList, CAdminForm.

Версионирование и Marketplace

Модуль может распространяться через Marketplace 1С-Битрикс. Для публикации требуется: код без ошибок, языковые файлы для ru/en, документация, совместимость с актуальными версиями PHP и платформы.

Типичные сроки разработки

Сложность модуля Описание Срок
Простой 1–2 сущности, без сложной логики 1–2 недели
Средний 3–5 сущностей, события, кастомный UI 3–6 недель
Сложный Интеграции, многосайтовость, API 2–4 месяца

Модуль покрывается документацией на уровне API (PHPDoc) и пользовательской документацией для администраторов.