gifts2017

Пример запроса к регистру, с группировкой по периодам, в которых не было движений

Опубликовал Алексей Булгаков (alvabul) в раздел Программирование - Практика программирования

На практике часто встречал ситуацию, когда надо получить данные (показатели) из регистра накопления "Остатки и обороты" с разворотам по периодом. В основном по месяцам. И должны выходить и те месяца, в которых движений по этому регистру не было. Путем проб, ошибок и поиска в интернете такой запрос получить удалось.

Ограничения данного запроса: яно надо указать максимальное число месяцев, по которым делается разворот.

Предположим 12 месяцев. Тогда: (параметры датанач и датакон 2012 год)

ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, ИтогЗапроса.Поле1) КАК Период
ПОМЕСТИТЬ врПериоды
ИЗ
	(ВЫБРАТЬ
		Календарь.Поле1 КАК Поле1
	ИЗ
		(ВЫБРАТЬ
			0 КАК Поле1
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			9
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			10
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			11) КАК Календарь
	ГДЕ
		Календарь.Поле1 
результатом данного запроса будет:
 
Период Месяц
 
01.01.2012 0:00:00
 
01.02.2012 0:00:00
 
01.03.2012 0:00:00
 
01.04.2012 0:00:00
 
01.05.2012 0:00:00
 
01.06.2012 0:00:00
 
01.07.2012 0:00:00
 
01.08.2012 0:00:00
 
01.09.2012 0:00:00
 
01.10.2012 0:00:00
 
01.11.2012 0:00:00
 
01.12.2012 0:00:00
 
Итог
 

 

Итак, мы получили список месяцов. Осталось только привязать их к регистру накопления:

 

ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, ИтогЗапроса.Поле1) КАК Период
ПОМЕСТИТЬ врПериоды
ИЗ
	(ВЫБРАТЬ
		Календарь.Поле1 КАК Поле1
	ИЗ
		(ВЫБРАТЬ
			0 КАК Поле1
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			9
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			10
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			11
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			12) КАК Календарь
	ГДЕ
		Календарь.Поле1 
Задача решена)

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Максим (maxkisa) 05.09.13 14:13
Во многих конфигурациях есть "Регламентированный производственный календарь". Проще его использовать, особенно когда детализация нужна более чем до месяца.
2. Ярослав Радкевич (WKBAPKA) 05.09.13 16:16
а что ПЕРИОДАМИ() уже не работает?
mikhailovaew; Spi1y; +2 Ответить 1
3. Дмитрий Егоров (Diego_Iv) 13.09.13 14:17
(2) WKBAPKA,
Если в периоде движений не было, то не работает.
Этот период просто пропущен будет.
4. Владимир Косов (mptt) 13.09.13 14:36
Похожая ситуация http://forum.infostart.ru/forum26/topic90743/
с РС. Решается очень просто,
как написал maxkisa с помошьяю
Регламентированный производственный календарь,
решение здесь http://infostart.ru/public/198281/
5. Алексей Булгаков (alvabul) 18.09.13 14:44
maxkisa и mptt - согласен! Так проще.