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