|   |   | 
| 
 | Как получить в СКД крайнюю дату всех последовательно идущих состояний | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Стандартное объединение пересекающихся периодов в запросе     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |