Доброго времени суток, коллеги. У меня возникла задача - разбить запросом записи периодического регистра сведений по интервалам. Возможно кому то будет интересно решение подобной задачи.
Покажу решение на примере регистра "История изменения уровней", в моем случае в нем можно для каждого элемента из справочника "Должности" задать уровень на любой период. Для примера использовал каркасную конфигурацию.
ВЫБРАТЬ
ИсторияИзмененияУровней.Должность КАК Должность,
ИсторияИзмененияУровней.Уровень КАК Уровень,
ИсторияИзмененияУровней.Период КАК Период
ПОМЕСТИТЬ ВТУровни
ИЗ
РегистрСведений.ИсторияИзмененияУровней КАК ИсторияИзмененияУровней
ГДЕ
ИсторияИзмененияУровней.Период <= &КонецПериода
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТУровни.Должность КАК Должность,
МАКСИМУМ(ВТУровни.Период) КАК Период
ПОМЕСТИТЬ ВтМаксимальныеПериод
ИЗ
ВТУровни КАК ВТУровни
СГРУППИРОВАТЬ ПО
ВТУровни.Должность
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТУровни.Должность КАК Должность,
ВТУровни1.Период КАК НачалоПериода,
МИНИМУМ(ДОБАВИТЬКДАТЕ(ВТУровни.Период, СЕКУНДА, -1)) КАК КонецПериода
ПОМЕСТИТЬ ВТПЕРИОДЫ
ИЗ
ВТУровни КАК ВТУровни
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУровни КАК ВТУровни1
ПО ВТУровни.Должность = ВТУровни1.Должность
И ВТУровни.Период > ВТУровни1.Период
СГРУППИРОВАТЬ ПО
ВТУровни.Должность,
ВТУровни1.Период
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВтМаксимальныеПериод.Должность,
ВтМаксимальныеПериод.Период,
ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
ИЗ
ВтМаксимальныеПериод КАК ВтМаксимальныеПериод
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУровни КАК ВТУровни1
ПО ВтМаксимальныеПериод.Должность = ВТУровни1.Должность
И ВтМаксимальныеПериод.Период = ВТУровни1.Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТПЕРИОДЫ.Должность КАК Должность,
ВТПЕРИОДЫ.НачалоПериода КАК НачалоПериода,
КОНЕЦПЕРИОДА(ВТПЕРИОДЫ.КонецПериода, ДЕНЬ) КАК КонецПериода,
ВТУровни.Уровень КАК Уровень
ИЗ
ВТПЕРИОДЫ КАК ВТПЕРИОДЫ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУровни КАК ВТУровни
ПО ВТПЕРИОДЫ.Должность = ВТУровни.Должность
И ВТПЕРИОДЫ.НачалоПериода = ВТУровни.Период
Сделал небольшой пример. Вот какие записи есть в регистре.
Вот результат выполнения запроса.
Тестировал на "Каркасная конфигурация для сдачи экзамена "1С:Специалист" по платформе "1С:Предприятие 8" (1.0.0.3)".