← Назад к справке

Модули коробки

Интранет

Рабочая справка по модулю intranet в коробочном Bitrix24: CIntranetUtils, подразделения, сотрудники, структура компании и отсутствия.

Модуль intranet чаще всего нужен для оргструктуры: подразделения пользователя, сотрудники отдела, руководители, отсутствия и связанные с этим проверки в бизнес-процессах.

Общее понимание

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

Что даёт модуль intranet

В прикладном PHP-коде модуль обычно используют для работы с оргструктурой компании: отделами, пользователями в отделах и отсутствиями.

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

Подключение модуля

<?php

use Bitrix\Main\Loader;

Loader::includeModule('intranet');

В рабочем коде лучше проверять результат подключения.

<?php

use Bitrix\Main\Loader;

/**
 * Подключает модуль intranet.
 */
function requireIntranetModule(): void
{
    if (!Loader::includeModule('intranet')) {
        throw new \RuntimeException('Не удалось подключить модуль intranet');
    }
}

requireIntranetModule();

CIntranetUtils и Util

В старом коде часто встречается CIntranetUtils. В D7-документации также есть вспомогательный класс \Bitrix\Intranet\Util. На практике в коробке могут встречаться оба подхода.

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

Карта методов

Метод Что делает Когда использовать
CIntranetUtils::GetUserDepartments() Возвращает ID подразделений пользователя. Проверки по отделам, маршрутизация БП, выбор руководителей.
CIntranetUtils::GetDepartmentEmployees() Возвращает сотрудников подразделения. Назначение задач, рассылка, выбор исполнителей.
CIntranetUtils::GetStructure() Возвращает структуру компании. Когда нужно дерево подразделений.
CIntranetUtils::GetAbsenceData() Возвращает данные отсутствий. Проверка отпусков и отсутствий перед назначением.
\Bitrix\Intranet\Util D7-вспомогательные методы intranet. Когда нужен более новый API и он есть на версии коробки.

Методы CIntranetUtils лучше быстро проверять на конкретной версии коробки: это старый прикладной API, и поведение может отличаться в зависимости от настроек портала.

Подразделения

Основные операции: получить отделы пользователя, сотрудников отдела и структуру компании.

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

<?php

use Bitrix\Main\Loader;

Loader::includeModule('intranet');

/**
 * Получает ID подразделений пользователя.
 */
function fetchUserDepartmentIds(int $user_id): array
{
    if ($user_id <= 0) {
        return [];
    }

    $department_ids = \CIntranetUtils::GetUserDepartments($user_id);

    return is_array($department_ids) ? array_map('intval', $department_ids) : [];
}

$department_ids = fetchUserDepartmentIds($user_id);

print_r($department_ids);

Сотрудники подразделения

Метод возвращает выборку пользователей. В старых примерах часто используется GetDepartmentEmployees() с параметрами для рекурсивного поиска по дочерним подразделениям.

<?php

use Bitrix\Main\Loader;

Loader::includeModule('intranet');

/**
 * Получает ID сотрудников подразделения.
 */
function fetchDepartmentEmployeeIds(int $department_id, bool $is_recursive = true): array
{
    if ($department_id <= 0) {
        return [];
    }

    $employee_ids = [];

    $employee_result = \CIntranetUtils::GetDepartmentEmployees(
        $department_id,
        $is_recursive,
        false,
        'Y'
    );

    while ($employee = $employee_result->Fetch()) {
        $employee_ids[] = (int) $employee['ID'];
    }

    $employee_ids = array_values(array_unique($employee_ids));
    sort($employee_ids);

    return $employee_ids;
}

$employee_ids = fetchDepartmentEmployeeIds($department_id);

print_r($employee_ids);

Сотрудники с ФИО

<?php

use Bitrix\Main\Loader;
use Bitrix\Main\UserTable;

Loader::includeModule('intranet');

/**
 * Получает сотрудников подразделения с основными полями.
 */
function fetchDepartmentEmployees(int $department_id, bool $is_recursive = true): array
{
    $employee_ids = fetchDepartmentEmployeeIds($department_id, $is_recursive);

    if (empty($employee_ids)) {
        return [];
    }

    return UserTable::getList([
        'select' => [
            'ID',
            'NAME',
            'LAST_NAME',
            'SECOND_NAME',
            'EMAIL',
            'WORK_POSITION',
        ],
        'filter' => [
            '@ID' => $employee_ids,
            '=ACTIVE' => 'Y',
        ],
        'order' => [
            'LAST_NAME' => 'ASC',
            'NAME' => 'ASC',
        ],
    ])->fetchAll();
}

$employees = fetchDepartmentEmployees($department_id);

print_r($employees);

Структура компании

<?php

use Bitrix\Main\Loader;

Loader::includeModule('intranet');

/**
 * Получает структуру компании.
 */
function fetchCompanyStructure(): array
{
    $structure = \CIntranetUtils::GetStructure();

    return is_array($structure) ? $structure : [];
}

$structure = fetchCompanyStructure();

print_r($structure);

Формат структуры лучше посмотреть на своём портале через print_r(), потому что в реальном проекте дальше обычно нужно пройти дерево отделов и собрать нужные ID.

Рабочие примеры

Короткие функции, которые удобно использовать в бизнес-процессах, агентах и обработчиках.

Проверить пользователя в отделе

<?php

use Bitrix\Main\Loader;

Loader::includeModule('intranet');

/**
 * Проверяет, состоит ли пользователь в подразделении.
 */
function hasUserDepartment(int $user_id, int $department_id): bool
{
    $department_ids = fetchUserDepartmentIds($user_id);

    return in_array($department_id, $department_ids, true);
}

$has_department = hasUserDepartment($user_id, $department_id);

var_dump($has_department);

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

<?php

use Bitrix\Main\Loader;

Loader::includeModule('intranet');

/**
 * Получает ID сотрудников нескольких подразделений.
 */
function fetchDepartmentsEmployeeIds(array $department_ids, bool $is_recursive = true): array
{
    $employee_ids = [];

    foreach ($department_ids as $department_id) {
        $department_employee_ids = fetchDepartmentEmployeeIds((int) $department_id, $is_recursive);

        $employee_ids = array_merge($employee_ids, $department_employee_ids);
    }

    $employee_ids = array_values(array_unique($employee_ids));
    sort($employee_ids);

    return $employee_ids;
}

$employee_ids = fetchDepartmentsEmployeeIds([10, 15, 22]);

print_r($employee_ids);

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

<?php

use Bitrix\Main\Loader;

Loader::includeModule('intranet');

/**
 * Получает сотрудников из подразделений пользователя.
 */
function fetchUserDepartmentEmployeeIds(int $user_id): array
{
    $department_ids = fetchUserDepartmentIds($user_id);

    if (empty($department_ids)) {
        return [];
    }

    $employee_ids = [];

    foreach ($department_ids as $department_id) {
        $department_employee_ids = fetchDepartmentEmployeeIds((int) $department_id, true);

        $employee_ids = array_merge($employee_ids, $department_employee_ids);
    }

    $employee_ids = array_values(array_unique($employee_ids));
    sort($employee_ids);

    return $employee_ids;
}

$employee_ids = fetchUserDepartmentEmployeeIds($user_id);

print_r($employee_ids);

Получить отсутствия

Отсутствия сотрудников могут использоваться в бизнес-процессах и автоматизации: например, чтобы не назначать задачу на отсутствующего сотрудника.

<?php

use Bitrix\Main\Loader;

Loader::includeModule('intranet');

/**
 * Получает отсутствия пользователя за период.
 */
function fetchUserAbsences(int $user_id, string $date_from, string $date_to): array
{
    if ($user_id <= 0) {
        return [];
    }

    $absences = \CIntranetUtils::GetAbsenceData([
        'USERS' => [$user_id],
        'DATE_START' => $date_from,
        'DATE_FINISH' => $date_to,
    ]);

    return is_array($absences) ? $absences : [];
}

$absences = fetchUserAbsences(
    $user_id,
    '01.04.2026',
    '30.04.2026'
);

print_r($absences);

Формат результата лучше проверить на конкретной коробке: настройки отсутствий и версии модуля могут отличаться.

Источники