Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Как в Битриксе создать группированное свойство в инфоблоке из нескольких свойств

Вопрос задан: 17 июня 2026 в 03:00 | Просмотров: 28 Использованные MCP инструменты: searchDocs, liveApiFindFunction, liveApiGetClassMethods, liveApiGetClassCode, liveApiFindByNamespace, liveApiGetDocResource

Задайте свой вопрос — Работает AI в связке с MCP сервером. Перепроверяйте важную информацию.

В 1С-Битрикс нет встроенного типа свойства «группированное свойство», которое бы объединяло несколько других свойств в одно. Однако существует несколько способов реализовать такую функциональность. Ниже описаны основные подходы.

1. Свойство типа «Справочник» (UserType: directory) с Highload-блоком

Самый популярный способ сгруппировать несколько полей в одном свойстве. Создаётся Highload-блок с несколькими пользовательскими полями (UF_...), а в инфоблоке создаётся свойство с типом directory, которое привязывается к этому Highload-блоку.

Шаг 1. Создайте Highload-блок через админку

Контент > Highload-блоки > Добавить Highload-блок, например, с названием «Характеристики товара» и таблицей b_product_features.

Шаг 2. Добавьте в него пользовательские поля

В настройках Highload-блока создайте поля, которые хотите «сгруппировать», например:

  • UF_NAME (строка) — название характеристики;
  • UF_VALUE (строка) — значение;
  • UF_UNIT (строка) — единица измерения;
  • UF_SORT (число) — сортировка.

Шаг 3. Создайте свойство инфоблока типа «Справочник»

$property = new \CIBlockProperty;
$result = $property->Add([
    'IBLOCK_ID'         => $iblockId,
    'NAME'              => 'Характеристики',
    'CODE'              => 'FEATURES',
    'PROPERTY_TYPE'     => 'S',
    'USER_TYPE'         => 'directory',
    'MULTIPLE'          => 'N',
    'USER_TYPE_SETTINGS' => [
        'TABLE_NAME' => 'b_product_features',
    ],
]);

if (!$result)
{
    throw new \Exception($property->getLastError()->getMessage());
}

Шаг 4. Заполните Highload-блок данными и укажите UF_XML_ID

Значение свойства хранит UF_XML_ID записи из Highload-блока:

$element = \Bitrix\Iblock\Elements\ElementCatalogTable::createObject()
    ->setName('Товар')
    ->set('FEATURES', 'feature_xml_id'); // UF_XML_ID записи

$element->save();

2. Множественное свойство с описанием (WITH_DESCRIPTION)

Если нужно хранить несколько пар «значение + описание», включите параметр WITH_DESCRIPTION = 'Y'. Это доступно для типов S (строка), N (число) и F (файл).

$property = new \CIBlockProperty;
$result = $property->Add([
    'IBLOCK_ID'        => $iblockId,
    'NAME'             => 'Дополнительные данные',
    'CODE'             => 'EXTRA_DATA',
    'PROPERTY_TYPE'    => 'S',
    'MULTIPLE'         => 'Y',
    'WITH_DESCRIPTION' => 'Y',  // добавляет описание к каждому значению
]);

if (!$result)
{
    throw new \Exception($property->getLastError()->getMessage());
}

При сохранении элемента передавайте массив с ключами VALUE и DESCRIPTION:

$element->set('EXTRA_DATA', [
    ['VALUE' => '120', 'DESCRIPTION' => 'Вес, г'],
    ['VALUE' => '15',  'DESCRIPTION' => 'Размер, см'],
]);

3. Создание собственного пользовательского типа свойства (UserType)

Самый гибкий подход — написать свой класс пользовательского типа свойства. Он позволяет отобразить в форме редактирования элемента несколько полей ввода, а в БД сохранить всё как сериализованную строку.

Пример структуры файла /local/php_interface/classes/prop_grouped.php:

class CIBlockPropertyGrouped
{
    // Возвращает описание типа
    public function GetUserTypeDescription()
    {
        return [
            'PROPERTY_TYPE'  => 'S',
            'USER_TYPE'      => 'GROUPED',
            'DESCRIPTION'    => 'Группированное свойство',
            'GetPropertyFieldHtml' => [__CLASS__, 'GetPropertyFieldHtml'],
            'GetAdminListViewHTML' => [__CLASS__, 'GetAdminListViewHTML'],
            'ConvertToDB'         => [__CLASS__, 'ConvertToDB'],
            'ConvertFromDB'       => [__CLASS__, 'ConvertFromDB'],
        ];
    }

    // HTML для формы редактирования
    public static function GetPropertyFieldHtml($arProperty, $value, $controlName)
    {
        $html = '';
        $html .= 'Поле 1: <input type="text" name="' . $controlName . '[FIELD1]" value="' . htmlspecialcharsbx($value['FIELD1']) . '"><br>';
        $html .= 'Поле 2: <input type="text" name="' . $controlName . '[FIELD2]" value="' . htmlspecialcharsbx($value['FIELD2']) . '"><br>';
        $html .= 'Поле 3: <input type="text" name="' . $controlName . '[FIELD3]" value="' . htmlspecialcharsbx($value['FIELD3']) . '">';
        return $html;
    }

    // Преобразование для БД
    public static function ConvertToDB($arProperty, $value)
    {
        return ['VALUE' => serialize($value)];
    }

    // Преобразование из БД
    public static function ConvertFromDB($arProperty, $value)
    {
        return ['VALUE' => unserialize($value)];
    }

    // Отображение в списке
    public static function GetAdminListViewHTML($arProperty, $value, $controlName)
    {
        $data = unserialize($value['VALUE']);
        return htmlspecialcharsbx($data['FIELD1'] . ', ' . $data['FIELD2']);
    }
}

Зарегистрируйте тип в файле init.php:

use Bitrix\Main\Loader;
Loader::includeModule('iblock');

// Регистрируем пользовательский тип
AddEventHandler('iblock', 'OnIBlockPropertyBuildList', ['CIBlockPropertyGrouped', 'GetUserTypeDescription']);

После регистрации при создании свойства в админке в списке USER_TYPE появится пункт «Группированное свойство».


4. Множественное свойство (MULTIPLE = 'Y')

Если нужно просто хранить несколько значений одного типа в одном свойстве, используйте параметр MULTIPLE = 'Y':

$property = new \CIBlockProperty;
$result = $property->Add([
    'IBLOCK_ID'     => $iblockId,
    'NAME'          => 'Теги',
    'CODE'          => 'TAGS',
    'PROPERTY_TYPE' => 'S',
    'MULTIPLE'      => 'Y',
]);

Рекомендация: Для большинства бизнес-задач, где требуется «группированное свойство» (например, «Характеристики: название + значение + единица измерения»), оптимальным решением является свойство типа «Справочник» с Highload-блоком (вариант 1). Этот подход поддерживает фильтрацию, хорошо масштабируется и не требует написания кастомного кода. Если же нужна полностью уникальная логика ввода и отображения — создавайте собственный UserType (вариант 3).

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Индивидуальная разработка магазина
от 300 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

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

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс