Получить Должность по текущему пользователю

1. user1816391 21.09.22 14:25 Сейчас в теме
Сотруд = ПользователиКлиентСервер.ТекущийПользователь();

КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотруд, "Должность, ДолжностьПоШтатномуРасписанию", ТекущаяДата()); //массив
		Гдолжность = КадровыеДанныеСотрудников[0].Должность; //Вывел первое и единственное значение.
		ДанныеЗаголовка.Вставить("Гдолжность", Гдолжность);


выдаёт ошибку

"Индекс находится за пределами массива"
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 21.09.22 14:30 Сейчас в теме
перед обращением к КадровыеДанныеСотрудников , проверяйте на количество!
3. soft_wind 21.09.22 14:32 Сейчас в теме
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотруд, "Должность, ДолжностьПоШтатномуРасписанию", ТекущаяДата()); //массив
Если КадровыеДанныеСотрудников .Количество() >0 Тогда
    ...
4. user1816391 21.09.22 14:42 Сейчас в теме
(3)Почему-то пустая "КадровыеДанныеСотрудников", посмотрел отладчиком, хотя если передать ей не пользователя, а сотрудника, то всё работает
5. glek 120 21.09.22 15:02 Сейчас в теме
(4) Ну дык логично: у вас сотрудники работают, а не пользователи.
6. user1816391 21.09.22 15:04 Сейчас в теме
(5)а как можно пользователя превратить в сотрудника, при том условии, что пользователь = сотрудник
10. user1831019 21.09.22 15:22 Сейчас в теме
(6) Наверное сделать какую-то связь между этими разными справочниками...
7. soft_wind 21.09.22 15:08 Сейчас в теме
(6) Хм, пользователь = сотрудник
как определили? По имени!
вот и ищите Сотрудника по имени Пользователя!
Это же очевидно!
как по имени искать знаете?
8. user1816391 21.09.22 15:10 Сейчас в теме
(7)
как по имени искать знаете?
был бы благодарен за ваш вариант
14. glek 120 21.09.22 16:11 Сейчас в теме
(7) У пользователя есть физ лицо?
15. user1831019 21.09.22 16:13 Сейчас в теме
(14) "Папаша, бить будете?"
20. glek 120 21.09.22 18:35 Сейчас в теме
(15) В справочнике пользователей есть реквизит физическое лицо?
21. user1831019 21.09.22 19:48 Сейчас в теме
9. soft_wind 21.09.22 15:18 Сейчас в теме
не факт что он подойдет к вашей базе (так как могут различаться реквизиты)
но примерно так.
лкСотрудник = Справочники.Сотрудники.НайтиПоНаименованию(лкПользователь.Имя);
26. user1860805 18.10.22 08:34 Сейчас в теме
(9)
Справочники.Сотрудники.НайтиПоНаименованию

в DocMngCorp выводит "администратор отдела", но в списке не привязаны пользователи
11. aka Любитель XML 21.09.22 15:26 Сейчас в теме
(1) В документообороте 3 версии эти справочники связаны. Если у вас связи нет, можете сами их связать.
12. Dmitry-1c 21.09.22 15:37 Сейчас в теме
Недавно была такая задача, работает в КА 2.
Пользователь = ПользователиКлиентСервер.ТекущийПользователь();
ФизЛицо = Пользователь.ФизическоеЛицо;
МассивФизЛицо = Новый Массив();
МассивФизЛицо.Добавить(ФизЛицо);
ДанныеОДолжностях = КадровыйУчет.КадровыеДанныеСотрудников(Истина, КадровыйУчет.СотрудникиФизическихЛиц(МассивФизЛицо), "Должность");
ИндексПоследнейДолжности = ДанныеОДолжностях.Количество() - 1;

Попытка
        ДолжностьСтрока = ДанныеОДолжностях[ИндексПоследнейДолжности].Должность.Наименование;
Исключение
        ДолжностьСтрока = "Менеджер";
КонецПопытки;
Показать

Получить физ.лицо пользователя и по нему искать должность.
13. user1816391 21.09.22 16:11 Сейчас в теме
(12)Выдаёт ошибку, что не существует "СотрудникиФизическихЛиц"
16. user1831019 21.09.22 16:16 Сейчас в теме
(13) Пичалька. А почему выдает ошибку?
17. user1847230 21.09.22 16:28 Сейчас в теме
(16)видимо конфигурации отличаются
18. user1831019 21.09.22 16:41 Сейчас в теме
(17) Никогда такого не было - и вот опять! Код для одной конфигурации не работает в другой! просто безарбузие какое-то! Доколе?!?!!?
19. Prikum 3 21.09.22 16:43 Сейчас в теме
(17)у них ЕРП для Белорусии.
22. MACTEP1C 22.09.22 08:49 Сейчас в теме
ВЫБРАТЬ
	ДанСотр.ФизическоеЛицо,
	МИНИМУМ(ВидыЗан.ВидЗанятости.Порядок) КАК Место
ПОМЕСТИТЬ РабМесто
ИЗ
	РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанСотр
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних(&КонецПериода, ) КАК ВидыЗан
		ПО ДанСотр.Сотрудник = ВидыЗан.Сотрудник
ГДЕ
	(ДанСотр.Окончание >= &КонецПериода ИЛИ ДанСотр.Окончание = ДАТАВРЕМЯ(1,1,1))
		И ДанСотр.Начало <= &КонецПериода
		И ДанСотр.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)

СГРУППИРОВАТЬ ПО
	ДанСотр.ФизическоеЛицо

ИНДЕКСИРОВАТЬ ПО
	ДанСотр.ФизическоеЛицо,
	Место
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Сотрудники.ФизическоеЛицо,
	ТекДанные.Должность
ПОМЕСТИТЬ Работники
ИЗ
	РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&КонецПериода, ) КАК ТекДанные
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РабМесто
			ПО Сотрудники.ФизическоеЛицо = РабМесто.ФизическоеЛицо
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних(&КонецПериода, ) КАК ВидыЗан
			ПО Сотрудники.Ссылка = ВидыЗан.Сотрудник
				И РабМесто.Место = ВидыЗан.ВидЗанятости.Порядок
		ПО ТекДанные.Сотрудник = Сотрудники.Ссылка

ГДЕ
	ТекДанные.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)

ИНДЕКСИРОВАТЬ ПО
	Сотрудники.ФизическоеЛицо
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Юзеры.Наименование КАК Пользователь,
	Работники.Должность
ИЗ
	Справочник.Пользователи КАК Юзеры
		ЛЕВОЕ СОЕДИНЕНИЕ Работники
		ПО Юзеры.ФизическоеЛицо = Работники.ФизическоеЛицо;
Показать
23. laperuz 47 22.09.22 09:01 Сейчас в теме
(22) Неправильно будет работать.
24. MACTEP1C 22.09.22 09:14 Сейчас в теме
25. laperuz 47 22.09.22 10:07 Сейчас в теме
(24) В регистрах сведений из ЗУП нельзя использовать срезы последних из-за наличия периода действия данных.
Простой пример, на котором ваш запрос отработает неверно.

Сотрудник работает на должности "Повар". В сентябре его переводят с 10 по 15 число на должность "Старший повар". А 16 числа вам понадобилось получить должность этого сотрудника. Ваш запрос по срезу последних вернет должность "Старший повар", т.к. эта запись действительно в регистре последняя. Но эта запись действовала только до 15 числа, с 16 нужно брать не последнюю, а предпоследнюю(а может и не предпоследнюю, если такие временные переводы постоянно происходят).

Варианта решения 2:
1. Использовать программный интерфейс, который предоставляют разработчики(вариант описан в (12))
2. В запросе обращаться не к регистру КадроваяИсторияСотрудников, а к регистру КадроваяИсторияСотрудниковИнтервальный. Но там тоже есть некоторые свои нюансы.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот