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

в 18:49, , рубрики: Песочница, метки: ,

Задача: в 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'];
			}
        }
    }
}

Таким образом группы и наименования у товаров затираться при обмене не будут, а нужные свойства и остатки на складе будут обновляться.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js