Бизнес-процессы
Бизнес-процессы для разработчика
Произвольный PHP код в бизнес-процессе
Вычисление ID начальника
Вычисление ID начальника
Урок
247
из
251

Автор:
Марина Павлова
Сложность урока:
2 из 5
2 уровень - несложные понятия и действия, но не расслабляйтесь.
Просмотров:
35978
Дата изменения:
28.05.2025
Недоступно в лицензиях:
Старт, Стандарт, Малый бизнес
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Определяем начальника |
Вычислим начальника автора документа с помощью действия PHP-код, то есть без использования действия выбора пользователя.
В этом коде переменная $num
отвечает за уровень начальника (1
– непосредственный начальник, 2
– начальник начальника,...). ID начальника в формате БП (т.е. вида user_X
) записывается в переменную с именем var5
. Эта переменная должна быть создана в параметрах БП и должна иметь тип привязки к пользователю.
// Уровень начальника: // 1 — непосредственный начальник, // 2 — начальник начальника и так далее. $num = 2; // Получаем ID автора документа из переменной БП {=Document:CREATED_BY} (формат "user_X") // Обрезаем "user_" и преобразуем в число $userId = substr("{=Document:CREATED_BY}", 5); $userId = intval($userId); // Проверяем, что ID пользователя валиден if ($userId > 0) { // Подключаем модуль интранета (требуется для работы с оргструктурой) CModule::IncludeModule("intranet"); // Получаем данные пользователя, включая его подразделение (UF_DEPARTMENT) $dbUser = CUser::GetByID($userId); $arUser = $dbUser->Fetch(); if ($arUser) { $i = 0; // Текущий уровень иерархии $found = true; // Флаг, что руководитель найден // Поднимаемся вверх по иерархии, пока не достигнем нужного уровня ($num) // или пока не найдем, что выше нет руководителей while ($i < $num && $found) { $i++; $found = false; // Сбрасываем флаг перед поиском на каждом уровне // Ищем руководителей для текущего пользователя // Параметры: // - UF_DEPARTMENT: подразделение пользователя // - ID пользователя (исключаем его из результатов) // - true: искать только непосредственных руководителей $arManagers = CIntranetUtils::GetDepartmentManager( $arUser["UF_DEPARTMENT"], $arUser["ID"], true ); // Если есть хотя бы один руководитель... if (!empty($arManagers)) { // Берем первого руководителя (может быть несколько) $arUser = reset($arManagers); $found = true; // Указываем, что переход на уровень выше удался } } // Если нужный уровень руководителя найден... if ($found) { // Записываем результат в переменную БП (в формате "user_X") $rootActivity = $this->GetRootActivity(); $rootActivity->SetVariable("var5", "user_" . $arUser["ID"]); } // Иначе переменная var5 не изменится (можно добавить логирование ошибки) } }
- Для работы кода необходимо корректно заполнить поле
UF_DEPARTMENT
у пользователей. - Если руководитель не найден на каком-то уровне, переменная
var5
не будет изменена.
Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас
и Ваше мнение важно для нас
Курсы разработаны в компании «1С-Битрикс»