Для переноса множественного свойства типа список в множесвенное свойства типа элемент инфоблока.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
function perenosBrenda(){ CModule::IncludeModule("iblock"); $arSelect = Array("IBLOCK_TYPE","ID","ACTIVE",'XML_ID' , "IBLOCK_ID", "NAME", "PROPERTY_*" ,"PROPERTY_BREND_SVOYSTVO_OSNOVNOE_1","PROPERTY_BRAND_REF"); $arFilter = Array("IBLOCK_ID"=>12, "ACTIVE"=>"Y" , "IBLOCK_TYPE"=>"firstbit_beautyshop_catalog", array( "LOGIC" => "OR", array("!PROPERTY_BREND_SVOYSTVO_OSNOVNOE_1_VALUE"=>false),//множественное свойство типа список array("!PROPERTY_BRAND_REF"=>false), // множественное свойство -привязка к 1c ), // "!PROPERTY_BREND_SVOYSTVO_OSNOVNOE_1_VALUE"=>false, //верное // "!PROPERTY_BRAND_REF_VALUE"=>false, //верное ); // результат сгруппирован по id $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); $mass_id_temp=array(); //для лечения глюка while($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); //Лечим глюк! повторяющиеся элементы- нам не нужны if(in_array( $arFields['ID'],$mass_id_temp)) { // echo 'пропускаем цикл'; continue; } else { $mass_id_temp[]=$arFields['ID']; } // echo $arFields['ID'].' '.$arFields['NAME'] . '<br/>'; $Element_ID=$arFields['ID']; $IBlock_ID=$arFields['IBLOCK_ID']; $arProps = $ob->GetProperties(); $mas_bend=$arProps['BREND_SVOYSTVO_OSNOVNOE_1']['VALUE']; $mass_id=array(); foreach ( $mas_bend as $name_brend) { $arSelect2 = Array("IBLOCK_TYPE","ID", "IBLOCK_ID", "NAME",); $arFilter2 = Array("IBLOCK_ID"=>5, "IBLOCK_TYPE"=>"firstbit_beautyshop_catalog", "NAME"=>$name_brend, ); $res2 = CIBlockElement::GetList(Array(), $arFilter2, false, false, $arSelect2); if($ob2 = $res2->GetNextElement()) { $arFields2 = $ob2->GetFields(); // echo $arFields2['ID'].' '.$arFields2['NAME'] . '<br/>'; $mass_id[]=$arFields2['ID']; } } // print_r($mass_id); if(!empty($mass_id)){ CIBlockElement::SetPropertyValuesEx($Element_ID, $IBlock_ID, array('BRAND_REF'=>$mass_id)); }else{ // echo 'Очищаем!!!'.$Element_ID; //echo CIBlockElement::SetPropertyValuesEx($Element_ID, $IBlock_ID, array('BRAND_REF'=>false)); } // echo '<br/>=========================<br/>'; } } |
Эту функцию тестируем , через какой либо файлик.
потом вешаем в событие успеха 1с (если надо) или на крон
1 2 3 4 5 |
AddEventHandler('catalog', 'OnCompleteCatalogImport1C', 'CompleteCatalogImport1C'); function CompleteCatalogImport1C() { perenosBrenda(); } |
Особо важными являются строки
1 2 |
array("!PROPERTY_BREND_SVOYSTVO_OSNOVNOE_1_VALUE"=>false),//множественное свойство типа список array("!PROPERTY_BRAND_REF"=>false) |
Т.к мы выберем все свойства , которые не пустые. И то что переносится и то в которое переносится. И никто не затеряется.