В статье приведён развёрнутый материал о работе с Highload-блоками в 1С-Битрикс на D7, включающий пошаговые инструкции и примеры кода.

1. Введение
Highload-блоки (HL-блоки) в 1С-Битрикс предназначены для хранения и обработки больших объёмов данных, которые не всегда подходят под стандартные инфоблоки. Их часто используют, когда необходимо создать собственную структуру данных и быстро получать к ней доступ.
D7 — это современная архитектура (ORM) от Битрикс, которая позволяет более удобно работать с данными, используя встроенные классы и методы для взаимодействия с таблицами и записями в базе данных.
2. Подключение модуля
Чтобы начать, нужно убедиться, что модуль highloadblock
установлен и подключён. Обычно это делается с помощью:
<?php
use Bitrix\Main\Loader;
Loader::includeModule('highloadblock');
?>
Если модуль недоступен, его необходимо установить в административной части (Настройки → Модули).
3. Получение класса сущности Highload-блока
Чтобы работать с таблицей HL-блока через D7, нужно получить сущность и её класс данных. Предположим, что у нас есть Highload-блок с ID = $HLBLOCK_ID
. Ниже пример кода:
<?php
use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Entity;
// Получаем запись о Highload-блоке
$hlblock = HighloadBlockTable::getById($HLBLOCK_ID)->fetch();
// "Компилируем" сущность на основе HL-блока
$entity = HighloadBlockTable::compileEntity($hlblock);
// Получаем класс для работы с данными
$entityClass = $entity->getDataClass();
?>
Теперь в переменной $entityClass
находится класс, через который мы будем выполнять все операции: выборку, добавление, обновление, удаление и т.д.
4. Выборка данных
Для выборки данных из HL-блока используем метод getList()
, передавая в него параметры выборки:
<?php
$rsData = $entityClass::getList([
'select' => ['*'],
'filter' => ['UF_ACTIVE' => '1'],
'order' => ['ID' => 'ASC'],
'limit' => 10
]);
while($arData = $rsData->fetch()) {
// Обработка каждой записи
// $arData['ID'], $arData['UF_NAME'], и т.д.
}
?>
Здесь:
- select — массив выбираемых полей, в HL-блоках пользовательские поля имеют префикс
UF_
. - filter — массив условий выборки (аналог WHERE в SQL).
- order — порядок сортировки.
- limit — ограничение на количество возвращаемых записей.
5. Добавление записей
Чтобы добавить новую запись в Highload-блок, используем метод add()
:
<?php
$result = $entityClass::add([
'UF_NAME' => 'Новый элемент',
'UF_ACTIVE' => '1'
]);
if ($result->isSuccess()) {
$newId = $result->getId();
// Здесь $newId — это ID созданной записи
} else {
$errors = $result->getErrorMessages();
// Обработка ошибок
}
?>
В массиве передаём значения для всех требуемых полей (включая префикс UF_
). Метод isSuccess()
проверяет, успешно ли произошла операция, а getId()
возвращает ID добавленной записи.
6. Обновление записей
Для обновления существующей записи используется метод update()
, которому передаётся ID записи и массив новых значений:
<?php
$elementId = 10; // Пример ID записи, которую хотим обновить
$result = $entityClass::update($elementId, [
'UF_NAME' => 'Изменённое имя',
'UF_ACTIVE' => '0'
]);
if ($result->isSuccess()) {
// Успешно обновлено
} else {
$errors = $result->getErrorMessages();
// Обработка ошибок
}
?>
7. Удаление записей
Для удаления записи по её ID вызываем метод delete()
:
<?php
$elementId = 10;
$result = $entityClass::delete($elementId);
if ($result->isSuccess()) {
// Запись успешно удалена
} else {
$errors = $result->getErrorMessages();
// Обработка ошибок
}
?>
8. Особенности работы со свойствами (пользовательскими полями)
В Highload-блоках все настраиваемые поля начинаются с префикса UF_
. Если вы создаёте новые пользовательские поля, они автоматически становятся доступными для выборки и сохранения с помощью D7 (через $entityClass
), без необходимости дополнять схему вручную.
Для более «тонких» операций (например, валидаторы, событийные обработчики и т.д.) можно сгенерировать класс сущности, разместив его в папке /bitrix/modules/highloadblock/lib/
или в своём пространстве имён. Но в большинстве случаев достаточно просто использовать compileEntity
.
9. Рекомендации и лучшие практики
- Кэширование. При больших объёмах данных желательно использовать кэширование результатов выборки.
- Индексы. Не забывайте создавать индексы в таблицах для полей, по которым выполняете фильтрацию.
- События. Для HL-блоков доступны события
OnBeforeAdd
,OnAfterAdd
,OnBeforeUpdate
,OnAfterUpdate
,OnBeforeDelete
,OnAfterDelete
. При необходимости вы можете подписываться на них и модифицировать данные. - Сложные выборки. Для сложных запросов (например, использование SQL-функций, группировок) имеет смысл использовать методы Query, доступные через ORM D7.
10. Заключение
Highload-блоки в сочетании с D7 предоставляют мощный и гибкий инструмент для работы с данными в 1С-Битрикс. Используя встроенные механизмы ORM, можно эффективно и безопасно выполнять стандартные операции (CRUD), подключать бизнес-логику и обрабатывать большие объёмы данных с высокой производительностью.