Как запретить изменение свойств в Битрикс при обмене с 1С по REST?

Для того чтобы запретить изменение свойств в Битрикс при обмене с 1С по REST, вам понадобится выполнить несколько шагов.

1. Создайте кастомный модуль в Битриксе:
- Создайте папку с именем вашего модуля в папке "/bitrix/modules/".
- Создайте файл "index.php" в созданной папке и определите в нем базовую структуру модуля.

2. Определите правила доступа к модулю:
- Откройте файл "install/index.php" и определите методы для установки и удаления модуля.
- В методе установки, добавьте правила доступа для администратора:

     CModule::AddAutoloadClasses(
        'your_module_name',
         array(
             // классы модуля
         )
     );
     CModule::IncludeModule('your_module_name');
     your_module_name_permissions::install();

- Создайте класс "your_module_name_permissions" в файле "install/classes/your_module_name_permissions.php" и определите методы установки и удаления правил доступа:

     class your_module_name_permissions
     {
         public static function install()
         {
             // Сюда добавьте код для установки правил доступа
         }

         public static function uninstall()
         {
             // Сюда добавьте код для удаления правил доступа
         }
     }

- В методе установки, определите правила доступа:

     public static function install()
     {
         $arTasks = array(
             'reference' => array(
                 'D', // запретить доступ
                 'P', // разрешить доступ
             ),
             'reference_id' => array(
                 'D', // запретить доступ
                 'P', // разрешить доступ
             ),
         );
         $arGroups = array(
             // группы пользователей
         );
         foreach ($arGroups as $groupName => $groupId) {
             $taskId = CTask::Add(
                 array(
                     'NAME' => 'Запрет изменения свойств в Битрикс',
                     'LETTER' => 'tasks',
                     'MODULE_ID' => 'main',
                     'BINDINGS' => array(
                         array(
                             'MODULE_ID' => 'your_module_name',
                             'BINDING_TYPE' => 'your_entity',
                             'BINDING_ID' => 'entity_id',
                         ),
                     ),
                 )
             );
             CGroup::SetModulePermission(
                 $groupId,
                 'main',
                 $taskId,
                 $arTasks['reference_id'][1]
             );
         }
     }

3. Определите обработчик события обмена с 1С:
- Создайте файл "include.php" в папке вашего модуля и определите в нем обработчик события:

     AddEventHandler(
        'main',
         'OnAfterSynchronization3',
         'your_module_name_handler'
     );

     function your_module_name_handler()
     {
         global $APPLICATION;
         $APPLICATION->ThrowException('Запрет изменения свойств в Битрикс');
     }

- Функция "ThrowException" вызывает исключение и останавливает обработку события обмена с 1С.

4. Обновите сервис обмена данными с 1С:
- Откройте файл "bitrix/php_interface/init.php" и добавьте следующий код:

     AddEventHandler(
         'main',
         'OnAfterUserLogin',
         'your_module_name_update_1c_service'
     );
     AddEventHandler(
         'main',
         'OnAfterUserLogout',
         'your_module_name_update_1c_service'
     );

     function your_module_name_update_1c_service()
     {
         if (defined('CACHED_b_1c_exchange') && CACHED_b_1c_exchange) {
             BXClearCache(true, '/'.SITE_ID.'/crm/1c_exchange/');
         }
     }

- Функция "BXClearCache" очищает кеш сервиса обмена данными с 1С при входе и выходе пользователя.

После выполнения всех вышеперечисленных шагов, изменение свойств в Битрикс при обмене с 1С по REST будет запрещено. Обратите внимание, что вам нужно будет адаптировать код для вашей конкретной ситуации, изменить названия модуля, группы пользователей и другие параметры в коде.