Api модуля humanresources. Сотрудники. Часть 3

Апр 27, 2025 • 2 минута
Api модуля humanresources. Сотрудники. Часть 3

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

Существует 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());
}

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

Похожие статьи

Создание своей сущности в Битрикс24
Cоздадим свою сущность в Битрикс24 с гридом, CRUD, своим провайдером для tagSelector, массовым редактирование записей и не только
Настройка прав доступа к редактированию структуры компании в Битрикс 24
Подробная инструкция по настройке прав доступа к редактированию организационной структуры в Битрикс24. Узнайте, как назначать роли пользователям, управлять отделами и сотрудниками, настраивать уровни доступа для администраторов, HR и руководителей