Пользовательские поля и HighLoad-блоки в 1С-Битрикс часто путают, хотя решают они разные задачи. Первые расширяют существующие сущности, вторые создают отдельные высоконагруженные таблицы.
Что это за механизмы и зачем они нужны
Пользовательские поля (User Fields, UF) — это дополнительные поля, которые вы добавляете к уже существующей сущности: разделу инфоблока, пользователю, задаче, заказу, элементу медиабиблиотеки. Они не создают новую сущность, а расширяют текущую.
HighLoad-блок — это самостоятельное хранилище данных на основе ORM Битрикс. По сути это отдельная таблица в базе, оптимизированная под большие объёмы записей: миллионы строк справочников, характеристик, геоданных.
- UF отвечают на вопрос «какими ещё атрибутами описать уже имеющийся объект».
- HighLoad-блок отвечает на вопрос «где хранить большой независимый массив однотипных записей».
Важно: у HighLoad-блока внутри тоже используются пользовательские поля — именно они описывают его колонки. Поэтому механизмы не конкурируют, а работают на разных уровнях.
Где физически хранятся данные
Ключевое техническое отличие — способ хранения в базе данных.
- Значения пользовательских полей хранятся в служебных таблицах вида
b_uts_*иb_utm_*(single/multiple values), привязанных к конкретной сущности. - Данные HighLoad-блока лежат в отдельной таблице, имя которой вы задаёте сами при создании блока (например
b_hlbd_brands).
Из-за этого HighLoad-блоки лучше держат нагрузку: под каждую запись — своя строка в собственной таблице, есть возможность построить индексы. Пользовательские поля удобнее, когда записей немного и они логически принадлежат родительской сущности.
Сравнение по ключевым параметрам
Сводная таблица поможет быстро выбрать подходящий инструмент.
| Параметр | Пользовательские поля | HighLoad-блок |
|---|---|---|
| Назначение | Расширение существующей сущности | Отдельное хранилище данных |
| Хранение в БД | Служебные таблицы b_uts_* |
Собственная таблица блока |
| Объём данных | Небольшой | Сотни тысяч и миллионы записей |
| Индексы | Ограниченно | Да, настраиваются |
| Доступ из кода | Через API сущности | Через ORM (D7) |
Как добавить пользовательское поле
На примере поля для раздела инфоблока порядок действий такой.
- Откройте нужный инфоблок в разделе Контент → Инфоблоки и перейдите к настройкам его типа.
- В настройках инфоблока найдите вкладку Пользовательские поля (для разделов и элементов).
- Нажмите Добавить поле, укажите символьный код с префиксом
UF_, тип данных и подпись. - Сохраните. Поле появится в форме редактирования раздела или элемента.
Общий список всех UF по сущностям доступен в Настройки → Настройки продукта → Пользовательские поля.
Как создать HighLoad-блок
HighLoad-блок создаётся отдельно и требует прав администратора.
- Перейдите в Настройки → Highload-блоки и нажмите Добавить Highload-блок.
- Задайте название таблицы латиницей (например
b_hlbd_brands) и название сущности с заглавной буквы (напримерBrands). - Сохраните блок, затем откройте вкладку Пользовательские поля и добавьте колонки — это те же UF, что и у обычных сущностей.
- Заполняйте записи на вкладке со списком элементов блока либо через ORM-код.
После создания блок можно использовать как источник данных для свойства инфоблока типа «Справочник», связав каталог с высоконагруженным хранилищем.
Когда что выбирать на практике
Простое правило: если данные логически принадлежат объекту и их немного — берите пользовательское поле. Если это самостоятельный большой справочник — HighLoad-блок.
- Пользовательское поле: дополнительный телефон у пользователя, флаг «VIP» у заказа, цвет фона у раздела каталога.
- HighLoad-блок: справочник брендов на десятки тысяч записей, каталог цветов RAL, база городов и регионов, характеристики для фасетного поиска.
Частый гибридный сценарий — свойство инфоблока типа «Справочник», которое ссылается на HighLoad-блок. Так вы получаете и удобство выбора в карточке товара, и производительность отдельной таблицы.
Частые ошибки
- Хранят большой справочник в UF-поле типа «Список». При тысячах значений форма редактирования тормозит — такие данные место в HighLoad-блоке.
- Забывают префикс
UF_. Битрикс сам добавляет его к символьному коду; ручное дублирование даёт код видаUF_UF_.... - Дают имя таблицы HighLoad-блока с ошибкой. Имя менять после создания рискованно — данные привязаны к таблице, переименование может оборвать связи.
- Ожидают, что HighLoad-блок появится в стандартных компонентах каталога. Он не является инфоблоком, для вывода нужен свой код или связка через свойство-справочник.
- Путают права доступа. UF наследуют права родительской сущности, а доступ к HighLoad-блоку настраивается отдельно на уровне модуля.
Итог
Пользовательские поля и HighLoad-блоки — не альтернативы, а инструменты для разных уровней задачи. UF расширяют существующую сущность, HighLoad-блок создаёт отдельное высоконагруженное хранилище.
Для небольших дополнительных атрибутов используйте пользовательские поля. Для крупных независимых справочников — HighLoad-блоки, а связывайте их с каталогом через свойство инфоблока типа «Справочник». Такой подход даёт и удобство в админке, и производительность при больших объёмах данных.