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

24.12.15

Разработка - Механизмы типовых конфигураций

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

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

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

Хочу сразу обратить внимание уважаемых коллег на то, что статья представляет собой учебный материал по работе с регистрами сведений, имеющими ресурс «Период завершения», и вряд ли будет интересна и полезна гуру (хотя, как знать). Вопросы и конструктивная критика приветствуются 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 и файл запроса.

кадровая история ЗУП сотрудников

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122102    670    389    

714

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6284    31    mkalimulin    25    

50

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4826    mrXoxot    11    

99

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5388    user1923546    26    

43

Ключи аналитик учета в ЕРП, КА, УТ

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Управленческий учет Бесплатно (free)

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    7042    ids79    25    

74

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16179    skovpin_sa    14    

98

Структура запроса

Инструментарий разработчика Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Абонемент ($m)

Обработка использует схему запроса и строит визуальную структуру источников данных в виде дерева. Пригодится при разборе прежде всего чужих, громоздких запросов и позволит быстро получить список источников данных. Единственное ограничение - текст запроса должен соответствовать метаданным текущей конфигурации.

1 стартмани

21.06.2023    5154    57    obmailok    35    

56
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. echo77 1868 24.12.15 18:39 Сейчас в теме
Ссылки на ИТС - это очень хорошо в статье
2. MishaD 14 25.12.15 08:47 Сейчас в теме
Не понял, зачем нужна проверка пересечений. Только что попробовал провести изменение должности в интервале с 17.01.15 по 19.01.15(10.02.15). Зуп не позволяет, ругается на прошлое перемещение с 14.01.2015 по 04.02.2015. Хотя пытался изменить не подразделение, как в том перемещении, а должность. То есть, даже если захочешь, то совмещение(пересечение)периодов сделать не получится.
3. HEKPOH 76 25.12.15 11:13 Сейчас в теме
(2) Спасибо за комментарий - не стоило мне так перестраховываться :)
Публикацию обновил
4. karpik666 3760 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 Ответить
5. dgolovanov 27.12.15 12:42 Сейчас в теме
(4) karpik666, Вы пишете про 3.0? В 2.5 ничего такого нет.
6. karpik666 3760 27.12.15 14:38 Сейчас в теме
(5) dgolovanov, нет я как раз пишу про 2.5
9. vishiv 27 19.03.16 16:52 Сейчас в теме
(4) karpik666, Запрос тоже не совсем корректный. Попробуйте сделать кадровое перемещение с какого то число по какое то и увольте сотрудника посередине этого интервала
10. karpik666 3760 19.03.16 17:18 Сейчас в теме
(9) vishiv, программа не даст провести документ увольнения, так как идет пересечение периодов.
7. Ratibor_ 01.01.16 09:14 Сейчас в теме
А вот проверку пересечений зря совсем убрали. Я не видел как она была реализована, но скорее всего в ней учитывалась ситуация, когда период завершения одной записи регистра равен периоду другой, а такое вполне может быть. Кстати, в запросе предоставленном karpik666 это учтено.
8. paulpit 18 17.01.16 22:21 Сейчас в теме
Вот такими условиями
И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)


Проблематично вообще соваться, где большой объем данных.
Оставьте свое сообщение