Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Непонятка с получением остатков по регистру (число прочтений - 2290 )
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Непонятка с получением остатков по регистру
04. Сентября 2006 :: 14:22
Печать  
Проблема в следующем. Формируем отчет за период с 05.08.05 по 04.09.06. За этот период в движениях есть два документа: первый от 29.08.06, который сделал приход по регистру, второй от 03.09.06, который сделал расход по регистру. В итоге на 04.09.06 должно быть 0 и на начало периода должно быть 0. А получается что и начальный и конечный остаток отличный от нуля. Вторая проблема в том, что если не установить фильтр "Рег.ВидДокумента <> 0", то тогда итоги задваиваются. Используется компонента версии 2.0.3.1.

Запрос по движениям получает две записи:
XX6W         20060903AJSESG  XX72         22049      .00000      1.00000
XX6W         2006082993ZWVK  XX71         22048      1.00000      .00000

Запрос по остаткам возвращает 0 записей.
Теперь самое интересное. Во временную таблицу вставляется следующее:
Код
Выбрать все
exec sp_execute 203, '  XX6W   ', '20060903AJSESG  XX72   ', 22049, 1.00000, 0.00000, 1.00000, 0.00000
exec sp_execute 203, '  XX6W   ', '2006082993ZWVK  XX71   ', 22048, 0.00000, 1.00000, 0.00000, 1.00000 


Откуда оно берёт остаток на начало в первой записи и остаток на конец во второй?

Текст запроса:
Код
Выбрать все
SELECT
	Выборка.РезервТовараНачальныйОстаток as РезервТовараНачальныйОстаток,
	Выборка.РезервТовараПриход as РезервТовараПриход,
	Выборка.РезервТовараРасход as РезервТовараРасход,
	Выборка.РезервТовараКонечныйОстаток as РезервТовараКонечныйОстаток,
	Выборка.Заказ as [Заказ $Документ.ЗАКАЗ],
	Выборка.УровеньИтогов as УровеньИтогов
FROM
	(SELECT
	SUM(Рег.РезервТовараНачальныйОстаток) as РезервТовараНачальныйОстаток,
	SUM(Рег.РезервТовараПриход) as РезервТовараПриход,
	SUM(Рег.РезервТовараРасход) as РезервТовараРасход,
	SUM(Рег.РезервТовараКонечныйОстаток) as РезервТовараКонечныйОстаток,
	Рег.Заказ as Заказ,
	1 - (GROUPING(Рег.Заказ)) as УровеньИтогов
FROM
	$РегистрОстаткиОбороты.РезервыТоваровРеализация(:ВыбНачПериода, :ВыбКонПериода~,Документ,,,
	(Заказ IN ('  XX6W   ')),(Заказ),(РезервТовара)) as Рег
WHERE
	Рег.ВидДокумента <> 0
GROUP BY
	Рег.Заказ
WITH ROLLUP) as Выборка
ORDER BY
	Выборка.Заказ ASC,
	Выборка.УровеньИтогов ASC
 



  
Наверх
 
IP записан
 
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Re: Непонятка с получением остатков по регистру
Ответ #1 - 04. Сентября 2006 :: 14:24
Печать  
Лог запросов из Профайлера:
Код
Выбрать все
if exists(select * from tempdb..sysobjects where id = object_id('tempdb..#T448EFC1A5D2445558400C5070C0858B7'))
drop table #T448EFC1A5D2445558400C5070C0858B7
-----------------------------------------------------------------------------
select
ra22042_vt.sp22044 as Заказ,
j22042_vt.date_time_iddoc as ПозицияДокумента, j22042_vt.iddocdef as ВидДокумента,
sum(case when ra22042_vt.debkred = 0 then ra22042_vt.sp22045 else 0 end) as РезервТовараПриход,
sum(case when ra22042_vt.debkred = 1 then ra22042_vt.sp22045 else 0 end) as РезервТовараРасход
from ra22042 as ra22042_vt (nolock)
inner join _1sjourn as j22042_vt (nolock) on j22042_vt.iddoc = ra22042_vt.iddoc
where j22042_vt.date_time_iddoc > '20050805' and j22042_vt.date_time_iddoc < '200609049CK4K0  XX76  0'
and j22042_vt.rf22042 = 0x1
and ((ra22042_vt.sp22044 IN ('  XX6W   ')))
group by
ra22042_vt.sp22044,
j22042_vt.iddocdef, j22042_vt.date_time_iddoc
having
sum(case when ra22042_vt.debkred = 0 then ra22042_vt.sp22045 else 0 end) <> 0 or
sum(case when ra22042_vt.debkred = 1 then ra22042_vt.sp22045 else 0 end) <> 0
order by
Заказ,
ПозицияДокумента desc
-----------------------------------------------------------------------------
select
rg22042_vt.sp22044 as Заказ,
sum(rg22042_vt.sp22045) as РезервТовараОстаток
from rg22042 as rg22042_vt (nolock)
where rg22042_vt.period={d '2006-09-01'}
and ((rg22042_vt.sp22044 IN ('  XX6W   ')))
group by
rg22042_vt.sp22044
having
sum(rg22042_vt.sp22045) <> 0
order by
Заказ
-----------------------------------------------------------------------------
create table #T6D7F82B980EC40D8821EDEAE02C6B2A9 (
Заказ char(9),
ПозицияДокумента char(23), ВидДокумента int,
РезервТовараНачальныйОстаток numeric(38,5),
РезервТовараПриход numeric(38,5),
РезервТовараРасход numeric(38,5),
РезервТовараКонечныйОстаток numeric(38,5)
)
-----------------------------------------------------------------------------
SET FMTONLY ON select * from #T6D7F82B980EC40D8821EDEAE02C6B2A9 where 1=2 SET FMTONLY OFF
-----------------------------------------------------------------------------
declare @P1 int
set @P1=203
exec sp_prepare @P1 output, N'@P1 char(9),@P2 char(23),@P3 int,@P4 numeric(38,5),@P5 numeric(38,5),@P6 numeric(38,5),@P7 numeric(38,5)', N'insert #T6D7F82B980EC40D8821EDEAE02C6B2A9 values (@P1,@P2,@P3,@P4,@P5,@P6,@P7)', 1
select @P1
-----------------------------------------------------------------------------
exec sp_execute 203, '  XX6W   ', '20060903AJSESG  XX72   ', 22049, 1.00000, 0.00000, 1.00000, 0.00000
-----------------------------------------------------------------------------
exec sp_execute 203, '  XX6W   ', '2006082993ZWVK  XX71   ', 22048, 0.00000, 1.00000, 0.00000, 1.00000
-----------------------------------------------------------------------------
exec sp_unprepare 203
-----------------------------------------------------------------------------
SELECT
	Выборка.РезервТовараНачальныйОстаток as РезервТовараНачальныйОстаток,
	Выборка.РезервТовараПриход as РезервТовараПриход,
	Выборка.РезервТовараРасход as РезервТовараРасход,
	Выборка.РезервТовараКонечныйОстаток as РезервТовараКонечныйОстаток,
	Выборка.Заказ as [Заказ $Документ.ЗАКАЗ],
	Выборка.УровеньИтогов as УровеньИтогов
FROM
	(SELECT
	SUM(Рег.РезервТовараНачальныйОстаток) as РезервТовараНачальныйОстаток,
	SUM(Рег.РезервТовараПриход) as РезервТовараПриход,
	SUM(Рег.РезервТовараРасход) as РезервТовараРасход,
	SUM(Рег.РезервТовараКонечныйОстаток) as РезервТовараКонечныйОстаток,
	Рег.Заказ as Заказ,
	1 - (GROUPING(Рег.Заказ)) as УровеньИтогов
FROM
	#T6D7F82B980EC40D8821EDEAE02C6B2A9 as Рег
WHERE
	Рег.ВидДокумента <> 0
GROUP BY
	Рег.Заказ
WITH ROLLUP) as Выборка
ORDER BY
	Выборка.Заказ ASC,
	Выборка.УровеньИтогов ASC 

  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Непонятка с получением остатков по регистру
Ответ #2 - 27. Октября 2006 :: 10:51
Печать  
Что возвращает результирующий запрос?
Сколько в нем строк?
Если все гуд, то строк должно быть 2, 1 - остатки на первый документ,  2 - остатки на второй документ.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать