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

Свойства инфоблоков - типы, множественность, выборка

Свойства - крупнейшая подтема инфоблоков: 320 вопросов из собранных. Здесь собраны решения по ним.

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

Значения свойств лежат не в таблице элементов. У инфоблока их два способа хранения: общая таблица значений и отдельная таблица на инфоблок. Способ выбран при создании инфоблока и меняет и производительность, и вид запросов, а извне это почти не заметно, пока не понадобится фильтр.

Тип свойства задаётся один раз. Перевести список в привязку или строку в число штатно нельзя: значения хранятся по-разному. Смена типа означает создание нового свойства и перенос значений своим кодом.

Множественность - это отдельный флаг, а не следствие типа. У одиночного свойства запись нового значения затирает прежнее без ошибки, и потеря данных обнаруживается позже, когда искать причину уже негде.

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

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

Можно ли изменить код свойства после создания?

Да, код меняется без потери значений: он лишь идентификатор для кода и шаблонов. Менять нельзя тип и способ хранения - вот они завязаны на формат данных в таблице.

Почему фильтр по свойству ничего не находит?

Фильтр по свойству пишется как PROPERTY_КОД с кодом в верхнем регистре, а для списков сравнивается идентификатор значения, а не его название. Обе ошибки дают пустую выборку без предупреждения.

Как хранить значение с единицей измерения?

Двумя свойствами: числом и списком единиц. Строка со смешанным содержимым не фильтруется и не сортируется, а разделять её потом дороже, чем завести второе свойство сразу.

Что быстрее: общая таблица значений или отдельная?

Отдельная таблица быстрее на выборках с фильтром по нескольким свойствам, потому что значения лежат колонками. Общая универсальнее и не требует перестроения при добавлении свойства.

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

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