Получить Должность по текущему пользователю
Сотруд = ПользователиКлиентСервер.ТекущийПользователь();
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотруд, "Должность, ДолжностьПоШтатномуРасписанию", ТекущаяДата()); //массив
Гдолжность = КадровыеДанныеСотрудников[0].Должность; //Вывел первое и единственное значение.
ДанныеЗаголовка.Вставить("Гдолжность", Гдолжность);
выдаёт ошибку
"Индекс находится за пределами массива"
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Недавно была такая задача, работает в КА 2.
Получить физ.лицо пользователя и по нему искать должность.
Пользователь = ПользователиКлиентСервер.ТекущийПользователь();
ФизЛицо = Пользователь.ФизическоеЛицо;
МассивФизЛицо = Новый Массив();
МассивФизЛицо.Добавить(ФизЛицо);
ДанныеОДолжностях = КадровыйУчет.КадровыеДанныеСотрудников(Истина, КадровыйУчет.СотрудникиФизическихЛиц(МассивФизЛицо), "Должность");
ИндексПоследнейДолжности = ДанныеОДолжностях.Количество() - 1;
Попытка
ДолжностьСтрока = ДанныеОДолжностях[ИндексПоследнейДолжности].Должность.Наименование;
Исключение
ДолжностьСтрока = "Менеджер";
КонецПопытки;
ПоказатьПолучить физ.лицо пользователя и по нему искать должность.
ВЫБРАТЬ
ДанСотр.ФизическоеЛицо,
МИНИМУМ(ВидыЗан.ВидЗанятости.Порядок) КАК Место
ПОМЕСТИТЬ РабМесто
ИЗ
РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанСотр
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних(&КонецПериода, ) КАК ВидыЗан
ПО ДанСотр.Сотрудник = ВидыЗан.Сотрудник
ГДЕ
(ДанСотр.Окончание >= &КонецПериода ИЛИ ДанСотр.Окончание = ДАТАВРЕМЯ(1,1,1))
И ДанСотр.Начало <= &КонецПериода
И ДанСотр.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
СГРУППИРОВАТЬ ПО
ДанСотр.ФизическоеЛицо
ИНДЕКСИРОВАТЬ ПО
ДанСотр.ФизическоеЛицо,
Место
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Сотрудники.ФизическоеЛицо,
ТекДанные.Должность
ПОМЕСТИТЬ Работники
ИЗ
РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&КонецПериода, ) КАК ТекДанные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РабМесто
ПО Сотрудники.ФизическоеЛицо = РабМесто.ФизическоеЛицо
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних(&КонецПериода, ) КАК ВидыЗан
ПО Сотрудники.Ссылка = ВидыЗан.Сотрудник
И РабМесто.Место = ВидыЗан.ВидЗанятости.Порядок
ПО ТекДанные.Сотрудник = Сотрудники.Ссылка
ГДЕ
ТекДанные.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
ИНДЕКСИРОВАТЬ ПО
Сотрудники.ФизическоеЛицо
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Юзеры.Наименование КАК Пользователь,
Работники.Должность
ИЗ
Справочник.Пользователи КАК Юзеры
ЛЕВОЕ СОЕДИНЕНИЕ Работники
ПО Юзеры.ФизическоеЛицо = Работники.ФизическоеЛицо;
Показать
(24) В регистрах сведений из ЗУП нельзя использовать срезы последних из-за наличия периода действия данных.
Простой пример, на котором ваш запрос отработает неверно.
Сотрудник работает на должности "Повар". В сентябре его переводят с 10 по 15 число на должность "Старший повар". А 16 числа вам понадобилось получить должность этого сотрудника. Ваш запрос по срезу последних вернет должность "Старший повар", т.к. эта запись действительно в регистре последняя. Но эта запись действовала только до 15 числа, с 16 нужно брать не последнюю, а предпоследнюю(а может и не предпоследнюю, если такие временные переводы постоянно происходят).
Варианта решения 2:
1. Использовать программный интерфейс, который предоставляют разработчики(вариант описан в (12))
2. В запросе обращаться не к регистру КадроваяИсторияСотрудников, а к регистру КадроваяИсторияСотрудниковИнтервальный. Но там тоже есть некоторые свои нюансы.
Простой пример, на котором ваш запрос отработает неверно.
Сотрудник работает на должности "Повар". В сентябре его переводят с 10 по 15 число на должность "Старший повар". А 16 числа вам понадобилось получить должность этого сотрудника. Ваш запрос по срезу последних вернет должность "Старший повар", т.к. эта запись действительно в регистре последняя. Но эта запись действовала только до 15 числа, с 16 нужно брать не последнюю, а предпоследнюю(а может и не предпоследнюю, если такие временные переводы постоянно происходят).
Варианта решения 2:
1. Использовать программный интерфейс, который предоставляют разработчики(вариант описан в (12))
2. В запросе обращаться не к регистру КадроваяИсторияСотрудников, а к регистру КадроваяИсторияСотрудниковИнтервальный. Но там тоже есть некоторые свои нюансы.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот