Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запрос к регистру остатков с группировкой по дням (число прочтений - 1985 )
yam
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 13. Сентября 2011
Запрос к регистру остатков с группировкой по дням
13. Сентября 2011 :: 12:56
Печать  
Задача состоит в том, чтобы получить остатки товаров по дням.

В базе есть файл periody.dbf, в котором хранятся все даты с 2007 по 2015 год.

Пишу так:
Код
Выбрать все
	ТекстЗапросаПрямой="
	|SELECT
	|	Рег.Товар as [Товар $Справочник.Номенклатура],
	|	Рег.Период Период,
	|	SUM(Рег.Количество) as Количество
	|FROM
	|	(SELECT
	|		$Р.Номенклатура as Товар,
	|		$Р.Количество as Количество,
	|		jr.date as Период
	|	FROM $Регистр.ОстаткиТМЦ as Р
	|	INNER JOIN
	|		1sjourn jr ON (Р.iddoc = jr.iddoc)
	|			AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)  
	|			AND ($ФлагРегистра.ОстаткиТМЦ = 1)
	|	UNION ALL
	|	SELECT
	|		$Р.Номенклатура AS Товар,
	|		$Р.Количество * (1 - Р.debkred * 2) AS Количество,  
	|		jr.date as Период
	|	FROM
	|		$Регистр.ОстаткиТМЦ AS Р    
	|	INNER JOIN
	|		1sjourn jr ON Р.iddoc = jr.iddoc
	|			AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
	|			AND ($ФлагРегистра.ОстаткиТМЦ = 1)      
	|LEFT Join
	|   Periody as f ON f.DATE = jr.date
	|	) as Рег    
	|HAVING SUM(Рег.Количество)<>0
	|GROUP BY
	|	Рег.Товар,
	|	Рег.Период ";
 



Получается не то, что хочу, а хочу, чтобы была дата, затем остаток товара с количеством, потом следующая дата и т.д.
Подскажите, пожалуйста, что делаю не так?

PS: 1С++ установил вчера, не пинайте сильно))
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к регистру остатков с группировкой по дням
Ответ #1 - 13. Сентября 2011 :: 13:02
Печать  
Ну как тебе сказать, всё не верно. Начиная с неверного получения остатков и заканчивая присоединением таблички дат.

Для получения останков на дату нужно взять итоги с таблички итогов для даты=дата ближайшего итога (не обязательно=начала месяца, лучше делать универсально, для любой периодичности хранения останков) + прибавить движения от последнего итога до нужной даты из таблички движений регистра.

А для получения останков на каждый день, нужно делать запрос к табличке с датами и к ней уже присоединять останки.
  
Наверх
 
IP записан
 
yam
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 13. Сентября 2011
Re: Запрос к регистру остатков с группировкой по дням
Ответ #2 - 13. Сентября 2011 :: 13:13
Печать  
Спасибо, щас подумаю)
  
Наверх
 
IP записан
 
yam
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 13. Сентября 2011
Re: Запрос к регистру остатков с группировкой по дням
Ответ #3 - 13. Сентября 2011 :: 13:22
Печать  
ок, вот родил запрос для остатков
Код
Выбрать все
	ТекстЗапросаПрямой="
	|SELECT
	|	Рег.Товар as [Товар $Справочник.Номенклатура],
	|	SUM(Рег.Количество) as Количество
	|FROM
	|	(SELECT
	|		$Р.Номенклатура as Товар,
	|		$Р.Количество as Количество
	|	FROM $РегистрИтоги.ОстаткиТМЦ as Р
	|	WHERE Р.period = :ПредМесяц~~
	|	UNION ALL
	|	SELECT
	|		$Р.Номенклатура AS Товар,
	|		$Р.Количество * (1 - Р.debkred * 2) AS Количество
	|	FROM
	|		$Регистр.ОстаткиТМЦ AS Р
	|	INNER JOIN
	|		1sjourn jr ON Р.iddoc = jr.iddoc
	|			AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
	|			AND ($ФлагРегистра.ОстаткиТМЦ = 1)
	|	) as Рег
	|HAVING SUM(Рег.Количество)<>0
	|GROUP BY
	|	Рег.Товар
	|";
 



Запрос к файлу с датами в общем виде такой:
select peryody.date
Но как их соединить? По какому полю?
Я так думаю, что в основном запросе где-то должны быть даты на начало, даты движений, даты конца, так?
  
Наверх
 
IP записан
 
yam
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 13. Сентября 2011
Re: Запрос к регистру остатков с группировкой по дням
Ответ #4 - 13. Сентября 2011 :: 13:23
Печать  
yam писал(а) 13. Сентября 2011 :: 13:22:
ок, вот родил запрос для остатков
Код
Выбрать все
	ТекстЗапросаПрямой="
	|SELECT
	|	Рег.Товар as [Товар $Справочник.Номенклатура],
	|	SUM(Рег.Количество) as Количество
	|FROM
	|	(SELECT
	|		$Р.Номенклатура as Товар,
	|		$Р.Количество as Количество
	|	FROM $РегистрИтоги.ОстаткиТМЦ as Р
	|	WHERE Р.period = :ПредМесяц~~
	|	UNION ALL
	|	SELECT
	|		$Р.Номенклатура AS Товар,
	|		$Р.Количество * (1 - Р.debkred * 2) AS Количество  
	|	FROM
	|		$Регистр.ОстаткиТМЦ AS Р    
	|	INNER JOIN
	|		1sjourn jr ON Р.iddoc = jr.iddoc
	|			AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
	|			AND ($ФлагРегистра.ОстаткиТМЦ = 1)
	|	) as Рег    
	|HAVING SUM(Рег.Количество)<>0
	|GROUP BY
	|	Рег.Товар
	|";
 



Запрос к файлу с датами в общем виде такой:
Код
Выбрать все
select peryody.date 


Но как их соединить? По какому полю?
Я так думаю, что в основном запросе где-то должны быть даты на начало, даты движений, даты конца, так?

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать