1. Работа с группами пользователей в старом ядре Bitrix

В старом ядре Bitrix для работы с группами пользователей используется класс CGroup.
Получение списка групп пользователей:
        
            $arGroups = [];
            $rsGroups = CGroup::GetList(($by="c_sort"), ($order="asc"));
            while ($arGroup = $rsGroups->Fetch()) {
                $arGroups[] = $arGroup;
            }
            print_r($arGroups);
        
    
Получение информации о конкретной группе:
        
            $groupId = 1; // ID группы
            $arGroup = CGroup::GetByID($groupId)->Fetch();
            print_r($arGroup);
        
    
Добавление новой группы пользователей:
        
            $group = new CGroup;
            $arFields = [
                "ACTIVE"       => "Y",
                "C_SORT"       => 100,
                "NAME"         => "Новая группа",
                "DESCRIPTION"  => "Описание группы",
                "STRING_ID"    => "new_group",
            ];
            $newGroupId = $group->Add($arFields);
            if (intval($newGroupId) > 0) {
                echo "Группа успешно добавлена с ID: " . $newGroupId;
            } else {
                echo "Ошибка добавления группы: " . $group->LAST_ERROR;
            }
        
    
Изменение существующей группы:
        
            $groupId = 2;
            $group = new CGroup;
            $arFields = [
                "NAME" => "Обновленное название группы",
            ];
            $group->Update($groupId, $arFields);
        
    
Удаление группы пользователей:
        
            $groupId = 3;
            CGroup::Delete($groupId);
        
    

2. Работа с группами пользователей в новом ядре D7

В новом ядре D7 используется пространство имен Bitrix\Main\GroupTable.
Подключение модуля и пространства имен:
        
            use Bitrix\Main\Loader;
            use Bitrix\Main\UserTable;
            use Bitrix\Main\GroupTable;

            Loader::includeModule('main');
        
    
Получение списка групп пользователей:
        
            use Bitrix\Main\GroupTable;

            $groups = GroupTable::getList([
                'select' => ['ID', 'NAME', 'STRING_ID', 'ACTIVE', 'C_SORT'],
                'order'  => ['C_SORT' => 'ASC']
            ])->fetchAll();

            print_r($groups);
        
    
Получение информации о конкретной группе:
        
            $groupId = 1;
            $group = GroupTable::getById($groupId)->fetch();
            print_r($group);
        
    
Добавление новой группы пользователей:
        
            $result = GroupTable::add([
                'ACTIVE'      => 'Y',
                'C_SORT'      => 100,
                'NAME'        => 'Новая группа D7',
                'STRING_ID'   => 'new_group_d7',
                'DESCRIPTION' => 'Описание группы D7'
            ]);

            if ($result->isSuccess()) {
                echo "Группа добавлена с ID: " . $result->getId();
            } else {
                echo "Ошибка добавления группы: " . implode(', ', $result->getErrorMessages());
            }
        
    
Изменение существующей группы:
        
            $groupId = 2;
            $result = GroupTable::update($groupId, [
                'NAME' => 'Обновленное название группы D7',
            ]);

            if ($result->isSuccess()) {
                echo "Группа обновлена успешно.";
            } else {
                echo "Ошибка обновления группы: " . implode(', ', $result->getErrorMessages());
            }
        
    
Удаление группы пользователей:
        
            $groupId = 3;
            $result = GroupTable::delete($groupId);

            if ($result->isSuccess()) {
                echo "Группа успешно удалена.";
            } else {
                echo "Ошибка удаления группы: " . implode(', ', $result->getErrorMessages());
            }
        
    

3. Сравнение старого ядра и D7

  • Старое ядро:
    • Использует классы типа CGroup.
    • Работает через массивы.
    • Не поддерживает ORM.
  • Новое ядро D7:
    • Использует ORM (Object-Relational Mapping).
    • Более структурированный код.
    • Поддерживает фильтрацию, сортировку и выборку данных с использованием getList().

5. Рекомендации

  • Если разрабатывается новый функционал, лучше использовать D7, так как это современный и более производительный подход.
  • В старых проектах для совместимости можно использовать CGroup, но с переходом на GroupTable в долгосрочной перспективе.