В статье приведены методы API D7, которые часто применяются при работе с Highload-блоками в 1С-Битрикс.

Получение класса сущности HL-блока

Для работы с данными в Highload-блоке через ORM и API D7 нужно для начала получить сущность и класс HL-блока.

Сделать это можно следующим образом.

Получение по имени:

<?php

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Loader;

Loader::includeModule('highloadblock');

$hlBlockName = 'ExampleHL'; //имя HL-блока
//получение HL по имени
$hlBlock = HighloadBlockTable::getList(['filter' => ['NAME' => $hlBlockName]])->fetch();
$entity = HighloadBlockTable::compileEntity($hlBlock);
//получаем класс для работы
$entityClass = $entity->getDataClass();

Также HL-блок можно получить по ID:

<?php
//получение HL по ID
$hlBlock = HighloadBlockTable::getList(['filter' => ['ID' => $hlBlockId]])->fetch();

Или по названию таблицы:

<?php
//получение HL по имени таблицы
$hlBlock = HighloadBlockTable::getList(['filter' => ['=TABLE_NAME' => $hlBlockTable]])->fetch();

Добавление записи в HL-блок

<?php

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Loader;

Loader::includeModule('highloadblock');

$hlBlockName = 'ExampleHL'; //имя HL-блока
$hlBlock = HighloadBlockTable::getList(['filter' => ['NAME' => $hlBlockName]])->fetch();
$entity = HighloadBlockTable::compileEntity($hlBlock);
//получаем класс для работы
$entityClass = $entity->getDataClass();

$res = $entityClass::add([
    'UF_NAME' => 'Тест',
    'UF_XML_ID' => 'test',
    //... остальные поля
]);

$isSuc = $res->isSuccess();

Изменение записи в HL-блоке

<?php

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Loader;

Loader::includeModule('highloadblock');

$hlBlockName = 'ExampleHL'; //имя HL-блока
$hlBlock = HighloadBlockTable::getList(['filter' => ['NAME' => $hlBlockName]])->fetch();
$entity = HighloadBlockTable::compileEntity($hlBlock);
//получаем класс для работы
$entityClass = $entity->getDataClass();

//$id – ID записи в HL-блоке
$res = $entityClass::update($id, [
    'UF_NAME' => 'Тест',
    'UF_XML_ID' => 'test',
    //... остальные поля
]);

Удаление записи из HL-блока

<?php

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Loader;

Loader::includeModule('highloadblock');

$hlBlockName = 'ExampleHL'; //имя HL-блока
$hlBlock = HighloadBlockTable::getList(['filter' => ['NAME' => $hlBlockName]])->fetch();
$entity = HighloadBlockTable::compileEntity($hlBlock);
//получаем класс для работы
$entityClass = $entity->getDataClass();

//$id – ID записи в HL-блоке
$res = $entityClass::delete($id);

Получение записей из HL-блока

<?php

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Loader;

Loader::includeModule('highloadblock');

$hlBlockName = 'ExampleHL'; //имя HL-блока
$hlBlock = HighloadBlockTable::getList(['filter' => ['NAME' => $hlBlockName]])->fetch();
$entity = HighloadBlockTable::compileEntity($hlBlock);
//получаем класс для работы
$entityClass = $entity->getDataClass();

$listRes = $entityClass::getList([
    'select' => ['ID', 'UF_NAME', 'UF_XML_ID'],
    'filter' => [//...],
]);

// перебираем результат в массив
while ($item = $listRes->Fetch()) {
    $list[] = $item;
}

А в этой статье можете узнать, как получить все варианты из поля типа «Список» в HL-блоке.