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