Yandex Metrika
sanches.free 18 просмотров

Привязка каталога к инфоблоку 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 дней гарантии