Блог Горошко Андрея Bitrix24 Создать поле универсального списка lists.field.add

Создать поле универсального списка lists.field.add

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Создать поле универсального списка lists.field.add», проанализируем лучшие практики и покажем, как правильно использовать lists.field.add в реальных задачах.

Создать поле универсального списка lists.field.add

> Scope: lists
>
> Кто может выполнять метод: пользователь с правом «Полный доступ» для нужного списка

Метод lists.field.add создает поле списка.

Список доступных типов полей для универсального списка можно узнать с помощью метода lists.field.type.get

Параметры метода

Название
тип
Описание
IBLOCK_TYPE_ID
string
Идентификатор типа инфоблока. Возможные значения:
— lists — тип инфоблока списка
— bitrix_processes — тип инфоблока процессов
— lists_socnet — тип инфоблока списков групп

Идентификатор можно получить с помощью метода lists.get.iblock.type.id

IBLOCK_ID
integer
Идентификатор инфоблока.

Идентификатор можно получить с помощью метода lists.get

IBLOCK_CODE
string
Cимвольный код инфоблока.

Код можно получить с помощью метода lists.get

Необходимо указать хотя бы один из параметров: IBLOCK_ID или IBLOCK_CODE

FIELDS
array
Массив параметров.

Подробное описание

Параметр FIELDS {#parametr-fields}

Название
тип
Описание
NAME
string
Название поля
TYPE
string
Тип поля. После создания тип поля изменить будет нельзя.

Пользовательские поля:
— S — Строка
— N — Число
— L — Список
— F — Файл
— G — Привязка к разделам
— E — Привязка к элементам
— S:Date — Дата
— S:DateTime — Дата/Время
— S:HTML — HTML/текст
— E:EList — Привязка к элементам в виде списка
— N:Sequence — Счетчик
— S:ECrm — Привязка к элементам CRM
— S:Money — Деньги
— S:DiskFile — Файл (Диск)
— S:map_yandex — Привязка к Яндекс.Карте
— S:employee — Привязка к сотруднику

Системные поля:
— SORT — Сортировка
— ACTIVE_FROM — Начало активности
— ACTIVE_TO — Окончание активности
— PREVIEW_PICTURE — Изображение для анонса
— PREVIEW_TEXT — Текст анонса
— DETAIL_PICTURE — Детальное изображение
— DETAIL_TEXT — Детальный текст
— DATE_CREATE — Дата создания
— CREATED_BY — Кем создан
— TIMESTAMP_X — Дата изменения
— MODIFIED_BY — Кем изменен

Значения в полях Дата создания, Дата изменения, Кем создан и Кем изменен заполняются автоматически

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

IS_REQUIRED
string
Флаг обязательности поля. Возможные значения:
— Y — да
— N — нет

По умолчанию — N

MULTIPLE
string
Флаг множественности поля. Возможные значения:
— Y — да
— N — нет

По умолчанию — N.

Системные поля и поле типа Привязка к Яндекс.Карте не могут быть множественными

SORT
integer
Сортировка
DEFAULT_VALUEЗначение по умолчанию. Если включена настройка ADD_READ_ONLY_FIELD в SETTINGS, параметр становится обязательным
LIST
array
Значения для поля типа Список. Массив в формате {'ID': { 'VALUE': 'Value_1', 'SORT': 10, 'DEF': 'N' }}, где 'ID' — временный идентификатор, VALUE — отображаемый текст, SORT — порядок сортировки, DEF — признак значения по умолчанию.

После создания поля система заменит временные идентификаторы на постоянные

LIST_TEXT_VALUES
string
Альтернативный способ задания значений для поля типа Список. Строка, где значения разделены символом переноса \n

При создании поля типа Список можно использовать либо LIST, либо LIST_TEXT_VALUES, либо оба параметра вместе. В этом случае значения из строки добавятся к тем, что уже есть в массиве

LIST_DEF
array
Значение по умолчанию для поля типа Список. Массив принимает временный идентификатор из LIST
CODE
string
Символьный код поля. Обязателен для пользовательских полей. Для системных полей не используется
SETTINGS
array
Настройки отображения и поведения.

Поддерживаются значения:
— SHOW_ADD_FORM — показывать в форме добавления
— SHOW_EDIT_FORM — показывать в форме редактирования
— ADD_READ_ONLY_FIELD — только для чтения (форма добавления)
— EDIT_READ_ONLY_FIELD — только для чтения (форма редактирования)
— SHOW_FIELD_PREVIEW — показать поле при формировании ссылки на элемент списка

Для включения настройки используйте Y, для выключения — N.

По умолчанию: SHOW_ADD_FORM — Y, SHOW_EDIT_FORM — Y, ADD_READ_ONLY_FIELD — N, EDIT_READ_ONLY_FIELD — N, SHOW_FIELD_PREVIEW — N

USER_TYPE_SETTINGS
array
Массив настроек для пользовательских полей. Структура зависит от типа поля:

— HTML/текст — массив в формате {'height': 200}, где height — высота окна редактора
— Привязка к элементам в виде списка — массив в формате {'size': 1, 'width': 0, 'group': 'N', 'multiple': 'N'}, где size — высота списка, width — ограничение по ширине (0 — не ограничивать), group — группировка по разделам, multiple — отображение в виде списка множественного выбора
— Счетчик — массив в формате {'write': 'N', 'VALUE': 1}, где write — разрешение изменять значения, VALUE — текущее значение счетчика
— Привязка к элементам CRM — массив в формате {'VISIBLE': 'N', 'LEAD': 'N', 'CONTACT': 'N', 'COMPANY': 'N', 'DEAL': 'N'}, где VISIBLE — видимость в карточке CRM, LEAD — лид, CONTACT — контакт, COMPANY — компания, DEAL — сделка

Если не передавать — система установит значения по умолчанию, которые указаны в примерах массивов

ROW_COUNT
integer
Высота поля.

По умолчанию — 1

COL_COUNT
integer
Ширина поля.

По умолчанию — 30

LINK_IBLOCK_ID
integer
Идентификатор связанного списка. Обязателен для типов Привязка к разделам, Привязка к элементам и Привязка к элементам в виде списка

Примеры кода

  • 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
    }
}

Возвращаемые данные

Название
тип
Описание
result
string
Идентификатор созданного поля с приставкой PROPERTY_.

Если создается системное поле, возвращается его символьный код

time
time
Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400

{
    "error":"ERROR_SAVE_FIELD",
    "error_description":"Please fill the code fields"
}

Возможные коды ошибок

КодОписаниеЗначение
ERROR_REQUIRED_PARAMETERS_MISSINGRequired parameter X is missingОбязательный параметр не передан
ERROR_IBLOCK_NOT_FOUNDIblock not foundИнфоблок не найден
ERROR_SAVE_FIELDError saving the fieldОбщая ошибка при вызове
ERROR_SAVE_FIELDProperty already existsCODE уже используется в списке
ERROR_SAVE_FIELDPlease fill the code fieldsНе указан CODE для пользовательского поля
ERROR_SAVE_FIELDThe default value of the field ‘…’ is requiredВключена настройка ADD_READ_ONLY_FIELD, но не указано DEFAULT_VALUE
ERROR_SAVE_FIELDIncorrect lists specified for ‘…’ propertyОшибка в одном из параметров внутри FIELDS
ACCESS_DENIEDAccess 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 и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Удалить свойство отгрузки sale.shipmentproperty.deleteУдалить свойство отгрузки sale.shipmentproperty.delete

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Удалить свойство отгрузки sale.shipmentproperty.delete», проанализируем лучшие практики и

Получить список цифровых рабочих мест crm.automatedsolution.listПолучить список цифровых рабочих мест crm.automatedsolution.list

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Получить список цифровых рабочих мест crm.automatedsolution.list», проанализируем лучшие

Основные методы работы: Подробное руководствоОсновные методы работы: Подробное руководство

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Основные методы работы: Подробное руководство», проанализируем лучшие практики