仓库管理中任意时间段商品分类明细账结存的问题(300分)

D

DJ.

Unregistered / Unconfirmed
GUEST, unregistred user!
表:出库入库流
品名 规格 日期 出入 编号 单价 数量
a aa 2002-01-01 1 0001 10 10
b bb 2002-01-02 1 0002 5 20
a aa 2002-02-01 -1 0001 5 5
b bb 2002-02-02 -1 0002 5 10
...

结果:
品名 规格 日期 编号 摘要 单价 入库数量 入库金额 出库数量 出库金额 结存数量 结存金额
上期结转 0 0
a aa 2002-01-01 入0001 10 10 100 10 100
a aa 2002-02-01 出0001 5 5 25 5 75
...

结存数量和结存金额如何处理?
 
必须按自然扎帐周期(如月、半月、季等)转录。

结存数量=上期结存+本月入库-本月出库,因为能推出来,所以表中可不保留。
结存金额=结存数量*单价(如果是浮动价,建议不要把金额和库存放在一起)
 
比较多一些,找本基本的会计入门就行
 
谢谢二位。
我的Procedure是这样的
CREATE PROCEDURE mysp_mxz
@id int,@rq1 datetime,@rq2 datetime,@jcsl int output,@jcje money output
AS
select @jcsl=IsNull(sum(出入*数量),0),
@jcje=IsNull(sum(出入*数量*批发价),0)
from 商品出入流 where 商品id=@id and 日期<@rq1

select 日期=@rq1,
字=' ',
编号=' ',
摘要='上期结转',
单价=0,
增加数量=0,
增加金额=0,
减少数量=0,
减少金额=0
union
select 日期,
字=case when 出入=1 then '入' else '出' end,
编号,
摘要=类别,
单价=批发价,
增加数量=case when 出入=1 then 数量 else 0 end,
增加金额=case when 出入=1 then 数量*批发价 else 0 end,
减少数量=case when 出入=-1 then 数量 else 0 end,
减少金额=case when 出入=-1 then 数量*批发价 else 0 end
from 商品出入流 where 商品id=@id and 日期>=@rq1 and 日期<=@rq2
order by 日期

rq1前的结存数量、金额可以得到,问题是结果每一行的结存怎么得到
好象RB可以在打印的时候输出来,可我想在DBGrid中显示
用临时表或cursor也许能行,可我不会,请高手不吝指教
 
输出建立临时表 ! 在临时表中计算 其他的问题就不是问题了 直接用 select 建立临时表就可以了 !


 
可在临时表中怎样计算呢?这个过程怎么写?另外Cursor怎么用?
还请半疯.半仙大侠指教,谢谢!
 
DJ:
我正在写一个和你一样的仓库库管理程序,和你聊聊好吗?
你的这个问题我解决了,
QQ:55357540
 
select a.品名,a.规格,a.日期,a.编号,a.摘要,a.单价,b.入库数量,b.入库金额,c.出库数量,c.结存数昊,d.结存金额 from
(select 品名,规格,日期,出入,编号,摘要,单价 from table1)a
(select 出入,编号,数量 as 入库数量,单价*数量 as 入库金额 from table1 where 出入>0)b,
(select 出入,编号,数量 as 出库数量,单价*数量 as 出库金额 from table1 where 出入<0)c,
(select 出入,编号,sum(数量) as 结存数,sum(单价*数量) as 结存金额 from table1 where 日期<日期)d
where a.出入=b.出入 and a.编号=b.编号 and a.出入=c.出入 and a.编号=c.编号 and a.出入=d.出入 and a.编号=d.编号
这样不知道行不行,没试过随便写写
 
我采用的是用一个临时的表来存放欲处理的数据,然后在统计
 
受大家的启发,我已经将经此问题以下面这个过程解决。
此过程没有按照一般的扎账周期做,而是任意时间区间的明细结果,
还希望大侠们多给些建议和意见。谢谢各位。
>>hurryman:
我还没有QQ,我的Email: dj.mail@163.com 有问题我们共同探讨好吗?

CREATE PROCEDURE mysp_mxz
@id int,@rq1 datetime,@rq2 datetime
AS

create Table #tmp_mxz
(id int IDENTITY,
日期 datetime,
字 char(2),
编号 char(10),
摘要 varchar(30),
单价 money,
增加数量 int,
增加金额 money,
减少数量 int,
减少金额 money,
结存数量 int,
结存金额 int
)

declare @jcsl int,@jcje money

select @jcsl=IsNull(sum(出入*数量),0),@jcje=IsNull(sum(出入*数量*批发价),0)
from 商品出入流 where 商品id=@id and 日期<@rq1

insert into #tmp_mxz (日期,字,编号,摘要,单价,增加数量,增加金额,减少数量,减少金额,结存数量,结存金额)
values (@rq1,' ',' ','上期结存',0,0,0,0,0,@jcsl,@jcje)

DECLARE MyCursor SCROLL CURSOR FOR

select 日期,
字=case when 出入=1 then '入' else '出' end,
编号,
摘要,
单价=批发价,
增加数量=case when 出入=1 then 数量 else 0 end,
增加金额=case when 出入=1 then 数量*批发价 else 0 end,
减少数量=case when 出入=-1 then 数量 else 0 end,
减少金额=case when 出入=-1 then 数量*批发价 else 0 end
from 商品出入流 where 商品id=@id and 日期>=@rq1 and 日期<=@rq2
order by 日期,-1*出入,编号

OPEN MyCursor

declare @rq datetime,@zi char(2),@bh char(10),@zy varchar(30),@djje money,@zjsl int,@zjje money,@jssl int,@jsje money

FETCH NEXT FROM MyCursor
INTO @rq,@zi,@bh,@zy,@djje,@zjsl,@zjje,@jssl,@jsje

WHILE @@FETCH_STATUS = 0
BEGIN
select @jcsl=@jcsl+@zjsl-@jssl,@jcje=@jcje+@zjje-@jsje
insert into #tmp_mxz (日期,字,编号,摘要,单价,增加数量,增加金额,减少数量,减少金额,结存数量,结存金额)
values (@rq,@zi,@bh,@zy,@djje,@zjsl,@zjje,@jssl,@jsje,@jcsl,@jcje)
FETCH NEXT FROM MyCursor
INTO @rq,@zi,@bh,@zy,@djje,@zjsl,@zjje,@jssl,@jsje
END

insert into #tmp_mxz (日期,字,编号,摘要,单价,增加数量,增加金额,减少数量,减少金额,结存数量,结存金额)
values (@rq2,' ',' ','本期结存',0,0,0,0,0,@jcsl,@jcje)

CLOSE MyCursor
DEALLOCATE MyCursor

select * from #tmp_mxz order by id

 
我对临时表的作用不太动,请有空 教一教
 
多人接受答案了。
 
顶部