PHP
#bitrix#catalog#sku#php#ccatalogSku#product

Найти родительский товар по ID торгового предложения

Получение ID родительского товара через CCatalogSku::GetProductInfo с проверкой подключения модуля catalog и обработкой результата.

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

Получение ID родительского товара по торговому предложению (SKU) через классический API Bitrix. Используйте в компонентах каталога, корзины, детальных страницах товаров для работы с базовым товаром.

use Bitrix\Main\Loader;

/**
 * Получить ID родительского товара по SKU
 * @param int $skuId ID торгового предложения
 * @return array|false ['PRODUCT_ID' => int, 'IBLOCK_ID' => int] или false
 */
function getParentProductBySku($skuId) {
    if (!Loader::includeModule('catalog')) {
        return false;
    }
    
    // Проверяем, является ли элемент SKU
    $arSku = CCatalogSku::GetProductInfo($skuId);
    
    if ($arSku && isset($arSku['ID'])) {
        return [
            'PRODUCT_ID' => (int)$arSku['ID'],
            'IBLOCK_ID' => (int)$arSku['IBLOCK_ID']
        ];
    }
    
    return false;
}

/**
 * Получить полную информацию о родительском товаре
 * @param int $skuId ID торгового предложения
 * @return array|false Массив с данными товара или false
 */
function getParentProductFullInfo($skuId) {
    if (!Loader::includeModule('catalog') || !Loader::includeModule('iblock')) {
        return false;
    }
    
    $productInfo = getParentProductBySku($skuId);
    if (!$productInfo) {
        return false;
    }
    
    // Получаем элемент инфоблока
    $res = CIBlockElement::GetByID($productInfo['PRODUCT_ID']);
    if ($element = $res->GetNextElement()) {
        $fields = $element->GetFields();
        $properties = $element->GetProperties();
        
        return [
            'FIELDS' => $fields,
            'PROPERTIES' => $properties,
            'IBLOCK_ID' => $productInfo['IBLOCK_ID']
        ];
    }
    
    return false;
}

Usage:

// В component.php или обработчике
$skuId = 12345;
$parentInfo = getParentProductBySku($skuId);

if ($parentInfo) {
    echo 'Родительский товар ID: ' . $parentInfo['PRODUCT_ID'];
    echo 'Инфоблок ID: ' . $parentInfo['IBLOCK_ID'];
}

// Получить полную информацию
$fullInfo = getParentProductFullInfo($skuId);
if ($fullInfo) {
    echo $fullInfo['FIELDS']['NAME'];
}

Notes:

⚠️ CCatalogSku::GetProductInfo() возвращает информацию только если переданный ID действительно является торговым предложением. Для обычного товара вернётся false. Модуль catalog должен быть подключен. В новых версиях Bitrix можно использовать D7 API через \Bitrix\Catalog\ProductTable.