Warning: Cannot modify header information - headers already sent by (output started at /home/c/cl52239/wordpress_5cpkj/public_html/wp-content/themes/cp_theme/functions.php:279) in /home/c/cl52239/wordpress_5cpkj/public_html/wp-includes/feed-rss2.php on line 8
Управление структурой компании в Битрикс24 | Модуль HumanResources (HR) https://grazy-chipmunk.ru/category/humanresources/ Все про Битрикс24 Sun, 31 Aug 2025 08:26:14 +0000 ru-RU hourly 1 https://wordpress.org/?v=7.1.3 https://grazy-chipmunk.ru/wp-content/uploads/2025/04/cropped-chipmunk-svgrepo-com-32x32.png Управление структурой компании в Битрикс24 | Модуль HumanResources (HR) https://grazy-chipmunk.ru/category/humanresources/ 32 32 Настройка прав доступа к редактированию структуры компании в Битрикс 24 https://grazy-chipmunk.ru/structure-access-bitrix24/ https://grazy-chipmunk.ru/structure-access-bitrix24/#respond Tue, 06 May 2025 16:05:40 +0000 https://grazy-chipmunk.ru/?p=213 Подробная инструкция по настройке прав доступа к редактированию организационной структуры в Битрикс24. Узнайте, как назначать роли пользователям, управлять отделами и сотрудниками, настраивать уровни доступа для администраторов, HR и руководителей

Сообщение Настройка прав доступа к редактированию структуры компании в Битрикс 24 появились сначала на Crazy Chipmunk.

]]>
В Битрикс24 предусмотрена гибкая система управления правами доступа к организационной структуре компании. Вы можете определить, какие пользователи смогут создавать и редактировать отделы, добавлять сотрудников, назначать заместителей и выполнять другие действия. Например, можно ограничить права руководителей, разрешив им управлять только своими подразделениями.

Доступность функции

Настройка прав редактированию структуры компании в Битрикс24 доступна начиная с тарифа «Базовый».

Как настроить права доступа?

Администратор Битрикс24 имеет полный контроль над настройками доступа, но может делегировать эти полномочия другим пользователям. Чтобы изменить параметры, перейдите:

Сотрудники → Структура компании → Меню (≡) → Настройки доступа

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

Кнопка для редактирования прав доступа к структуре в Битрикс24

Роли пользователей в структуре компании

Роль определяет набор прав, которыми обладает сотрудник. В Битрикс24 предусмотрено пять стандартных ролей:

  • Администратор – полный доступ ко всем функциям, включая настройку прав.
  • HR – может управлять структурой, но не имеет доступа к настройкам прав.
  • Руководитель – может редактировать свой отдел и подчинённые подразделения.
  • Заместитель – может вносить изменения в свой отдел, добавлять и удалять сотрудников.
  • Сотрудник – только просмотр структуры компании.

Вы можете создавать новые роли, изменять существующие или копировать их. Для добавления новой роли нажмите «Создать роль», задайте название и сохраните изменения.

Интерфейс редактирования структуры в Битрикс24, список ролей

Назначение прав сотрудникам

Чтобы назначить роль пользователю, нажмите «+» под нужной ролью и выберите сотрудника, отдел или группу. Например, руководителю может потребоваться право на создание подразделений, а заместителю – на редактирование состава отдела.

Если у пользователя несколько ролей с разными правами, система автоматически предоставит максимальный уровень доступа. Например, если в одной роли запрещено удаление отделов, а в другой разрешено, сотрудник сможет выполнять это действие.

Как назначить права сотрудником в Битрикс24

Какие права можно настроить?

Доступные параметры управления правами включают:

  • Просмотр структуры компании.
  • Создание новых отделов.
  • Удаление отделов (сотрудники и подразделения перемещаются в вышестоящий отдел).
  • Редактирование информации об отделе (название, описание).
  • Добавление сотрудников в отделы (один сотрудник может состоять в нескольких подразделениях).
  • Удаление сотрудников из отдела (если сотрудник не перемещён в другой отдел, он переходит в подчинение к директору).
  • Управление правами доступа (изменение ролей и разрешений).

Уровни доступа:

  • Вся компания.
  • Свой отдел и подчинённые подразделения.
  • Только свой отдел.
  • Нет доступа.
Какие права можно настроить в Битрикс24

Итоги

  • Битрикс24 позволяет детально настраивать права доступа к организационной структуре.
  • Администратор может делегировать управление правами другим пользователям.
  • В системе предусмотрены стандартные роли, но можно создавать собственные.
  • Рекомендуется выдавать права только тем, кто действительно в них нуждается, чтобы обеспечить безопасность данных.

Сообщение Настройка прав доступа к редактированию структуры компании в Битрикс 24 появились сначала на Crazy Chipmunk.

]]>
https://grazy-chipmunk.ru/structure-access-bitrix24/feed/ 0
Управление отделами в структуре компании Битрикс24 https://grazy-chipmunk.ru/creare-srtucture-manual/ https://grazy-chipmunk.ru/creare-srtucture-manual/#respond Sun, 04 May 2025 17:01:56 +0000 https://grazy-chipmunk.ru/?p=176 В этой статье вы узнаете, как легко управлять структурой компании в Битрикс24: создавать новые отделы, редактировать существующие и удалять ненужные. Пошаговая инструкция поможет быстро настроить организационную иерархию в вашей компании

Сообщение Управление отделами в структуре компании Битрикс24 появились сначала на Crazy Chipmunk.

]]>
Структура компании в Битрикс24 позволяет организовать иерархию подразделений, назначить руководителей и сотрудников, а также настроить права доступа для эффективного управления организацией.

Основные понятия

Структура компании строится на основе отделов, где для каждого определены:

  • Руководитель (может быть несколько)
  • Заместители
  • Подчиненные сотрудники

Важно: Для создания и редактирования отделов пользователям требуются соответствующие права доступа. Подробнее о правах доступа можно прочитать здесь

Создание нового отдела

  1. Перейдите в раздел Сотрудники → Структура компании
  2. Нажмите кнопку Добавить
  3. Выберите Отдел → Продолжить
Как создать новый отдел в Битрикс24

Заполнение информации:

ПолеОписание
НазваниеОтображается в структуре компании
ОписаниеФункции и задачи отдела (рекомендуется заполнять подробно)
Вышестоящий отделОпределяет положение в иерархии компании
Форма создания нового отдела в Битрикс24

Назначьте сотрудников:

  • Руководителей (можно несколько)
  • Заместителей
  • Подчиненных
Заполните название и описание отдела в Битрикс24
Назначьте руководителей и , заместителей, назначьте подчиненных

Варианты добавления сотрудников:

  • Перевести из других отделов — сотрудник будет перемещен в новый отдел
  • Добавить как совместителя — сотрудник останется в текущих отделах
Форма завершения создания отдела в Битрикс24

Нажмите Создать отдел для завершения процесса

Добавление подчиненных отделов

  • Нажмите ⋮ у нужного отдела
  • Выберите Добавить отдел в подчинение
  • Заполните данные аналогично созданию нового отдела
Добавление отдела в подчинение в Битрикс24

Пример: Отдел логистики → Транспортный отдел + Склад

Редактирование существующих отделов

Доступные изменения:

  • Название и описание
  • Вышестоящий отдел
  • Состав руководителей и сотрудников

Как изменить отдел:

Нажмите ⋮ → Редактировать отдел

Внесите необходимые правки

Сохраните изменения

Как редактировать отдел в Битрикс24

Удаление отдела

Нажмите ⋮ → Удалить отдел

Подтвердите действие

Важно: При удалении отдела:

  • Сотрудники переводятся в вышестоящий отдел
  • Подчиненные отделы перемещаются уровнем выше
Как удалить отдел в Битрикс24

Практические советы

  1. Иерархия: Сначала создавайте верхнеуровневые отделы, затем подразделения.
  2. Совместительство: Используйте для сотрудников, работающих в нескольких отделах.
  3. Описания: Заполняйте подробно — это помогает новым сотрудникам ориентироваться.
  4. Права доступа: Назначайте ответственных за редактирование структуры.

Сообщение Управление отделами в структуре компании Битрикс24 появились сначала на Crazy Chipmunk.

]]>
https://grazy-chipmunk.ru/creare-srtucture-manual/feed/ 0
Api модуля humanresources. Сотрудники. Часть 3 https://grazy-chipmunk.ru/api-humanresources-members-part-3/ https://grazy-chipmunk.ru/api-humanresources-members-part-3/#respond Sun, 27 Apr 2025 13:41:54 +0000 https://grazy-chipmunk.ru/?p=141 В этой статье рассмотрим основные методы работы с сотрудниками в подразделениях через API модуля Humanresources Битрикс24.
Примеры кода демонстрируют получение списка сотрудников с постраничной навигацией, определение их ролей в подразделении, вычисление иерархических отношений, а также операции добавления, перемещения и удаления сотрудников.

Сообщение Api модуля humanresources. Сотрудники. Часть 3 появились сначала на Crazy Chipmunk.

]]>
Получить список сотрудников отдела

Существует 2 метода: getAllEmployees и getPagedEmployees.
Отличие в том, что метод getAllEmployees вернёт список всех сотрудников подразделения, а метод getPagedEmployees— только ограниченное количество сотрудников с постраничной навигацией, что удобно при работе с большими структурами. Параметр $withAllChildNodes позволяет учесть подчиненные отделы.

Метод getById класса RoleHelperService вернет роль сотрудника в данном подразделении. Роли хранятся в таблице b_hr_structure_role:

  1. HEAD — руководитель
  2. EMPLOYEE — сотрудник
  3. DEPUTY_HEAD — заместитель

use Bitrix\HumanResources\Service\NodeMemberService;
use Bitrix\HumanResources\Service\RoleHelperService;

$departmentId = 3;
$modeMemberService = new NodeMemberService();
$roleHelperService = new RoleHelperService();
// Получить всех сотрудников
$result = $modeMemberService
    ->getAllEmployees(
        $departmentId,
        false,
        false
    )
    ->getItemMap();
// Получить сотрудников с пагинацией
$result = $modeMemberService
    ->getPagedEmployees(
        $departmentId,
        false,
        0,
        100,
        true
    )
    ->getItemMap();
foreach ($result as $item) {
    $memberId = $item->id;
    foreach ($item->roles as $role) {
        // получить роль сотрудника в данном подразделении
        $role = $roleHelperService->getById($role);
    }
}

Результирующий объект представляет собой экземпляр класса Bitrix\HumanResources\Item\NodeMember.

Свойство id этого объекта указывает на идентификатор сотрудника в контексте конкретного подразделения(memberId).

В свойстве entityId хранится id пользователя.

Этот id отличается от стандартного id пользователя.

Рассмотрим объект Bitrix\HumanResources\Item\NodeMember

СвойствоОписание
entityTypeТип сущности, в данном случае это перечисление Bitrix\HumanResources\Type\MemberEntityType
entityIdИдентификатор сущности (пользователя)
nodeIdИдентификатор отдела
activeСтатус активности (1 — активен, 0 — неактивен)
rolesСписок ролей
iconИконка
idУникальный идентификатор сотрудника
addedByИдентификатор пользователя, который добавил сотрудника
createdAtДата и время создания сущности (DateTime)
updatedAtДата и время последнего обновления сущности (DateTime)

Вычислить отношение между сотрудниками


use Bitrix\HumanResources\Service\NodeMemberService;

$memberId = 3;
$targetMemberId = 11;
$result = $modeMemberService
    ->getMemberSubordination(
        $memberId,
        $targetMemberId
    );

Отношения между сотрудниками в Битрикс24 хранятся в перечислении (enum) Bitrix\HumanResources\Type\MemberSubordinateRelationType.

EnumЗначениеОписание
RELATION_ITSELF0Один и тот же человек
RELATION_HIGHER1Сотрудник выше по иерархии (руководитель)
RELATION_EQUAL2Сотрудники на одном уровне (коллеги)
RELATION_LOWER3Сотрудник ниже по иерархии (подчинённый)
RELATION_OTHER4Связь не найдена
RELATION_OTHER_STRUCTURE5Сотрудники из разных структур

Получить руководителя подразделения


use Bitrix\HumanResources\Service\NodeMemberService;

$departmentId = 3;
$result = $nodeMemberService
    ->getDefaultHeadRoleEmployees($departmentId)
    ->getItemMap();

Добавить сотрудника в подразделение


use Bitrix\HumanResources\Exception\CreationFailedException;
use Bitrix\HumanResources\Item\NodeMember;
use Bitrix\HumanResources\Repository\NodeMemberRepository;
use Bitrix\HumanResources\Type\MemberEntityType;

$userId = 1;
$targetDepartmentId = 3;
$member = new NodeMember(
    MemberEntityType::USER,
    $userId,
    $targetDepartmentId,
    true,
    role: 1 // руководитель
);
$nodeMemberRepository = new NodeMemberRepository();
try {
    $nodeMemberRepository->create($member);
} catch (CreationFailedException $e) {
    print_r($e->getErrors()->toArray());
}

Переместить сотрудника в другое подразделение


use Bitrix\HumanResources\Repository\NodeMemberRepository;
use Bitrix\HumanResources\Repository\NodeRepository;
use Bitrix\HumanResources\Service\NodeMemberService;
use Bitrix\Intranet\Exception\UpdateFailedException;

$modeMemberService = new NodeMemberService();
$nodeRepository = new NodeRepository();
$memberRepository = new NodeMemberRepository();
$targetDepartmentId = 3;
$memberId = 9;
$node = $nodeRepository->getById($targetDepartmentId);
$member = $memberRepository->findById($memberId);
// изменить роль на заместителя если требуется
$member->role = 3;
try {
    $result = $modeMemberService->moveMember($member, $node);
} catch (UpdateFailedException $e) {
    print $e->getErrors()->toArray();
}

Удалить сотрудника из подразделения

При удалении сотрудник будет перемещён в корневое подразделение.


use Bitrix\HumanResources\Exception\WrongStructureItemException;
use Bitrix\HumanResources\Repository\NodeMemberRepository;
use Bitrix\HumanResources\Repository\NodeRepository;
use Bitrix\HumanResources\Service\NodeMemberService;
use Bitrix\Intranet\Exception\UpdateFailedException;

$modeMemberService = new NodeMemberService();
$nodeRepository = new NodeRepository();
$memberRepository = new NodeMemberRepository();
$targetDepartmentId = 3;
$memberId = 9;
$member = $memberRepository->findById($memberId);
try {
    $result = $modeMemberService->removeUserMemberFromDepartment($member);
} catch (UpdateFailedException $e) {
    print_r($e->getErrors()->toArray());
} catch (WrongStructureItemException $e) {
    print_r($e->getErrors()->toArray());
}

Полезные ссылки

Сообщение Api модуля humanresources. Сотрудники. Часть 3 появились сначала на Crazy Chipmunk.

]]>
https://grazy-chipmunk.ru/api-humanresources-members-part-3/feed/ 0
Api модуля humanresources. Отделы. Часть 2. https://grazy-chipmunk.ru/api-humanresources-deparements-part-2/ https://grazy-chipmunk.ru/api-humanresources-deparements-part-2/#respond Sun, 27 Apr 2025 13:21:02 +0000 https://grazy-chipmunk.ru/?p=121 В этом материале подробно рассмотрим работу с отделами через API модуля humanresources для Битрикс24. Вы узнаете, как получать список подразделений, создавать, редактировать и удалять отделы, а также работать с их связями и структурами.

Сообщение Api модуля humanresources. Отделы. Часть 2. появились сначала на Crazy Chipmunk.

]]>
Получить список отделов

use Bitrix\HumanResources\Service\NodeService;

$nodeService = new NodeService();
$nodeId = 1;
$nodes = $nodeService->getNodeChildNodes($nodeId)->getItemMap();

$arResult = [];
foreach ($nodes as $node) {
    $arResult[$node->id] = $node->name;
}

Метод getNodeChildNodes()Bitrix\HumanResources\Item\Collection\NodeCollection

Описание методов коллекции

МетодОписание
getItemMap()массив объектов Bitrix\HumanResources\Item\Node
getIterator()вернет экземпляр класса ArrayIterator
getFirst()вернет первый объект коллекции Bitrix\HumanResources\Item\Node
getItemById($id)вернет объект коллекции Bitrix\HumanResources\Item\Node по id
filter(\Closure $rule)вернет отфильтрованную коллекцию
count()количество элементов в коллекции

$nodeService
   ->getNodeChildNodes($nodeId)
   ->filter(fn($node) => $node->id === 1);

Рассмотрим объект класса Bitrix\HumanResources\Item\Node

СвойствоОписание
nameНазвание отдела
typeТип, перечисление Bitrix\HumanResources\Type\NodeEntityType
structureIdИдентификатор структуры, к которому относится отдел
accessCodeКод доступа
idУникальный идентификатор
parentIdИдентификатор родительского узла. 0 указывает на корневую сущность
depthГлубина структуры. 0 указывает на верхний уровень
createdByИдентификатор пользователя, создавшего отдел
createdAtДата и время создания
updatedAtДата и время последнего обновления
xmlIdВнешний идентификатор
activeАктивность (1 — активен, 0 — неактивен)
globalActiveГлобальный статус активности (1 — активен, 0 — неактивен)
sortПорядок сортировки
descriptionОписание

Получить список отделов напрямую из таблицы


use Bitrix\HumanResources\Model\NodeTable;

$nodeId = 3;
$structureId = 1;
$nodes = NodeTable::getList([
    'select' => ['*'],
    'filter' => ['=PARENT_ID' => $nodeId, '=STRUCTURE_ID' => $structureId],
])->fetchAll();

Получить отделы, в которых работает сотрудник


use Bitrix\HumanResources\Model\NodeMemberTable;  
use Bitrix\HumanResources\Model\NodeTable;  
use Bitrix\Main\Engine\CurrentUser;  
use Bitrix\Main\ORM\Query\Join;  
use Bitrix\HumanResources\Service\NodeService;  

// через api
$nodeService = new NodeService();  
$result = $nodeService->getNodesByUserId(1);

// через таблицы
$nodes = NodeMemberTable::getList([  
    'filter' => ['ENTITY_ID' => CurrentUser::get()->getId(), 'ACTIVE' => 'Y'],  
    'select' => ['ID', 'DEPARTMENT'],  
    'runtime' => [  
        'DEPARTMENT' =>  
            [  
                'data_type' => NodeTable::class,  
                'reference' => ['=this.NODE_ID' => 'ref.ID'],  
                'join_type' => Join::TYPE_LEFT  
            ]  
    ]  
])->FetchCollection();  
  
foreach ($nodes as $node) {  
    echo $node->get('DEPARTMENT')->getName();  
    echo '<br>';  
}

Создать отдел


use Bitrix\HumanResources\Exception\CreationFailedException;  
use Bitrix\HumanResources\Item\Node;  
use Bitrix\HumanResources\Service\NodeService;  
use Bitrix\HumanResources\Type\NodeEntityType;

/** на вход свойства объекта Bitrix\HumanResources\Item\Node
 * @param string $name  
 * @param NodeEntityType = DEPARTMENT  
 * @param int $structureId =1  
 * @param ?string $accessCode  
 * @param ?int $id  
 * @param ?int $parentId  
 */  
$node = new Node(  
    'It-отдел',  
    NodeEntityType::DEPARTMENT,  
    1,  
    null,  
    null,  
    1  
);  
try {  
    $nodeService->insertNode($node);  
} catch (Exception $e) {  
    print_r($e->getErrors()->toArray());  
}

Обновить описание и переместить отдел в подчинение другому отделу


use Bitrix\HumanResources\Repository\NodeRepository;  
use Bitrix\HumanResources\Service\NodeService;  

$nodeService = new NodeService();  
$nodeRepository = new NodeRepository();  

$departmentId = 9;  
$node = $nodeRepository->getById($departmentId);  
$node->description = "Просто какое-то описание";  
$node->parentId = 2;

try {  
    $nodeService->updateNode($node);  
} catch (Exception $e) {  
    print_r($e->getErrors()->toArray());  
}

Удалить отдел


use Bitrix\HumanResources\Exception\DeleteFailedException;  
use Bitrix\HumanResources\Repository\NodeRepository;  
use Bitrix\HumanResources\Service\NodeService;  

$nodeService = new NodeService();  
$nodeRepository = new NodeRepository();  

$departmentId = 9;  
$node = $nodeRepository->getById($departmentId);  

try {  
    $nodeService->removeNode($node);  
} catch (DeleteFailedException $e) {  
    print $e->getErrors()->toArray();  
}

Полезные ссылки

Сообщение Api модуля humanresources. Отделы. Часть 2. появились сначала на Crazy Chipmunk.

]]>
https://grazy-chipmunk.ru/api-humanresources-deparements-part-2/feed/ 0
Новая структура компании в Битрикс24. Часть 1 https://grazy-chipmunk.ru/bitrix24-new-structure/ https://grazy-chipmunk.ru/bitrix24-new-structure/#respond Wed, 23 Apr 2025 19:01:55 +0000 https://cl52239-wordpress-5cpkj.tw1.ru/?p=6 Переход от Nested Sets к комбинации Closure Table и Adjacency List — важное обновление архитектуры структуры компании в Битрикс24. В статье разбираем, почему традиционные инфоблоки стали узким местом, какие преимущества принесла новая модель хранения и как устроены ключевые таблицы модуля humanresources

Сообщение Новая структура компании в Битрикс24. Часть 1 появились сначала на Crazy Chipmunk.

]]>
Новая структура в Битрикс24 реализована модулем humanresources.

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

Возможности модуля

Модуль позволяет:

  • создавать подразделения;
  • добавлять сотрудников в подразделения;
  • назначать несколько руководителей и заместителей;
  • поддерживать произвольный уровень вложенности;
  • работать с несколькими структурами в рамках одного Битрикс24 (еще не реализовано)

Как выглядит новая структура

Страница создания и изменения структуры компании расположена по адресу: /hr/structure/

Новая структура компании Битрикс24 -- Так выглядит новая структура компании в Битрикс24
Так выглядит новая структура компании в Битрикс24

На странице также можно гибко настроить права доступа к редактированию структуры.

Страница настройки прав доступа

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

Страница настроек прав доступа к редактированию структуры -- Страница настроек прав доступа к редактированию структуры
Так выглядит страница настроек прав доступа для редактирования структуры

Совместимость

На данный момент (апрель 2025) реализована обратная совместимость модуля HR: При добавлении подразделения через модуль, подразделение добавляется и в инфоблоки (и наоборот). Важно: В будущем планируется полный переход на новую модель без обратной совместимости.

Архитектура

В прошлой версии для хранения древовидной структуры использовался механизм разделов инфоблоков, основанный на методе Nested Sets.

Nested Sets — это один из методов хранения иерархических данных (например, деревьев или структур с родительскими и дочерними элементами) в базе данных. Этот подход основан на использовании двух числовых значений (обычно называемых LEFT_MARGIN и RIGHT_MARGIN) для каждого узла в дереве.

Как работает Nested Sets?

  • LEFT_MARGIN и RIGHT_MARGIN — это числовые значения, которые обозначают границы диапазона для каждого узла в дереве.
  • Каждый узел имеет два числа, которые определяют его позицию в дереве, включая все дочерние элементы.
  • Если узел является родительским, то его дочерние узлы будут иметь значения, которые находятся внутри диапазона этого родителя (между LEFT_MARGIN и RIGHT_MARGIN родительского узла).
Преимущества:
  • Быстрый поиск потомков: Чтобы найти всех потомков определенного узла, достаточно выполнить запрос, проверив, находятся ли LEFT_MARGIN и RIGHT_MARGIN дочерних узлов внутри диапазона родительского узла.
  • Хорошая производительность при чтении: Чтение иерархии происходит быстро, так как все связи между родителями и потомками заранее определены.
Недостатки:
  • Медленные операции изменения: Изменение структуры, например, добавление, удаление или перемещение узлов, требует пересчета значений LEFT_MARGIN и RIGHT_MARGIN для множества других узлов, что делает эти операции достаточно дорогими по времени.
  • Меньшая гибкость: Из-за необходимости пересчитывать диапазоны для многих узлов, сложно динамично изменять структуру дерева, особенно на больших объемах данных.

В новой версии используется комбинация методов Closure Table и Adjacency List.

Adjacency List (Список смежности)

Каждый узел в дереве сохраняет ссылку на своего родителя, обычно с использованием поля parent_id.

Каждый узел хранит свой уникальный идентификатор (например, id) и идентификатор родительского узла (parent_id), который указывает на родительский элемент в дереве. Для корневых узлов значение parent_id будет равно NULL или 0.

Преимущества:
  • Простота реализации: Требуется только одно поле для хранения идентификатора родителя.
  • Легкость в добавлении и удалении узлов: Нужно просто указать родителя для нового узла или удалить узел и его поддерево.
Недостатки:
  • Для получения всех потомков узла требуется выполнить рекурсивный запрос или несколько последовательных запросов.
  • Затруднено получение глубоко вложенных элементов (например, всех потомков определенного узла).
  • Модификация структуры (например, перемещение узла или изменение родителя) требует дополнительных операций для обработки зависимостей.

Closure Table (Таблица замыканий)

Хранит не только родителя каждого узла, но и все возможные отношения между узлами. То есть для каждого узла сохраняются все его предки и сам он. Это достигается за счет использования дополнительной таблицы, которая хранит пары «потомок-родитель» для всех уровней иерархии.

В Closure Table создается таблица, где каждая строка содержит два столбца: ancestor (предок) и descendant (потомок). Таблица хранит все возможные пути от каждого потомка к его предкам.

Преимущества:
  • Очень быстрый поиск всех предков или потомков узла, включая глубоко вложенные узлы.
  • Операции добавления и удаления узлов гораздо более эффективны по сравнению с другими методами (например, перемещение узлов).
  • Может поддерживать гибкие запросы, такие как поиск всех потомков или предков для узла.
Недостатки:
  • Нужно хранить много данных, так как таблица становится очень большой (особенно для деревьев с большой глубиной).
  • Добавление нового узла требует вставки нескольких записей в таблицу замыканий.
  • Модификация структуры (например, удаление узла) может требовать удаления множества записей.

Таблицы модуля HR

ТаблицаНазначение
b_hr_access_permissionПрава доступа, привязанные к ролям
b_hr_access_roleСписок всех ролей в системе (например, Администратор, Руководитель, Сотрудник). Создать роль можно на странице настроек прав доступа
b_hr_access_role_relationСвязь ролей с пользователями, подразделениями, группами
b_hr_structureСтруктуры компании (задел на будущее, на данный момент не реализовано)
b_hr_structure_nodeКонкретные узлы структуры (отделы), реализация метода Adjacency List
b_hr_structure_node_memberСотрудники, прикрепленные к отделам
b_hr_structure_node_pathДля хранения узлов дерева, реализация метода Closure Table
b_hr_structure_node_relationДля хранения всех возможных путей между узлами
b_hr_logЛоги ошибок
b_hr_structure_node_member_roleКонкретные роли сотрудников в рамках их подразделений.

Полезные ссылки

Сообщение Новая структура компании в Битрикс24. Часть 1 появились сначала на Crazy Chipmunk.

]]>
https://grazy-chipmunk.ru/bitrix24-new-structure/feed/ 0