Прелюдия. Вот решили наши кадровики оформить реорганизацию и подготовили сразу пачку приказов будущим периодом, но всё не стоит на месте, и им приходится править ещё не вступившие в силу приказы. Смотрят они в справочник и ничего уже понять не могут.
Описание проблемы. Для отображения в списке справочника Сотрудники организации сведений о должности и подразделении работника 1С:ЗУП использует вспомогательные реквизиты справочника. К сожалению, штатно не предусмотрено поддержание их в актуальном состоянии на текущий день. Исправить этот недочёт достаточно просто.
Облегчим жизнь кадровикам вот таким кодом (можно воспользоваться приложенной обработкой):
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Должность,
| РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
| СотрудникиОрганизаций.Ссылка,
| СотрудникиОрганизаций.ТекущееПодразделениеОрганизации,
| СотрудникиОрганизаций.ТекущаяДолжностьОрганизации
| ИЗ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
| СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ТекущаяДата) КАК РаботникиОрганизацийСрезПоследних
| ПО РаботникиОрганизацийСрезПоследних.Сотрудник = СотрудникиОрганизаций.Ссылка»;
Запрос.УстановитьПараметр(«ТекущаяДата», КонецДня(ТекущаяДата()));
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Актуализирован = Ложь;
Если Не ВыборкаДетальныеЗаписи.Должность = ВыборкаДетальныеЗаписи.ТекущаяДолжностьОрганизации Тогда
Сотрудник = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Сотрудник.ТекущаяДолжностьОрганизации = ВыборкаДетальныеЗаписи.Должность;
Актуализирован = Истина;
КонецЕсли;
Если Не ВыборкаДетальныеЗаписи.ПодразделениеОрганизации = ВыборкаДетальныеЗаписи.ТекущееПодразделениеОрганизации Тогда
Если ПустаяСтрока(Сотрудник) Тогда
Сотрудник = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
КонецЕсли;
Сотрудник.ТекущееПодразделениеОрганизации = ВыборкаДетальныеЗаписи.ПодразделениеОрганизации;
Актуализирован = Истина;
КонецЕсли;
Если Актуализирован Тогда
Сотрудник.ПолучитьКадровыеДанныеФизлица = Ложь;
Сотрудник.Записать();
КонецЕсли;
КонецЦикла;
А себе облегчим жизнь создав регламентное задание, которое будет раз в день актуализировать данные.
ЗЫ В описании решения букв больше чем в самом решении.
Для регламентного задания, только актуализирующего состояние справочника следует использовать этот код:
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
|РаботникиОрганизацийСрезПоследних.Должность,
|РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
|СотрудникиОрганизаций.Ссылка
| ИЗ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
| СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ТекущаяДата) КАК РаботникиОрганизацийСрезПоследних
| ПО РаботникиОрганизацийСрезПоследних.Сотрудник = СотрудникиОрганизаций.Ссылка
| И Не (РаботникиОрганизацийСрезПоследних.Должность = СотрудникиОрганизаций.ТекущаяДолжностьОрганизации Или РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = СотрудникиОрганизаций.ТекущееПодразделениеОрганизации)»;
Запрос.УстановитьПараметр(«ТекущаяДата», КонецДня(ТекущаяДата()));
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сотрудник = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Сотрудник.ТекущаяДолжностьОрганизации = ВыборкаДетальныеЗаписи.Должность;
Сотрудник.ТекущееПодразделениеОрганизации = ВыборкаДетальныеЗаписи.ПодразделениеОрганизации;
Сотрудник.ПолучитьКадровыеДанныеФизлица = Ложь;
Сотрудник.Записать();
КонецЦикла;
elf78, Вы не внимательно прочитали анотацию. Предлагеаемое регламентное задание и предназначено для борьбы с «последствиями» указанного вами алгориртма.
ЗЫ Оно родилось из обработки, разгребавшей «кадровые» истории.
Понятно.. я смотрю в российском ЗУП нет последовательности кадровых документов
(3) а вот такая ситуация 01.10.2012 у сотрудника было текущее подразделение «А». С 02.10.2012 сотрудника перевели приказом в подразделение «В» с периодом завершения 03.10.2012. Какое текущее подразделение будет в справочнике сотрудники и какое фактически допустим 04.10.2012? Помоему у вас в запросе это неучитывается.
и не работатает
А в древних релизах ЗУП в справочнике Сотрудники отображались актуальные должность и подразделение, не из реквизитов, а динамически рассчитываемые… Потом от этого отказались. «Это поведения было отменено как излишне ресурсоемкое более трех лет назад. Показ «актуальных» данных приводит к проблемам с пролистыванием списка сотрудников.»
А с ГПХшниками что ты делаешь?
Полезное регламентное задание. В частности в карточке сотрудника при временном перемещении пишет должность завершения, а не текущую.
+