оптимизация решения условия по поиску даты вступления в должность
добрый день.
конфа зуп 2.5
стояла задача вывести дату вступления в последнюю новую должность у сотрудников от текущей даты, т.е. сотрудник Иванов И.И. 29.08.16 был принят на работу в должность Механик 4 разряда,
далее 30.11.16 его перевели на 3 разряд, после 18.01.17 становится начальником участка к примеру, 03.05.17 перемещение на другой участок с той же должностью. получается отчет показывает 18.01.17.
задачу решил так, сформировал запрос по сотрудникам и второй запрос уже с отбором по каждому рс РаботникиОрганизации, т.е. получился запрос в цикле, что не есть хорошо, как еще можно решить эту задачу?
конфа зуп 2.5
стояла задача вывести дату вступления в последнюю новую должность у сотрудников от текущей даты, т.е. сотрудник Иванов И.И. 29.08.16 был принят на работу в должность Механик 4 разряда,
далее 30.11.16 его перевели на 3 разряд, после 18.01.17 становится начальником участка к примеру, 03.05.17 перемещение на другой участок с той же должностью. получается отчет показывает 18.01.17.
задачу решил так, сформировал запрос по сотрудникам и второй запрос уже с отбором по каждому рс РаботникиОрганизации, т.е. получился запрос в цикле, что не есть хорошо, как еще можно решить эту задачу?
По теме из базы знаний
Найденные решения
Примерно так:
Выбрать Период, Должность, физлицо
поместить тзТекДолжность
из РегистрСведений.РаботникиОрганизаций.СрезПоследних();
Выбрать тз.Период, тз.Должность, тз.физлицо, Максимум( ЕстьNULL( тз2.Период,ДатаВремя(1,1,1) ) ) как ПериодПредДолжности
поместить тзПредДолжность из тзТекДолжность как тз
левое соединение РегистрСведений.РаботникиОрганизаций как тз2 по тз2.Физлицо=тз.Физлицо и тз2.Должность<>тз.Должность
Сгруппировать по тз.Период, тз.Должность, тз.физлицо;
Выбрать Минимум(тз.Период) как НачалоТекДолжности, тз.Физлицо, тз2.ПериодПредДолжности из РегистрСведений.РаботникиОрганизаций как тз
левое соединение тзПредДолжность тз2 по тз.Физлицо=тз2.Физлицо где тз.Период>тз2.ПериодПредДолжности
Сгруппировать по тз.Физлицо,тз2.ПериодПредДолжности
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
запрос = новый запрос;
запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РаботникиОрганизацийСрезПоследних.Сотрудник
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
| РаботникиОрганизацийСрезПоследних.Сотрудник.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
| И РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = &ПодразделениеОрганизации
|
|УПОРЯДОЧИТЬ ПО
| РаботникиОрганизацийСрезПоследних.Сотрудник.ПодразделениеОрганизации";
запрос.Параметры.Вставить("ПодразделениеОрганизации",ПодразделениеОрганизации);
выборка = запрос.Выполнить().Выгрузить();
табдок = новый табличныйдокумент;
МакетОбработки = ПолучитьМакет("макет");
ОблС = МакетОбработки.ПолучитьОбласть("строка");
н=0;
к=0;
номер=0;
элементыформы.Индикатор1.МаксимальноеЗначение = выборка.Количество();
для каждого стр из выборка цикл
элементыформы.Индикатор1.Значение = элементыформы.Индикатор1.Значение + 1;
номер=номер+1;
запрос = новый запрос;
запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РаботникиОрганизаций.Период КАК Период,
| РаботникиОрганизаций.Сотрудник КАК Сотрудник,
| РаботникиОрганизаций.Должность,
| РаботникиОрганизаций.ПодразделениеОрганизации,
| РаботникиОрганизаций.Сотрудник.Физлицо.ДатаРождения как ДатаРождения,
| КатегорииОбъектов.Категория,
| КлассыУсловийТрудаПоДолжностямСрезПоследних.КлассУсловийТруда
|ИЗ
| РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
| ПО РаботникиОрганизаций.Сотрудник.Физлицо = КатегорииОбъектов.Объект.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлассыУсловийТрудаПоДолжностям.СрезПоследних КАК КлассыУсловийТрудаПоДолжностямСрезПоследних
| ПО РаботникиОрганизаций.Сотрудник.Должность = КлассыУсловийТрудаПоДолжностямСрезПоследних.Должность
|ГДЕ
| РаботникиОрганизаций.Сотрудник = &сотрудник
|
|УПОРЯДОЧИТЬ ПО
| Период УБЫВ";
запрос.Параметры.Вставить("сотрудник",стр.сотрудник);
результат = запрос.Выполнить().Выгрузить();
д = результат.Количество()-1;
//элементыформы.Индикатор2.МаксимальноеЗначение = результат.Количество();
пока н < результат.Количество()-1 цикл
//элементыформы.Индикатор2.Значение = элементыформы.Индикатор2.Значение + 1;
если результат[н+1].должность.КодПоОКПДТР <> результат[н].должность.КодПоОКПДТР тогда
ОблС.Параметры.фио = результат[н].сотрудник;
ОблС.Параметры.Должность = результат[н].должность;
ОблС.Параметры.дата = результат[н].период;
ОблС.Параметры.подразделение = результат[н].ПодразделениеОрганизации;
ОблС.Параметры.год = результат[н].ДатаРождения;
ОблС.Параметры.класс = результат[н].КлассУсловийТруда;
ОблС.Параметры.Категория = результат[н].Категория;
ОблС.Параметры.номер = номер;
ТабДок.Вывести(ОблС);
сообщить(н);
к=к+1;
Прервать;
конецесли;
н=н+1;
конеццикла;
если к=0 тогда
ОблС.Параметры.фио = результат[0].сотрудник;
ОблС.Параметры.Должность = результат[0].должность;
ОблС.Параметры.дата = результат[д].период;
ОблС.Параметры.подразделение = результат[0].ПодразделениеОрганизации;
ОблС.Параметры.год = результат[0].ДатаРождения;
ОблС.Параметры.класс = результат[0].КлассУсловийТруда;
ОблС.Параметры.Категория = результат[0].Категория;
ОблС.Параметры.номер = номер;
ТабДок.Вывести(ОблС);
конецесли;
н=0;
к=0;
конеццикла;
табдок.Показать();
Показать
Примерно так:
Выбрать Период, Должность, физлицо
поместить тзТекДолжность
из РегистрСведений.РаботникиОрганизаций.СрезПоследних();
Выбрать тз.Период, тз.Должность, тз.физлицо, Максимум( ЕстьNULL( тз2.Период,ДатаВремя(1,1,1) ) ) как ПериодПредДолжности
поместить тзПредДолжность из тзТекДолжность как тз
левое соединение РегистрСведений.РаботникиОрганизаций как тз2 по тз2.Физлицо=тз.Физлицо и тз2.Должность<>тз.Должность
Сгруппировать по тз.Период, тз.Должность, тз.физлицо;
Выбрать Минимум(тз.Период) как НачалоТекДолжности, тз.Физлицо, тз2.ПериодПредДолжности из РегистрСведений.РаботникиОрганизаций как тз
левое соединение тзПредДолжность тз2 по тз.Физлицо=тз2.Физлицо где тз.Период>тз2.ПериодПредДолжности
Сгруппировать по тз.Физлицо,тз2.ПериодПредДолжности
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот