Проектирование структуры highload-блоков 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Проектирование структуры highload-блоков 1С-Битрикс
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1163
  • 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
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    653
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Проектирование структуры Highload-блоков 1С-Битрикс

HL-блок — это генератор пользовательских таблиц в MySQL/PostgreSQL поверх D7 ORM. Технически HL-блок — это описание в b_highload_block, набор полей в b_user_field, и автоматически создаваемая таблица hl_{XML_ID}. Ничего магического — просто способ создать таблицу с типизированными полями через интерфейс Битрикс без написания SQL. Но именно от того, как эта структура спроектирована, зависит, будет ли HL-блок работать как быстрый справочник или превратится в узкое место.

Когда HL-блок, а когда инфоблок или своя таблица

HL-блок заменяет инфоблок там, где не нужны разделы, SEO-поля (META_TITLE, META_KEYWORDS), preview/detail-изображения и встроенные механизмы публикации. Это справочники: бренды, страны, теги, единицы измерения, характеристики для фасета.

HL-блок проигрывает собственной D7-таблице (DataManager) когда:

  • Нужны составные индексы (HL поддерживает только индексы по отдельным полям через UF_*)
  • Нужны внешние ключи и каскадные операции
  • Схема таблицы меняется часто и требует миграций

В этих случаях правильнее создать класс, наследующий \Bitrix\Main\ORM\Data\DataManager, и управлять таблицей через него.

Типы полей HL-блока и их особенности

HL-блоки используют систему пользовательских полей (UF_*). Доступные типы:

  • string / string_formatted — VARCHAR. Для имён, названий.
  • integer — INT. Для числовых идентификаторов, сортировки.
  • double — DECIMAL/FLOAT. Для цен, коэффициентов.
  • boolean — TINYINT(1). Флаги активности.
  • file — хранит ID файла из b_file. Для изображений в справочниках.
  • enumeration — привязка к b_user_field_enum. Для фиксированных статусов внутри HL-записи.
  • datetime / date — DATETIME / DATE.
  • iblock_element / iblock_section — привязка к элементу или разделу инфоблока. Используется с осторожностью: создаёт неявную связь между HL и инфоблоком.

Проблема поля типа iblock_element в HL-блоке: при удалении элемента инфоблока HL-запись не обновляется автоматически — нужен обработчик события OnAfterIBlockElementDelete.

Индексирование полей HL-блока

По умолчанию HL-блок создаёт таблицу только с PRIMARY KEY по полю ID. Все остальные поля — без индексов. Если HL-блок используется как справочник для фасетного индекса каталога, дополнительные индексы обычно не нужны — фасет работает с b_iblock_{ID}_index, а не с HL-таблицей напрямую.

Но если HL-блок используется для хранения операционных данных (история действий, лог заказов, записи бонусной программы) — индексы по полям выборки критичны. Добавляются вручную через SQL-миграцию:

ALTER TABLE hl_loyalty_history ADD INDEX idx_user_id (UF_USER_ID);
ALTER TABLE hl_loyalty_history ADD INDEX idx_date (UF_DATE);

Битрикс не предоставляет UI для управления индексами HL-таблиц — только прямой SQL или скрипт миграции.

Кейс: HL-блок как замена инфоблока для B2B-каталога

Дистрибьютор электроники. В каталоге 2 200 уникальных характеристик товаров (технические параметры). Изначально — свойства инфоблока типа «Строка», b_iblock_element_property содержала 8 млн строк.

Решение: перевести справочные характеристики на HL-блоки по доменам:

  • hl_tech_connectivity — интерфейсы подключения (USB-C, HDMI, etc.)
  • hl_tech_resolution — разрешения экранов и матриц
  • hl_tech_standard — стандарты (Wi-Fi 6, Bluetooth 5.2, etc.)

Каждый HL-блок: поля UF_NAME (VARCHAR 255), UF_XML_ID (VARCHAR 50, уникальный), UF_ACTIVE (boolean), UF_SORT (integer). Индексы по UF_XML_ID — добавлены вручную для быстрого поиска при импорте из 1С.

Результат: b_iblock_element_property сократилась с 8 млн до 1.2 млн строк (остались только числовые свойства). Фасетный индекс пересоздаётся за 8 минут вместо 45.

Управление данными HL-блока через D7

Работа с HL-блоком в коде — через \Bitrix\Highloadblock\HighloadBlockTable и динамически создаваемый класс:

$hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getById($id)->fetch();
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
$dataClass = $entity->getDataClass();
$rows = $dataClass::getList(['filter' => ['UF_ACTIVE' => true]]);

Это стандартный паттерн — его важно закрепить в code style проекта, чтобы обращения к HL-блокам не расползались по шаблонам в виде SQL-запросов.

Состав работы по проектированию HL-блоков

  • Анализ свойств инфоблоков: выявление кандидатов для перевода на HL
  • Проектирование схемы полей каждого HL-блока
  • Определение стратегии индексирования
  • Планирование миграции данных из b_iblock_element_property
  • Документирование: схема таблиц, назначение полей, связи
  • Скрипты создания HL-блоков и первичного заполнения

Срок проектирования: 2–5 рабочих дней на каждые 10–15 HL-блоков в зависимости от сложности предметной области.