Блог Горошко Андрея 1C-Битрикс Чек-лист: Стандарты современной разработки на 1С-Битрикс (D7, ORM, Controllers)

Чек-лист: Стандарты современной разработки на 1С-Битрикс (D7, ORM, Controllers)

Введение
Современный 1С-Битрикс давно ушел от концепции «CMS старой школы» с глобальными переменными и прямыми SQL-запросами.

Переход на ядро D7 превратил платформу в мощный PHP-фреймворк. Чтобы ваш код был безопасным, производительным и легко поддерживаемым, мы подготовили .

«Золотой стандарт» современного Битрикс-разработчика

Используйте этот чек-лист при написании нового функционала и проведении Code Review (ревью кода).

Шаг 1. Работа с базой данных и инфоблоками (ORM D7)

Современный подход требует полного отказа от прямых обращений к БД и минимизации использования старого API там, где это возможно.

✅ Использовать:

  • D7 ORM (‘\Bitrix\Main\OR\Bitrix\Main\ORM\Data\DataManager, , getListfetchObject, ).fetchCollection
  • Сгенерированные классы инфоблоков (API символьный код):
  • Начиная с версии 20.0, для выборки элементов и их свойств используйте ‘\Bitrix.\Bitrix\Iblock\Elements\Element[API_CODE]Table
  • Связи (Relations): Использовать и механизм ReferenceFieldruntime полей для JOIN-запросов вместо тяжелых циклов внутри PHP.

❌ Избегать:

  • Прямых SQL-запросов через .$DB->Query
  • Старого класса (оставьте его CIBlockElement::GetList
  • только для легаси-проектов или специфичных сложных фильтраций, которые пока не поддерживает ORM).

💡 Пример чистого кода (D7 ORM):

use \Bitrix\Iblock\Elements\ElementCatalogTable;
use \Bitrix\Main\Entity\ReferenceField;

$products = ElementCatalogTable::getList([
    'select' =>['ID', 'NAME', 'PRICE_' => 'PRICE_ELEM.PRICE'],
    'filter' => ['=ACTIVE' => 'Y'],
    'runtime' =>[
        new ReferenceField(
            'PRICE_ELEM',
            \Bitrix\Catalog\PriceTable::class,
            ['=this.ID' => 'ref.PRODUCT_ID']
        )
    ],
    'limit' => 10
])->fetchCollection();

foreach ($products as $product) {
    echo $product->getName();
}

Шаг 2. Разработка компонентов и AJAX

Логика должна быть строго инкапсулирована по паттерну MVC.

✅ Использовать:

  • Разработку через с наследованием от class.php \CBitrixComponent.
  • Интерфейс и метод \Bitrix\Main\Engine\Contract\ControllerableconfigureActions для обработки AJAX внутри компонента.
  • Строгую типизацию параметров и возвращаемых значений.

❌ Избегать:

  • Написания бизнес-логики в и (они только для подготовки данных к выводу)
  • .template.php result_modifier.php
  • Использования устаревшего файла в новых компонентах
  • .component.php

💡
На фронтенде вызывайте методы через нативный JS: 

Лучшая практика для AJAX:BX.ajax.runComponentAction(‘vendor:component.name’, ‘actionName’, { mode: ‘class’, data: {…} }). Обязательно используйте механизм подписанных параметров ().\Bitrix\Main\Component\ParameterSigner

Шаг 3. Фронтенд и клиентская оптимизация (JS/CSS)

Битрикс предоставляет мощный API для работы с ассетами, который нужно использовать правильно.

✅ Использовать:

  • JS-расширения (Extensions): Создавайте файлы в папке config.php/local/js/vendor/ и подключайте их через .\Bitrix\Main\UI\Extension::load(‘vendor.myplugin’);
  • Отложенную инициализацию через .BX.ready
  • Современные UI-компоненты Битрикс ().BX.UI.*

❌ Избегать:

  • Прямого вывода тегов и <script><link> в или .header.php template.php
  • Бесконтрольного подключения jQuery (большинство задач отлично решается нативным или Vanilla JS).BX

Шаг 4. Окружение, Request и настройки

Глобальные переменные — главный враг безопасного и тестируемого кода.

✅ Использовать:

  • Классы D7 для доступа к среде: , , .ApplicationContextRequest
  • Класс для получения настроек модулей.\Bitrix\Main\Config\Option::get()
  • Класс вместо .\Bitrix\Main\Application::getDocumentRoot()
  • $_SERVER[‘DOCUMENT_ROOT’]

❌ Избегать:

  • Обращения к суперглобальным массивам , ‘$_GE $_POST $_GET, и .$_REQUEST $_SERVER
  • Использования глобальных переменных, внутри методов классов (используйте $APPLICATION $USER $DBglobal $USER; 
  • только в крайнем случае легаси, в D7 есть ). \Bitrix\Main\Engine\CurrentUser::get()

💡 Пример правильного получения данных из GET-запроса:

$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
$productId = $request->getQuery("id"); // Эквивалент $_GET['id']
$productName = $request->getPost("name"); // Эквивалент $_POST['name']

Шаг 5. Отладка, Логирование и Обработка ошибок

Профессиональный код не должен падать с «белым экраном» или скрывать ошибки.

✅ Использовать:

  • Монитор производительности для профилирования запросов.
  • Блоки с обработкой нативных исключений Битрикс (например, try-catch\Bitrix\Main\SystemException).
  • Стандарт PSR-3: или системный метод \Bitrix\Main\Diag\Logger\Bitrix\Main\Diag\Debug::dumpToFile().

❌ Избегать:

  • Устаревшей функции .AddMessage2Log()
  • Конструкций с «собакой» (подавление ошибок) — это замедляет работу PHP и скрывает баги.@

Шаг 6. Архитектура проекта

Порядок в файловой системе — залог быстрого погружения новой команды в проект.

✅ Использовать:

  • Контроллеры D7 (\Bitrix\Main\Engine\Controller) для реализации единого REST API и обработки глобальных AJAX-запросов.
  • Агенты на CRON (откажитесь от выполнения агентов на хитах пользователей).
  • Событийную модель D7: Регистрация событий только через в файле \Bitrix\Main\EventManagerinit.php.

✅ Структура директорий:

  • Весь кастомный код, шаблоны, компоненты и модули должны располагаться только в директории /local/  .
  • Папку /bitrix/ трогать запрещено .
  • Используйте (файл в корне) для подключения сторонних PHP-библиотек.
  • Composer composer.json

Заключение: Почему это важно?

1С-Битрикс — это живая, постоянно развивающаяся экосистема. Современное ядро D7 предоставляет инструменты, сопоставимые с популярными PHP-фреймворками (Laravel, Symfony).

Следование этим стандартам решает 3 главные задачи:

  1. Скорость: ORM и правильное кеширование снижают нагрузку на БД в десятки раз.
  2. Безопасность: Использование D7 Request защищает от SQL-инъекций и XSS-атак.
  3. Поддержка: Ваш код становится чистым, предсказуемым и понятным для любого Middle/Senior разработчика.

Пишите красиво, используйте актуальное API и удачи в ваших проектах!

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Captcha: Руководство разработчикаCaptcha: Руководство разработчика

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Captcha: Руководство разработчика», проанализируем лучшие практики и покажем,

Разработка интернет-магазина с возможностью оформления совместных покупокРазработка интернет-магазина с возможностью оформления совместных покупок

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

Удалить привязку sale.paymentItemShipment.deleteУдалить привязку sale.paymentItemShipment.delete

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Удалить привязку sale.paymentItemShipment.delete», проанализируем лучшие практики и покажем,