|
Как получить в СКД крайнюю дату всех последовательно идущих состояний | ☑ | ||
---|---|---|---|---|
0
VID1234
01.11.23
✎
22:12
|
Здравствуйте. В ЗУП пытаюсь получить в СКД (отчет состояние сотрудников) крайнюю дату последовательно идущих событий, но не могу ни как добиться нужного результата, допустим у сотрудника с 01.10.2023 по 10.10.2023 идет основной отпуск, затем дополнительный с 11.10.2023 по 16.10.2023, а еще потом за свой счет с 17.10.2023 по 20.10.2023, соответственно дату нужно 20.10.2023, но если бы например отпуск за свой счет начался не с 17, а с 18, т.е. разность дат > 1 дня, то дата уже 16.10.2023. Исключение только состояние работа и увольнение.
Это даработанная часть запроса, но для некоторых позиций, где всего 2 события, это срабатывает, а те что далее уже нет!!: /////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ СостоянияСотрудников.Период КАК Период, ВЫБОР КОГДА СостоянияСотрудников.ДействуетДо > ВложенныйЗапрос.ДействуетДо ТОГДА СостоянияСотрудников.ДействуетДо ИНАЧЕ ВложенныйЗапрос.ДействуетДо КОНЕЦ КАК ДействуетДо, СостоянияСотрудников.Сотрудник КАК Сотрудник, ВЫБОР КОГДА СостоянияСотрудников.ВидВремени = ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.ПустаяСсылка) ТОГДА СостоянияСотрудников.Состояние ИНАЧЕ СостоянияСотрудников.ВидВремени КОНЕЦ КАК Состояние, ВЫБОР КОГДА СостоянияСотрудников.Период > &НачалоПериода ТОГДА СостоянияСотрудников.Период ИНАЧЕ &НачалоПериода КОНЕЦ КАК НачалоПодсчета, ВЫБОР КОГДА СостоянияСотрудников.ДействуетДо < &ОкончаниеПериода И СостоянияСотрудников.ДействуетДо <> ДАТАВРЕМЯ(1, 1, 1) ТОГДА СостоянияСотрудников.ДействуетДо ИНАЧЕ &ОкончаниеПериода КОНЕЦ КАК ОкончаниеПодсчета, СостоянияСотрудников.ОкончаниеПредположительно КАК ОкончаниеПредположительно ПОМЕСТИТЬ ВТСостоянияСотрудников ИЗ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники ПО (СостоянияСотрудников.Сотрудник = Сотрудники.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СостоянияСотрудников.Сотрудник КАК Сотрудник, СостоянияСотрудников.ВидВремени КАК ВидВремени, СостоянияСотрудников.ДействуетДо КАК ДействуетДо, СостоянияСотрудников.Период КАК Период, СостоянияСотрудников.ДокументОснование КАК ДокументОснование ИЗ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников ГДЕ СостоянияСотрудников.Период >= &НачалоПериода И СостоянияСотрудников.Сотрудник В (ВЫБРАТЬ РАЗЛИЧНЫЕ СПомеченнымиУбрать.Сотрудник КАК Сотрудник ИЗ СПомеченнымиУбрать КАК СПомеченнымиУбрать ГДЕ НЕ СПомеченнымиУбрать.Сотрудник ПОДОБНО "Убрать")) КАК ВложенныйЗапрос ПО (СостоянияСотрудников.Сотрудник = ВложенныйЗапрос.Сотрудник) И (РАЗНОСТЬДАТ(СостоянияСотрудников.ДействуетДо, ВложенныйЗапрос.Период, ДЕНЬ) <= 1) И (НЕ СостоянияСотрудников.ДокументОснование = ВложенныйЗапрос.ДокументОснование) ГДЕ СостоянияСотрудников.Период МЕЖДУ &НачалоПериода И &ОкончаниеПериода И (СостоянияСотрудников.ДействуетДо > &НачалоПериода ИЛИ СостоянияСотрудников.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)) И СостоянияСотрудников.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение) И СостоянияСотрудников.Сотрудник В (ВЫБРАТЬ РАЗЛИЧНЫЕ СПомеченнымиУбрать.Сотрудник КАК Сотрудник ИЗ СПомеченнымиУбрать КАК СПомеченнымиУбрать ГДЕ НЕ СПомеченнымиУбрать.Сотрудник ПОДОБНО "Убрать") И НЕ СостоянияСотрудников.ВидВремени = &РабочееВремя И НЕ СостоянияСотрудников.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Работа) ; |
|||
1
VID1234
02.11.23
✎
18:33
|
Добрый вечер. Ни у кого нет идей?
|
|||
2
Малыш Джон
03.11.23
✎
01:36
|
Стандартное объединение пересекающихся периодов в запросе
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |