Как в Битрикс запретить активацию раздела при импорте из 1С

12.04.2024 14:34
Поделиться:
Как в Битрикс запретить активацию раздела при импорте из 1С

Возьмем ситуацию в которой вы выгружаете товары и у вас имеется раздел или несколько для обработки новых товаров, хранения старых и тд. Битрикс делает активными разделы при каждой синхронизации с 1С - этот простой код запретит Битриксу менять статус разделов с неактивного в активный.

Чтобы запретить активацию разделов каталога при импорте из 1С в CMS 1С Битрикс, вы можете использовать событие `OnBeforeCatalogImport1C` и установить значение параметра `ACTIVE` в `N` для соответствующих разделов. Ниже представлен пример кода:

Вариант 1:

<?
use Bitrix\Catalog;
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
    'catalog',
    'OnBeforeCatalogImport1C',
    'OnBeforeCatalogImport1CHandler'
);
function OnBeforeCatalogImport1CHandler($xmlID, $arFields, $iblockID, $arElementFields) {
    if($arFields['XML_DATA']['SECTION']['ACTIVE'] === 'N') {
        $arElementFields['ACTIVE'] = 'N'; // Устанавливаем значение активности элемента в "N"
    }
    return $arElementFields;
}
?>

Вариант 2:

Запрещаем отдельным паапкам менять статус.


ID - ID раздела
XML_ID - внешний идентификатор раздела во вкладке "дополнительно"



AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate", Array("MyClass", "OnBeforeIBlockSectionUpdateHandler"));
class MyClass
{ function OnBeforeIBlockSectionUpdateHandler(&$arFields) {
$resSection = CIBlockSection::GetList(array(),array('ID'=>$arFields['ID'],'IBLOCK_ID'=>$arFields['IBLOCK_ID']),false);
if($arFields["XML_ID"]=="G_RAZBOR" || $arFields['ID']==82) { $arFields["ACTIVE"]="N";}
}
}


Вариант 3:

AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate","DoNotUpdateSect");
function DoNotUpdateSect(&$arFields)
{
if ($_REQUEST['mode']=='import')
{

unset($arFields['ACTIVE']);

}
}


2024-04-12_150552

Этот код следует добавить в файл `/bitrix/php_interface/init.php` вашего проекта. После этого при импорте из 1С все разделы каталога, которые имеют свойство `ACTIVE` со значением `N`, не будут активированы после импорта.

Мы используем файлы cookie. Продолжив использование сайта, Вы соглашаетесь с политикой использования файлов cookie, обработки персональных данных и конфиденциальности. Подробнее