Как получить неуволенных сотрудников на каждую дату из ВТ_Месяцы в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как получить неуволенных сотрудников на каждую дату из ВТ_Месяцы в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #37998
      Фото аватараOdineski
      Участник

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

        СГРУППИРОВАТЬ ПО
        НАЧАЛОПЕРИОДА(Календарь.ДатаКалендаря, МЕСЯЦ),
        КОНЕЦПЕРИОДА(Календарь.ДатаКалендаря, МЕСЯЦ)
        ;

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

        СГРУППИРОВАТЬ ПО
        РаботникиОрганизацийСрезПоследних.Физлицо,
        РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
        РаботникиОрганизацийСрезПоследних.ТарифнаяСтавка1Разряда,
        РаботникиОрганизацийСрезПоследних.Категория,
        РаботникиОрганизацийСрезПоследних.Должность,
        РаботникиОрганизацийСрезПоследних.Приказ,
        РаботникиОрганизацийСрезПоследних.Организация,
        РаботникиОрганизацийСрезПоследних.ДатаПриема,
        РаботникиОрганизацийСрезПоследних.Физлицо.Пол,
        РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
        ВТ_ВсеСотрудники.Физлицо КАК Физлицо,
        ВТ_ВсеСотрудники.Категория КАК Категория
        ПОМЕСТИТЬ ВТ_НеуволенныеСотрудники
        ИЗ
        ВТ_ВсеСотрудники КАК ВТ_ВсеСотрудники
        ГДЕ
        ВТ_ВсеСотрудники.Уволен = ЛОЖЬ
        ;
        как сделать выборку ВТ_НеуволенныеСотрудники чтобы она была не на ДатаОкончания а на каждую дату МесцКонец из ВТ_Месяцы

      • #37999
        bot_avaOdin — Одинэсник
        Участник

          Чтобы получить выборку не на одну дату (&ДатаОкончания), а на каждую дату МесяцКонец из временной таблицы ВТ_Месяцы, нужно сделать запрос с объединением (например, вложенным циклом или соединением) по каждой дате из ВТ_Месяцы.

          В 1С запросах это делается так:

          1. Создаёте временную таблицу с месяцами (у вас уже есть ВТ_Месяцы с полем МесяцКонец).
          2. Для каждой даты МесяцКонец из ВТ_Месяцы выбираете сотрудников, актуальных на эту дату.

          Пример запроса, который формирует выборку сотрудников на каждую дату МесяцКонец:

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

          Если нужно получить только неуволенных сотрудников на каждую дату, то добавьте условие:

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

          Или фильтруйте в основном запросе по этому условию.

          Если хотите сохранить результат во временную таблицу, то:

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

          Таким образом вы получите список неуволенных сотрудников на каждую дату МесяцКонец из ВТ_Месяцы.

          Если в вашей версии 1С не поддерживается такой синтаксис с параметром в СрезПоследних, можно сделать цикл по месяцам в коде и формировать выборку по каждой дате отдельно, но это менее эффективно.

          Рекомендую посмотреть здесь:
          https://infostart.ru/public/1049939/ (пример работы с СрезПоследних по разным датам)
          https://infostart.ru/public/1049940/ (пример построения выборок по периодам)

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С