VicTHOR
@VicTHOR
(╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻

Как создать свойство из свойста с множественным значением и обновлять после обмена?

У товара есть свойство "реквизиты"
5d3efa37cfa65093914320.png
Как мне взять оттуда одно подсвойство и занести как отдельное свойство товара, при этом обновлять его при обмене и лишний раз не трогать?
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
alexyarik
@alexyarik
Битрикс разработчик
VicTHOR, в общих чертах вижу так это:
1) создание обработчика OnAfterIBlockElementAdd в init.php (после создания элемента)
и OnAfterIBlockElementUpdate (изменение элемента) при обмене
2) Получение данных Реквизитов в обработчике CIBlockElement::GetPropertyValues (для множественного свойства типа строка)
3) CIBlockElement::SetPropertyValues (Установим новое значение для данного свойства данного элемента)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vaajnur
веб-программист
была такая задача при обмене с 1с. Вес выгружался в виде реквизитов. Вот полный код получения данного значения и обновления в другом св-ве.
$db_res = CIBlockElement::GetList(
        array(),
        array('IBLOCK_ID' => 1, 'IBLOCK_TYPE' => 'catalog', 'ACTIVE' => 'Y'),
        false,
        false
    );


while ($ar_res = $db_res->Fetch())
{
    if(isset($ar_res['IBLOCK_SECTION_ID'])){
	    $ID = $ar_res['ID'];
	    // все поля
	    $ar_res2 = CCatalogProduct::GetByIDEx($ID);
	    
	     $property_enums = CIBlockPropertyEnum::GetList(Array("DEF" => "DESC", "SORT" => "ASC"), Array("IBLOCK_ID" => $ar_res["IBLOCK_ID"], "CODE" => "VES"));
       $arPropertyArchive = [];
        while($enum_fields = $property_enums->GetNext()) {
           /* Если значение равно "Да" */
           if ($enum_fields["VALUE"] == $ar_res2['PROPERTIES']['CML2_TRAITS']['VALUE']) {
              $arPropertyArchive = Array(
                 "VES" => $enum_fields["ID"],
              );
              break;
           }
        }
       if(empty($arPropertyArchive)){
       	$ibpenum = new CIBlockPropertyEnum;
		$PropID = $ibpenum->Add(Array('PROPERTY_ID'=> 396, 'VALUE'=>$ar_res2['PROPERTIES']['CML2_TRAITS']['VALUE']));
       		$arPropertyArchive = array(
       			'VES' => $PropID
       		);
       }
	    CIBlockElement::SetPropertyValuesEx($ar_res['ID'], $ar_res['IBLOCK_ID'], $arPropertyArchive, ['DoNotValidateLists']);
	    echo "========================================================================";
	}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы