Получение из регистра свободных вакансий
Добрый день. конфигурация ЗУП.
Необходимо получить список работников, занимающих ваканси в подразделении и список не занятых вакансий в этом подраздлении. Соответственно делаю запрос по рег. свед "Кадровая история сотрудников" и "Штатное расписание организаций".
Можно бы было обойтись и без ВТ, если бы конструкция
не отрезала свободные вакансии.
В первой ВТ - Вт_работающиеСотрудники отбираю всех работников, которые работают,
во сторой ВТ - Вт_всеСотрудникиИВакансии - всех сотрудников в том числе уволеных и свободные вакансии.
Возникла пролема с соединением этих ВТ - как убрать оттуда всех уволеных?
Необходимо получить список работников, занимающих ваканси в подразделении и список не занятых вакансий в этом подраздлении. Соответственно делаю запрос по рег. свед "Кадровая история сотрудников" и "Штатное расписание организаций".
ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Сотрудник,
РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния,
РаботникиОрганизацийСрезПоследних.Организация,
РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
РаботникиОрганизацийСрезПоследних.Должность
ПОМЕСТИТЬ Вт_работающиеСотрудники
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(
&НаДату,
Организация = &Организация
И ПодразделениеОрганизации = &Подразделение) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НаДату
ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
;
X
ВЫБРАТЬ
ШтатноеРасписаниеОрганизацийСрезПоследних.Организация КАК Организация,
ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.Сотрудник ЕСТЬ NULL
ТОГДА "естьNull"
ИНАЧЕ РаботникиОрганизацийСрезПоследних.Сотрудник
КОНЕЦ КАК Сотрудник,
ШтатноеРасписаниеОрганизацийСрезПоследних.ВидРасчета,
ШтатноеРасписаниеОрганизацийСрезПоследних.Должность,
ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок,
РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния,
РаботникиОрганизацийСрезПоследних.ПериодЗавершения,
РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
ПОМЕСТИТЬ Вт_всеСотрудникиИВакансии
ИЗ
РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних(
&НаДату,
Организация = &Организация
И ПодразделениеОрганизации = &Подразделение) КАК ШтатноеРасписаниеОрганизацийСрезПоследних
ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(
&НаДату,
Организация = &Организация
И ПодразделениеОрганизации = &Подразделение) КАК РаботникиОрганизацийСрезПоследних
ПО ШтатноеРасписаниеОрганизацийСрезПоследних.Организация = РаботникиОрганизацийСрезПоследних.Организация
И ШтатноеРасписаниеОрганизацийСрезПоследних.Должность = РаботникиОрганизацийСрезПоследних.Должность
И ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации = РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
;
X
ВЫБРАТЬ
Вт_работающиеСотрудники.Сотрудник КАК Сотрудник,
Вт_работающиеСотрудники.ПричинаИзмененияСостояния,
Вт_всеСотрудникиИВакансии.Организация,
Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации,
Вт_всеСотрудникиИВакансии.Сотрудник КАК Сотрудник1,
Вт_всеСотрудникиИВакансии.ВидРасчета,
Вт_всеСотрудникиИВакансии.Должность,
Вт_всеСотрудникиИВакансии.КоличествоСтавок,
Вт_всеСотрудникиИВакансии.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния1
ИЗ
Вт_всеСотрудникиИВакансии КАК Вт_всеСотрудникиИВакансии
ПОЛНОЕ СОЕДИНЕНИЕ Вт_работающиеСотрудники КАК Вт_работающиеСотрудники
ПО (Вт_работающиеСотрудники.Организация = Вт_всеСотрудникиИВакансии.Организация)
И (Вт_работающиеСотрудники.ПодразделениеОрганизации = Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации)
И Вт_всеСотрудникиИВакансии.Должность = Вт_работающиеСотрудники.Должность
И Вт_всеСотрудникиИВакансии.Сотрудник = Вт_работающиеСотрудники.Сотрудник
УПОРЯДОЧИТЬ ПО
Сотрудник
АВТОУПОРЯДОЧИВАНИЕ
ПоказатьМожно бы было обойтись и без ВТ, если бы конструкция
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НаДату
ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
не отрезала свободные вакансии.
В первой ВТ - Вт_работающиеСотрудники отбираю всех работников, которые работают,
во сторой ВТ - Вт_всеСотрудникиИВакансии - всех сотрудников в том числе уволеных и свободные вакансии.
Возникла пролема с соединением этих ВТ - как убрать оттуда всех уволеных?
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Manticor,
выведи поле
, определяющее состояние "Уволен" или нет
в обе временные таблицы и
тогда сможешь по нему делать отбор в выборке запроса при их объединении.
выведи поле
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НаДату
ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
КОНЕЦ
в обе временные таблицы и
тогда сможешь по нему делать отбор в выборке запроса при их объединении.
(2) Rothschild, поробовал так:
Ничего не изменилось (.
ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Сотрудник,
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НаДату
ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
КОНЕЦ КАК ПричинаИзмененияСостояния,
РаботникиОрганизацийСрезПоследних.Организация,
РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
РаботникиОрганизацийСрезПоследних.Должность
ПОМЕСТИТЬ Вт_работающиеСотрудники
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(
&НаДату,
Организация = &Организация
И ПодразделениеОрганизации = &Подразделение) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НаДату
ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
;
X
ВЫБРАТЬ
ШтатноеРасписаниеОрганизацийСрезПоследних.Организация КАК Организация,
ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
ШтатноеРасписаниеОрганизацийСрезПоследних.ВидРасчета,
ШтатноеРасписаниеОрганизацийСрезПоследних.Должность,
ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок,
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &НаДату
ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
КОНЕЦ КАК ПричинаИзмененияСостояния,
РаботникиОрганизацийСрезПоследних.ПериодЗавершения,
РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
ПОМЕСТИТЬ Вт_всеСотрудникиИВакансии
ИЗ
РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних(
&НаДату,
Организация = &Организация
И ПодразделениеОрганизации = &Подразделение) КАК ШтатноеРасписаниеОрганизацийСрезПоследних
ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(
&НаДату,
Организация = &Организация
И ПодразделениеОрганизации = &Подразделение) КАК РаботникиОрганизацийСрезПоследних
ПО ШтатноеРасписаниеОрганизацийСрезПоследних.Организация = РаботникиОрганизацийСрезПоследних.Организация
И ШтатноеРасписаниеОрганизацийСрезПоследних.Должность = РаботникиОрганизацийСрезПоследних.Должность
И ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации = РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
;
X
ВЫБРАТЬ
Вт_всеСотрудникиИВакансии.Организация,
Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации,
Вт_всеСотрудникиИВакансии.Сотрудник КАК Сотрудник,
Вт_всеСотрудникиИВакансии.ВидРасчета,
Вт_всеСотрудникиИВакансии.Должность,
Вт_всеСотрудникиИВакансии.КоличествоСтавок
ИЗ
Вт_всеСотрудникиИВакансии КАК Вт_всеСотрудникиИВакансии
ПОЛНОЕ СОЕДИНЕНИЕ Вт_работающиеСотрудники КАК Вт_работающиеСотрудники
ПО (Вт_работающиеСотрудники.Организация = Вт_всеСотрудникиИВакансии.Организация)
И (Вт_работающиеСотрудники.ПодразделениеОрганизации = Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации)
И Вт_всеСотрудникиИВакансии.Должность = Вт_работающиеСотрудники.Должность
И Вт_всеСотрудникиИВакансии.Сотрудник = Вт_работающиеСотрудники.Сотрудник
ГДЕ
ВЫБОР
КОГДА Вт_всеСотрудникиИВакансии.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
И Вт_всеСотрудникиИВакансии.ПериодЗавершения <= &НаДату
ТОГДА Вт_всеСотрудникиИВакансии.ПричинаИзмененияСостоянияЗавершения
ИНАЧЕ Вт_всеСотрудникиИВакансии.ПричинаИзмененияСостояния
КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
АВТОУПОРЯДОЧИВАНИЕ
ПоказатьНичего не изменилось (.
как-то так мыслю
ВЫБРАТЬ
Вт_всеСотрудникиИВакансии.Организация,
Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации,
Вт_всеСотрудникиИВакансии.Сотрудник КАК Сотрудник,
Вт_всеСотрудникиИВакансии.ВидРасчета,
Вт_всеСотрудникиИВакансии.Должность,
Вт_всеСотрудникиИВакансии.КоличествоСтавок
ИЗ
Вт_всеСотрудникиИВакансии КАК Вт_всеСотрудникиИВакансии
ПОЛНОЕ СОЕДИНЕНИЕ Вт_работающиеСотрудники КАК Вт_работающиеСотрудники
ПО (Вт_работающиеСотрудники.Организация = Вт_всеСотрудникиИВакансии.Организация)
И (Вт_работающиеСотрудники.ПодразделениеОрганизации = Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации)
И Вт_всеСотрудникиИВакансии.Должность = Вт_работающиеСотрудники.Должность
ГДЕ
Вт_всеСотрудникиИВакансии.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
АВТОУПОРЯДОЧИВАНИЕ
ПоказатьВт_всеСотрудникиИВакансии.Организация,
Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации,
Вт_всеСотрудникиИВакансии.Сотрудник КАК Сотрудник,
Вт_всеСотрудникиИВакансии.ВидРасчета,
Вт_всеСотрудникиИВакансии.Должность,
Вт_всеСотрудникиИВакансии.КоличествоСтавок
ИЗ
Вт_всеСотрудникиИВакансии КАК Вт_всеСотрудникиИВакансии
ПОЛНОЕ СОЕДИНЕНИЕ Вт_работающиеСотрудники КАК Вт_работающиеСотрудники
ПО (Вт_работающиеСотрудники.Организация = Вт_всеСотрудникиИВакансии.Организация)
И (Вт_работающиеСотрудники.ПодразделениеОрганизации = Вт_всеСотрудникиИВакансии.ПодразделениеОрганизации)
И Вт_всеСотрудникиИВакансии.Должность = Вт_работающиеСотрудники.Должность
ГДЕ
Вт_всеСотрудникиИВакансии.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
АВТОУПОРЯДОЧИВАНИЕ
(5)
только надо разобраться:
- с типами соединений
- как интерпретировать значения NULL в ВТ,
возможно подправить с учетом этого выражения для поля ПричинаИзмененияСостояния
***
ЗЫ
возможно NULL будет надо заменять в выражении
на
только надо разобраться:
- с типами соединений
- как интерпретировать значения NULL в ВТ,
возможно подправить с учетом этого выражения для поля ПричинаИзмененияСостояния
***
ЗЫ
возможно NULL будет надо заменять в выражении
на
ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПустаяСсылка)
Попробуйте так,
ВЫБРАТЬ
ЗанятыеШтатныеЕдиницыОрганизаций.Сотрудник.Наименование КАК Сотрудник,
ЗанятыеШтатныеЕдиницыОрганизаций.ПодразделениеОрганизации,
ЗанятыеШтатныеЕдиницыОрганизаций.Должность,
СУММА(ВЫБОР
КОГДА ЗанятыеШтатныеЕдиницыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) КАК Приход,
СУММА(ВЫБОР
КОГДА ЗанятыеШтатныеЕдиницыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) КАК Расход
ПОМЕСТИТЬ ДвижениеСтавок
ИЗ
РегистрНакопления.ЗанятыеШтатныеЕдиницыОрганизаций КАК ЗанятыеШтатныеЕдиницыОрганизаций
СГРУППИРОВАТЬ ПО
ЗанятыеШтатныеЕдиницыОрганизаций.Должность,
ЗанятыеШтатныеЕдиницыОрганизаций.Сотрудник.Наименование,
ЗанятыеШтатныеЕдиницыОрганизаций.ПодразделениеОрганизации
;
X
ВЫБРАТЬ
ДвижениеСтавок.Сотрудник КАК Сотрудник,
ДвижениеСтавок.ПодразделениеОрганизации,
ДвижениеСтавок.Должность,
ДвижениеСтавок.Приход - ДвижениеСтавок.Расход КАК Количество
ПОМЕСТИТЬ ЗанимаемыеСтавкиПоСотрудникам
ИЗ
ДвижениеСтавок КАК ДвижениеСтавок
ГДЕ
ДвижениеСтавок.Приход - ДвижениеСтавок.Расход > 0
;
X
ВЫБРАТЬ
ЗанимаемыеСтавки.ПодразделениеОрганизации,
ЗанимаемыеСтавки.Должность,
СУММА(ЗанимаемыеСтавки.Количество) КАК Количество
ПОМЕСТИТЬ ЗанимаемыеСтавки
ИЗ
ЗанимаемыеСтавкиПоСотрудникам КАК ЗанимаемыеСтавки
СГРУППИРОВАТЬ ПО
ЗанимаемыеСтавки.Должность,
ЗанимаемыеСтавки.ПодразделениеОрганизации
;
X
ВЫБРАТЬ
ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации,
ШтатноеРасписаниеОрганизацийСрезПоследних.Должность,
ЗанимаемыеСтавки.Количество КАК КоличествоЗанятыхСтавок,
ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок КАК ВсегоСтавок,
ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок - ЗанимаемыеСтавки.Количество КАК СвободныеСтавки
ИЗ
РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних КАК ШтатноеРасписаниеОрганизацийСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ ЗанимаемыеСтавки КАК ЗанимаемыеСтавки
ПО ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации = ЗанимаемыеСтавки.ПодразделениеОрганизации
И ШтатноеРасписаниеОрганизацийСрезПоследних.Должность = ЗанимаемыеСтавки.Должность
Показать
(9) Borometr, в общем с учетом регистра накоплений занятые штатные единицы попробовал сделать так:
Тоесть у меня цель -чтобы в запросе выводились строго вакансии, которые есть в штатном расписании и если есть вакантное место, то выводим только название должности без сотрудника, но если вакантных ставок нет - то выводим сотрудника, который соответственно занимает эту ставку. Задача усложняетя тем, что нужно вывести работающийх сотрудников, но если поставит условия на рабоающих в последней ВТ, то половина записей не выводится, поскольку при увольнении вакансия освобождается.
Попробовал такую конструкцию для вывода сотрудника ЕСТЬNULL(ВтПромежуточная.Вакантно, ВтПромежуточная.Сотрудник) - так вместо нулевых значений выводит цифры (сколько вакантно).
Как правильно соединить штатку и работников?
ВЫБРАТЬ
юмВременныеЗамещенияСрезПоследних.Замещаемый КАК Замещаемый,
юмВременныеЗамещенияСрезПоследних.Сотрудник
ПОМЕСТИТЬ УжеДейсвуетЗамещение
ИЗ
РегистрСведений.юмВременныеЗамещения.СрезПоследних(
&Период,
Организация = &Организация
И ПодразделениеОрганизации В (&ОтборПодразделение)) КАК юмВременныеЗамещенияСрезПоследних
ГДЕ
ВЫБОР
КОГДА юмВременныеЗамещенияСрезПоследних.ДатаОкончания <> ДАТАВРЕМЯ(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(ВтПромежуточная.Вакантно, ВтПромежуточная.Сотрудник) - так вместо нулевых значений выводит цифры (сколько вакантно).
Как правильно соединить штатку и работников?
Здесь надо использовать объединение ,
1) получил список занятых сотрудников, должностей
2) получил список всех должностей
3) вложенный , соединение LEFT JOIN 2 запроса и 1 по полю должность, далее перешел на верхний уровень фильтрация по полю сотрудник есть нуль - это получил вакантные должности
4) запрос это объединение UNION 3 запроса и 1 запроса
1) получил список занятых сотрудников, должностей
2) получил список всех должностей
3) вложенный , соединение LEFT JOIN 2 запроса и 1 по полю должность, далее перешел на верхний уровень фильтрация по полю сотрудник есть нуль - это получил вакантные должности
4) запрос это объединение UNION 3 запроса и 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
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(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)
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот