Api модуля humanresources. Отделы. Часть 2.

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

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


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();  
}

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

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

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