База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как получить неуволенных сотрудников на каждую дату из ВТ_Месяцы в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 9 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
30 июня 2026 в 16:21 #37998
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Календарь.ДатаКалендаря, МЕСЯЦ) КАК МесяцНачало,
КОНЕЦПЕРИОДА(Календарь.ДатаКалендаря, МЕСЯЦ) КАК МесяцКонец
ПОМЕСТИТЬ ВТ_Месяцы
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ГДЕ
Календарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаОкончанияСГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Календарь.ДатаКалендаря, МЕСЯЦ),
КОНЕЦПЕРИОДА(Календарь.ДатаКалендаря, МЕСЯЦ)
;////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Физлицо КАК Физлицо,
РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
РаботникиОрганизацийСрезПоследних.ТарифнаяСтавка1Разряда КАК ТарифнаяСтавка1Разряда,
РаботникиОрганизацийСрезПоследних.Категория КАК Категория,
РаботникиОрганизацийСрезПоследних.Должность КАК Должность,
РаботникиОрганизацийСрезПоследних.Приказ КАК Приказ,
РаботникиОрганизацийСрезПоследних.Организация КАК Организация,
РаботникиОрганизацийСрезПоследних.ДатаПриема КАК ДатаПриема,
РаботникиОрганизацийСрезПоследних.Физлицо.Пол КАК ФизлицоПол,
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК Уволен
ПОМЕСТИТЬ ВТ_ВсеСотрудники
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(
&ДатаОкончания,
ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
И Категория В (&МассивКатегорий)
И НЕ Должность В (&МассивДолжностей)) КАК РаботникиОрганизацийСрезПоследнихСГРУППИРОВАТЬ ПО
РаботникиОрганизацийСрезПоследних.Физлицо,
РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
РаботникиОрганизацийСрезПоследних.ТарифнаяСтавка1Разряда,
РаботникиОрганизацийСрезПоследних.Категория,
РаботникиОрганизацийСрезПоследних.Должность,
РаботникиОрганизацийСрезПоследних.Приказ,
РаботникиОрганизацийСрезПоследних.Организация,
РаботникиОрганизацийСрезПоследних.ДатаПриема,
РаботникиОрганизацийСрезПоследних.Физлицо.Пол,
РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
;////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ВсеСотрудники.Физлицо КАК Физлицо,
ВТ_ВсеСотрудники.Категория КАК Категория
ПОМЕСТИТЬ ВТ_НеуволенныеСотрудники
ИЗ
ВТ_ВсеСотрудники КАК ВТ_ВсеСотрудники
ГДЕ
ВТ_ВсеСотрудники.Уволен = ЛОЖЬ
;
как сделать выборку ВТ_НеуволенныеСотрудники чтобы она была не на ДатаОкончания а на каждую дату МесцКонец из ВТ_Месяцы -
30 июня 2026 в 16:21 #37999
Чтобы получить выборку не на одну дату (&ДатаОкончания), а на каждую дату МесяцКонец из временной таблицы ВТ_Месяцы, нужно сделать запрос с объединением (например, вложенным циклом или соединением) по каждой дате из ВТ_Месяцы.
В 1С запросах это делается так:
1. Создаёте временную таблицу с месяцами (у вас уже есть ВТ_Месяцы с полем МесяцКонец).
2. Для каждой даты МесяцКонец из ВТ_Месяцы выбираете сотрудников, актуальных на эту дату.Пример запроса, который формирует выборку сотрудников на каждую дату МесяцКонец:
|ВЫБРАТЬ
| ВТ_Месяцы.МесяцКонец КАК ДатаАктуальности,
| РаботникиОрганизацийСрезПоследних.Физлицо КАК Физлицо,
| РаботникиОрганизацийСрезПоследних.Категория КАК Категория
|ИЗ
| ВТ_Месяцы КАК ВТ_Месяцы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(
| ВТ_Месяцы.МесяцКонец,
| ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
| И Категория В (&МассивКатегорий)
| И НЕ Должность В (&МассивДолжностей)
| ) КАК РаботникиОрганизацийСрезПоследних
| ПО ИСТИНА
|ГДЕ
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
|СГРУППИРОВАТЬ ПО
| ВТ_Месяцы.МесяцКонец,
| РаботникиОрганизацийСрезПоследних.Физлицо,
| РаботникиОрганизацийСрезПоследних.КатегорияЕсли нужно получить только неуволенных сотрудников на каждую дату, то добавьте условие:
|И ВЫБОР
| КОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
|КОНЕЦИли фильтруйте в основном запросе по этому условию.
Если хотите сохранить результат во временную таблицу, то:
|ПОМЕСТИТЬ ВТ_НеуволенныеСотрудникиПоМесяцам
|ВЫБРАТЬ
| ВТ_Месяцы.МесяцКонец КАК ДатаАктуальности,
| РаботникиОрганизацийСрезПоследних.Физлицо КАК Физлицо,
| РаботникиОрганизацийСрезПоследних.Категория КАК Категория
|ИЗ
| ВТ_Месяцы КАК ВТ_Месяцы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(
| ВТ_Месяцы.МесяцКонец,
| ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
| И Категория В (&МассивКатегорий)
| И НЕ Должность В (&МассивДолжностей)
| ) КАК РаботникиОрганизацийСрезПоследних
| ПО ИСТИНА
|ГДЕ
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
|СГРУППИРОВАТЬ ПО
| ВТ_Месяцы.МесяцКонец,
| РаботникиОрганизацийСрезПоследних.Физлицо,
| РаботникиОрганизацийСрезПоследних.Категория;Таким образом вы получите список неуволенных сотрудников на каждую дату МесяцКонец из ВТ_Месяцы.
Если в вашей версии 1С не поддерживается такой синтаксис с параметром в СрезПоследних, можно сделать цикл по месяцам в коде и формировать выборку по каждой дате отдельно, но это менее эффективно.
Рекомендую посмотреть здесь:
https://infostart.ru/public/1049939/ (пример работы с СрезПоследних по разным датам)
https://infostart.ru/public/1049940/ (пример построения выборок по периодам)
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.