Универсальные списки в 1С-Битрикс - хранилища данных без кода
Универсальные списки позволяют завести структурированное хранилище без написания кода. Это справочник, база знаний или реестр контрагентов. Разберём, как они устроены изнутри и где проходят границы применимости.
Как это работает
Всё построено поверх инфоблоков. Список - это инфоблок внутри специально выделенного типа инфоблока. Данные хранятся там же, где обычный контент, а модуль даёт поверх удобный интерфейс, публичный компонент и привязку бизнес-процессов. Поэтому первый шаг настройки - создать отдельный тип инфоблока под списки и указать его модулю.
Иерархия делается разделами. Списки поддерживают разделы, и это тот самый механизм произвольной иерархии хранения. Показ разделов переключается в интерфейсе.
У нового списка одно поле. По умолчанию есть только название, все остальные поля добавляют вручную из доступных типов.
Модуль недоступен в младших редакциях. Закладывать универсальные списки в решение для таких редакций нельзя. Там придётся использовать инфоблоки напрямую.
Бизнес-процессы подключаются к спискам штатно. Это главная причина выбирать списки вместо голых инфоблоков, когда нужны согласования и маршруты обработки.
Примеры
1. Вывод списка на сайте
$APPLICATION->IncludeComponent('bitrix:lists.list.element', '', [ 'IBLOCK_TYPE_ID' => 'lists', 'IBLOCK_ID' => $iblockId, 'SEF_MODE' => 'Y', 'SEF_FOLDER' => '/services/lists/',]);Публичный интерфейс списка даёт просмотр, добавление и редактирование элементов без разработки. Настраивают его параметрами компонента и правами.
2. Доступ к данным из кода
Список - это инфоблок, поэтому данные читаются обычными средствами. Подходит и классическое API, и ORM инфоблока. Никакого отдельного хранилища нет, и это удобно: миграция со списка на полноценный инфоблок не требует переноса данных.
3. Когда брать список, а когда инфоблок
Список хорош, когда структуру и содержимое ведут не программисты. Это справочники, реестры и базы знаний с согласованием. Инфоблок предпочтительнее, когда данные участвуют в витрине сайта. Там нужны собственные шаблоны вывода, сложные выборки и код, а дополнительный слой интерфейса только мешает.
Справочник
| Элемент | Назначение | Особенности |
|---|---|---|
| Тип инфоблока под списки | контейнер для всех списков | создаётся отдельно и указывается модулю |
| Список | инфоблок внутри этого типа | данные хранятся как обычный контент |
| Поля списка | структура записи | у нового списка есть только название |
| Разделы | иерархия хранения | включаются в интерфейсе |
| Бизнес-процессы | согласования и маршруты | штатная интеграция |
bitrix:lists.list.element | публичный интерфейс списка | просмотр и редактирование без кода |
| Права доступа | кто видит и меняет | по группам пользователей |
| Ограничение редакций | модуля нет в младших | закладывать нельзя |
Частые ошибки
Списки закладывают в проект на младшей редакции. Модуля там нет - решение придётся переделывать на инфоблоки.
Не создан отдельный тип инфоблока. Модулю нужно явно указать, в каком типе жить, иначе списки смешаются с контентом сайта.
Ждут от нового списка готовой структуры. Кроме названия полей нет, их добавляют вручную.
Через списки строят витрину сайта. Для публичного каталога и контента лучше подходят инфоблоки с собственными шаблонами вывода.
Забывают, что данные - это инфоблок. При выгрузках, обменах и правках кодом работают с инфоблоком. Отдельного хранилища под список искать не нужно.
Частые вопросы
Чем универсальный список отличается от инфоблока?
Технически ничем: список - это инфоблок в специально выделенном типе. Разница в слое поверх: модуль даёт интерфейс для ведения данных без разработки, публичный компонент и штатную привязку бизнес-процессов. Поэтому списки выбирают, когда данные ведут не программисты, а инфоблоки - когда данные участвуют в витрине и требуют своих шаблонов и выборок.
Можно ли работать с данными списка из кода?
Да, и это обычная работа с инфоблоком: классическое API или ORM инфоблока с заполненным символьным кодом. Отдельного хранилища у списков нет, поэтому переход от списка к полноценному инфоблоку не требует миграции данных - меняется только способ вывода и администрирования.
Почему в админке нет раздела списков?
Либо модуль отсутствует в вашей редакции - в младших его нет, - либо не создан и не указан тип инфоблока, в котором списки должны жить. Второй шаг легко пропустить: без него модулю негде размещать списки.
Подходят ли списки для больших объёмов данных?
Они наследуют возможности и ограничения инфоблоков, так что вопрос сводится к обычной оптимизации: индексы, версия хранения свойств, выборки без лишних полей и без запросов в цикле. Но интерфейс ведения данных рассчитан на работу человека, а не на массовые операции - для импорта и обработки больших объёмов пишут скрипты, работающие с инфоблоком напрямую.
Связанные темы
- Инфоблоки - что лежит под списками
- Бизнес-процессы - согласования над списками
- Веб-формы - сбор данных от посетителей
- Пользователи, группы и права - права на списки выдаются группам
- Бизнес-процессы - маршруты согласования над элементами списков
- Бизнес-процесс над элементом списка - чтение полей и PHP-код
- Универсальный список: настройка, права и вывод элементов - списки на практике
- Универсальные списки на практике - решения по спискам
- Поля универсального списка - двенадцать типов полей и форма их добавления
- Раздел Модули