Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Создать поле универсального списка lists.field.add», проанализируем лучшие практики и покажем, как правильно использовать lists.field.add в реальных задачах.
Создать поле универсального списка lists.field.add
> Scope: lists
>
> Кто может выполнять метод: пользователь с правом «Полный доступ» для нужного списка
Метод lists.field.add создает поле списка.
Список доступных типов полей для универсального списка можно узнать с помощью метода lists.field.type.get
Параметры метода
Названиетип | Описание |
|---|---|
IBLOCK_TYPE_IDstring | Идентификатор типа инфоблока. Возможные значения: — lists — тип инфоблока списка — bitrix_processes — тип инфоблока процессов — lists_socnet — тип инфоблока списков группИдентификатор можно получить с помощью метода lists.get.iblock.type.id |
IBLOCK_IDinteger | Идентификатор инфоблока. Идентификатор можно получить с помощью метода lists.get |
IBLOCK_CODE string | Cимвольный код инфоблока. Код можно получить с помощью метода lists.get Необходимо указать хотя бы один из параметров: |
FIELDSarray | Массив параметров. Подробное описание |
Параметр FIELDS {#parametr-fields}
Названиетип | Описание |
|---|---|
NAMEstring | Название поля |
TYPEstring | Тип поля. После создания тип поля изменить будет нельзя. Пользовательские поля: Системные поля: Значения в полях Дата создания, Дата изменения, Кем создан и Кем изменен заполняются автоматически Системные поля не добавляются в новый список по умолчанию. Чтобы они отображались в интерфейсе списка, их также необходимо явно создать |
IS_REQUIREDstring | Флаг обязательности поля. Возможные значения: — Y — да— N — нетПо умолчанию — |
MULTIPLEstring | Флаг множественности поля. Возможные значения: — Y — да— N — нетПо умолчанию — Системные поля и поле типа Привязка к Яндекс.Карте не могут быть множественными |
SORTinteger | Сортировка |
| DEFAULT_VALUE | Значение по умолчанию. Если включена настройка ADD_READ_ONLY_FIELD в SETTINGS, параметр становится обязательным |
LISTarray | Значения для поля типа Список. Массив в формате {'ID': { 'VALUE': 'Value_1', 'SORT': 10, 'DEF': 'N' }}, где 'ID' — временный идентификатор, VALUE — отображаемый текст, SORT — порядок сортировки, DEF — признак значения по умолчанию.После создания поля система заменит временные идентификаторы на постоянные |
LIST_TEXT_VALUESstring | Альтернативный способ задания значений для поля типа Список. Строка, где значения разделены символом переноса \nПри создании поля типа Список можно использовать либо |
LIST_DEFarray | Значение по умолчанию для поля типа Список. Массив принимает временный идентификатор из LIST |
CODEstring | Символьный код поля. Обязателен для пользовательских полей. Для системных полей не используется |
SETTINGSarray | Настройки отображения и поведения. Поддерживаются значения: Для включения настройки используйте По умолчанию: |
USER_TYPE_SETTINGSarray | Массив настроек для пользовательских полей. Структура зависит от типа поля: — HTML/текст — массив в формате Если не передавать — система установит значения по умолчанию, которые указаны в примерах массивов |
ROW_COUNTinteger | Высота поля. По умолчанию — |
COL_COUNTinteger | Ширина поля. По умолчанию — |
LINK_IBLOCK_IDinteger | Идентификатор связанного списка. Обязателен для типов Привязка к разделам, Привязка к элементам и Привязка к элементам в виде списка |
Примеры кода
- cURL (Webhook)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"IBLOCK_TYPE_ID":"lists","IBLOCK_ID":"123","FIELDS":{"NAME":"Проект","IS_REQUIRED":"Y","MULTIPLE":"N","TYPE":"L","SORT":"10","CODE":"PROJECT","LIST":{"10":{"VALUE":"Планирование","SORT":10,"DEF":"Y"},"20":{"VALUE":"В разработке","SORT":20,"DEF":"N"}},"LIST_TEXT_VALUES":"Тестирование\nЗавершен\nОтложен","SETTINGS":{"SHOW_ADD_FORM":"Y","SHOW_EDIT_FORM":"Y","ADD_READ_ONLY_FIELD":"N","EDIT_READ_ONLY_FIELD":"N","SHOW_FIELD_PREVIEW":"N"}}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/lists.field.add- cURL (OAuth)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"IBLOCK_TYPE_ID":"lists","IBLOCK_ID":"123","FIELDS":{"NAME":"Проект","IS_REQUIRED":"Y","MULTIPLE":"N","TYPE":"L","SORT":"10","CODE":"PROJECT","LIST":{"10":{"VALUE":"Планирование","SORT":10,"DEF":"Y"},"20":{"VALUE":"В разработке","SORT":20,"DEF":"N"}},"LIST_TEXT_VALUES":"Тестирование\nЗавершен\nОтложен","SETTINGS":{"SHOW_ADD_FORM":"Y","SHOW_EDIT_FORM":"Y","ADD_READ_ONLY_FIELD":"N","EDIT_READ_ONLY_FIELD":"N","SHOW_FIELD_PREVIEW":"N"}},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/lists.field.add- JS
try {
const response = await $b24.callMethod(
'lists.field.add',
{
IBLOCK_TYPE_ID: 'lists',
IBLOCK_ID: '123',
FIELDS: {
NAME: 'Проект',
IS_REQUIRED: 'Y',
MULTIPLE: 'N',
TYPE: 'L',
SORT: '10',
CODE: 'PROJECT',
LIST: {
'10': { VALUE: 'Планирование', SORT: 10, DEF: 'Y' },
'20': { VALUE: 'В разработке', SORT: 20, DEF: 'N' }
},
LIST_TEXT_VALUES: 'Тестирование\nЗавершен\nОтложен',
SETTINGS: {
SHOW_ADD_FORM: 'Y',
SHOW_EDIT_FORM: 'Y',
ADD_READ_ONLY_FIELD: 'N',
EDIT_READ_ONLY_FIELD: 'N',
SHOW_FIELD_PREVIEW: 'N'
}
}
}
);
const result = response.getData().result;
console.log('Created field with ID:', result);
processResult(result);
} catch (error) {
console.error('Error:', error);
}- PHP
try {
$response = $b24Service
->core
->call(
'lists.field.add',
[
'IBLOCK_TYPE_ID' => 'lists',
'IBLOCK_ID' => '123',
'FIELDS' => [
'NAME' => 'Проект',
'IS_REQUIRED' => 'Y',
'MULTIPLE' => 'N',
'TYPE' => 'L',
'SORT' => '10',
'CODE' => 'PROJECT',
'LIST' => [
'10' => ['VALUE' => 'Планирование', 'SORT' => 10, 'DEF' => 'Y'],
'20' => ['VALUE' => 'В разработке', 'SORT' => 20, 'DEF' => 'N']
],
'LIST_TEXT_VALUES' => 'Тестирование\nЗавершен\nОтложен',
'SETTINGS' => [
'SHOW_ADD_FORM' => 'Y',
'SHOW_EDIT_FORM' => 'Y',
'ADD_READ_ONLY_FIELD' => 'N',
'EDIT_READ_ONLY_FIELD' => 'N',
'SHOW_FIELD_PREVIEW' => 'N'
]
]
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
processData($result);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error adding field: ' . $e->getMessage();
}- BX24.js
BX24.callMethod(
'lists.field.add',
{
'IBLOCK_TYPE_ID': 'lists',
'IBLOCK_ID': '123',
'FIELDS': {
'NAME': 'Проект',
'IS_REQUIRED': 'Y',
'MULTIPLE': 'N',
'TYPE': 'L',
'SORT': '10',
'CODE': 'PROJECT',
// Задаем основные значения с настройками
'LIST': {
'10': { 'VALUE': 'Планирование', 'SORT': 10, 'DEF': 'Y' },
'20': { 'VALUE': 'В разработке', 'SORT': 20, 'DEF': 'N' }
},
// Добавляем еще значения простой строкой
'LIST_TEXT_VALUES': 'Тестирование\nЗавершен\nОтложен',
'SETTINGS': {
'SHOW_ADD_FORM': 'Y',
'SHOW_EDIT_FORM': 'Y',
'ADD_READ_ONLY_FIELD': 'N',
'EDIT_READ_ONLY_FIELD': 'N',
'SHOW_FIELD_PREVIEW': 'N'
}
}
},
function(result) {
if (result.error()) {
console.error(result.error());
} else {
console.log(result.data());
// Итоговый список будет содержать 5 вариантов:
// 1. Планирование (по умолчанию), 2. В разработке,
// 3. Тестирование, 4. Завершен, 5. Отложен
}
}
);- PHP CRest
require_once('crest.php');
$result = CRest::call(
'lists.field.add',
[
'IBLOCK_TYPE_ID' => 'lists',
'IBLOCK_ID' => '123',
'FIELDS' => [
'NAME' => 'Проект',
'IS_REQUIRED' => 'Y',
'MULTIPLE' => 'N',
'TYPE' => 'L',
'SORT' => '10',
'CODE' => 'PROJECT',
'LIST' => [
'10' => ['VALUE' => 'Планирование', 'SORT' => 10, 'DEF' => 'Y'],
'20' => ['VALUE' => 'В разработке', 'SORT' => 20, 'DEF' => 'N']
],
'LIST_TEXT_VALUES' => 'Тестирование\nЗавершен\nОтложен',
'SETTINGS' => [
'SHOW_ADD_FORM' => 'Y',
'SHOW_EDIT_FORM' => 'Y',
'ADD_READ_ONLY_FIELD' => 'N',
'EDIT_READ_ONLY_FIELD' => 'N',
'SHOW_FIELD_PREVIEW' => 'N'
]
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';Обработка ответа
HTTP-статус: 200
{
"result": "PROPERTY_1151",
"time": {
"start": 1765317940,
"finish": 1765317940.172892,
"duration": 0.17289209365844727,
"processing": 0,
"date_start": "2025-12-09T14:05:40+03:00",
"date_finish": "2025-12-09T14:05:40+03:00",
"operating_reset_at": 1765318540,
"operating": 0
}
}Возвращаемые данные
Названиетип | Описание |
|---|---|
resultstring | Идентификатор созданного поля с приставкой PROPERTY_.Если создается системное поле, возвращается его символьный код |
timetime | Информация о времени выполнения запроса |
Обработка ошибок
HTTP-статус: 400
{
"error":"ERROR_SAVE_FIELD",
"error_description":"Please fill the code fields"
}Возможные коды ошибок
| Код | Описание | Значение |
|---|---|---|
ERROR_REQUIRED_PARAMETERS_MISSING | Required parameter X is missing | Обязательный параметр не передан |
ERROR_IBLOCK_NOT_FOUND | Iblock not found | Инфоблок не найден |
ERROR_SAVE_FIELD | Error saving the field | Общая ошибка при вызове |
ERROR_SAVE_FIELD | Property already exists | CODE уже используется в списке |
ERROR_SAVE_FIELD | Please fill the code fields | Не указан CODE для пользовательского поля |
ERROR_SAVE_FIELD | The default value of the field ‘…’ is required | Включена настройка ADD_READ_ONLY_FIELD, но не указано DEFAULT_VALUE |
ERROR_SAVE_FIELD | Incorrect lists specified for ‘…’ property | Ошибка в одном из параметров внутри FIELDS |
ACCESS_DENIED | Access denied | Недостаточно прав для добавления поля |
- [](./lists-field-update)
- [](./lists-field-get)
- [](./lists-field-delete)
- [](./lists-field-type-get)
💡 Экспертное мнение и рекомендации
Практические рекомендации:
- При написании кастомных компонентов для «Создать поле универсального списка lists.field.add» всегда разделяйте бизнес-логику и представление (шаблон).
- Используйте отладку SQL-запросов через конструкцию
$wpdb->last_queryили стандартный трекер Битрикса, чтобы контролировать нагрузку.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru