7sites - внедрение Битрикс24
Услуги
  • Лицензии 1С-Битрикс
    • Облачный сервис Битрикс24
    • Коробочная версия Битрикс24
    • Подписка Битрикс24.Маркет Плюс
  • Внедрение CRM
  • Доработка корпоративных порталов Битрикс24
  • Техническое сопровождение
  • Перенос Битрикс24 из облака в коробку
  • Сайты на 1С-Битрикс24
Проекты
  • Государственные организации
  • Управление бизнесом
  • Спорт
  • Автомобильный бизнес
Акции
Новости
Компания
  • О компании
  • Сертификаты
  • Карьера
  • Разработка ПО
Контакты
Ещё
    Задать вопрос
    +7 (495) 118-30-89
    Заказать звонок
    info@7sites.ru
    г. Пермь, ш. Космонавтов 111, к. 10
    • Вконтакте
    • Facebook
    • Twitter
    • Telegram
    +7 (495) 118-30-89
    Заказать звонок
    7sites - внедрение Битрикс24
    Услуги
    • Лицензии 1С-Битрикс
      • Облачный сервис Битрикс24 —
      • Коробочная версия Битрикс24 —
      • Подписка Битрикс24.Маркет Плюс
    • Внедрение CRM
    • Доработка корпоративных порталов Битрикс24
    • Техническое сопровождение
    • Перенос Битрикс24 из облака в коробку
    • Сайты на 1С-Битрикс24
    Проекты
    • Государственные организации
    • Управление бизнесом
    • Спорт
    • Автомобильный бизнес
    Акции
    Новости
    Компания
    • О компании
    • Сертификаты
    • Карьера
    • Разработка ПО
    Контакты
      7sites - внедрение Битрикс24
      Услуги
      • Лицензии 1С-Битрикс
        • Облачный сервис Битрикс24 —
        • Коробочная версия Битрикс24 —
        • Подписка Битрикс24.Маркет Плюс
      • Внедрение CRM
      • Доработка корпоративных порталов Битрикс24
      • Техническое сопровождение
      • Перенос Битрикс24 из облака в коробку
      • Сайты на 1С-Битрикс24
      Проекты
      • Государственные организации
      • Управление бизнесом
      • Спорт
      • Автомобильный бизнес
      Акции
      Новости
      Компания
      • О компании
      • Сертификаты
      • Карьера
      • Разработка ПО
      Контакты
        7sites - внедрение Битрикс24
        7sites - внедрение Битрикс24
        • Услуги
          • Назад
          • Услуги
          • Лицензии 1С-Битрикс
            • Назад
            • Лицензии 1С-Битрикс
            • Облачный сервис Битрикс24
            • Коробочная версия Битрикс24
            • Подписка Битрикс24.Маркет Плюс
          • Внедрение CRM
          • Доработка корпоративных порталов Битрикс24
          • Техническое сопровождение
          • Перенос Битрикс24 из облака в коробку
          • Сайты на 1С-Битрикс24
        • Проекты
          • Назад
          • Проекты
          • Государственные организации
          • Управление бизнесом
          • Спорт
          • Автомобильный бизнес
        • Акции
        • Новости
        • Компания
          • Назад
          • Компания
          • О компании
          • Сертификаты
          • Карьера
          • Разработка ПО
        • Контакты
        • +7 (495) 118-30-89
        info@7sites.ru
        г. Пермь, ш. Космонавтов 111, к. 10
        • Вконтакте
        • Facebook
        • Twitter
        • Telegram
        • Главная
        • Пресс-центр
        • Полезное
        • Обновление компании в Битрикс24: метод CCrmCompany->Update() (объектный вызов)

        Обновление компании в Битрикс24: метод CCrmCompany->Update() (объектный вызов)

        14 ноября 2024
        Полезное

        Введение

        При разработке на коробочной версии Битрикс24 часто возникает необходимость программно обновить данные компании по её идентификатору. Это может потребоваться при синхронизации с внешними системами, массовом изменении полей, обработке событий или автоматизации бизнес-процессов. Основным и наиболее гибким методом для обновления информации о компании является объектный вызов CCrmCompany->Update().

        Особенности объектного вызова

        Ключевая особенность данного подхода — создание экземпляра класса \CCrmCompany с параметром, определяющим проверку прав:

        php

        $cCompany = new \CCrmCompany(false);  // проверка прав отключена

        Это делает метод незаменимым при служебных операциях и в агентах, где требуется обновление без оглядки на текущего пользователя.

        Способ вызова Особенности
        new \CCrmCompany(false)->Update() Объектный вызов, проверка прав отключена
        new \CCrmCompany(true)->Update() Объектный вызов, проверка прав включена

        Проверка прав доступа

        При создании экземпляра класса \CCrmCompany передается параметр $bCheckRight, который определяет, будет ли проверяться право доступа текущего пользователя на выполнение операции.

        Значение $bCheckRight Проверка прав Результат
        false ❌ Отключена Метод Update() выполнит обновление без проверки прав, независимо от того, кто вызвал код
        true ✅ Включена Метод Update() проверит, есть ли у текущего пользователя право на редактирование этой компании

        Важно: текущий пользователь определяется по ключу CURRENT_USER в массиве $arOptions.

        php
        $arOptions = array(
            "CURRENT_USER" => $userId,  // ID пользователя, от имени которого выполняется действие
            // ...
        );

        Рекомендация: для служебных скриптов, агентов и cron-задач используйте false. Для пользовательских сценариев (например, в компонентах) используйте true.

        Параметры метода

        Метод имеет следующую сигнатуру:

        php
        public function Update($ID, $arFields, $bCompare = true, $bSendEvent = true, $arOptions = [])

        Параметр $ID

        Числовой идентификатор компании, которую необходимо обновить.

        Параметр $arFields

        Ассоциативный массив с полями компании и новыми значениями. Поддерживаются все стандартные поля и пользовательские поля (UF_CRM_*).

        Пример:

        php
        $поля_компании = [
            'TITLE' => 'Новое название',
            'UF_CRM_12345678' => 'Новое значение'
        ];

        Параметр $bCompare

        Логический параметр, определяющий, нужно ли сравнивать старые и новые значения:

        Значение Описание
        true Выполняется сравнение, в событиях передаются оба набора данных
        false Сравнение не выполняется

        Параметр $bSendEvent

        Логический параметр, определяющий, нужно ли запускать системные события:

        Значение Описание
        true События OnBeforeCrmCompanyUpdate и OnAfterCrmCompanyUpdate вызываются
        false События не вызываются

        Параметр $arOptions (ключевая особенность)

        Массив с дополнительными настройками обновления:

        php
        $arOptions = array(
            'DISABLE_USER_FIELD_CHECK' => true,   // отключает проверку UF-полей
            "CURRENT_USER" => $userId,            // ID пользователя (от имени которого обновление)
            "ENABLE_SYSTEM_EVENTS" => true        // разрешает системные события
        );

        Доступные опции в $arOptions:

        Опция Тип Описание
        CURRENT_USER int ID пользователя, от лица которого выполняется действие (влияет на проверку прав и историю)
        DISABLE_USER_FIELD_CHECK bool Если true, отключает проверку и валидацию пользовательских полей
        DISABLE_REQUIRED_USER_FIELD_CHECK bool Если true, отключает проверку обязательности пользовательских полей (игнорируется, если DISABLE_USER_FIELD_CHECK = true)
        ENABLE_SYSTEM_EVENTS bool Если true, разрешает системные события
        IS_SYSTEM_ACTION bool Если true, не обновляет дату изменения и не записывает пользователя
        REGISTER_SONET_EVENT bool Если true, создает сообщение в ленте о изменении
        ENABLE_DUP_INDEX_INVALIDATION bool Если true, отмечает кеш дубликатов неактуальным

        Практические примеры

        Пример 1. Базовое обновление компании (без проверки прав)

        php
        $userId = 1; // ID пользователя, от имени которого выполняется обновление
        
        $cCompany = new \CCrmCompany(false);  // проверка прав ОТКЛЮЧЕНА
        
        $arOptions = array(
            'DISABLE_USER_FIELD_CHECK' => true,
            "CURRENT_USER" => $userId,
            "ENABLE_SYSTEM_EVENTS" => true
        );
        
        $поля_компании = [
            'TITLE' => 'ООО "Новый партнер"',
            'ADDRESS' => 'г. Москва, ул. Ленина, д. 1'
        ];
        
        $upRes = $cCompany->Update(123, $поля_компании, true, true, $arOptions);
        
        if ($upRes) {
            echo "Компания успешно обновлена";
        } else {
            echo "Ошибка: " . $cCompany->LAST_ERROR;
        }

        Пример 2. Обновление с проверкой прав

        php
        $userId = 1; // ID пользователя, от имени которого выполняется обновление
        
        $cCompany = new \CCrmCompany(true);  // проверка прав ВКЛЮЧЕНА
        
        $arOptions = array(
            "CURRENT_USER" => $userId,
            "ENABLE_SYSTEM_EVENTS" => true
        );
        
        $поля_компании = [
            'TITLE' => 'Обновленное название'
        ];
        
        $upRes = $cCompany->Update(123, $поля_компании, true, true, $arOptions);
        
        if (!$upRes) {
            echo "Ошибка: " . $cCompany->LAST_ERROR;
        }

        Пример 3. Обновление пользовательских полей

        php
        $userId = 1;
        
        $cCompany = new \CCrmCompany(false);
        
        $arOptions = array(
            'DISABLE_USER_FIELD_CHECK' => true,  // обязательно для UF-полей
            "CURRENT_USER" => $userId,
            "ENABLE_SYSTEM_EVENTS" => true
        );
        
        $поля_компании = [
            'UF_CRM_1617204193' => 'Новое значение текстового поля',
            'UF_CRM_1617204194' => 100500,
            'UF_CRM_1617204195' => ['значение1', 'значение2']
        ];
        
        $upRes = $cCompany->Update(123, $поля_компании, true, true, $arOptions);

        Пример 4. Системное обновление (без изменения даты и пользователя)

        php
        $userId = 1;
        
        $cCompany = new \CCrmCompany(false);
        
        $arOptions = array(
            'IS_SYSTEM_ACTION' => true,  // не обновляет DATE_MODIFY и не записывает пользователя
            'DISABLE_USER_FIELD_CHECK' => true,
            "CURRENT_USER" => $userId,
            "ENABLE_SYSTEM_EVENTS" => true
        );
        
        $поля_компании = [
            'UF_CRM_SYSTEM_FIELD' => 'Системное значение'
        ];
        
        $upRes = $cCompany->Update(123, $поля_компании, true, true, $arOptions);

        Пример 5. Обновление без событий (для массовых операций)

        php
        $userId = 1;
        
        $cCompany = new \CCrmCompany(false);
        
        $arOptions = array(
            'DISABLE_USER_FIELD_CHECK' => true,
            "CURRENT_USER" => $userId,
            "ENABLE_SYSTEM_EVENTS" => false    // отключаем события для скорости
        );
        
        $companies = [123, 456, 789];
        $поля_компании = ['ASSIGNED_BY_ID' => 10];
        
        foreach ($companies as $companyId) {
            $cCompany->Update($companyId, $поля_компании, false, false, $arOptions);
        }

        Пример 6. Функция-обертка с выбором проверки прав

        php
        function updateCompany(int $companyId, array $fields, int $userId, bool $checkRights = false): array
        {
            $result = ['success' => false, 'error' => ''];
        
            $cCompany = new \CCrmCompany($checkRights);  // проверка прав по параметру
        
            $arOptions = array(
                'DISABLE_USER_FIELD_CHECK' => true,
                "CURRENT_USER" => $userId,
                "ENABLE_SYSTEM_EVENTS" => true
            );
        
            if ($cCompany->Update($companyId, $fields, true, true, $arOptions)) {
                $result['success'] = true;
            } else {
                $result['error'] = $cCompany->LAST_ERROR;
            }
        
            return $result;
        }
        
        // Использование
        $userId = 1;
        $updateResult = updateCompany(123, ['TITLE' => 'Новое название'], $userId, false);
        if ($updateResult['success']) {
            echo "Успешно!";
        } else {
            echo "Ошибка: " . $updateResult['error'];
        }

        Сравнительная таблица: с проверкой прав и без

        Характеристика new CCrmCompany(false)->Update() new CCrmCompany(true)->Update()
        Проверка прав ❌ Отключена ✅ Включена
        CURRENT_USER в $arOptions Влияет на историю и события Влияет на проверку прав, историю и события
        Применение Служебные скрипты, агенты, cron Пользовательские компоненты, API-вызовы
        Ошибка при недостатке прав Не возникает Возникает, обновление не выполняется

        Особенности и рекомендации

        Проверка прав: Определяется при создании объекта new \CCrmCompany($bCheckRight). Для служебных операций используйте false, для пользовательских — true.

        Параметр CURRENT_USER: Указывает, от имени какого пользователя выполняется обновление. Влияет на права (если $bCheckRight = true), историю изменений и события.

        Параметр DISABLE_USER_FIELD_CHECK: При true система не проверяет корректность значений пользовательских полей. Полезно при массовых обновлениях, но осторожно — можно записать некорректные данные.

        Параметр ENABLE_SYSTEM_EVENTS: При false отключаются все системные события. Используйте с осторожностью — могут сломаться бизнес-процессы.

        Параметр IS_SYSTEM_ACTION: При true не обновляет дату изменения и не записывает пользователя. Полезно для служебных операций.

        Проверка ошибок: Всегда проверяйте $upRes и используйте $cCompany->LAST_ERROR для диагностики.

        Заключение

        Объектный вызов CCrmCompany->Update() с явным указанием проверки прав при создании экземпляра — это наиболее гибкий способ обновления данных компании в коробочной версии Битрикс24. Его ключевые преимущества:

        1. Контроль проверки прав через параметр $bCheckRight при создании объекта

        2. Гибкая настройка через массив $arOptions (отключение проверки UF-полей, указание пользователя, управление событиями)

        3. Управление системными действиями через опции IS_SYSTEM_ACTION и ENABLE_SYSTEM_EVENTS

        Понимание этих параметров критически важно для разработчиков, работающих с массовыми операциями, служебными скриптами и сложными сценариями обновления.

        Начните сотрудничество с индивидуальной консультации по подбору инструментов и услуг.
        Заказать услугу

        Подписаться на
        рассылку

        Будьте в курсе последних новостей отрасли

        Подписаться
        • Комментарии
        Загрузка комментариев...
        Назад к списку
        Услуги
        Лицензии 1С-Битрикс
        Внедрение CRM
        Доработка корпоративных порталов Битрикс24
        Техническое сопровождение
        Перенос Битрикс24 из облака в коробку
        Сайты на 1С-Битрикс24
        Компания
        О компании
        Сертификаты
        Карьера
        Разработка ПО
        Проекты
        Новости
        Контакты
        Подписка на рассылку
        +7 (495) 118-30-89
        Заказать звонок
        info@7sites.ru
        г. Пермь, ш. Космонавтов 111, к. 10
        • Вконтакте
        • Facebook
        • Twitter
        • Telegram
        Политика конфиденциальности
        © 2009-2026 ООО "7 САЙТОВ" (с) Все права защищены.
        Заказать звонок
        Написать сообщение
        Ближайший офис