Для того чтобы запретить изменение свойств в Битрикс при обмене с 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 будет запрещено. Обратите внимание, что вам нужно будет адаптировать код для вашей конкретной ситуации, изменить названия модуля, группы пользователей и другие параметры в коде.