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

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

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

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

Рабочий вариант на 2024 год

AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate", "skipSectionActivity_If1C");
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "skipSectionActivity_If1C");
// не управляем активностью раздела при обмене товарами с 1С
function skipSectionActivity_If1C(&$arParams){

if( $_SERVER["SCRIPT_NAME"] == '/bitrix/admin/1c_exchange.php')
unset($arParams["ACTIVE"]);

}

Альтернативные и старые варианты:

Вариант 1:

AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate", "skipSectionActivity_If1C"); AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "skipSectionActivity_If1C"); // не управляем активностью раздела при обмене товарами с 1С function skipSectionActivity_If1C(&$arParams){ if( $_SERVER["SCRIPT_NAME"] == '/bitrix/admin/1c_exchange.php') unset($arParams["ACTIVE"]); }

Вариант 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, обработки персональных данных и конфиденциальности. Подробнее