Backend
Правильное создание товара в инфоблоке + миграция цен из свойств элементов в цены типа "торгового каталога"
При создании товара через 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);
}
}
}
}
Афоризм дня:
Лишь по поступкам людей общество может судить об их добродетели. (604)
By den
On September 04, 2018