Модули коробки
Интранет
Рабочая справка по модулю 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); Формат результата лучше проверить на конкретной коробке: настройки отсутствий и версии модуля могут отличаться.