Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:41

Отбор значений строго с начала выбранного месяца

Автор apx_egor, 15 сен 2015, 07:44

0 Пользователей и 1 гость просматривают эту тему.

apx_egor

Добрый день Уважаемые. Есть отчет по отпускам, все работает почти как надо, но есть косяк, при выборе произвольной даты в отчете выходят значения за прошлый месяц. Например: если задать период с 01.05.2015 по 31.05.2015 , в отчете будут заполняться и отпуска которые начинались в апреле и закончились в мае. Как сделать чтоб в отчете за май строго выходили только майские отпуска (т.е. начало отпуска май, конец если будет уходить в следующий месяц не страшно)? 1с начал изучать не давно, так что не судите строго.

Gunner


apx_egor

Цитата: Gunner от 15 сен 2015, 09:37
Покажите запрос
Функция ПолучитьТекстЗапросПоОтпускам(Запрос)

СписокПолей = Новый СписокЗначений;
СписокПолей.Добавить("Серия");
СписокПолей.Добавить("Учет");
СписокПолей.Добавить("ФизЛицо");
СписокПолей.Добавить("Сотрудник");
СписокПолей.Добавить("ВидЕжегодногоОтпуска");

СтрокаУсловияПоля = ПолучитьСтрокуОтбора(СписокПолей, Запрос);

ГрафикОтпусков = СхемаКомпоновкиДанных.НаборыДанных.Данные.Элементы.ГрафикОтпусков.Запрос;
//ГрафикОтпусков = СтрЗаменить(ЗапросСКД, "РАЗРЕШЕННЫЕ", "");
ГрафикОтпусков = ВставитьПоместить(ГрафикОтпусков, "ГрафикОтпусков");
Запрос.Текст = ГрафикОтпусков + ?(СтрокаУсловияПоля <> "" ,"
| ГДЕ " + СтрЗаменить(СтрокаУсловияПоля, "ИСТОЧНИКДАННЫХ", "ГрафикОтпусков"), "");
Запрос.Выполнить();

//2.
ФактическиеОтпуска = СхемаКомпоновкиДанных.НаборыДанных.Данные.Элементы.ФактическиеОтпуска.Запрос;
ФактическиеОтпуска = ВставитьПоместить(ФактическиеОтпуска, "ФактическиеОтпуска");
Запрос.Текст = ФактическиеОтпуска + ?(СтрокаУсловияПоля <> "" ,"
| ГДЕ " + СтрЗаменить(СтрокаУсловияПоля, "ИСТОЧНИКДАННЫХ", "ФактическиеОтпуска"), "");

Запрос.Выполнить();

//3.
ГрафикОтпусковРаботниковОрганизаций = СхемаКомпоновкиДанных.НаборыДанных.Данные.Элементы.ГрафикОтпусковРаботниковОрганизаций.Запрос;
ГрафикОтпусковРаботниковОрганизаций = ВставитьПоместить(ГрафикОтпусковРаботниковОрганизаций, "ГрафикОтпусковРаботниковОрганизаций");
Запрос.Текст = ГрафикОтпусковРаботниковОрганизаций + ?(СтрокаУсловияПоля <> "" ,"
| ГДЕ " + СтрЗаменить(СтрокаУсловияПоля, "ИСТОЧНИКДАННЫХ", "ГрафикОтпусковРаботниковОрганизаций"), "");
Запрос.Выполнить();

//4.
ФактическиеОтпускаРаботниковОрганизаций = СхемаКомпоновкиДанных.НаборыДанных.Данные.Элементы.ФактическиеОтпускаРаботниковОрганизаций.Запрос;
ФактическиеОтпускаРаботниковОрганизаций = ВставитьПоместить(ФактическиеОтпускаРаботниковОрганизаций, "ФактическиеОтпускаРаботниковОрганизаций");
  Запрос.Текст = ФактическиеОтпускаРаботниковОрганизаций + ?(СтрокаУсловияПоля <> "" ,"
| ГДЕ " + СтрЗаменить(СтрокаУсловияПоля, "ИСТОЧНИКДАННЫХ", "ФактическиеОтпускаРаботниковОрганизаций"), "");
Запрос.Выполнить();

ТекстЗапрос =
"ВЫБРАТЬ
| ГрафикОтпусков.Регистратор,
| ГрафикОтпусков.НачалоИнтервала,
| ГрафикОтпусков.КонецИнтервала,
| ГрафикОтпусков.Серия,
| ГрафикОтпусков.Учет,
| ГрафикОтпусков.ФизЛицо,
| ГрафикОтпусков.Сотрудник,
| ГрафикОтпусков.Состояние КАК Состояние,
| ГрафикОтпусков.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска
| ИЗ ГрафикОтпусков КАК ГрафикОтпусков " +  ?(СтрокаУсловияПоля <> "" ,"
| ГДЕ " + СтрЗаменить(СтрокаУсловияПоля, "ИСТОЧНИКДАННЫХ", "ГрафикОтпусков"), "") + "

| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ФактическиеОтпуска.Регистратор,
| ФактическиеОтпуска.НачалоИнтервала,
| ФактическиеОтпуска.КонецИнтервала,
| ФактическиеОтпуска.Серия,
| ФактическиеОтпуска.Учет,
| ФактическиеОтпуска.ФизЛицо,
| ФактическиеОтпуска.Сотрудник,
| """",
| ФактическиеОтпуска.ВидЕжегодногоОтпуска
| ИЗ ФактическиеОтпуска КАК ФактическиеОтпуска" +  ?(СтрокаУсловияПоля <> "" ,"
| ГДЕ " + СтрЗаменить(СтрокаУсловияПоля, "ИСТОЧНИКДАННЫХ", "ФактическиеОтпуска"), "") + "
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ГрафикОтпусковРаботниковОрганизаций.Регистратор,
| ГрафикОтпусковРаботниковОрганизаций.НачалоИнтервала,
| ГрафикОтпусковРаботниковОрганизаций.КонецИнтервала,
| ГрафикОтпусковРаботниковОрганизаций.Серия,
| ГрафикОтпусковРаботниковОрганизаций.Учет,
| ГрафикОтпусковРаботниковОрганизаций.ФизЛицо,
| ГрафикОтпусковРаботниковОрганизаций.Сотрудник,
| ГрафикОтпусковРаботниковОрганизаций.Состояние,
| ГрафикОтпусковРаботниковОрганизаций.ВидЕжегодногоОтпуска
| ИЗ ГрафикОтпусковРаботниковОрганизаций КАК ГрафикОтпусковРаботниковОрганизаций" + ?(СтрокаУсловияПоля <> "" ,"
| ГДЕ " + СтрЗаменить(СтрокаУсловияПоля, "ИСТОЧНИКДАННЫХ", "ГрафикОтпусковРаботниковОрганизаций"), "") + "
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ФактическиеОтпускаРаботниковОрганизаций.Регистратор,
| ФактическиеОтпускаРаботниковОрганизаций.НачалоИнтервала,
| ФактическиеОтпускаРаботниковОрганизаций.КонецИнтервала,
| ФактическиеОтпускаРаботниковОрганизаций.Серия,
| ФактическиеОтпускаРаботниковОрганизаций.Учет,
| ФактическиеОтпускаРаботниковОрганизаций.ФизЛицо,
| ФактическиеОтпускаРаботниковОрганизаций.Сотрудник,
| """",
| ФактическиеОтпускаРаботниковОрганизаций.ВидЕжегодногоОтпуска
| ИЗ ФактическиеОтпускаРаботниковОрганизаций КАК ФактическиеОтпускаРаботниковОрганизаций" + ?(СтрокаУсловияПоля <> "" ,"
| ГДЕ " + СтрЗаменить(СтрокаУсловияПоля, "ИСТОЧНИКДАННЫХ", "ФактическиеОтпускаРаботниковОрганизаций"), "");

Возврат ТекстЗапрос;

КонецФункции

Gunner


apx_egor

Цитата: Gunner от 15 сен 2015, 10:23
А основные запросы в наборах?
ГрафикОтпусков
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ГрафикОтпусков.НачалоИнтервала КАК НачалоИнтервала,
ГрафикОтпусков.КонецИнтервала КАК КонецИнтервала,
ГрафикОтпусков.Регистратор КАК Регистратор,
ГрафикОтпусков.ФизЛицо КАК ФизЛицо,
ГрафикОтпусков.Сотрудник КАК Сотрудник,
ГрафикОтпусков.Серия КАК Серия,
ГрафикОтпусков.Учет КАК Учет,
ГрафикОтпусков.ПланИФактСовпадают КАК ПланИФактСовпадают,
ГрафикОтпусков.Состояние КАК Состояние,
ГрафикОтпусков.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска
{ВЫБРАТЬ
НачалоИнтервала,
КонецИнтервала,
Регистратор.*,
ФизЛицо.*,
Сотрудник,
Серия,
Учет,
ПланИФактСовпадают,
Состояние,
ВидЕжегодногоОтпуска}
ИЗ
(ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Основная.НачалоИнтервала, ДЕНЬ) КАК НачалоИнтервала,
КОНЕЦПЕРИОДА(Основная.КонецИнтервала, ДЕНЬ) КАК КонецИнтервала,
Основная.Регистратор КАК Регистратор,
Основная.ФизЛицо КАК ФизЛицо,
Сотрудники.Сотрудник КАК Сотрудник,
"План" КАК Серия,
"ПоУпрУчету" КАК Учет,
ВЫБОР
КОГДА (НЕ Факт.ФизЛицо ЕСТЬ NULL )
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ПланИФактСовпадают,
Основная.Состояние КАК Состояние,
"" КАК ВидЕжегодногоОтпуска
ИЗ
(ВЫБРАТЬ
ГрафикОтпусков.ФизЛицо КАК ФизЛицо,
ГрафикОтпусков.Период КАК НачалоИнтервала,
ГрафикОтпусков.ПериодЗавершения КАК КонецИнтервала,
ГрафикОтпусков.Регистратор КАК Регистратор,
"Утвержден" КАК Состояние
ИЗ
РегистрСведений.СобытийныйПланЗанятостиФизлиц КАК ГрафикОтпусков
ГДЕ
ГрафикОтпусков.Состояние = ЗНАЧЕНИЕ(Перечисление.ТипыПериодическихЗадачРаботника.ОтпускЕжегодный)
И ГрафикОтпусков.Период МЕЖДУ &ДатаПослеНачала И &КонецПериода

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

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

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

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

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

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

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

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

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

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

ОБЪЕДИНИТЬ

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

СГРУППИРОВАТЬ ПО
РаботникиСовместительство.Сотрудник.Физлицо,
ВЫБОР
КОГДА РаботникиСовместительство.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
ТОГДА 2
ИНАЧЕ 3
КОНЕЦ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
МАКСИМУМ(СотрудникиДУ.Ссылка),
СотрудникиДУ.Физлицо,
4
ИЗ
Справочник.СотрудникиОрганизаций КАК СотрудникиДУ
ГДЕ
(СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
ИЛИ СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор))

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

ОБЪЕДИНИТЬ

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

ОБЪЕДИНИТЬ

ВЫБРАТЬ
СотрудникиДУ.Физлицо,
4
ИЗ
Справочник.СотрудникиОрганизаций КАК СотрудникиДУ
ГДЕ
(СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
ИЛИ СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор))) КАК СписокФизическихЛиц

СГРУППИРОВАТЬ ПО
СписокФизическихЛиц.Физлицо) КАК СписокФизическихЛиц
ПО СписокСотрудников.Физлицо = СписокФизическихЛиц.Физлицо
И СписокСотрудников.Приоритет = СписокФизическихЛиц.Приоритет
{ГДЕ
СписокСотрудников.Сотрудник.*,
СписокСотрудников.Физлицо.*}

СГРУППИРОВАТЬ ПО
СписокСотрудников.Физлицо) КАК Сотрудники
ПО Основная.ФизЛицо = Сотрудники.Физлицо
ГДЕ
Сотрудники.Сотрудник ЕСТЬ НЕ NULL
{ГДЕ
Основная.Регистратор.* КАК Регистратор,
Основная.НачалоИнтервала,
Основная.КонецИнтервала,
Основная.ФизЛицо.*,
("План") КАК Серия,
("ПоУпрУчету") КАК Учет,
(ВЫБОР
КОГДА (НЕ Факт.ФизЛицо ЕСТЬ NULL )
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ) КАК ПланИФактСовпадают,
Основная.Состояние,
("") КАК ВидЕжегодногоОтпуска,
Сотрудники.Сотрудник}) КАК ГрафикОтпусков
{ГДЕ
ГрафикОтпусков.НачалоИнтервала,
ГрафикОтпусков.КонецИнтервала,
ГрафикОтпусков.Регистратор.*,
ГрафикОтпусков.ФизЛицо.*,
ГрафикОтпусков.Сотрудник,
ГрафикОтпусков.Серия,
ГрафикОтпусков.Учет,
ГрафикОтпусков.ПланИФактСовпадают,
ГрафикОтпусков.Состояние,
ГрафикОтпусков.ВидЕжегодногоОтпуска}


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

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

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

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

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

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

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

ОБЪЕДИНИТЬ

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

СГРУППИРОВАТЬ ПО
РаботникиСовместительство.Сотрудник.Физлицо,
ВЫБОР
КОГДА РаботникиСовместительство.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
ТОГДА 2
ИНАЧЕ 3
КОНЕЦ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
МАКСИМУМ(СотрудникиДУ.Ссылка),
СотрудникиДУ.Физлицо,
4
ИЗ
Справочник.СотрудникиОрганизаций КАК СотрудникиДУ
ГДЕ
(СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
ИЛИ СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор))

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

ОБЪЕДИНИТЬ

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

ОБЪЕДИНИТЬ

ВЫБРАТЬ
СотрудникиДУ.Физлицо,
4
ИЗ
Справочник.СотрудникиОрганизаций КАК СотрудникиДУ
ГДЕ
(СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
ИЛИ СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор))) КАК СписокФизическихЛиц

СГРУППИРОВАТЬ ПО
СписокФизическихЛиц.Физлицо) КАК СписокФизическихЛиц
ПО СписокСотрудников.Физлицо = СписокФизическихЛиц.Физлицо
И СписокСотрудников.Приоритет = СписокФизическихЛиц.Приоритет
{ГДЕ
СписокСотрудников.Сотрудник.*,
СписокСотрудников.Физлицо.*}

СГРУППИРОВАТЬ ПО
СписокСотрудников.Физлицо) КАК Сотрудники
ПО Основная.ФизЛицо = Сотрудники.Физлицо
ГДЕ
Сотрудники.Сотрудник ЕСТЬ НЕ NULL
{ГДЕ
Основная.Регистратор.* КАК Регистратор,
Основная.НачалоИнтервала,
Основная.КонецИнтервала,
("Факт") КАК Серия,
Основная.ФизЛицо.*,
("ПоУпрУчету") КАК Учет,
("") КАК ВидЕжегодногоОтпуска,
Сотрудники.Сотрудник}) КАК ФактическиеОтпуска
{ГДЕ
ФактическиеОтпуска.НачалоИнтервала,
ФактическиеОтпуска.КонецИнтервала,
ФактическиеОтпуска.Регистратор.*,
ФактическиеОтпуска.Серия,
ФактическиеОтпуска.ФизЛицо.*,
ФактическиеОтпуска.Учет,
ФактическиеОтпуска.ВидЕжегодногоОтпуска,
ФактическиеОтпуска.Сотрудник,
(ЛОЖЬ) КАК ПланИФактСовпадают,
"" КАК Состояние}


ГрафикОтпусковРаботниковОрганизаций
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ГрафикОтпусковРаботниковОрганизаций.ФизЛицо КАК ФизЛицо,
ГрафикОтпусковРаботниковОрганизаций.Регистратор КАК Регистратор,
ГрафикОтпусковРаботниковОрганизаций.НачалоИнтервала КАК НачалоИнтервала,
ГрафикОтпусковРаботниковОрганизаций.КонецИнтервала КАК КонецИнтервала,
ГрафикОтпусковРаботниковОрганизаций.Серия КАК Серия,
ГрафикОтпусковРаботниковОрганизаций.Учет КАК Учет,
ГрафикОтпусковРаботниковОрганизаций.ПланИФактСовпадают КАК ПланИФактСовпадают,
ГрафикОтпусковРаботниковОрганизаций.Состояние КАК Состояние,
ГрафикОтпусковРаботниковОрганизаций.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
ГрафикОтпусковРаботниковОрганизаций.Сотрудник КАК Сотрудник
{ВЫБРАТЬ
ФизЛицо.*,
Регистратор.*,
НачалоИнтервала,
КонецИнтервала,
Серия,
Учет,
ПланИФактСовпадают,
Состояние,
ВидЕжегодногоОтпуска,
Сотрудник.*}
ИЗ
(ВЫБРАТЬ
Основная.ФизЛицо КАК ФизЛицо,
Основная.Регистратор КАК Регистратор,
НАЧАЛОПЕРИОДА(Основная.НачалоИнтервала, ДЕНЬ) КАК НачалоИнтервала,
КОНЕЦПЕРИОДА(Основная.КонецИнтервала, ДЕНЬ) КАК КонецИнтервала,
"План" КАК Серия,
"ПоРеглУчету" КАК Учет,
ВЫБОР
КОГДА (НЕ Факт.ФизЛицо ЕСТЬ NULL )
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ПланИФактСовпадают,
"Утвержден" КАК Состояние,
"" КАК ВидЕжегодногоОтпуска,
Основная.Сотрудник КАК Сотрудник
{ВЫБРАТЬ
ФизЛицо.*,
Регистратор.*,
НачалоИнтервала,
КонецИнтервала,
Серия,
Учет,
ПланИФактСовпадают,
Состояние,
ВидЕжегодногоОтпуска,
Сотрудник.*}
ИЗ
(ВЫБРАТЬ
ГрафикОтпусковОрганизации.Сотрудник.Физлицо КАК ФизЛицо,
ГрафикОтпусковОрганизации.Сотрудник КАК Сотрудник,
ГрафикОтпусковОрганизации.Организация КАК Организация,
ГрафикОтпусковОрганизации.Период КАК НачалоИнтервала,
ГрафикОтпусковОрганизации.ДатаОкончания КАК КонецИнтервала,
ГрафикОтпусковОрганизации.Регистратор КАК Регистратор
ИЗ
РегистрСведений.ГрафикОтпусковОрганизаций КАК ГрафикОтпусковОрганизации
ГДЕ
ГрафикОтпусковОрганизации.Состояние = ЗНАЧЕНИЕ(Перечисление.ТипыПериодическихЗадачРаботника.ОтпускЕжегодный)
И ГрафикОтпусковОрганизации.Период МЕЖДУ &ДатаПослеНачала И &КонецПериода

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

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

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

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

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

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

СГРУППИРОВАТЬ ПО
ДатыУходаВОтпуск.Сотрудник.Физлицо,
ДатыУходаВОтпуск.Сотрудник,
ДатыУходаВОтпуск.Организация,
ДатыУходаВОтпуск.ПериодЗавершения,
ДатыУходаВОтпуск.НачалоИнтервала) КАК ДатыВозврата
ПО (ДатыВозврата.Сотрудник = ДатыУходаВОтпуск.Сотрудник)
И (ДатыВозврата.НачалоИнтервала = ДатыУходаВОтпуск.НачалоИнтервала)) КАК Основная
{ГДЕ
Основная.ФизЛицо.* КАК Физлицо,
Основная.Регистратор.* КАК Регистратор,
Основная.НачалоИнтервала,
Основная.КонецИнтервала,
("Факт") КАК Серия,
("ПоРеглУчету") КАК Учет}) КАК Факт
ПО Основная.ФизЛицо = Факт.ФизЛицо
И Основная.Сотрудник = Факт.Сотрудник
И Основная.Организация = Факт.Организация
И Основная.НачалоИнтервала = Факт.НачалоИнтервала
И Основная.КонецИнтервала = Факт.КонецИнтервала
ГДЕ
Основная.Сотрудник ЕСТЬ НЕ NULL
{ГДЕ
Основная.ФизЛицо.* КАК Физлицо,
Основная.Регистратор.* КАК Регистратор,
Основная.НачалоИнтервала,
Основная.КонецИнтервала,
("План") КАК Серия,
("ПоРеглУчету") КАК Учет,
(ВЫБОР
КОГДА (НЕ Факт.ФизЛицо ЕСТЬ NULL )
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ) КАК ПланИФактСовпадают,
("Утвержден") КАК Состояние,
("") КАК ВидЕжегодногоОтпуска,
Основная.Сотрудник.*}) КАК ГрафикОтпусковРаботниковОрганизаций
{ГДЕ
ГрафикОтпусковРаботниковОрганизаций.ФизЛицо.*,
ГрафикОтпусковРаботниковОрганизаций.Регистратор.*,
ГрафикОтпусковРаботниковОрганизаций.НачалоИнтервала,
ГрафикОтпусковРаботниковОрганизаций.КонецИнтервала,
ГрафикОтпусковРаботниковОрганизаций.Серия,
ГрафикОтпусковРаботниковОрганизаций.Учет,
ГрафикОтпусковРаботниковОрганизаций.ПланИФактСовпадают,
ГрафикОтпусковРаботниковОрганизаций.Состояние,
ГрафикОтпусковРаботниковОрганизаций.ВидЕжегодногоОтпуска,
ГрафикОтпусковРаботниковОрганизаций.Сотрудник.*}


ФактическиеОтпускаРаботниковОрганизаций
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ФактическиеОтпускаРаботниковОрганизаций.ФизЛицо КАК ФизЛицо,
ФактическиеОтпускаРаботниковОрганизаций.Регистратор КАК Регистратор,
ФактическиеОтпускаРаботниковОрганизаций.НачалоИнтервала КАК НачалоИнтервала,
ФактическиеОтпускаРаботниковОрганизаций.КонецИнтервала КАК КонецИнтервала,
ФактическиеОтпускаРаботниковОрганизаций.Серия КАК Серия,
ФактическиеОтпускаРаботниковОрганизаций.Учет КАК Учет,
ФактическиеОтпускаРаботниковОрганизаций.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
ФактическиеОтпускаРаботниковОрганизаций.Сотрудник КАК Сотрудник,
ЛОЖЬ КАК ПланИФактСовпадают,
"" КАК Состояние
{ВЫБРАТЬ
ФизЛицо.*,
Регистратор.*,
НачалоИнтервала,
КонецИнтервала,
Серия,
Учет,
ВидЕжегодногоОтпуска.*,
Сотрудник.*,
ПланИФактСовпадают,
Состояние}
ИЗ
(ВЫБРАТЬ
Основная.ФизЛицо КАК ФизЛицо,
Основная.Регистратор КАК Регистратор,
НАЧАЛОПЕРИОДА(Основная.НачалоИнтервала, ДЕНЬ) КАК НачалоИнтервала,
КОНЕЦПЕРИОДА(Основная.КонецИнтервала, ДЕНЬ) КАК КонецИнтервала,
"Факт" КАК Серия,
"ПоРеглУчету" КАК Учет,
Основная.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
Основная.Сотрудник КАК Сотрудник
ИЗ
(ВЫБРАТЬ
ФактическиеОтпускаОрганизаций.Сотрудник.Физлицо КАК ФизЛицо,
ФактическиеОтпускаОрганизаций.Сотрудник КАК Сотрудник,
ФактическиеОтпускаОрганизаций.Регистратор КАК Регистратор,
ФактическиеОтпускаОрганизаций.Период КАК НачалоИнтервала,
ВЫБОР
КОГДА ФактическиеОтпускаОрганизаций.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА &ТекущаяДата
ИНАЧЕ ФактическиеОтпускаОрганизаций.ДатаОкончания
КОНЕЦ КАК КонецИнтервала,
ФактическиеОтпускаОрганизаций.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска
ИЗ
РегистрНакопления.ФактическиеОтпускаОрганизаций КАК ФактическиеОтпускаОрганизаций
ГДЕ
ФактическиеОтпускаОрганизаций.Период <= &КонецПериода
И ВЫБОР
КОГДА ФактическиеОтпускаОрганизаций.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА &ТекущаяДата
ИНАЧЕ ФактическиеОтпускаОрганизаций.ДатаОкончания
КОНЕЦ >= &НачалоПериода
И (НЕ ФактическиеОтпускаОрганизаций.ЭтоКомпенсация)) КАК Основная
ГДЕ
Основная.Сотрудник.Наименование ЕСТЬ НЕ NULL
{ГДЕ
Основная.ФизЛицо.* КАК Физлицо,
Основная.Регистратор.* КАК Регистратор,
Основная.НачалоИнтервала,
Основная.КонецИнтервала,
("Факт") КАК Серия,
("ПоРеглУчету") КАК Учет,
Основная.ВидЕжегодногоОтпуска.*,
Основная.Сотрудник.*}) КАК ФактическиеОтпускаРаботниковОрганизаций
{ГДЕ
ФактическиеОтпускаРаботниковОрганизаций.ФизЛицо.*,
ФактическиеОтпускаРаботниковОрганизаций.Регистратор.*,
ФактическиеОтпускаРаботниковОрганизаций.НачалоИнтервала,
ФактическиеОтпускаРаботниковОрганизаций.КонецИнтервала,
ФактическиеОтпускаРаботниковОрганизаций.Серия,
ФактическиеОтпускаРаботниковОрганизаций.Учет,
ФактическиеОтпускаРаботниковОрганизаций.ВидЕжегодногоОтпуска.*,
ФактическиеОтпускаРаботниковОрганизаций.Сотрудник.*,
(ЛОЖЬ) КАК ПланИФактСовпадают,
"" КАК Состояние}

Добавлено: 15 сен 2015, 12:28


Возник еще один вопрос, как в столбце Количество выкинуть выходные дни и оставить только рабочие, т.е. отпуск 24 дня, а сейчас считает 28 вместе с выходными

vitasw

Цитата: apx_egor от 15 сен 2015, 10:28Возник еще один вопрос, как в столбце Количество выкинуть выходные дни и оставить только рабочие, т.е. отпуск 24 дня, а сейчас считает 28 вместе с выходными

Регламентированный производственный календарь

apx_egor

Цитата: vitasw от 15 сен 2015, 14:18
Цитата: apx_egor от 15 сен 2015, 10:28Возник еще один вопрос, как в столбце Количество выкинуть выходные дни и оставить только рабочие, т.е. отпуск 24 дня, а сейчас считает 28 вместе с выходными

Регламентированный производственный календарь

а можно по подробней?

vitasw

Практически в любой типовой есть РС "Регламентированный производственный календарь". Этот РС имеет функцию автозаполнения и настройки. Рабочие дни тянутся из этого РС.

apx_egor

Цитата: vitasw от 15 сен 2015, 15:35
Практически в любой типовой есть РС "Регламентированный производственный календарь". Этот РС имеет функцию автозаполнения и настройки. Рабочие дни тянутся из этого РС.

Это я понял, а как мне организовать запрос чтоб выводил количество дней отпуска в соответствии с периодом который записан в регистре по отпускам?

vitasw

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(РегламентированныйПроизводственныйКалендарь.Пятидневка) КАК КоличествоРабочихДней
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаОкончания";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск