bitrix

Правильное создание товара в инфоблоке + миграция цен из свойств элементов в цены типа "торгового каталога"

При создании товара через API обязательно нужно указывать коэффициент

if (\Bitrix\Main\Loader::includeModule('catalog'))
{
    $useStoreControl = (string)\Bitrix\Main\Config\Option::get('catalog', 'default_use_store_control') === 'Y';

    CModule::IncludeModule('iblock');
    $IBLOCK_ID = 129;
    $arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*");
    $arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID,
        "ACTIVE_DATE"=>"Y",
        //"SECTION_CODE" => "elektrobezopasnost",
    );

    $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>9999), $arSelect);
    while($ob = $res->GetNextElement()){
        $arFields = $ob->GetFields();
        $arProps = $ob->GetProperties();
//        pre2($arFields['NAME']);

        $id = $arFields['ID'];

        if ($id > 0)//$id > 0
        {
            $fields = array(
                'ID' => $id,
                'QUANTITY_TRACE' => \Bitrix\Catalog\ProductTable::STATUS_DEFAULT,
                'CAN_BUY_ZERO' => \Bitrix\Catalog\ProductTable::STATUS_DEFAULT,
                'WEIGHT' => 0,
                'MEASURE' => 5//id еденицы измерения - Штука
            );
            if (!$useStoreControl)
            {
                // выключен складской учет
                $fields['QUANTITY'] = 3000;
            }
            // создание товара
            $result = CCatalogProduct::Add($fields);
            if ($result)
            {
                // добавление коэффициента единицы измерения товара
                $ratioResult = \Bitrix\Catalog\MeasureRatioTable::add(array(
                    'PRODUCT_ID' => $id,
                    'RATIO' => 5//коэффициент_единицы_измерения - Штука
                ) );

                if (!$ratioResult->isSuccess())
                {
                    echo 'Ошибка создания коэффициента
'.implode('
', $ratioResult->getErrorMessages()); } // добавление цены $priceId = CPrice::Add(array( 'PRODUCT_ID' => $id, 'CATALOG_GROUP_ID' => 1,//ID_типа_цены - base_cost 'PRICE' => ($arProps['PR_PRICE']['VALUE'] / 100) * 90, 'CURRENCY' => 'RUB' ) ); if (!$priceId) { if ($ex = $APPLICATION->GetException()) echo 'Ошибка создания цены: '.$ex->GetString(); else echo 'Неизвестная ошибка при создании цены'; unset($ex); } } else { if ($ex = $APPLICATION->GetException()) echo 'Ошибка создания товара: '.$ex->GetString(); else echo 'Неизвестная ошибка при создании товара'; unset($ex); } } } }

Leave a reply