0
егаис
05.01.24
✎
12:06
|
Есть таблица вида Сотрудник / ДатаНачала / ДатаОкончания, данные из табеля
Иванов / 01.12.23 / 01.12.23
Иванов / 02.12.23 / 02.12.23
Иванов / 05.12.23 / 05.12.23
Иванов / 06.12.23 / 06.12.23
Как запросом получить?
Иванов / 01.12.23 / 02.12.23
Иванов / 05.12.23 / 06.12.23
пробовал по методу Ильдаровича, но там походу нужны смежные периоды.
Такой код отработал "криво". Часть периодов свернул, часть - нет
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаПериодов.Сотрудник КАК Сотрудник,
| ТаблицаПериодов.Период КАК НачалоПериода,
| ТаблицаПериодов.Период, ДЕНЬ КАК КонецПериода
|ПОМЕСТИТЬ Дано
|ИЗ
| &ТаблицаПериодов КАК ТаблицаПериодов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Дано.НачалоПериода,
| Дано.КонецПериода,
| Дано.Сотрудник,
| СУММА(РАЗНОСТЬДАТ(Слева.НачалоПериода, Слева.КонецПериода, ДЕНЬ) + 1) КАК Интеграл
|ПОМЕСТИТЬ ДаноПлюс
|ИЗ
| Дано КАК Дано
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Слева
| ПО (Слева.НачалоПериода <= Дано.НачалоПериода)
|
|СГРУППИРОВАТЬ ПО
| Дано.НачалоПериода,
| Дано.КонецПериода,
| Дано.Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МИНИМУМ(Дано.НачалоПериода) КАК НачалоПериода,
| МАКСИМУМ(Дано.КонецПериода) КАК КонецПериода,
| Дано.Сотрудник
|ИЗ
| ДаноПлюс КАК Дано
|
|СГРУППИРОВАТЬ ПО
| ДОБАВИТЬКДАТЕ(Дано.КонецПериода, ДЕНЬ, -Дано.Интеграл),
| Дано.Сотрудник";
|
|