Как сделать выборку из РаботникиОрг. на каждую МесяцКонец из ВТ_Месяцы?

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

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

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

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

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
        РаботникиОрганизаций.Физлицо КАК Физлицо,
        РаботникиОрганизаций.Должность КАК Должность,
        РаботникиОрганизаций.Категория КАК Категория,
        РаботникиОрганизаций.ВидЗанятости КАК ВидЗанятости
        ИЗ
        РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций как сделать на каждую МесяцКонец из ВТ_Месяцы выборку из РаботникиОрганизаций

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

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

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

          Пример запроса:

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

          Объяснение:
          — Используем срез последних кадровых данных на дату ВТ_Месяцы.МесяцКонец.
          — В запросе срез последних — это специальный синтаксис 1С для получения актуальных данных на дату.
          — ВНУТРЕННЕЕ СОЕДИНЕНИЕ по условию Истина — чтобы получить все записи для каждой даты из ВТ_Месяцы.

          Если в вашей версии 1С нет поддержки среза последних в таком виде, можно сделать так:

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

          Но это сложнее и менее эффективно.

          Если нужно получить кадровые данные на конец каждого месяца, лучше использовать срез последних с параметром даты.

          Итого, для вашей задачи:

          1. Создаёте ВТ_Месяцы с датами начала и конца месяца.
          2. Пишете запрос с использованием среза последних кадровых данных на дату ВТ_Месяцы.МесяцКонец.
          3. Получаете выборку по каждому месяцу.

          Рекомендую посмотреть пример работы с срезом последних кадровых данных здесь:

          https://infostart.ru/public/1544167/

          Там подробно описано, как делать выборку кадровых данных на дату среза.

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