Евгений
Зарегистрирован: 17 лет и 6 месяцев
Отзывы + 1 / - 0

Заказ закрыт
Ищем специалиста для разработки/доработки сайта на битриксе.

Бюджет: по договоренности
 
Требование к специалисту:
Знание PHP, mysql, Битрикс и т.п. Умение работать в Git приветствуется.

Задание:
Есть процесс импорта данных со стороннего сайта в базу Битрикса. Во время импорта возникает падение базы из-за большого запроса. Необходимо переписать и оптимизировать этот участок кода, чтобы избавиться от этотй проблемы.

Вот код:

function outElement($arIn, $arProps, $arPrice, $arProduct=false){
global $APPLICATION;
global $allPropsIBlock;
$el = new CIBlockElement;
$catPr = new CCatalogProduct;
//echo 'arIn';var_dump($arIn);echo '';
//echo 'arProps';var_dump($arProps);echo '';
//echo 'arPrice';var_dump($arPrice);echo '';
// ищем в конечном ИБ товар по ["XML_ID"]
$arFilter=Array ( "IBLOCK_ID" => $arIn["IBLOCK_ID"]
, "ACTIVE" => ""
, "EXTERNAL_ID" => $arIn["XML_ID"]
);
//echo 'arFilter';var_dump($arFilter);echo '';
$rs1 = CIBlockElement::GetList( array()
, $arFilter
);

$arProductDest = $rs1->GetNextElement();
$newCode = Cutil::translit($arIn["NAME"],"ru",array("replace_space"=>"-" ,"replace_other"=>"-"));
$arLoadProductArray = Array(
  "ACTIVE"          => "Y"
, "IBLOCK_SECTION_ID"  => $arIn["IBLOCK_SECTION_ID"]
, "IBLOCK_ID"       => $arIn["IBLOCK_ID"]
, "NAME" => $arIn["NAME"]
, "DETAIL_TEXT" => $arIn["DETAIL_TEXT"]
, "CODE" => $newCode
, "EXTERNAL_ID"  => $arIn["XML_ID"]
, "PROPERTY_VALUES" => $arProps
);
//echo 'arLoadProductArray';var_dump($arLoadProductArray);echo '';
if(!$arProductDest){
addLog(" НЕ НАЙДЕН", __FILE__, __LINE__);
//echo 'arLoadProductArray';var_dump($arLoadProductArray);echo '';
$sLog="создаем элемент ".$arIn["XML_ID"];
$ID=$el->Add($arLoadProductArray);
if(!$ID) $sLog.=errorHandler($el)." ".$arIn["IBLOCK_ID"];
else $sLog.=" ok;";
addLog($sLog, __FILE__, __LINE__);
$rs1 = CIBlockElement::GetList( array()
, Array ( "IBLOCK_ID" => $arIn["IBLOCK_ID"]
, "ACTIVE" => ""
, "IBLOCK_SECTION_ID" => $arIn["IBLOCK_SECTION_ID"]
, "EXTERNAL_ID" => $arIn["XML_ID"]
)
);
$arProductDest = $rs1->GetNextElement();
if($arProductDest){
$arFieldsProductDest = $arProductDest->GetFields();
$arPropsProductDest  = $arProductDest->GetProperties();
}
}
else{
$arFieldsProductDest = $arProductDest->GetFields();
$arPropsProductDest = $arProductDest->GetProperties(); // FIX ME
$ID=$arFieldsProductDest["ID"];// нужна на следующем шаге
$sLog=" НАЙДЕН ".$arFieldsProductDest["ID"]." в разделе ".$arFieldsProductDest["IBLOCK_SECTION_ID"];
addLog($sLog, __FILE__, __LINE__);
//echo 'arFieldsProductDest';var_dump($arFieldsProductDest);echo '';
//echo 'arFieldsProductDest';var_dump($arFieldsProductDest);echo '';
$sLog="обновляем элемент ".$arFieldsProductDest['ID'];
$res = $el->Update($arFieldsProductDest['ID'], $arLoadProductArray);
if(!$res) $sLog.=errorHandler($el);
else $sLog.=" ok ";
addLog($sLog, __FILE__, __LINE__);
}
// добавляем /обновляем информацию о товаре
$arFields = array("ID"=>$arFieldsProductDest['ID'] //- код товара (элемента каталога – обязательный);
, "VAT_ID"=> 1 // – код НДС;
, "VAT_INCLUDED" => "Y" // – флаг (Y/N) включен ли НДС в цену;
, "QUANTITY" => $arProduct["QUANTITY"] // – количество товара на складе;
, "WIDTH" => $arProduct["WIDTH"] // – количество товара на складе;
, "LENGTH" => $arProduct["LENGTH"] // – количество товара на складе;
, "HEIGHT" => $arProduct["HEIGHT"] // – количество товара на складе;
, "WEIGHT" => $arProduct["WEIGHT"] // – количество товара на складе;
);

//echo 'arFields';var_dump($arFields);echo '';
$sLog="информация о товаре: ";
$res=$catPr->Add($arFields);
if(!$res) {$sLog.=errorHandler($catPr);addLog("arFields:".serialize($arFields), __FILE__, __LINE__);}
else $sLog.=" ok;";
addLog($sLog, __FILE__, __LINE__);
$sLog="добавление цены: ";
$pr = new CPrice;
if($arPrice["CURRENCY"]=="руб.") $arPrice["CURRENCY"]="RUB";
$res=insertPrice( $arFieldsProductDest['ID'], $arPrice["PRICE"], $arPrice["CURRENCY"], 0, 0, $logH, $sLog, $outLog, $start_time);
if($res) $sLog.=$res; /// !!! наоборот – пусто правильно
else $sLog.=" ok ";
addLog($sLog, __FILE__, __LINE__);
}

Подсказка:
Проблемное место обозначенно в коде комментарием // FIX ME

Вы выберем специалиста который:
- понимает в чем суть проблемы и сможет это объяснить и предложить пути решения.
- имеет опыт разработки программного кода под битрикс. 
- знает как загружать большой объем данных (более 50 тыс наименований товаров) в битрикс быстро и не формируя гигантских запросов. 

Размер денежного вознаграждения за работу определят исполнитель.
Опубликован 18.11.2015 в 00:42
Заказ находится в архиве

Выберите способ верификации:

Обновите страницу после прохождения верификации.