Pull to refresh

Выгрузка товаров из 1С в Битрикс, с сохранением наименования и разделов заданных на сайте

Задача: в 1С есть каталог товаров который нужно выгрузить на сайт, но разделы которые находятся на сайте не совпадают с теми, которые в базе 1С. Новые товары могут находиться в группах выгруженных из 1С, а вот те что уже есть на сайте должны обновиться, при чем наименование не должно обновляться.

Решение


Нужно отредактировать файл /bitrix/php_interface/init.php.

Добавим два обработчика событий. Первый будут блокировать наименование при добавлении и обновлении элемента инфоблока, а третий сохранять существующий товар в текущей группе.

AddEventHandler("iblock", "OnAfterIBlockElementAdd", "DropNAME");
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "DropNAME");
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate","SaveInOldSection");

function DropNAME($arFields)
{    
    if (@$_REQUEST['mode']=='import') {
        unset($arFields['NAME']);
    }
}

function SaveInOldSection(&$arFields)
{
    if (@$_REQUEST['mode']=='import') {
        $db_old_groups = CIBlockElement::GetElementGroups($arFields['ID'], true);
        while($ar_group = $db_old_groups->Fetch()) {
			if(!in_array($ar_group['ID'],$arFields['IBLOCK_SECTION'])) {
                $arFields['IBLOCK_SECTION'][]=$ar_group['ID'];
			}
        }
    }
}


Таким образом группы и наименования у товаров затираться при обмене не будут, а нужные свойства и остатки на складе будут обновляться.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.