sp求解库存加权平均单价问题

火龙岛主 2006-05-18 09:56:29

表及其数据
create table crkmx(
bm varchar(16), --出入库编码
rq datetime, --日期
hp varchar(16), --货品
rkdj money, --入库单价
rkds money, --入库吨数
ckds money --出库吨数
)

bm rq hp rkdj rkds ckds
RK200605170001 2006-05-17 11:39:12.000 040002 100.0000000 5.0000 .000000
RK200605170002 2006-05-17 11:40:01.000 040002 200.0000000 10.0000 .000000
RK200605170003 2006-05-17 11:40:32.000 040002 500.0000000 8.0000 .000000
RK200605170004 2006-05-17 11:41:11.000 040002 800.0000000 2.0000 .000000
XS200605170001 2006-05-17 11:41:41.000 040002 .0000000000 0.0000 5.000000
XS200605170002 2006-05-17 11:41:54.000 040002 .0000000000 0.0000 5.000000
XS200605170003 2006-05-17 11:42:06.000 040002 .0000000000 0.0000 2.000000
RK200605170005 2006-05-17 11:44:12.000 040002 266.6666666 3.0000 .000000
XS200605170004 2006-05-17 11:45:54.000 040002 .0000000000 0.0000 5.000000

说明:如果有出库就可定没有入库的数值,也就是说出入库不存在对应关系

需要使用加权平均的方法得到货品的当前库存金额

加权单价(ckdj)=期初货款金额+入库金额/(期初数量+入库数量)

目标如下:
ckdj:出库单价, kcje:库存金额 kcds:库存吨数 qcje:期初金额
要求:使用视图或存储过程实现,不使用触发器和游标,以时序为准!

bm rq hp rkdj rkds ckds ckdj kcds kcje qcje
RK200605170001 2006-05-17 11:39:12.000 040002 100.0000000 5.0000 .000000 100.00 5.00 500.0000 0.0000
RK200605170002 2006-05-17 11:40:01.000 040002 200.0000000 10.0000 .000000 166.6667 15.00 2500.0000 500.0000
RK200605170003 2006-05-17 11:40:32.000 040002 500.0000000 8.0000 .000000 282.6087 23.00 6500.0000 2500.0000
RK200605170004 2006-05-17 11:41:11.000 040002 800.0000000 2.0000 .000000 324.0000 25.00 8100.0000 6500.0000
XS200605170001 2006-05-17 11:41:41.000 040002 .0000000000 0.0000 5.000000 324.0000 20.00 6480.0000 8100.0000
XS200605170002 2006-05-17 11:41:54.000 040002 .0000000000 0.0000 5.000000 324.0000 15.00 4680.0000 6480.0000
XS200605170003 2006-05-17 11:42:06.000 040002 .0000000000 0.0000 2.000000 324.0000 13.00 4212.0000 4680.0000
RK200605170005 2006-05-17 11:44:12.000 040002 266.6666667 3.0000 .000000 313.2499 16.00 5011.9998 4212.0000
XS200605170004 2006-05-17 11:45:54.000 040002 .0000000000 0.0000 5.000000 313.2499 11.00 3445.7489 5011.9998
...全文
1880 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjkarmon 2006-05-26
  • 打赏
  • 举报
回复
可以建一个货品的单价表,在每次入库时,判断入库单价是否与单价表的单价相等,若相等,则不用作计算,出库时不用计算。还有要注意当有入库单价为0时,则有可能出现负成本
eason2000 2006-05-21
  • 打赏
  • 举报
回复
to netup我是时空的技术人员
eason2000 2006-05-21
  • 打赏
  • 举报
回复
关于成本运算的问题一直就是进销存软件的难点.作为开发人员,你首先要对于业务过程中需要核算成本的环节进行分析.没有具体的思路,很难写出正确的运算过程的.
netcup 2006-05-20
  • 打赏
  • 举报
回复
eason2000(eason) ( ) 信誉:99
你的用的是SPKFJC,我的用的是HWSP.你用的CCERP还是V7?
给你发了短消息了,注意查看
昵称被占用了 2006-05-20
  • 打赏
  • 举报
回复
no
没移动也没加权,所有数据都只计算一次

昵称被占用了 2006-05-19
  • 打赏
  • 举报
回复
从你的算法看不是加权平均,而是简单平均


火龙岛主 2006-05-19
  • 打赏
  • 举报
回复
不知道各位大虾是动态处理,还是使用程序逐条计算控制处理!
火龙岛主 2006-05-19
  • 打赏
  • 举报
回复
更正:确切的说是移动加权平均算法!
火龙岛主 2006-05-18
  • 打赏
  • 举报
回复
这个问题使用UltraEdit编辑,察看会很完整!
eason2000 2006-05-18
  • 打赏
  • 举报
回复
如果需要完成存储过程,可以和我联系.
eason2000 2006-05-18
  • 打赏
  • 举报
回复
业务系统在运算成本的时候,关键是在设计流程的时候,要确定那几个环节需要重新计算成本.例如:采购环节,退补价环节等等.运算新的成本公式应该是这样的:成本=结存金额+本期入库金额/结存数量+入库数量.
我给你发一个存储过程,是用来核算库存成本的你可以看一下
update spkfjc
set spkfjc.kcshl=isnull(spkfjc.kcshl,0)+a.upshl,
spkfjc.kcje=isnull(spkfjc.kcje,0)+a.upje,
spkfjc.chbdj=case
when
(@djlx='JHA' or @djlx='CDB' or @djlx='CRK' or @djlx='ZRK') and
(a.upshl>0 or a.upshl<0) and (spkfjc.kcshl+a.upshl)<>0 and (spkfjc.kcje+a.upje)*(spkfjc.kcshl+a.upshl)>0 then
round((spkfjc.kcje+a.upje)/(spkfjc.kcshl+a.upshl),6)
when
@djlx='JHB' and (spkfjc.kcshl+a.upshl)<>0 and (spkfjc.kcje+a.upje)*(spkfjc.kcshl+a.upshl)>0 then
round((spkfjc.kcje+a.upje)/(spkfjc.kcshl+a.upshl),6)
when
(@djlx='JHA' or @djlx='CDB' or @djlx='CRK' or @djlx='ZRK') and
spkfjc.kcshl<0 and
spkfjc.kcshl+a.upshl>0 then
a.zgrkdj
when @djlx='CBD' and (spkfjc.kcshl+a.upshl)<>0 and (spkfjc.kcje+a.upje)*(spkfjc.kcshl+a.upshl)>0 then
round((spkfjc.kcje+a.upje)/(isnull(spkfjc.kcshl,0)+a.upshl),6)
else spkfjc.chbdj end,
spkfjc.zgjj=case when @djlx='JHA' and spkfjc.zgjj<a.zgrkdj then a.zgrkdj else spkfjc.zgjj end,
spkfjc.zdjj=case when (@djlx='JHA' and spkfjc.zdjj>a.zdrkdj) or spkfjc.zdjj=0 then a.zdrkdj else spkfjc.zdjj end,
spkfjc.zhjj=case when @djlx='JHA' then a.zgrkdj else zhjj end
from #t_sp a
where spkfjc.spid=a.spid
说明:jha,jhb等是相关业务的单据标识,kcshl 库存数量,kcje 库存金额,chbdj 成本单价,upshl 本次入库的数量,upje 本次入库的金额.
注意:在重新计算新成时,一定要有条件进行约束,不然会出现负成本

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧