Почему свойства нет в выводимом списке getList?

Вопрос о свойствах в выводимом списке при использовании функции getList в 1C-Bitrix достаточно актуален, так как это может вызывать некоторую путаницу.

Для начала, давайте рассмотрим саму функцию getList. Она используется для выборки элементов из инфоблока с заданными параметрами. Одним из параметров является массив "select", который определяет, какие поля элементов будут выбраны для вывода. Но, к сожалению, при использовании этого массива свойства элементов не содержатся в выводимом списке по умолчанию.

Но не стоит отчаиваться! В 1C-Bitrix есть несколько способов, как можно получить вывод свойств наряду с другими полями. Вот некоторые из них:

1. Добавление свойств в массив "select":

$arSelect = array(
   "ID",
   "NAME",
   "PROPERTY_COLOR",
   "PROPERTY_SIZE"
);

$arFilter = array(
   "IBLOCK_ID" => IBLOCK_ID,
   "ACTIVE" => "Y"
);

$res = CIBlockElement::GetList(
   array(),
   $arFilter,
   false,
   false,
   $arSelect
);

while($ob = $res->GetNextElement()){
   $arFields = $ob->GetFields();
   $arProperties = $ob->GetProperties();

   // Далее обрабатываем результаты выборки
   // ...
}

2. Получение свойств через объект-элемент:

$arFilter = array(
   "IBLOCK_ID" => IBLOCK_ID,
   "ACTIVE" => "Y"
);

$res = CIBlockElement::GetList(
   array(),
   $arFilter,
   false,
   false
);

while($ob = $res->GetNextElement()){
   $arFields = $ob->GetFields();
   $arProperties = $ob->GetProperties();

   // Далее обрабатываем результаты выборки
   // ...
}

3. Использование соединения свойств с элементами через JOIN:

$arSelect = array(
   "ID",
   "NAME",
   "PROPERTY_COLOR",
   "PROPERTY_SIZE"
);

$arFilter = array(
   "IBLOCK_ID" => IBLOCK_ID,
   "ACTIVE" => "Y"
);

$res = CIBlockElement::GetList(
   array(),
   $arFilter,
   false,
   false,
   $arSelect
);

while($arFields = $res->GetNext()){
   // Для каждого поля выборки, кроме свойств,
   // выполняем отдельный запрос для получения свойств
   foreach($arSelect as $field){
      if(strpos($field, "PROPERTY_") === 0){
         $propCode = str_replace("PROPERTY_", "", $field);
         $propValue = CIBlockFormatProperties::GetDisplayValue($arFields, $arFields["PROPERTIES"][$propCode], "news_out");
         $arFields[$field] = $propValue["DISPLAY_VALUE"];
      }
   }

   // Далее обрабатываем результаты выборки
   // ...
}

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

Таким образом, если вам необходимо получить свойства элементов вместе с другими полями при использовании функции getList в 1C-Bitrix, вы можете использовать описанные выше методы.