Возьмем ситуацию в которой вы выгружаете товары и у вас имеется раздел или несколько для обработки новых товаров, хранения старых и тд. Битрикс делает активными разделы при каждой синхронизации с 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']);
}
}
Этот код следует добавить в файл `/bitrix/php_interface/init.php` вашего проекта. После этого при импорте из 1С все разделы каталога, которые имеют свойство `ACTIVE` со значением `N`, не будут активированы после импорта.