Конечно, вопрос задан кривовато, но хотелось сократить.
А если подробнее, то, если физическое лицо принято на работу в организацию, то какая у него должность на заданную дату? Есть ли какая-то процедура или функция в типовой конфигурации для этого?
(1) Если физлицо принято на работу, то создан "Сотрудник", и именно сотрудника берут на должность.
1. Самый простой и надёжный способ - через программный интерфейс:
Получаете таблицу значений, далее в ней отковыряете что надо ))
2. Можно и так.
делаете запрос с менеджером временных таблиц.
Делаете временную таблицу, где будет "Сотрудник" и "Период" (это обязательные поля таблицы).
В "Периоде" дата_время, на которые надо вытащить данные.
Имя временной, допустим, ВТФильтр
Делаете Запрос.Выполнить().
Все, после исполнения этого кода в вашем запросе в менеджере будет временная таблица "ВТКадровыеДанныеСотрудников", где будут поля: Период, ФизическоеЛицо, Сотрудник, Должность.
Берите и работайте с ними в запросе дальше.
3. Можно просто запросы написать:
- просто запрос с обращением в "Кадровые данные сотрудников интервальный"
- на представлениях такого вида
ВЫБРАТЬ
&ВашиДатаВремя КАК Период,
&Сотрудник КАК Сотрудник
ПОМЕСТИТЬ ВТСотрудникиПериоды
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДАТАВРЕМЯ(1, 1, 1) КАК Период,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
ВТСотрудникиПериоды КАК СотрудникиПериоды
Показать
Но потом надо будет его "сконвертировать" в "исполняемый" запрос через
Получаете таблицу значений, далее в ней отковыряете что надо ))
1. Функция не возвращает должность.
Я получил должность запросом из РС "СостояниеСотрудников"
"ВЫБРАТЬ
| СостоянияСотрудников.Сотрудник КАК Сотрудник,
| СостоянияСотрудников.ДокументОснование.Должность КАК Должность,
| СостоянияСотрудников.Период КАК Период,
| СостоянияСотрудников.ДействуетДо КАК ДействуетДо
|ИЗ
| РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
|ГДЕ
| СостоянияСотрудников.ДокументОснование.Должность <> ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка)
| И СостоянияСотрудников.Сотрудник.ФизическоеЛицо = &ФизическоеЛицо
| И (СостоянияСотрудников.Период <= &Период
| И СостоянияСотрудников.ДействуетДо >= &Период
| ИЛИ СостоянияСотрудников.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1))";
https://infostart.ru/1c/articles/942569/ Это будет должность по основной ставке. Если нужны должности по лругим ставкам то выше дали исчерпывающий ответ с заменами
(9) Вы невнимательны. Я писал про метод "КадровыеДанныеСотрудников"
Вы упорно применяете "КадровыеДанныеФизическихЛиц"
Разницу не видите?
В чем момент - по второму методу вы никогда не получите "Должность", она бывает у сотрудников.
Так что надо применять точно то, что я описал.
Далее, какой у вас тип данных в поле "Шапка.Руководитель" ?
Если "Сотрудник" - то всё нормально.
Если "Физическое лицо", то сначала вам надо получить сотрудника.
У одного физлица может быть несколько сотрудников: был ранее принят и уволен, либо одновременно работает еще и совместителем.
Каждый сотрудник физлица - это работа физлица по отдельному трудовому договору.
Вам надо оптимально, ну релевантно, определить сотрудника исходя из его кадрового состояния: работает, не уволен,
и исходя из вида занятости, например, самое приоритетно - по основному месту работы, далее внешнее совместительство, далее внутреннее совместительство.
Короче, вот вам запрос, почитайте, поймите суть, проверьте в консоли.
Входящие параметры: Организация, ФизическоеЛицо, НаДату
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВидыЗанятостиСотрудниковИнтервальный.ГоловнаяОрганизация КАК Организация,
ВидыЗанятостиСотрудниковИнтервальный.ФизическоеЛицо КАК ФизическоеЛицо,
КадроваяИсторияСотрудниковИнтервальный.Должность КАК Должность,
МИНИМУМ(ВЫБОР
КОГДА ВидыЗанятостиСотрудниковИнтервальный.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы)
ТОГДА 0
КОГДА ВидыЗанятостиСотрудниковИнтервальный.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.Совместительство)
ТОГДА 1
КОГДА ВидыЗанятостиСотрудниковИнтервальный.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ВнутреннееСовместительство)
ТОГДА 2
ИНАЧЕ 9
КОНЕЦ + ВЫБОР
КОГДА КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = ЗНАЧЕНИЕ(перечисление.ВидыКадровыхСобытий.Увольнение)
ТОГДА 2
ИНАЧЕ 1
КОНЕЦ) КАК Приоритет,
ВидыЗанятостиСотрудниковИнтервальный.ВидЗанятости КАК ВидЗанятости,
КадроваяИсторияСотрудниковИнтервальный.ВидСобытия КАК ВидСобытия
ПОМЕСТИТЬ ВТ_1
ИЗ
РегистрСведений.ВидыЗанятостиСотрудниковИнтервальный КАК ВидыЗанятостиСотрудниковИнтервальный
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
ПО ВидыЗанятостиСотрудниковИнтервальный.ГоловнаяОрганизация = КадроваяИсторияСотрудниковИнтервальный.ГоловнаяОрганизация
И ВидыЗанятостиСотрудниковИнтервальный.ФизическоеЛицо = КадроваяИсторияСотрудниковИнтервальный.ФизическоеЛицо
И ВидыЗанятостиСотрудниковИнтервальный.Сотрудник = КадроваяИсторияСотрудниковИнтервальный.Сотрудник
И (КОНЕЦПЕРИОДА(&НаДату, ДЕНЬ) МЕЖДУ КадроваяИсторияСотрудниковИнтервальный.ДатаНачала И КадроваяИсторияСотрудниковИнтервальный.ДатаОкончания)
ГДЕ
ВидыЗанятостиСотрудниковИнтервальный.ГоловнаяОрганизация = &Организация
И ВидыЗанятостиСотрудниковИнтервальный.ФизическоеЛицо В(&ФизическоеЛицо)
И КОНЕЦПЕРИОДА(&НаДату, ДЕНЬ) МЕЖДУ ВидыЗанятостиСотрудниковИнтервальный.ДатаНачала И ВидыЗанятостиСотрудниковИнтервальный.ДатаОкончания
СГРУППИРОВАТЬ ПО
ВидыЗанятостиСотрудниковИнтервальный.ГоловнаяОрганизация,
КадроваяИсторияСотрудниковИнтервальный.Должность,
КадроваяИсторияСотрудниковИнтервальный.ВидСобытия,
ВидыЗанятостиСотрудниковИнтервальный.ФизическоеЛицо,
ВидыЗанятостиСотрудниковИнтервальный.ВидЗанятости
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МИНИМУМ(ВТ_1.Приоритет) КАК Приоритет,
ВТ_1.ФизическоеЛицо КАК ФизическоеЛицо,
ВТ_1.Организация КАК Организация
ПОМЕСТИТЬ ВТ_2
ИЗ
ВТ_1 КАК ВТ_1
СГРУППИРОВАТЬ ПО
ВТ_1.ФизическоеЛицо,
ВТ_1.Организация
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_1.Организация КАК Организация,
ВТ_1.ФизическоеЛицо КАК ФизическоеЛицо,
ВТ_1.Должность КАК Должность,
ВТ_1.ВидЗанятости КАК ВидЗанятости,
ВТ_1.ВидСобытия КАК ВидСобытия,
ВТ_1.Приоритет КАК Приоритет
ИЗ
ВТ_1 КАК ВТ_1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_2 КАК ВТ_2
ПО ВТ_1.Приоритет = ВТ_2.Приоритет
И ВТ_1.ФизическоеЛицо = ВТ_2.ФизическоеЛицо
И ВТ_1.Организация = ВТ_2.Организация
Если "Физическое лицо", то сначала вам надо получить сотрудника.
Вот я и хочу найти такого сотрудника. В результате нужно заполнить такой абзац трудового договора
Общество с ограниченной ответственностью "ХХХ" (ООО "ХХХ"),именуемое в дальнейшем «Работодатель», в лице Менеджера Иванова Ивана Ивановича, действующего на основании Доверенности № 01 от 04.08.2023 – ЕСЛИ ЕСТЬ КАДРОВАЯ ДОВЕРЕННОСТЬ ИЛИ Генеральный директор Петрова Петра Петровича, действующий на основании Устава, с одной стороны, и Гражданка РФ Сидорова Мария Ивановна, именуемая в дальнейшем «Работник», с другой стороны, заключили настоящий Трудовой договор (далее «Договор») о нижеследующем:
(16) Понимаю, но "Должность" присуща сотрудникам, а не физлицам, я писал об этом.
Технически выглядит так. По физлицу создают Сотрудника, и его принимают на должность.
Короче, запрос мой попробуйте.
Но мне-то надо должность физического лица, если он принят в организацию.
У Вас две задачи:
1. Найти сотрудника по физическому лицу, если таковой есть. Если таковых несколько, то определить какого брать. Необходим алгоритм однозначного приоритета при прочих равных.
2. Найти должность по сотруднику. Тут Вам уже всё расписали.
1. Найти сотрудника по физическому лицу, если таковой есть. Если таковых несколько, то определить какого брать. Необходим алгоритм однозначного приоритета при прочих равных.
Поищу какой-нибудь реквизит, который можно использовать для этих целей. Благо, что таких сотрудников не должно быть много.
Поясню для чего мне это нужно.
Из документа "Прием на работу" распечатываем трудовой договор. Трудовой договор может подписать физическое лицо, у которого для этого есть доверенность. Если в документе "Прием на работу" в окне "Руководитель" выбрать такое физическое лицо, то нужно, чтобы в печатной форме договора был указано это физическое лицо с должностью, которая на дату приема на работу была (есть) у этого физического лица.
Уж если нет на свете новизны,
А есть лишь повторение былого,
И понапрасну мы страдать должны,
Давно рожденное рождая снова
Толи Шекспир Толи БСП
Поиском в форме // Обработчик подсистемы "ПодписиДокументов".
Дальше переходим по Ф12 и находим
ДанныеФизическогоЛица = ПодписиДокументовВызовСервера.ОснованияПолномочийФизическихЛиц(Организация, ФизическоеЛицо, ДатаСведений).Получить(ФизическоеЛицо);
(11) У вас в "Приеме на работу" поле "Должность руководителя" автоматом не заполняется при выборе физлица руководителя?
Это ссылочное на справочник "Должности" поле.
Заполняется - берите из документа.
Не заполняется, тут два пути.
1. Почему не заполняется - разобраться и внести где данных не достает.
Или
2. По физлицу руководителя определяйте сотрудника и далее получайте его должность. Мой запрос в посте 14 именно это и делает
(11) У вас в "Приеме на работу" поле "Должность руководителя" автоматом не заполняется при выборе физлица руководителя?
Это ссылочное на справочник "Должности" поле.
Заполняется - берите из документа.
Какие-то странности. Раньше не заполнялась, поэтому-то и заварил эту кашу. А сейчас смотрю - вроде бы и заполняется. Чертовщина какая-то :(
Теперь буду искать почему не заполнялась раньше. Конечно, брать из документа проще всего.
(32) я не знаю что сказать. Посмотрите мои топики. Там уже конкретно указанно откуда берется должность. Она (должность) не хранится в документе. Физлицо - хранится, а должность нет. Она высчитывается по физлицу. Уже ссылку на строки кода дал. В этой процедуре должность и документ основание выводится
Тут уже другой вопрос. В приказе выбираю физ.лицо в поле "Руководитель". При выборе подставляется должность (см. картинку). Ищу сотрудника с таким же именем и получаю, что он когда-то работал и уже давно уволен.
Получается, что на эту должность ориентироваться нельзя. А как было бы здорово!
(34) Вопрос именно в этом.
1. поле должность заполняется процедурой ПодписиДокументовВызовСервера.ОснованияПолномочийФизическихЛиц(Организация, ФизическоеЛицо, ДатаСведений).Получить(ФизическоеЛицо);
Данная процедура ищет именно по Физлицу а не по Строке с "с таким же именем ". И выводит последнюю должность ОСНОВНОГО СОТРУДНИКА физлица. Даже если он уволен
Эта процедура не проверяет работал сотрудник или нет. Кроме того что АКА "руководитель" мог быть уволенным или не принятым еще на дату документа, он мог быть еще и в отпуске или на больничном, командировке.......... За этим должен следить ответственный за заполнение руководителя в документе а не программист (ИМХО). В любом случае любой кадровик, который готовитт пакет документ должен знать кто будет подписывать документы и ставить этого сотрудника в поле руководитель
Мне так не надо. Трудовой договор уволенный сотрудник подписывать не может!
И еще может быть ситуация, когда у физлица Основная должность Главный инженер, по совместительству Зам. генерального директора, который может подписывать трудовые договора.
(36) Мой ответ 37!!!! За это время мы идем от вопроса про должность физлица к вопросу о подписантахвДоговоре и теперь плавно перетекаем в вопрос про то что в организации есть ответственные лица, которые могут подписывать документы. Должность этих людей в качестве подписанта не зависит от вида занятости. И надо следить за тем работает сотрудник или нет. Это уже совсем другая песня. Нужно ли смотреть - находится ли сотрудник на рабочем месте (не в отпуске.....)?
(37) Мне казалось, что задачу я описал подробно в (11).
Еще раз повторю. Формируем прием на работу. В качестве руководителя выбираем доверенное лицо (физлицо). Дальше проверяем:
- работает ли выбранное лицо в организации
- есть ли у него доверенность на право подписи
Если все "да", подставляем в печатную форму Трудового договора.
Если что-то нет, то выдаем предупреждение, а в Трудовой договор пишем "в лице Генерального директора...".
Можно еще ограничить должности, которые можно использовать для доверенного лица.
ще раз повторю. Формируем прием на работу. В качестве руководителя выбираем доверенное лицо (физлицо). Дальше проверяем:
- работает ли выбранное лицо в организации
- есть ли у него доверенность на право подписи
Вероятно это был разговор с самим собой. Ничего подобного выше не было. Исходя из (40) в (0) должно быть написано - Хочу переделать стандартный механизм подписания с внедрением в него проверок по должности и доверенности. А это уже не (0) и не (11). На поставленные вопросы вам здесь ответили.
(36) ps В кадровых документах существует стандартный механизм работы с подписантами. Приемы подписывает Иванов вносим (один раз) его доверенность и эта доверенность потом появляется во всех документах. Затем выбираем Петрова. Программа предложит запомнить Петрова для подписания с этой даты документов Прием Петровым. Это удобно. Если у вас другой сценарий работы(Предположим документы подписывает начальник подразделения). То об этом надо говорить в теме и описать сценарий работы с подписями.
Функция ДолжностьФизическогоЛица(ФизическоеЛицо,ДатаСреза) Экспорт
Должность=Справочники.Должности.ПустаяСсылка();
Если Не ЗначениеЗаполнено(ФизическоеЛицо) Тогда
Возврат Должность;
КонецЕсли;
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ ПЕРВЫЕ 1
| КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
| КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(
| &ДатаСреза,
| ФизическоеЛицо = &ФизическоеЛицо
| И ВидСобытия <> &ВидСобытия) КАК КадроваяИсторияСотрудниковСрезПоследних
|
|УПОРЯДОЧИТЬ ПО
| КадроваяИсторияСотрудниковСрезПоследних.Период УБЫВ";
Запрос.УстановитьПараметр("ФизическоеЛицо",ФизическоеЛицо);
Запрос.УстановитьПараметр("ВидСобытия",Перечисления.ВидыКадровыхСобытий.Увольнение);
Запрос.УстановитьПараметр("ДатаСреза",ДатаСреза);
Результат=Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка=Результат.Выбрать();
Выборка.Следующий();
Должность=Выборка.Должность;
КонецЕсли;
Возврат Должность;
КонецФункции
(15) Ну и выберете внутреннего совместителя, к примеру, если есть таковой не уволенный и у него по срезу есть более свежая запись в регистр. А в приоритете - основное место работы
И что?
(27) коллега говорит о том что нельзя брать срез последних. Надо ранжировать должность по "важности". И вообще странная ситуация. На вопрос в топике я ответил. Решается двумя строчками кода. На скорректированный вопрос я тоже ответил. Одна строчка кода. Если нужно решить именно запросом то коллега привел готовый запрос. Кроме того существует РС в котором дата, физлицо и (барабанная дробь) основной сотрудник.
(26) У меня такого не было, поэтому нет готового решения. Мне для печати должности в печатных формах хватало. Надо посмотреть на "рс основные сотрудники физлиц" из (25).
(21) Поиск по сотруднику. Далее приоритет по виду занятости. Основной в приоритете. Если несколько внешних совместительств, то тут могут быть варианты: количество ставок, дата приема и т.д.
Если сотрудника принимаете на основное совместительство, то он уже за себя наверное должен расписываться и внешние совместительства должны быть переведены на внутренние.
Не надо искать реквизит. Этот вопрос надо задать функциональному заказчику.
Сформируйте пул вариантов и пусть для всех этих вариантов будут дан ответ.
Если ответ не будет дан, так как отстань от нас со своими вопросами, то как попало делается, а далее много раз переделывается. К сожалению - это более 90% случаев.
(22) Внешних совместительств более 1 не бывает.
Вообще по виду занятости на первом месте идёт основное место работы (одно) или внешнее совместительство (одно). "Или", то есть не "И"
Плюсом к нему может быть N-число внутренних совместительств.
Поэтому при поиске сотрудника по физлицу приоритет обычно отдается работающему, то не не уволенному, по основному месту работы, далее- внешнее совместительство, далее внутреннее.
Хотя в ЗУПе по внутреннему - это уже перестраховка.
Одномоментно не может быть внутреннего совместителя, если нет основного сотрудника или внешнего совместителя.
Выбирать внутренних имеет смысл, если есть дополнительные фильтры, например, по подразделению или ещё какому реквизиту описания работы.