Получение из регистра свободных вакансий

1. Manticor 66 23.01.14 15:01 Сейчас в теме
Добрый день. конфигурация ЗУП.

Необходимо получить список работников, занимающих ваканси в подразделении и список не занятых вакансий в этом подраздлении. Соответственно делаю запрос по рег. свед "Кадровая история сотрудников" и "Штатное расписание организаций".

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

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

 X 
ВЫБРАТЬ
	Вт_работающиеСотрудники.Сотрудник КАК Сотрудник,
	Вт_работающиеСотрудники.ПричинаИзмененияСостояния,
	Вт_всеСотрудникиИВакансии.Организация,
	Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации,
	Вт_всеСотрудникиИВакансии.Сотрудник КАК Сотрудник1,
	Вт_всеСотрудникиИВакансии.ВидРасчета,
	Вт_всеСотрудникиИВакансии.Должность,
	Вт_всеСотрудникиИВакансии.КоличествоСтавок,
	Вт_всеСотрудникиИВакансии.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния1
ИЗ
	Вт_всеСотрудникиИВакансии КАК Вт_всеСотрудникиИВакансии
		ПОЛНОЕ СОЕДИНЕНИЕ Вт_работающиеСотрудники КАК Вт_работающиеСотрудники
		ПО (Вт_работающиеСотрудники.Организация = Вт_всеСотрудникиИВакансии.Организация)
			И (Вт_работающиеСотрудники.ПодразделениеОрганизации = Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации)
			И Вт_всеСотрудникиИВакансии.Должность = Вт_работающиеСотрудники.Должность
			И Вт_всеСотрудникиИВакансии.Сотрудник = Вт_работающиеСотрудники.Сотрудник

УПОРЯДОЧИТЬ ПО
	Сотрудник
АВТОУПОРЯДОЧИВАНИЕ
Показать




Можно бы было обойтись и без ВТ, если бы конструкция

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


не отрезала свободные вакансии.
В первой ВТ - Вт_работающиеСотрудники отбираю всех работников, которые работают,
во сторой ВТ - Вт_всеСотрудникиИВакансии - всех сотрудников в том числе уволеных и свободные вакансии.
Возникла пролема с соединением этих ВТ - как убрать оттуда всех уволеных?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
9. Borometr 11 23.01.14 18:14 Сейчас в теме
Если связать последний подзапрос с ВТ "ЗанимаемыеСтавкиПоСотрудникам" по подразделению и должности, вывести все поля ВТ "ЗанимаемыеСтавкиПоСотрудникам" и поле "СвободныеСтавки" последнего подзапроса?
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Rothschild 23.01.14 15:20 Сейчас в теме
(1) Manticor,
выведи поле
ВЫБОР
            КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
                    И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НаДату
                ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
            ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
        КОНЕЦ
, определяющее состояние "Уволен" или нет
в обе временные таблицы и
тогда сможешь по нему делать отбор в выборке запроса при их объединении.
3. Manticor 66 23.01.14 15:31 Сейчас в теме
(2) Rothschild, поробовал так:

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

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

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


Ничего не изменилось (.
4. Rothschild 23.01.14 15:39 Сейчас в теме
(3) Manticor,
слушай, а зачем тебе ПОЛНОЕ соединение в конечной выборке?
5. Rothschild 23.01.14 15:44 Сейчас в теме
как-то так мыслю
ВЫБРАТЬ
Вт_всеСотрудникиИВакансии.Организация,
Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации,
Вт_всеСотрудникиИВакансии.Сотрудник КАК Сотрудник,
Вт_всеСотрудникиИВакансии.ВидРасчета,
Вт_всеСотрудникиИВакансии.Должность,
Вт_всеСотрудникиИВакансии.КоличествоСтавок
ИЗ
Вт_всеСотрудникиИВакансии КАК Вт_всеСотрудникиИВакансии
ПОЛНОЕ СОЕДИНЕНИЕ Вт_работающиеСотрудники КАК Вт_работающиеСотрудники
ПО (Вт_работающиеСотрудники.Организация = Вт_всеСотрудникиИВакансии.Организация)
И (Вт_работающиеСотрудники.ПодразделениеОрганизации = Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации)
И Вт_всеСотрудникиИВакансии.Должность = Вт_работающиеСотрудники.Должность

ГДЕ
Вт_всеСотрудникиИВакансии.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение
)
АВТОУПОРЯДОЧИВАНИЕ
Показать
6. Rothschild 23.01.14 15:48 Сейчас в теме
(5)
только надо разобраться:
- с типами соединений
- как интерпретировать значения NULL в ВТ,
возможно подправить с учетом этого выражения для поля ПричинаИзмененияСостояния
***
ЗЫ
возможно NULL будет надо заменять в выражении
на
ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПустаяСсылка)
7. Borometr 11 23.01.14 16:54 Сейчас в теме
Попробуйте так,

ВЫБРАТЬ
	ЗанятыеШтатныеЕдиницыОрганизаций.Сотрудник.Наименование КАК Сотрудник,
	ЗанятыеШтатныеЕдиницыОрганизаций.ПодразделениеОрганизации,
	ЗанятыеШтатныеЕдиницыОрганизаций.Должность,
	СУММА(ВЫБОР
			КОГДА ЗанятыеШтатныеЕдиницыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
				ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ) КАК Приход,
	СУММА(ВЫБОР
			КОГДА ЗанятыеШтатныеЕдиницыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
				ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ) КАК Расход
ПОМЕСТИТЬ ДвижениеСтавок
ИЗ
	РегистрНакопления.ЗанятыеШтатныеЕдиницыОрганизаций КАК ЗанятыеШтатныеЕдиницыОрганизаций

СГРУППИРОВАТЬ ПО
	ЗанятыеШтатныеЕдиницыОрганизаций.Должность,
	ЗанятыеШтатныеЕдиницыОрганизаций.Сотрудник.Наименование,
	ЗанятыеШтатныеЕдиницыОрганизаций.ПодразделениеОрганизации
;

 X 
ВЫБРАТЬ
	ДвижениеСтавок.Сотрудник КАК Сотрудник,
	ДвижениеСтавок.ПодразделениеОрганизации,
	ДвижениеСтавок.Должность,
	ДвижениеСтавок.Приход - ДвижениеСтавок.Расход КАК Количество
ПОМЕСТИТЬ ЗанимаемыеСтавкиПоСотрудникам
ИЗ
	ДвижениеСтавок КАК ДвижениеСтавок
ГДЕ
	ДвижениеСтавок.Приход - ДвижениеСтавок.Расход > 0
;

 X 
ВЫБРАТЬ
	ЗанимаемыеСтавки.ПодразделениеОрганизации,
	ЗанимаемыеСтавки.Должность,
	СУММА(ЗанимаемыеСтавки.Количество) КАК Количество
ПОМЕСТИТЬ ЗанимаемыеСтавки
ИЗ
	ЗанимаемыеСтавкиПоСотрудникам КАК ЗанимаемыеСтавки

СГРУППИРОВАТЬ ПО
	ЗанимаемыеСтавки.Должность,
	ЗанимаемыеСтавки.ПодразделениеОрганизации
;

 X 
ВЫБРАТЬ
	ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации,
	ШтатноеРасписаниеОрганизацийСрезПоследних.Должность,
	ЗанимаемыеСтавки.Количество КАК КоличествоЗанятыхСтавок,
	ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок КАК ВсегоСтавок,
	ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок - ЗанимаемыеСтавки.Количество КАК СвободныеСтавки
ИЗ
	РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних КАК ШтатноеРасписаниеОрганизацийСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ ЗанимаемыеСтавки КАК ЗанимаемыеСтавки
		ПО ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации = ЗанимаемыеСтавки.ПодразделениеОрганизации
			И ШтатноеРасписаниеОрганизацийСрезПоследних.Должность = ЗанимаемыеСтавки.Должность
Показать
8. Manticor 66 23.01.14 17:59 Сейчас в теме
(7) Borometr, а как связь с работниками организовать, чтобы увидеть, какому работнику какая вакансия занята а какая свободна )
9. Borometr 11 23.01.14 18:14 Сейчас в теме
Если связать последний подзапрос с ВТ "ЗанимаемыеСтавкиПоСотрудникам" по подразделению и должности, вывести все поля ВТ "ЗанимаемыеСтавкиПоСотрудникам" и поле "СвободныеСтавки" последнего подзапроса?
10. Manticor 66 24.01.14 11:39 Сейчас в теме
(9) Borometr, в общем с учетом регистра накоплений занятые штатные единицы попробовал сделать так:

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

ИНДЕКСИРОВАТЬ ПО
	Замещаемый
;

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

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

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

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

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

 X 
ВЫБРАТЬ
	ВтПромежуточная.Организация,
	ВтПромежуточная.ПодразделениеОрганизации,
	ЕСТЬNULL(ВтПромежуточная.Вакантно, ВтПромежуточная.Сотрудник) КАК Сотрудник,
	ВтПромежуточная.Должность,
	ВтПромежуточная.КоличествоСтавок,
	ВтПромежуточная.ЗанятоСтавок,
	ВтПромежуточная.Вакантно,
	ВтПромежуточная.МаксимальнаяТарифнаяСтавка КАК МаксимальнаяТарифнаяСтавка,
	ВтПромежуточная.Период,
	ВтПромежуточная.ВременноСвободные,
	ВтПромежуточная.ПричинаИзмененияСостояния
ИЗ
	ВтПромежуточная КАК ВтПромежуточная

УПОРЯДОЧИТЬ ПО
	МаксимальнаяТарифнаяСтавка УБЫВ
Показать


Тоесть у меня цель -чтобы в запросе выводились строго вакансии, которые есть в штатном расписании и если есть вакантное место, то выводим только название должности без сотрудника, но если вакантных ставок нет - то выводим сотрудника, который соответственно занимает эту ставку. Задача усложняетя тем, что нужно вывести работающийх сотрудников, но если поставит условия на рабоающих в последней ВТ, то половина записей не выводится, поскольку при увольнении вакансия освобождается.
Попробовал такую конструкцию для вывода сотрудника ЕСТЬNULL(ВтПромежуточная.Вакантно, ВтПромежуточная.Сотрудник) - так вместо нулевых значений выводит цифры (сколько вакантно).
Как правильно соединить штатку и работников?
11. M.Flint 24.01.14 12:10 Сейчас в теме
(10) Manticor, В ЗУПЕ есть отчет "Штатная расстановка организаций" - может быть там найдется что-то интересное.
Manticor; +1 Ответить
12. vasily.dorckunov 24.01.14 12:38 Сейчас в теме
Здесь надо использовать объединение ,
1) получил список занятых сотрудников, должностей
2) получил список всех должностей
3) вложенный , соединение LEFT JOIN 2 запроса и 1 по полю должность, далее перешел на верхний уровень фильтрация по полю сотрудник есть нуль - это получил вакантные должности
4) запрос это объединение UNION 3 запроса и 1 запроса
13. Manticor 66 27.01.14 09:32 Сейчас в теме
В общем запрос сделал так:

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

ИНДЕКСИРОВАТЬ ПО
	Замещаемый
;

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

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

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

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

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

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

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

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот