Поля универсального списка - типы, обязательность и сортировка
Заводим поля списка под свои данные: подбираем тип, включаем обязательность и множественность, расставляем порядок в форме. Заодно смотрим, что из этих настроек потом уже не переиграть.
Решение
Открываем настройку полей списка:
Настроить список - вкладки «Настройки», «Подписи», «Доступ»Настроить поля - типы, обязательность, сортировкаНастроить бизнес-процессы - маршруты над записями, если процессы включеныПоказать разделы - переключение видимости иерархииЭкспорт в Excel - выгрузка данных списка на проверкуПоля живут в меню «Действия» самого списка, а не в карточке инфоблока. У нового списка поле ровно одно, и это «Название»: остальные заводим сами.
Подбираем тип под характер данных:
Строка - однострочное значение: код, телефон, номер приказаЧисло - количество, сумма, весСписок - выбор из заранее заданных вариантовДата/Время - дата и время событияHTML/текст - форматированный или простой текстФайл - загрузка файла: скан, вложениеВидео - роликСчетчик - служебный счётчикПривязка к разделам - раздел инфоблокаПривязка к элементам - записи другого списка или инфоблокаПривязка к элементам в виде списка - то же, но выводится спискомПривязка к сотруднику - ответственный, автор, согласующийТипов ровно двенадцать, и набор параметров у каждого свой. Единого набора опций не существует, а смена типа перезагружает форму вместе с настройками поля.
Заполняем форму «Добавить поле»:
Название - «Организационная форма»Обязательное - флаг обязательности заполненияМножественное - несколько значений в одном полеЗначение по умолчанию - доступно только обязательному полюСортировка - положение поля в форме записиПоказывать - показ поля в форме записиТолько для чтения - режим без возможности измененияПоказать поле при формировании ссылки - вывод в богатых ссылкахЗначение по умолчанию платформа даёт задать только обязательному полю. Режим «Только для чтения» закрывает правку и через форму самой записи, а снимается он там же, в настройках поля.
Расставляем порядок полей:
100 - «Организационная форма»200 - «ИНН»300 - «Ответственный»// поля идут по возрастанию: 100 окажется первым, 300 последнимШаг в сотню оставляет место для вставки поля между соседними. Без запаса новое поле в середине формы потребует пересортировки всех соседей. Формулировку интерфейса «чем выше число, тем ниже поле» читаем как обычную сортировку по возрастанию.
Проверяем заполненность нового поля:
$res = CIBlockElement::GetList(['ID' => 'ASC'], ['IBLOCK_ID' => $listIblockId], false, false, ['ID', 'NAME', 'PROPERTY_INN']);while ($row = $res->GetNext()) { if (empty($row['PROPERTY_INN_VALUE'])) { printf("%-6d %s: поле пустое\n", $row['ID'], $row['NAME']); }}Флаг обязательности проверяется на форме записи, поэтому заведённые раньше записи остаются пустыми. Платформа спросит значение только тогда, когда такую запись откроют на правку.
Дозаполняем прежние записи кодом:
CIBlockElement::SetPropertyValuesEx($elementId, $listIblockId, [ 'INN' => '7701234567', // коды полей регистрозависимы 'STATUS' => 113, // списочное поле принимает номер варианта]);CIBlock::clearIblockTagCache($listIblockId); // сам метод кеш не чиститМетод пишет только переданные поля и не трогает остальные. Списочному полю передают номер варианта: по тексту варианта связь не установится, и значение молча останется пустым.
Набор полей общий для всего списка. Раздел его не сужает, поэтому разные наборы полей разводят по разным спискам, а не по разделам одного.
Смена типа у заполненного поля - отдельная работа, а не переключение галочки. Значения разных типов хранятся по-своему, поэтому на живом списке заводят соседнее поле и переносят значения кодом.
Типичные проблемы
В привязке к сотруднику не находятся внешние пользователи.
Тип показывает пользователей портала, а экстранет в этот перечень не попадает. Под внешних пользователей пишут свой тип пользовательского поля.
Разным разделам списка нужны разные поля.
Набор полей общий для всего списка, и раздел его не сужает. Лишние поля убирают из формы флагом показа, а принципиально разные наборы разводят по разным спискам.
Значение числового поля удалили, а после сохранения оно вернулось.
Пустое поле формы не всегда доходит до хранилища как очистка значения. Значение снимают кодом, а у множественного поля очисткой считается false, а не пустой массив.
Маска ввода не вешается на поле формы списка.
У полей формы нет своего идентификатора ввода, и плагин по нему не цепляется. Маску вешают селектором поля или средствами ядра, а не правкой шаблона.
Поле перевели в только для чтения и не могут исправить значение.
Режим закрывает правку и через форму самой записи, обойти его из интерфейса нечем. Снимают режим в настройках поля, а значения дозаполняют кодом.
Частые вопросы
Можно ли поменять тип поля, когда в списке уже есть записи?
Смена типа перезагружает форму поля вместе с набором параметров, а значения разных типов хранятся по-своему. На заполненном списке безопаснее завести соседнее поле и перенести значения кодом.
Как вывести у каждого раздела списка только нужные поля?
Штатно никак: набор полей общий для всего списка. Лишние поля убирают из формы флагом показа, а принципиально разные наборы данных разводят по разным спискам.
Почему у поля не задаётся значение по умолчанию?
Оно доступно только полю с включённым флагом «Обязательное». Необязательному полю платформа задать значение по умолчанию не даёт вовсе.
Можно ли привязать в поле списка внешнего пользователя?
Нет, привязка к сотруднику показывает пользователей портала. Для экстранета придётся регистрировать свой тип пользовательского поля.
Как быстро проверить, что поля заполнены у всех записей?
Разово - выгрузкой в Excel из меню «Действия» списка. На регулярной проверке удобнее выборка по инфоблоку списка с кодами нужных полей.
Смежное
- Универсальные списки на практике - оглавление подтемы
- Универсальные списки - устройство модуля целиком
- Универсальный список изнутри: инфоблок, поля, права - чем поле списка отличается от свойства
- Универсальный список: настройка, права и вывод элементов - как заводится сам список
- Список как справочник: поля, права, вывод и наполнение - чтение записей списка кодом
- Перенос универсального списка между стендами: структура, права, данные - что делать с кодами полей на бою
- Универсальный список не открывается или пуст: разбор причин - когда полей не видно вовсе
- Бизнес-процесс над элементом списка: поля, раздел, PHP-код - поля списка внутри процесса
- Свойства инфоблоков - типы значений под полями списка
- Множественные свойства: вывод файлов, фильтр, удаление значений - что приходит от множественного поля