gifts2017

Кадровая история сотрудника организации (периодами) в ЗУП 2.5

Опубликовал Александр Чернышов (HEKPOH) в раздел Программирование - Практика программирования

Как получить кадровую историю сотрудника? Как работать с регистрами сведений, имеющими ресурс "Период завершения"? Об этом данная статья.

Хочу сразу обратить внимание уважаемых коллег на то, что статья представляет собой учебный материал по работе с регистрами сведений, имеющими ресурс «Период завершения», и вряд ли будет интересна и полезна гуру (хотя, как знать). Вопросы и конструктивная критика приветствуются Wink

Кадровая история сотрудников организации хранится в регистре сведений «РаботникиОрганизаций» (в пользовательском режиме – «Кадровая история сотрудников (по юрлицам)» или «Сотрудники организации»). Регистраторами для данного регистра являются документы приема в организацию, кадрового перемещения, увольнения из организации и переноса данных.

Регистр «РаботникиОрганизаций», как и многие другие, такие как «ПлановыеНачисленияРаботниковОрганизаций», «ПлановыеУдержанияРаботниковОрганизаций», «СостояниеРаботниковОрганизаций» и т.п.) в своем составе имеют одноименный ресурс с добавлением постфикса «Завершения». Приведем примеры (в конфигурации их гораздо больше):

№ п/п Регистр сведений Ресурс (основной) Ресурс завершения
1 РаботникиОрганизаций ПодразделениеОрганизации ПодразделениеОрганизацииЗавершения
Должность ДолжностьЗавершения
ГрафикРаботы ГрафикРаботыЗавершения
2 ПлановыеНачисленияРаботниковОрганизаций ВидРасчета ВидРасчетаЗавершения
Показатель1 Показатель1Завершения
3 СостояниеРаботников Состояние СостояниеЗавершения

 И, кроме этого, для измерения «Период» имеется ресурс «ПериодЗавершения». Эти два свойства записи определяют состояние объекта на временной оси.

Ресурс «ПериодЗавершения» показывает, что запись характеризуется еще и концом своего действия (в случае, если ресурс заполнен). В этом случае с даты, указанной в ресурсе «ПериодЗавершения», актуальными становятся ресурсы с постфиксом «Завершения» («ДолжностьЗавершения», «ГрафикРаботыЗавершения» и т.д.)

Для того, чтобы понимать, почему была разработана именно такая архитектура периодических регистров сведений, характеризующихся окончанием периода действия, рекомендую ознакомиться со статьей ИТС Регистрация изменений на некоторый промежуток времени с возвратом в исходное состояние. Также в статье Запросы к регистрам сведений с реквизитом "ПериодЗавершения" обсуждаются плюсы и минусы такого решения.

Лирическое отступление закончим. Перейдем непосредственно к задаче получения кадровой истории сотрудника организации (далее, сотрудника). Для того, чтобы не загромождать статью кодом, в запросе будем получать только подразделение сотрудника. Чтобы получить должность, график работы и подобные ресурсы, нужно использовать точно такие же конструкции с «ВЫБОР»,  которые применяются в приведенных ниже запросах. Но для того, чтобы наглядно показать откуда, почему и какие данные получаются (в целях обучения), в результат запросов помещены дополнительные поля, которые можно не использовать в своих разработках в будущем.

 

Постановка задачи:

Необходимо получить кадровую историю сотрудника в следующем виде (с отбором по периоду):

 Следует учесть тот момент, что документом «Кадровое перемещение организаций АР000000002 от 14.01.2015 15:27:05» сотрудник был переведен в Отдел продаж с 14.01.15 по 04.03.15 (для других кадровых перемещений период завершения не заполнялся):

 


Последовательность решения:

1. Находим подразделение сотрудника на дату начала периода (пусть это будет 01.01.15 г.). Для этого используем виртуальную таблицу среза последних регистра сведений «РаботникиОрганизаций», параметризованную по сотруднику и дате начала периода

 ВЫБРАТЬ
	"1" КАК НомерПодзапроса,
	РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
	ВЫБОР
		КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НачалоПериода
				И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
			ТОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения
		ИНАЧЕ РаботникиОрганизацийСрезПоследних.Период
	КОНЕЦ КАК Период,
	ВЫБОР
		КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НачалоПериода
				И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
			ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения
		ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
	КОНЕЦ КАК ПодразделениеОрганизации,
	ВЫБОР
		КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НачалоПериода
				И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
			ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
		ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
	КОНЕЦ КАК ПричинаИзмененияСостояния,
	РаботникиОрганизацийСрезПоследних.Регистратор
ИЗ
	РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, Сотрудник = &Сотрудник) КАК РаботникиОрганизацийСрезПоследних

 

 Результат подзапроса № 1:

В подзапросе № 1 используется конструкция «ВЫБОР» с проверкой значения ресурса «ПериодЗавершения». Если период завершения заполнен и наступил этот период, возвращаем ресурс с постфиксом «Завершения», иначе возвращаем обычный ресурс (или измерение «Период»). Повторюсь, что данную конструкцию необходимо использовать для получения любых ресурсов, характеризующихся датой окончания действия (Должность, ГрафикРаботы и т.п.)

Также можно увидеть, что в подзапрос включено поле «Номер подзапроса» для визуального отображения в будущем, какой подзапрос какие данные вернул (напомню, что это поле для решения поставленной задачи необязательно).

 

2. Находим подразделения сотрудника с даты, следующей за датой начала периода, и по дату окончания периода (пусть это будет 31.12.15 г.) Для этого используем физическую таблицу регистра сведений «РаботникиОрганизаций» с отбором по сотруднику и датам начала и окончания периода

ВЫБРАТЬ
	"2" КАК НомерПодзапроса,
	РаботникиОрганизаций.Сотрудник КАК Сотрудник,
	РаботникиОрганизаций.Период КАК Период,
	РаботникиОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
	РаботникиОрганизаций.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния,
	РаботникиОрганизаций.Регистратор
ИЗ
	РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
	РаботникиОрганизаций.Сотрудник = &Сотрудник
	И РаботникиОрганизаций.Период > &НачалоПериода
	И РаботникиОрганизаций.Период <= &КонецПериода

Результат подзапроса № 2:

 

3. Находим подразделения сотрудника по датам завершения событий с даты, следующей за датой начала периода, и по дату окончания периода

ВЫБРАТЬ
	"3" КАК НомерПодзапроса,
	РаботникиОрганизаций.Сотрудник КАК Сотрудник,
	РаботникиОрганизаций.ПериодЗавершения КАК Период,
	РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения КАК ПодразделениеОрганизации,
	РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения КАК ПричинаИзмененияСостояния,
	РаботникиОрганизаций.Регистратор
ИЗ
	РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
	РаботникиОрганизаций.Сотрудник = &Сотрудник
	И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
	И РаботникиОрганизаций.ПериодЗавершения > &НачалоПериода
	И РаботникиОрганизаций.ПериодЗавершения <= &КонецПериода

Результат подзапроса № 3:

 

4. Объединим подзапросы конструкцией «ОБЪЕДИНИТЬ ВСЕ» и поместим во временную таблицу

ВЫБРАТЬ
	"1" КАК НомерПодзапроса,
	РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
	ВЫБОР
		КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НачалоПериода
				И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
			ТОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения
		ИНАЧЕ РаботникиОрганизацийСрезПоследних.Период
	КОНЕЦ КАК Период,
	ВЫБОР
		КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НачалоПериода
				И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
			ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения
		ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
	КОНЕЦ КАК ПодразделениеОрганизации,
	ВЫБОР
		КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НачалоПериода
				И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
			ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
		ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
	КОНЕЦ КАК ПричинаИзмененияСостояния,
	РаботникиОрганизацийСрезПоследних.Регистратор
ПОМЕСТИТЬ ВТ_ДатыСобытий
ИЗ
	РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, Сотрудник = &Сотрудник) КАК РаботникиОрганизацийСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"2",
	РаботникиОрганизаций.Сотрудник,
	РаботникиОрганизаций.Период,
	РаботникиОрганизаций.ПодразделениеОрганизации,
	РаботникиОрганизаций.ПричинаИзмененияСостояния,
	РаботникиОрганизаций.Регистратор
ИЗ
	РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
	РаботникиОрганизаций.Сотрудник = &Сотрудник
	И РаботникиОрганизаций.Период > &НачалоПериода
	И РаботникиОрганизаций.Период <= &КонецПериода

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"3",
	РаботникиОрганизаций.Сотрудник,
	РаботникиОрганизаций.ПериодЗавершения,
	РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения,
	РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения,
	РаботникиОрганизаций.Регистратор
ИЗ
	РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
	РаботникиОрганизаций.Сотрудник = &Сотрудник
	И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
	И РаботникиОрганизаций.ПериодЗавершения > &НачалоПериода
	И РаботникиОрганизаций.ПериодЗавершения <= &КонецПериода

Временная таблица ВТ_ДатыСобытий будет содержать следующие данные:

Как видно, для того, чтобы получить все даты начала нахождения сотрудника в каком-либо подразделении, нам необходимо было формировать три подзапроса (если устанавливать разные даты начала и окончания периода, то можно увидеть что кадровую историю сотрудника за период можно получить с помощью одного или двух подзапросов, чего будет явно недостаточно для общего случая).

 

5. Получаем итоговую таблицу (текст получения временной таблицы ВТ_ДатыСобытий не повторяю). Для этого временную таблицу с датами наступления событий соединяем саму с собой по сотруднику и условию того, что дата начала события должна быть меньше даты его окончания.

Если сотрудник работает и дата окончания меньше даты события очередного кадрового документа, «Дату по» ставим равной дате окончания.

Если сотрудника уволили, дату начала данного события устанавливаем на следующую дату за последним рабочим днем, а дату окончания устанавливаем в NULL (нет там уже никакой протяженности во времени).

Подразделение после увольнения оставляем равным последнему подразделению сотрудника.

//получили ВТ_ДатыСобытий в п. 4
;

ВЫБРАТЬ
	ДатыНачала.Сотрудник,
	ДатыНачала.ПодразделениеОрганизации,
	ДатыНачала.Период КАК ДатаС,
	ВЫБОР
		КОГДА МИНИМУМ(ДатыОкончания.Период) ЕСТЬ NULL 
			ТОГДА ВЫБОР
КОГДА ДатыНачала.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
						ТОГДА NULL
					ИНАЧЕ &КонецПериода
				КОНЕЦ
		ИНАЧЕ ДОБАВИТЬКДАТЕ(МИНИМУМ(ДатыОкончания.Период), ДЕНЬ, -1)
	КОНЕЦ КАК ДатаПо,
	ДатыНачала.Регистратор
ИЗ
	ВТ_ДатыСобытий КАК ДатыНачала
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыСобытий КАК ДатыОкончания
		ПО ДатыНачала.Сотрудник = ДатыОкончания.Сотрудник
			И ДатыНачала.Период < ДатыОкончания.Период

СГРУППИРОВАТЬ ПО
	ДатыНачала.Сотрудник,
	ДатыНачала.Период,
	ДатыНачала.ПодразделениеОрганизации,
	ДатыНачала.Регистратор,
	ДатыНачала.ПричинаИзмененияСостояния

УПОРЯДОЧИТЬ ПО
	ДатаС

Результат запроса:

Таким образом, мы получили кадровую историю сотрудника (периодами).

 P.S. В файле находится архив с данной статьей в формате MS Word и файл запроса.

Скачать файлы

Наименование Файл Версия Размер
Статья и запрос 11
.zip 130,10Kb
25.12.15
11
.zip 130,10Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Крынецкий (echo77) 24.12.15 18:39
Ссылки на ИТС - это очень хорошо в статье
2. Михаил (MishaD) 25.12.15 08:47
Не понял, зачем нужна проверка пересечений. Только что попробовал провести изменение должности в интервале с 17.01.15 по 19.01.15(10.02.15). Зуп не позволяет, ругается на прошлое перемещение с 14.01.2015 по 04.02.2015. Хотя пытался изменить не подразделение, как в том перемещении, а должность. То есть, даже если захочешь, то совмещение(пересечение)периодов сделать не получится.
3. Александр Чернышов (HEKPOH) 25.12.15 11:13
(2) Спасибо за комментарий - не стоило мне так перестраховываться :)
Публикацию обновил
4. Андрей Карпов (karpik666) 25.12.15 12:09
Если вы объяняете это для зуп, то там есть свой запрос для получения кадровой истории сотрудника и находится он в модулей СотрудникиОрганизацииСервер
Функция ТекстЗапросаИзмененияМестаРаботыОрганизации(ЗапрашиватьОклад)
	
	ТекстЗапроса =  
	"ВЫБРАТЬ
	|	Работники.Период КАК Период,
	|	Работники.ОбособленноеПодразделение КАК ОбособленноеПодразделение,
	|	Работники.ПодразделениеОрганизации КАК Подразделение,
	|	Работники.Должность КАК Должность,
	|	Работники.ГрафикРаботы КАК ГрафикРаботы,
	|	Работники.Регистратор КАК Регистратор
	|ПОМЕСТИТЬ ИзмененияПозиции
	|ИЗ
	|	РегистрСведений.РаботникиОрганизаций КАК Работники
	|ГДЕ
	|	Работники.Сотрудник = &Сотрудник
	|	И Работники.Организация = &Организация
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	Работники.ПериодЗавершения,
	|	Работники.ОбособленноеПодразделениеЗавершения,
	|	Работники.ПодразделениеОрганизацииЗавершения,
	|	Работники.ДолжностьЗавершения,
	|	Работники.ГрафикРаботыЗавершения,
	|	Работники.Регистратор
	|ИЗ
	|	РегистрСведений.РаботникиОрганизаций КАК Работники
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК ОсновноеНазначение
	|		ПО (ОсновноеНазначение.Период = Работники.ПериодЗавершения)
	|			И (ОсновноеНазначение.Сотрудник = Работники.Сотрудник)
	|			И (ОсновноеНазначение.Организация = Работники.Организация)
	|ГДЕ
	|	Работники.Сотрудник = &Сотрудник
	|	И Работники.Организация = &Организация
	|	И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
	|	И ОсновноеНазначение.Период ЕСТЬ NULL 
	|;
	|";
	
	Если ЗапрашиватьОклад Тогда
		ТекстЗапроса = ТекстЗапроса + "	
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ПлановыеНачисления.Период,
		|	ВЫБОР
		|		КОГДА ПлановыеНачисления.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПроизвольнаяФормула)
		|			ТОГДА ВЫБОР
		|					КОГДА ПоказателиВидовРасчета.Показатель.ТипПоказателя = ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд)
		|						ТОГДА ВЫБОР
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 1
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд1
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 2
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд2
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 3
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд3
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 4
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд4
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 5
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд5
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 6
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд6
		|								ИНАЧЕ NULL
		|							КОНЕЦ
		|					ИНАЧЕ ВЫБОР
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 1
		|								ТОГДА ПлановыеНачисления.Показатель1
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 2
		|								ТОГДА ПлановыеНачисления.Показатель2
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 3
		|								ТОГДА ПлановыеНачисления.Показатель3
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 4
		|								ТОГДА ПлановыеНачисления.Показатель4
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 5
		|								ТОГДА ПлановыеНачисления.Показатель5
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 6
		|								ТОГДА ПлановыеНачисления.Показатель6
		|							ИНАЧЕ NULL
		|						КОНЕЦ
		|				КОНЕЦ
		|		ИНАЧЕ ВЫБОР
		|				КОГДА ПлановыеНачисления.ВидРасчета.ТребуетВводаТарифногоРазряда
		|					ТОГДА ПлановыеНачисления.ТарифныйРазряд1
		|				ИНАЧЕ ПлановыеНачисления.Показатель1
		|			КОНЕЦ
		|	КОНЕЦ КАК Оклад,
		|	ПлановыеНачисления.Регистратор,
		|	ВЫБОР
		|		КОГДА ПлановыеНачисления.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПроизвольнаяФормула)
		|			ТОГДА ПоказателиВидовРасчета.Показатель.ТочностьПредставления
		|		ИНАЧЕ ВЫБОР
		|				КОГДА ПлановыеНачисления.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке)
		|					ТОГДА 3
		|				ИНАЧЕ 2
		|			КОНЕЦ
		|	КОНЕЦ КАК ТочностьПредставления
		|ПОМЕСТИТЬ ИзмененияОклада
		|ИЗ
		|	РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисления
		|		ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ПоказателиВидовРасчета
		|		ПО ПлановыеНачисления.ВидРасчета = ПоказателиВидовРасчета.Ссылка
		|			И (ПоказателиВидовРасчета.Показатель.ТарифнаяСтавка
		|				ИЛИ ПоказателиВидовРасчета.Показатель В (ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная), ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная), ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)))
		|			И (ПоказателиВидовРасчета.ЗапрашиватьПриКадровыхПеремещениях)
		|			И (ПоказателиВидовРасчета.Ссылка.ЗачетОтработанногоВремени)
		|ГДЕ
		|	ПлановыеНачисления.Сотрудник = &Сотрудник
		|	И ПлановыеНачисления.Организация = &Организация
		|	И ПлановыеНачисления.ВидРасчетаИзмерение = НЕОПРЕДЕЛЕНО
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ПлановыеНачисления.ПериодЗавершения,
		|	ВЫБОР
		|		КОГДА ПлановыеНачисления.ВидРасчетаЗавершения.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПроизвольнаяФормула)
		|			ТОГДА ВЫБОР
		|					КОГДА ПоказателиВидовРасчета.Показатель.ТипПоказателя = ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд)
		|						ТОГДА ВЫБОР
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 1
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд1Завершения
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 2
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд2Завершения
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 3
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд3Завершения
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 4
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд4Завершения
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 5
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд5Завершения
		|								КОГДА ПоказателиВидовРасчета.НомерСтроки = 6
		|									ТОГДА ПлановыеНачисления.ТарифныйРазряд6Завершения
		|								ИНАЧЕ NULL
		|							КОНЕЦ
		|					ИНАЧЕ ВЫБОР
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 1
		|								ТОГДА ПлановыеНачисления.Показатель1Завершения
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 2
		|								ТОГДА ПлановыеНачисления.Показатель2Завершения
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 3
		|								ТОГДА ПлановыеНачисления.Показатель3Завершения
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 4
		|								ТОГДА ПлановыеНачисления.Показатель4Завершения
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 5
		|								ТОГДА ПлановыеНачисления.Показатель5Завершения
		|							КОГДА ПоказателиВидовРасчета.НомерСтроки = 6
		|								ТОГДА ПлановыеНачисления.Показатель6Завершения
		|							ИНАЧЕ NULL
		|						КОНЕЦ
		|				КОНЕЦ
		|		ИНАЧЕ ВЫБОР
		|				КОГДА ПлановыеНачисления.ВидРасчета.ТребуетВводаТарифногоРазряда
		|					ТОГДА ПлановыеНачисления.ТарифныйРазряд1Завершения
		|				ИНАЧЕ ПлановыеНачисления.Показатель1Завершения
		|			КОНЕЦ
		|	КОНЕЦ,
		|	ПлановыеНачисления.Регистратор,
		|	ВЫБОР
		|		КОГДА ПлановыеНачисления.ВидРасчетаЗавершения.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПроизвольнаяФормула)
		|			ТОГДА ПоказателиВидовРасчета.Показатель.ТочностьПредставления
		|		ИНАЧЕ ВЫБОР
		|				КОГДА ПлановыеНачисления.ВидРасчетаЗавершения.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке)
		|					ТОГДА 3
		|				ИНАЧЕ 2
		|			КОНЕЦ
		|	КОНЕЦ
		|ИЗ
		|	РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисления
		|		ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ПоказателиВидовРасчета
		|		ПО ПлановыеНачисления.ВидРасчетаЗавершения = ПоказателиВидовРасчета.Ссылка
		|			И (ПоказателиВидовРасчета.Показатель.ТарифнаяСтавка
		|				ИЛИ ПоказателиВидовРасчета.Показатель В (ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная), ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная), ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)))
		|			И (ПоказателиВидовРасчета.ЗапрашиватьПриКадровыхПеремещениях)
		|			И (ПоказателиВидовРасчета.Ссылка.ЗачетОтработанногоВремени)
		|ГДЕ
		|	ПлановыеНачисления.Сотрудник = &Сотрудник
		|	И ПлановыеНачисления.Организация = &Организация
		|	И ПлановыеНачисления.ВидРасчетаИзмерение = НЕОПРЕДЕЛЕНО
		|	И ПлановыеНачисления.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
		|;
		|";
	Иначе
		ТекстЗапроса = ТекстЗапроса + "	
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	NULL КАК Период,
		|	NULL КАК Оклад,
		|	NULL КАК Регистратор,
		|	0 КАК ТочностьПредставления
		|ПОМЕСТИТЬ ИзмененияОклада
		|ГДЕ
		|	ЛОЖЬ
		|;
		|";
	КонецЕсли;
	
	ТекстЗапроса = ТекстЗапроса + "	
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ЕСТЬNULL(ИзмененияПозиции.Период, ИзмененияОклада.Период) КАК Период,
	|	ИзмененияПозиции.ОбособленноеПодразделение,
	|	ИзмененияПозиции.Подразделение,
	|	ИзмененияПозиции.Должность,
	|	ИзмененияПозиции.ГрафикРаботы,
	|";
	Если ЗапрашиватьОклад Тогда
		ТекстЗапроса = ТекстЗапроса + "	
		|	ИзмененияОклада.Оклад,
		|";
	КонецЕсли;
	ТекстЗапроса = ТекстЗапроса + "	
	|	ЕСТЬNULL(ИзмененияПозиции.Регистратор, ИзмененияОклада.Регистратор) КАК Основание,
	|	ИзмененияОклада.ТочностьПредставления КАК ТочностьПредставления
	|ИЗ
	| 	ИзмененияПозиции КАК ИзмененияПозиции
	|	ПОЛНОЕ СОЕДИНЕНИЕ ИзмененияОклада КАК ИзмененияОклада
	|	ПО (ИзмененияОклада.Период = ИзмененияПозиции.Период)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Период";
	
	Возврат ТекстЗапроса;
	
КонецФункции // ТекстЗапросаИзмененияМестаРаботыОрганизации
...Показать Скрыть


В принципе, все что здесь описано, уже итак известно, если начать разбираться с зупом, хотя может кому-то и будет полезно.
NatashaSK; Alien_job; +2 Ответить 2
5. Иван Петров (dgolovanov) 27.12.15 12:42
(4) karpik666, Вы пишете про 3.0? В 2.5 ничего такого нет.
6. Андрей Карпов (karpik666) 27.12.15 14:38
(5) dgolovanov, нет я как раз пишу про 2.5
7. Ратибор _ (Ratibor_) 01.01.16 09:14
А вот проверку пересечений зря совсем убрали. Я не видел как она была реализована, но скорее всего в ней учитывалась ситуация, когда период завершения одной записи регистра равен периоду другой, а такое вполне может быть. Кстати, в запросе предоставленном karpik666 это учтено.
8. Павел Питеев (paulpit) 17.01.16 22:21
Вот такими условиями
И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)


Проблематично вообще соваться, где большой объем данных.
9. Vit (vishiv) 19.03.16 16:52
(4) karpik666, Запрос тоже не совсем корректный. Попробуйте сделать кадровое перемещение с какого то число по какое то и увольте сотрудника посередине этого интервала
10. Андрей Карпов (karpik666) 19.03.16 17:18
(9) vishiv, программа не даст провести документ увольнения, так как идет пересечение периодов.