Введение и базовые концепции

Структура компании в Битрикс24 объединяет подразделения, команды и пользователей. Модуль Управление персоналом humanresources предоставляет API, чтобы найти нужную часть структуры, получить ее участников и роли, определить руководителей и подчиненных или прочитать настройки.

API сгруппирован в сервисы по типам задач. Контейнер Bitrix\HumanResources\Public\Service\Container возвращает нужный сервис, а сервис выполняет операцию со структурой компании.

Модуль Управление персоналом доступен только в Битрикс24. В 1С-Битрикс: Управление сайтом модуль отсутствует.

Основные объекты

Структура компании — дерево подразделений и команд. В дереве есть корневой узел и связанные с ним дочерние узлы.

Узел — элемент структуры. Узел хранит положение в иерархии и относится к одному из двух типов: DEPARTMENT или TEAM.

Подразделение — узел типа DEPARTMENT. Подразделения образуют административную иерархию компании.

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

Участник — связь пользователя с узлом. Один пользователь может состоять в нескольких узлах, поэтому пользователя и участника нельзя считать одним объектом.

Роль — назначение участника внутри узла. Роль используется, например, чтобы отличить руководителя, заместителя и сотрудника.

Связи между этими объектами и распределение задач между сервисами приведены в статье Архитектура модуля и выбор сервиса.

Как подключить модуль

Перед обращением к API подключите модуль humanresources. Метод Loader::includeModule() возвращает false, если модуль недоступен.

use Bitrix\Main\Loader;

if (!Loader::includeModule('humanresources'))
{
    throw new \RuntimeException('Модуль humanresources не установлен');
}

Не продолжайте выполнение сценария после неудачного подключения. Классы и сервисы модуля в этом случае недоступны.

Как получить сервис и узел

Пример. Код получает узел по известному внутреннему идентификатору. Число 42 — условный идентификатор. Замените его идентификатором узла из своего сценария.

use Bitrix\HumanResources\Public\Service\Container;
use Bitrix\Main\Loader;

if (!Loader::includeModule('humanresources'))
{
    throw new \RuntimeException('Модуль humanresources не установлен');
}

$nodeService = Container::getNodeService();

// Внутренний идентификатор узла структуры компании
$nodeId = 42;
$node = $nodeService->getById($nodeId);

if ($node === null)
{
    throw new \RuntimeException('Узел не найден');
}

echo $node->name;

Метод Container::getNodeService() возвращает сервис для чтения и поиска узлов. Метод getById() принимает внутренний идентификатор узла и возвращает объект Node или null, если узел не найден. После успешного запроса пример выводит название узла из свойства name.

О других способах поиска и правилах проверки результата читайте в статье Узлы структуры компании.

Как выбрать API для задачи

Для типовых операций используйте API из пространства имен Bitrix\HumanResources\Public. Если готового метода сервиса недостаточно для выборки данных, соберите запрос с помощью билдеров и фильтров Bitrix\HumanResources\Builder. Подробнее читайте в статье Выборки узлов и участников через билдеры.

Не обращайтесь к другим внутренним классам модуля: они не входят в документированный API и могут измениться.

Основные сценарии

Используйте материалы раздела в зависимости от задачи:

Если сервис еще не выбран, начните с архитектуры. Если известны объект, исходные данные и ожидаемый результат, переходите к статье с соответствующим сценарием.