Loading...
Loading...
Covers Trade Catalog module — products, SKU/offers, prices, inventory, discounts, bundles, export/import, catalog API choice. Applied for e-commerce features requiring prices, stock, and sale integration. Key terms — catalog, product, SKU, offer, price type, CCatalogProduct, catalog module.
npx skill4agent add bxmaximum/bitrix-framework-skills bitrix-catalogiblockcatalogsalebitrix-sale\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');b_catalog_productProductTableb_catalog_pricePriceTableb_catalog_iblockCatalogIblockTableCCatalog\CCatalog::Add([
'IBLOCK_ID' => $productIblockId,
'YANDEX_EXPORT' => 'N',
'SUBSCRIPTION' => 'N',
]);$row = \Bitrix\Catalog\CatalogIblockTable::getByPrimary($productIblockId)->fetch();
// IBLOCK_ID, PRODUCT_IBLOCK_ID, SKU_PROPERTY_ID, VAT_ID, …CCatalogSkucatalog/general/catalog_sku.php| Constant | Meaning |
|---|---|
| Simple catalog (no SKU) |
| Product iblock with separate offers iblock |
| Offers (SKU) iblock |
| Product iblock that itself holds simple products + SKUs |
$info = \CCatalogSku::GetInfoByIBlock($iblockId);
// CATALOG_TYPE, PRODUCT_IBLOCK_ID, SKU_PROPERTY_ID, …ProductTablecatalog/lib/product.php| Constant | Value | Meaning |
|---|---|---|
| 1 | Simple product |
| 2 | Set / bundle |
| 3 | Parent with offers |
| 4 | Offer (SKU variant) |
| 5 | Offer without parent link |
| 6 | SKU parent without offers |
| 7 | Service (no warehouse tracking) |
use Bitrix\Catalog\ProductTable;
$product = ProductTable::getByPrimary($elementId, [
'select' => ['ID', 'TYPE', 'QUANTITY', 'AVAILABLE', 'VAT_ID', 'VAT_INCLUDED'],
])->fetch();
ProductTable::update($elementId, [
'QUANTITY' => 10,
'QUANTITY_TRACE' => ProductTable::STATUS_YES,
'CAN_BUY_ZERO' => ProductTable::STATUS_NO,
]);\Bitrix\Catalog\Model\ProductCCatalogProductPROPERTY_TYPE = ELINK_IBLOCK_ID = product iblockUSER_TYPE = SKUPropertyTable::USER_TYPE_SKU\CCatalog::Add([
'IBLOCK_ID' => $offersIblockId,
'PRODUCT_IBLOCK_ID' => $productIblockId,
'SKU_PROPERTY_ID' => $skuPropertyId, // E-property on offers iblock
]);TYPE_SKUTYPE_OFFERTYPE_PRODUCTb_catalog_groupBitrix\Catalog\GroupTableBASENAMEGroupAccessTableCCatalogGroupBitrix\Catalog\PriceTablePRODUCT_IDCATALOG_GROUP_IDPRICECURRENCYQUANTITY_FROMQUANTITY_TOuse Bitrix\Catalog\PriceTable;
use Bitrix\Catalog\GroupTable;
$base = GroupTable::getRow(['filter' => ['=BASE' => 'Y']]);
PriceTable::add([
'PRODUCT_ID' => $elementId,
'CATALOG_GROUP_ID' => (int)$base['ID'],
'PRICE' => 1990.00,
'CURRENCY' => 'RUB',
]);
$prices = PriceTable::getList([
'filter' => ['=PRODUCT_ID' => $elementId],
'select' => ['ID', 'PRICE', 'CURRENCY', 'CATALOG_GROUP_ID'],
])->fetchAll();CPriceVAT_IDVAT_INCLUDEDProductTableQUANTITYQUANTITY_RESERVEDQUANTITY_TRACECAN_BUY_ZEROAVAILABLEStoreTableb_catalog_storeStoreProductTableb_catalog_store_productSTORE_IDPRODUCT_IDAMOUNTQUANTITY_RESERVEDStoreDocumentTableStoreBatchTableuse Bitrix\Catalog\StoreProductTable;
$amounts = StoreProductTable::getList([
'filter' => ['=PRODUCT_ID' => $elementId],
'select' => ['STORE_ID', 'AMOUNT', 'QUANTITY_RESERVED'],
])->fetchAll();TYPE_SERVICEsale| Concern | Module |
|---|---|
| Product card, type, qty, prices, stores | |
| Basket, order, payment, delivery, shipments | |
catalogbitrix-sale| Use | Prefer |
|---|---|
| Read product/price/store rows | |
| Write with catalog side effects | |
| Legacy admin / compatibility | |
bitrix/modules/catalog/lib/v2CCatalogProduct::GetByIDiblockcatalogCCatalog::AddCatalogIblockTablePRODUCT_IBLOCK_IDSKU_PROPERTY_IDProductTable::TYPE_*PriceTableGroupTableStoreProductTablesalebitrix-sale