Загрузка
Все статьи

Сложности с разделами каталога в Битрикс24 через REST API: игра с деревом

Обновляете товар через API, передаете SECTION_ID, но он не появляется в нужной папке. В этой статье я объясняю разницу между простым SECTION_ID и сложным деревом инфоблоков, как правильно выстроить иерархию и почему метод crm.product.update не умеет создавать папки.

Привет! Меня зовут Артём, я бэкенд-разработчик. Перейдем от сделок к каталогу. Если вы интегрируете интернет-магазин (например, на той же 1С-Битрикс) с облаком Битрикс24 CRM, вам предстоит столкнуться с деревом разделов (папок).

Задача кажется тривиальной: есть папка «Смартфоны» (ID 15). При создании товара через crm.product.add мы передаем:

'fields' => [
    'NAME' => 'iPhone 15',
    'SECTION_ID' => 15
]

Иногда это работает. А иногда товар просто пропадает из каталога — он создается, но ни в одной папке не отображается. Почему?

Проблема левел-аффилиации (IBLOCK_SECTION_ID)

Модуль «Товары» в облаке Битрикс24 — это легаси от классических инфоблоков 1С-Битрикс. В инфоблоках разделы образуют дерево. У раздела может быть родитель.

Поле SECTION_ID в REST API на самом деле ожидает не просто ID, а специфическую логику принадлежности к уровню дерева. Если вы попытаетесь положить товар в подраздел, не привязав его к корневому разделу, или если вы передадите ID раздела из другого каталога (в Битриксе может быть несколько товарных каталогов, например для разных юрлиц), API молча проигнорирует привязку, чтобы не сломать SQL-структуру.

Как безопасно привязать товар к разделу

Никогда не слепо верьте ID папок, которые вам дают менеджеры или которые лежат в вашей CMS. Перед обновлением товара сделайте валидацию:

$targetSectionId = 15;

// Проверяем, существует ли этот раздел в текущем каталоге
$sections = $this->call('crm.catalog.section.list', [
    'filter' => ['ID' => $targetSectionId],
    'select' => ['ID', 'NAME']
]);

if (empty($sections['data'])) {
    $this->writeLog("Ошибка: Раздел $targetSectionId не найден в каталоге!");
    // Создаем раздел на лету? Или кидаем товар в корень (SECTION_ID = 0 или null)
    $targetSectionId = 0; 
}

// Только теперь обновляем товар
$this->call('crm.product.update', [
    'id' => $productId,
    'fields' => [
        'SECTION_ID' => $targetSectionId
    ]
]);

Если вы передадите SECTION_ID равным 0 или null, товар будет лежать в корне каталога. Это гораздо лучше, чем потерять товар в черной дыре несовпадения ID разделов.

И еще одна боль: REST API Битрикс24 не имеет метода создания разделов каталога (crm.catalog.section.add существует только в коробочной версии и недоступен в облаке). Если вам нужно создать новую папку из PHP, вам придется писать костыль через универсальный crm.item.add к Smart-процессу каталога, что превращается в ад. Поэтому всегда заставляйте менеджеров создавать структуру папок руками в Битриксе, а ваш код пусть только валидирует и раскладывает товары по существующим ячейкам.

Поделиться статьёй

Комментарии

0
0 / 2000

Пока нет комментариев

Будьте первым, кто оставит комментарий к этой статье

Читайте также

Битрикс24: бизнес-процессы и роботы — автоматизация CRM без написания кода

Как мы автоматизировали воронку сделок в Битрикс24 с помощью бизнес-процессов и роботов — реальный кейс с SLA, автоназначением ответственных и мониторингом сбоев.

13 июня 2026 8 мин

Битрикс24: batch-запросы и обработка 10 000 элементов без таймаута

Обычный crm.deal.list возвращает 50 элементов. Для синхронизации 10 000 сделок нужно 200 запросов — и это при условии, что ни один не упадёт по таймауту. Batch-метод Битрикс24 позволяет отправить до 50 команд в одном запросе, но у него свои подводные камни: лимит на размер запроса, ошибки частичной обработки и полное отсутствие транзакционности.

12 мая 2026 9 мин

Битрикс24: вебхуки и ограничение 1000 событий — как мы потеряли данные

На портале Битрикс24 можно создать максимум 2000 входящих вебхуков. Но мало кто знает, что каждый вебхук обрабатывает максимум 1000 событий в очереди. Если ваша интеграция не успевает — события удаляются. Рассказываю, как мы обнаружили потерю данных и построили систему надёжной обработки.

6 мая 2026 7 мин