Api модуля humanresources. Отделы. Часть 2.
Апр 27, 2025 • 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 и руководителей