Перейти к содержимому

Пользовательские поля на практике - типы, вывод, ошибки

Пользовательские поля - подтема на 31 вопрос из собранных. Здесь собраны решения по работе с ними из кода.

Что общего у этих задач

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

Хранятся значения в своей таблице на сущность. Поэтому фильтровать по полю можно, а сортировать - не всегда, и выборка по нескольким полям строится присоединением, а не простым условием.

Имя поля начинается с UF_ не для красоты. Префикс отличает пользовательские поля от штатных на всех уровнях: в формах, в выборках, в API. Поле без префикса завести нельзя, а с чужим префиксом - можно, и потом оно нигде не находится.

Свои поля не бесплатны для выборок. Каждое присоединение стоит времени, и десяток полей в списке из тысячи записей заметен в замерах скорости страницы.

С чего начать

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

Дальше задают код поля и его тип, помня, что тип потом почти не меняется. Множественность и обязательность тоже определяют сразу: переделывать их на живых данных дорого.

Последним проверяют вывод и выборку. Значение должно читаться и в административной части, и на витрине, и в выгрузке, иначе поле окажется украшением карточки.

Решения подтемы

Частые вопросы

Чем пользовательское поле отличается от свойства инфоблока?

Свойство принадлежит инфоблоку и живёт только у его элементов. Пользовательское поле крепится к сущности платформы: пользователю, разделу, заказу. Механизмы разные, и API у них разное.

Почему заведённое поле не появилось в форме?

Чаще всего оно заведено у другой сущности либо у него снят показ в форме. Проверяют, к какой сущности поле привязано, и её ли форму открывают.

Можно ли отсортировать выборку по полю UF?

Не всегда: значения лежат в отдельной таблице, и сортировка по ним требует присоединения. Множественные поля не сортируются в принципе - у одной записи их несколько.

Почему в поле знаки вопроса вместо русского текста?

Разошлась кодировка соединения с базой и кодировка таблицы значений. Это не свойство самого поля: так же будут выглядеть и другие данные из той же таблицы.

Связанные темы

Первоисточники