При добавлении добавления товаров скриптом (код см. ниже), у них не проставляется поле "Тип товара" и не отображается цена.
Нормального способа решения не нашел, но помогает сделать "Переиндексацию".
В настройках модуля Торговый каталог - Служебные процедуры - закладка "Переиндексация"
<?php
function add($product)
{
$oElement = new \CIBlockElement;
$IBLOCK_ID = 1; // IBLOCK_ID для каталога
$aOptions = Array(
"IBLOCK_SECTION_ID" => 101, // ID категории
"IBLOCK_ID" => $IBLOCK_ID,
"NAME" => $product->title,
"ACTIVE" => "N", // активен
"CODE" => $product->seo_url, // Ссылочный код
);
if($id = $oElement->Add($aOptions))
{
\CIBlockElement::SetPropertyValuesEx($id, $IBLOCK_ID, array(
"UId" => $product->uid,
));
$arField = array(
"PRODUCT_ID" => $id,
"CATALOG_GROUP_ID" => 1,
"PRICE" => $product->price,
"CURRENCY" => "RUB"
);
\CPrice::Add($arField);
}
else
{
throw new \Exception('Add Error: "'.$oElement->LAST_ERROR.'"');
}
$aOptions1 = $aOptions[0];
$aOptions2 = $aOptions[1];
$aOptions1['EL_SKU'] = $product->sku;
$aOptions2['NAME'] = html_entity_decode($product->title);
$aOptions2['PREVIEW_TEXT'] = $product->description;
$aOptions2['PREVIEW_TEXT_TYPE'] = 'html';
// Price:
$arField = Array(
"PRODUCT_ID" => $id,
"CATALOG_GROUP_ID" => 1,
"PRICE" => $product->price,
"CURRENCY" => "RUB"
);
$res = \CPrice::GetList(array(),array("PRODUCT_ID" => $id, "CATALOG_GROUP_ID" => 1));
if ($aTMP = $res->Fetch()) {
$bTMP = \CPrice::Update($aTMP["ID"], $arField);
//var_dump($bTMP).'<br />';
} else {
$bTMP = \CPrice::Add($arField);
//var_dump($bTMP).'<br />';
}
// Images
$aTMPFiles = [];
$sTMPPath = $_SERVER['DOCUMENT_ROOT'].'/TMP/';
$aFiles = array();
$i=0;
foreach($product->picture as $sImage)
{
$i++;
preg_match_all('|code=(.*?)&|si', $sImage, $aMatches, PREG_SET_ORDER);
$sFile = $sTMPPath.'vatten_'.$product->id.'_'.$i.'.jpg';
if(!file_exists($sFile))
{
copy($sImage, $sFile);
}
$aFiles[] = \CFile::MakeFileArray($sFile);
$aTMPFiles[] = $sFile;
}
$aOptions1['9'] = $aFiles;
$aOptions2['PREVIEW_PICTURE'] = $aFiles[0];
$aOptions2['DETAIL_PICTURE'] = $aFiles[0];
\CIBlockElement::SetPropertyValuesEx($id, $IBLOCK_ID, $aOptions1);
$el = new \CIBlockElement;
$el->Update($id, $aOptions2);
}