Привязка каталога к инфоблоку SKU через CatalogIblockTable в Bitrix D7
Зачем эта таблица
В модуле catalog связь «товары ↔ SKU» задаётся не только настройкой инфоблоков в админке, но и строкой служебной таблицы, к которой обращается ядро. В D7 к ней ведёт \Bitrix\Catalog\CatalogIblockTable: там хранится, какой инфоблок играет роль набора торговых предложений для заданного инфоблока товаров, и какое свойство в SKU указывает на элемент родительского каталога.
Типичный сценарий
В коде уже известен ID инфоблока элементов основного каталога (товары без вариантов оффера). Нужно быстро понять ID инфоблока предложений и идентификатор свойства-привязки — например перед выборкой варианта размера или при интеграции, которая пишет в SKU напрямую.
Минимальный запрос
Перед выборкой подключите модуль каталога, иначе автозагрузка может быть недостаточной в вашей точке входа.
use Bitrix\Catalog\CatalogIblockTable;
use Bitrix\Main\Loader;
Loader::includeModule('catalog');
$paletteParentIblockId = (int) $payloadRow['IBLOCK_ID'];
$junctionSlice = CatalogIblockTable::getList([
'filter' => ['=PRODUCT_IBLOCK_ID' => $paletteParentIblockId],
'select' => [
'IBLOCK_ID',
'PRODUCT_IBLOCK_ID',
'SKU_PROPERTY_ID',
'VAT_ID',
'SUBSCRIPTION',
'YANDEX_EXPORT',
],
'limit' => 1,
])->fetch();
// $junctionSlice['IBLOCK_ID'] — инфоблок торговых предложений для этого родителя
// $junctionSlice['SKU_PROPERTY_ID'] — свойство в SKU, содержащее ссылку на товар родителяКак читать поля
PRODUCT_IBLOCK_ID— инфоблок «основного» торгового каталога.IBLOCK_ID— параллельный инфоблок с SKU именно для этой связки.SKU_PROPERTY_ID— свойство оффера, через которое Bitrix понимает, к какому товару относится строка.
Оставшиеся колонки (экспорт в маркетплейсы, подписка, НДС) редко нужны интеграциям оффлайн, но могут понадобиться при отладке торговых сценариев.
Практические замечания
Если в проекте несколько торговых каталогов на разных родительских инфоблоках, для каждого родителя своя строка в таблице: фильтруйте строго по =PRODUCT_IBLOCK_ID, чтобы не перепутать набор SKU. Если запись отсутствует, нужно искать проблему в настройках «торговый каталог» у инфоблока или в экспорте/миграции, а не в запросе к ORM.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии