Имя: Пароль:
1C
 
Как получить в СКД крайнюю дату всех последовательно идущих состояний
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
Стандартное объединение пересекающихся периодов в запросе