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


1C++ форева!

Сообщений: 9
Местоположение: Волгоград
Зарегистрирован: 17. Августа 2010
Пол: Мужской
Выбрать запросом остатки по дням
09. Августа 2011 :: 13:51
Печать  
Добрый день!
Подскажите пожалуйста как выбрать прямым запросом остатки ТМЦ за период? Остатки и обороты виртуальной таблицы дает остатки только там где было движение, остатки только за конкретный день. Или расскажите где можно прочитать?
  

Интернет как жизнь - смысла нет, а уходить не хочется...&&
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Выбрать запросом остатки по дням
Ответ #1 - 09. Августа 2011 :: 13:57
Печать  
Если нужно за каждый день, то левое соединение с табличкой дат тебе в помощь.
  
Наверх
 
IP записан
 
marvel
YaBB Newbies
*
Отсутствует


1C++ форева!

Сообщений: 9
Местоположение: Волгоград
Зарегистрирован: 17. Августа 2010
Пол: Мужской
Re: Выбрать запросом остатки по дням
Ответ #2 - 10. Августа 2011 :: 05:23
Печать  
можно ли создать таблицу дат по рабочему календарю?
« Последняя редакция: 10. Августа 2011 :: 10:48 - marvel »  

Интернет как жизнь - смысла нет, а уходить не хочется...&&
Наверх
 
IP записан
 
marvel
YaBB Newbies
*
Отсутствует


1C++ форева!

Сообщений: 9
Местоположение: Волгоград
Зарегистрирован: 17. Августа 2010
Пол: Мужской
Re: Выбрать запросом остатки по дням
Ответ #3 - 11. Августа 2011 :: 10:56
Печать  
   |select
         |    p.День AS День,
         |    ost.Номенклатура AS[Номенклатура $Справочник.Номенклатура],
           |       ost.Склад AS [Склад $Справочник.Склады],
         |    sum(ost.КоличествоКонечныйОстаток) AS  КоличествоКонОст 
         |from
         |    #tmp_dates as p
         |left join
         |    $РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаНач,:ДатаКон~,ДЕНЬ,,,(Номенклатура in (Select val from #СписокНоменклатуры)),(Номенклатура,Склад),(Количество)) as ost
         |on
         |    p.День = ost.Период
         |group by ost.Номенклатура,ost.Склад,p.День
         |order by ost.Номенклатура,ost.Склад,p.День
все таки выбирает остатки там где были движения.
Никто не делал по остаткам на каждый день?
  

Интернет как жизнь - смысла нет, а уходить не хочется...&&
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Выбрать запросом остатки по дням
Ответ #4 - 11. Августа 2011 :: 11:02
Печать  
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Выбрать запросом остатки по дням
Ответ #5 - 11. Августа 2011 :: 11:04
Печать  
оттуда
Цитата:
1.07.018 от 26.09.10 г.
- Изменен параметр «Периодичность» ВТ «РегистрОстаткиОбороты» и «БИОстаткиОбороты». Добавлена возмозможность указывать необходимость дополнения таблицы всеми периодами независимо от наличия и отсутствия остатков и/или движений.
  

1&&2&&3
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Выбрать запросом остатки по дням
Ответ #6 - 15. Августа 2011 :: 13:06
Печать  
marvel писал(а) 11. Августа 2011 :: 10:56:
  |select
         |    p.День AS День,
         |    ost.Номенклатура AS[Номенклатура $Справочник.Номенклатура],
           |       ost.Склад AS [Склад $Справочник.Склады],
         |    sum(ost.КоличествоКонечныйОстаток) AS  КоличествоКонОст  
         |from
         |    #tmp_dates as p
         |left join
         |    $РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаНач,:ДатаКон~,ДЕНЬ,,,(Номенклатура in (Select val from #СписокНоменклатуры)),(Номенклатура,Склад),(Количество)) as ost
         |on
         |    p.День = ost.Период
         |group by ost.Номенклатура,ost.Склад,p.День
         |order by ost.Номенклатура,ost.Склад,p.День
все таки выбирает остатки там где были движения.
Никто не делал по остаткам на каждый день?



по идее примерно так:
Код
Выбрать все
	//{таблица остатки-обороты
	Т = "
	|set nocount on
	|
	|create table #ОстаткиОбороты(
	|	Период datetime
	|	, Номенклатура char(9)
	|	, Склад char(9)
	|	, Количество numeric(38,3)
	|	,primary key clustered (Номенклатура, Склад, Период))
	|
	|insert into #ОстаткиОбороты
	|select
	|	Период
	|	, Номенклатура
	|	, Склад
	|	, sum(Количество) Количество
	|from (
	|	select
	|		:НачДата~~ Период
	|		,Номенкладтура
	|		,Склад
	|		,КоличествоОстаток Количество
	|	from
	|		$РегистрОстатки.ОстаткиТМЦ(:НачДата
	|			,
	|
	|			,(Номенклатура in (Select val from #СписокНоменклатуры))
	|			,(Номенклатура,Склад)
	|			,(Количество)
	|			) as Итогов
	|
	|	union all
	|
	|	select
	|		Период
	|		,Номенкладтура
	|		,Склад
	|		,КоличествоПриход-КоличествоРасход Количество
	|	from $РегистрОбороты.ОстаткиТМЦ(:НачДата,:КонДата~,День
	|		,
	|
	|		,(Номенклатура in (Select val from #СписокНоменклатуры))
	|		,(Номенклатура,Склад)
	|		,(Количество)) as Итогов
	|	  ) as Итогов
	|
	|group by
	|	Период
	|	, Номенклатура
	|	, Склад
	|
	|order by
	|	Номенклатура
	|	, Склад
	|	, Период
	|";
	глРекордСет.ВыполнитьИнструкцию(Т);
	//}
	//{таблица периоды
	Т = "
	|
	|create table #Периоды (Период datetime primary key)
	|";
	глРекордСет.ВыполнитьИнструкцию(Т);
	Т = "
	|
	|insert into #Периоды
	|";
	Для х = Дата1 По Дата2 Цикл
		Т = Т + ?(х = Дата1,"","
		|union all ")+ "select '"+Формат(х,"ДГГГГММДД")+"'";
	КонецЦикла;
	глРекордСет.ВыполнитьИнструкцию(Т);
	//}
	//{дополнение таблицы остатки-обороты периодами
	Т = "
	|
	|create table #ЗапасСредний(
	|	Период datetime
	|	, Номенклатура char(9)
	|	, Склад char(9)
	|	, Количество numeric(38,3)
	|	,primary key clustered (Номенклатура, Склад, Период)
	|)
	|
	|insert into #ЗапасСредний
	|select
	|	crosstable.Период
	|	,crosstable.Номенклатура,crosstable.Склад
	|	, isnull(vt_totalreg.Количество,0) Количество
	|from
	|	(select Период Период
	|		,vt_def.Номенклатура,vt_def.Склад
	|	from #Периоды as datetable
	|	cross join (select distinct Номенклатура,Склад from #ОстаткиОбороты) as vt_def
	|	) as crosstable
	|left join #ОстаткиОбороты as vt_totalreg
	|	on crosstable.Период = vt_totalreg.Период
	|	and crosstable.Номенклатура = vt_totalreg.Номенклатура
	|	and crosstable.Склад = vt_totalreg.Склад
	|
	|drop table #ОстаткиОбороты
	|drop table #Периоды
	|";
	глРекордСет.ВыполнитьИнструкцию(Т);
	//}
	//{получение остатка на каждый период
	Т = "
	|declare @Номенклатура char(9)
	|declare @Склад char(9)
	|
	|declare @Количество numeric(38,3)
	|
	|update #ЗапасСредний
	|set
	|	@Количество = Количество = case when @Номенклатура = Номенклатура and @Склад = Склад then @Количество + Количество else Количество end
	|	,@Номенклатура = Номенклатура
	|	,@Склад = Склад
	|
	|";
	глРекордСет.ВыполнитьИнструкцию(Т);
	глРекордСет.ВыполнитьИнструкцию("select * trom #ЗапасСредний"); 

  
Наверх
IP записан
 
marvel
YaBB Newbies
*
Отсутствует


1C++ форева!

Сообщений: 9
Местоположение: Волгоград
Зарегистрирован: 17. Августа 2010
Пол: Мужской
Re: Выбрать запросом остатки по дням
Ответ #7 - 23. Августа 2011 :: 16:03
Печать  
villy, большое спасибо! Сам бы долго думал!
  

Интернет как жизнь - смысла нет, а уходить не хочется...&&
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Выбрать запросом остатки по дням
Ответ #8 - 24. Августа 2011 :: 04:50
Печать  
Табличку дат попроще можно слепить.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать