Как получить разделы в которых есть активные товары?

Для получения разделов, в которых есть активные товары, вам потребуется использовать API 1C-Bitrix и выполнить следующие шаги:

1. Создайте объект типа CIBlockSection и получите список всех разделов вашего инфоблока. Для этого используйте метод GetList со следующими параметрами:

   $arFilter = array(
       "IBLOCK_ID" => ваш_идентификатор_инфоблока,
       "ACTIVE" => "Y" // только активные разделы
   );
   
   $arSelect = array(
       "ID",
       "NAME"
   );
   
   $rsSections = CIBlockSection::GetList(array(), $arFilter, false, $arSelect);

2. Для каждого раздела проверьте, есть ли в нем активные товары. Для этого используйте метод CIBlockElement::GetList со следующими параметрами:

   $arFilter = array(
       "IBLOCK_ID" => ваш_идентификатор_инфоблока,
       "SECTION_ID" => $раздел["ID"], // ID текущего раздела
       "ACTIVE" => "Y" // только активные элементы
   );
   
   $arSelect = array(
       "ID"
   );
   
   $rsElements = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
   $isActiveElementsExist = false;
   
   while ($element = $rsElements->Fetch()) {
       $isActiveElementsExist = true;
       break;
   }

3. Если имеются активные элементы в текущем разделе, добавьте его в список разделов с активными товарами. Для этого создайте отдельный массив и добавьте в него информацию о разделе:

   if ($isActiveElementsExist) {
       $sectionsWithActiveElements[] = array(
           "ID" => $раздел["ID"],
           "NAME" => $раздел["NAME"]
       );
   }

4. По окончании цикла вы будете иметь полный список разделов, в которых есть активные товары.

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