Разбиение запросом записей периодического регистра сведений по интервалам

04.01.21

Разработка - Запросы

Доброго времени суток, коллеги. У меня возникла задача - разбить запросом записи периодического регистра сведений по интервалам. Возможно, кому-то будет интересно решение подобной задачи. Покажу решение на примере регистра "История изменения уровней", в моем случае в нем можно для каждого элемента из справочника "Должности" задать уровень на любой период. Для примера использовал каркасную конфигурацию.   

 Доброго времени суток, коллеги. У меня возникла задача - разбить запросом записи периодического регистра сведений по интервалам. Возможно кому то будет интересно решение подобной задачи.
 Покажу решение на примере регистра "История изменения уровней", в моем случае в нем можно для каждого элемента из справочника "Должности" задать уровень на любой период. Для примера использовал каркасную конфигурацию.    

 
 Запрос к регистру "История изменения уровней"
ВЫБРАТЬ
	ИсторияИзмененияУровней.Должность КАК Должность,
	ИсторияИзмененияУровней.Уровень КАК Уровень,
	ИсторияИзмененияУровней.Период КАК Период
ПОМЕСТИТЬ ВТУровни
ИЗ
	РегистрСведений.ИсторияИзмененияУровней КАК ИсторияИзмененияУровней
ГДЕ
	ИсторияИзмененияУровней.Период <= &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТУровни.Должность КАК Должность,
	МАКСИМУМ(ВТУровни.Период) КАК Период
ПОМЕСТИТЬ ВтМаксимальныеПериод
ИЗ
	ВТУровни КАК ВТУровни

СГРУППИРОВАТЬ ПО
	ВТУровни.Должность
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТУровни.Должность КАК Должность,
	ВТУровни1.Период КАК НачалоПериода,
	МИНИМУМ(ДОБАВИТЬКДАТЕ(ВТУровни.Период, СЕКУНДА, -1)) КАК КонецПериода
ПОМЕСТИТЬ ВТПЕРИОДЫ
ИЗ
	ВТУровни КАК ВТУровни
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУровни КАК ВТУровни1
		ПО ВТУровни.Должность = ВТУровни1.Должность
			И ВТУровни.Период > ВТУровни1.Период

СГРУППИРОВАТЬ ПО
	ВТУровни.Должность,
	ВТУровни1.Период

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВтМаксимальныеПериод.Должность,
	ВтМаксимальныеПериод.Период,
	ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
ИЗ
	ВтМаксимальныеПериод КАК ВтМаксимальныеПериод
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУровни КАК ВТУровни1
		ПО ВтМаксимальныеПериод.Должность = ВТУровни1.Должность
			И ВтМаксимальныеПериод.Период = ВТУровни1.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТПЕРИОДЫ.Должность КАК Должность,
	ВТПЕРИОДЫ.НачалоПериода КАК НачалоПериода,
	КОНЕЦПЕРИОДА(ВТПЕРИОДЫ.КонецПериода, ДЕНЬ) КАК КонецПериода,
	ВТУровни.Уровень КАК Уровень
ИЗ
	ВТПЕРИОДЫ КАК ВТПЕРИОДЫ
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУровни КАК ВТУровни
		ПО ВТПЕРИОДЫ.Должность = ВТУровни.Должность
			И ВТПЕРИОДЫ.НачалоПериода = ВТУровни.Период

 

   Сделал небольшой пример. Вот какие записи есть в регистре.

   

Вот результат выполнения запроса. 




Тестировал на "Каркасная конфигурация для сдачи экзамена "1С:Специалист" по платформе "1С:Предприятие 8" (1.0.0.3)".

Запрос

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    184193    1024    403    

967

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

2 стартмани

06.02.2025    2174    17    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    5679    artemusII    11    

23

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    13090    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    8179    XilDen    36    

90

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3164    PROSTO-1C    0    

23

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    10764    user1840182    5    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kamisov 222 29.12.20 18:53 Сейчас в теме
Вот до чего людей доводит отсутствие курсоров!
2. PersianovMS 03.01.21 18:22 Сейчас в теме
Коллега, позволю себе несколько замечаний:
1. ДОБАВИТЬКДАТЕ(ИсторияИзмененияУровней.Период, СЕКУНДА, -1) КАК КонецПрошлогоПериода - это лишнее;
2.А вот добавление поля Уровень в ВТПериоды лишним бы не было, последний запрос не потребуется вовсе;
3.Какова периодичность регистра? Если День и более - зачем НачалоДня? Если меньше - применение НачалоДня и КонецДня может привести к дублям в результате.
Остальное - да, один из годных методов получения результата...
3. Andrei_Ivanov 185 04.01.21 19:30 Сейчас в теме
(2) Добрый день. Спасибо за комментарий.
1. Точно, я поправил этот момент. Зачем то оставил поле, которое не использую в дальнейшем.
2. Ввиду того, что поля в первом запросе объедения группируются по должностям и периодам, если я выношу в него уровень, я получаю некорректный результат. Приложил к сообщению файл с результатом запроса.
3. Периодичность - день. Правда, лишнее действие с началом периода. Также поправил.
Прикрепленные файлы:
Оставьте свое сообщение