行 FTran FQty FPrice FAmount
1 1 10 10 100
2 1 15 8 120
3 5 8 8.8 70.4
4 5 10 8.8 88
可以看出行1已经出完了,行2还剩下数量FQty=7,单价FPrice=8,金额FAmount=7*8=56为什么入库(100+120)不等于出库(70.4+88)加上剩余(56)???
1 1 10 10 100
2 1 15 8 120
3 5 8 8.8 70.4
4 5 10 8.8 88
可以看出行1已经出完了,行2还剩下数量FQty=7,单价FPrice=8,金额FAmount=7*8=56为什么入库(100+120)不等于出库(70.4+88)加上剩余(56)???
解决方案 »
- timestamp用途?
- 专家精讲:MySQL4.1的字符集讲解
- 关于用SQL中英文混合字符截取的问题。
- 今天安装测试工具QC,安装的时候连接数据库时候老是连接不上,我的数据库是SQL server 2005的,同学们都连接起了他们是SQL server 2000
- 一条简单的SQL我写不对。。。。。。
- 求某个点某个距离点的经纬度范围值
- 问关于 视图 的问题,麻烦大家相助!
- 级联,是什么东西?
- reporting service 导出Excel时的背景色问题
- SQL Server 2000数据库的内容怎么转到SQL Server 2008里面
- 我想把一加运算符号(+,-,*,/)存到数据库里,但如何把它取出来后还能当运算符使用??
- 幫幫忙,恢復置凝數據庫
---------------------------
因为我不知道你的表中有没有可以标识唯一行的,
若有的话,你可以直接用一个UPDATE语句来实现
@首先,出入是否是平衡的?
3、4出库是按照1、2入库均价来出的,是否可以理解出库价格是库存均价?
那么剩余7×8.8=61.6
5要30没法马上出库,等6来了50就可以出了,这时价格计算让人糊涂
FPrice=[(7*8)+(30-7)*10]/(7+23)=9.53
如果出入平衡,为什么不是
(7×8.8+50×10)÷57=9.85
◎如果要考虑货物批次的话,3出的货1来提供,3的FPrice为什么不是10,2的就应该是(2×10+8×8)÷10=8.4
◎再如果说,当出货缺货时才考虑货物批次的问题,
怎么知道5出货中的7是2进的呢,为什么不是1进的,价格为什么不是
FPrice=[(7*10)+(30-7)*10]/(7+23)=10
◎如果说出货价格是出货的入价的均价最低价,这样5的出货价格可以解释,那么3出货就应该选2的入货,出价为8了,4就应该用2和1的均价(7×8+3×10)÷10=8.6了
◎不管怎么说,我觉得这个帐不平衡
(
D_code char(11) default '', --入库单号
rq char(10) default '', --入库日期
flag char(2) default '否', --标志 但出库数量达到后就回写为 ‘是’,入库时是'否'
FQty dec(14,2) default '', --数量
fprice dec(14,2) default '', --单价
famount dec(14,2) default '' --金额
)
create table ck --出库
(
D_code char(11) default '', --入库单号
--flag char(2) default '', --标志
FQty dec(14,2) default '', --数量
fprice dec(14,2) default '', --单价
famount dec(14,2) default '' --金额
)
/*以下存储过程针对出库*/SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GOCREATE PROCEDURE PROC_CK
@D_CODE CHAR(11),
@FQty dec(14,2)AS --- DECLARE @ERRCODE INTEGER SET @ERRCODE = 10000 DECLARE @RETURN INTEGER
SET @RETURN = 0---DECLARE @TRAN_POINT INTSET @TRAN_POINT = @@TRANCOUNTIF @TRAN_POINT = 0 BEGIN TRAN TRAN_CK
ELSE
SAVE TRAN TRAN_CK
declare @shl dec(14,2),
declare @dj dec(14,2)select @shl= sum(fqty),@dj=(sum(famount)/sum(FQty)) from rk where flag ='否'if @@error <> 0 begin
set @return= 2
goto err_lab
endif @FQty>@shlbegin inset into ck values(@D_code,@FQty,0,0) end
if @@error <> 0 begin
set @return =3
goto err_lab
endif @fqty = @shl begin insert into ck values(@D_code,@FQty,@shl,@shl*@dj) update ck set flag='是' where flag='否' --回写标志 endif @@error <>0 begin
set @return = 4
goto err_lab
end/* 循环从第一条开始,直到让fqty 消耗为0if @FQty < @shl begin
declare @sl dec(14,2)
select @sl=fdty from rk where flag='否' order by rq */--IF @TRAN_POINT =0
COMMIT TRAN TRAN_CK
GOTO RETURN_LAB
ERR_LAB:
IF @RETRUN<100 SET @RETURN = @ERRCODE + @ERRCODEROLLBACK TRAN TRAN_CKRETURN_LAB:RETURN @RETURNGOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ON
GO ---
不好意思,还有当出库数据 小于入库的数量时,进行计算的循环没有写。
没时间了,我要搬家! 明天有空补上
是过一段时间再计算出来得
5中的出价FPrice=[(7*8)+(30-7)*10]/(7+23)=9.53 显然不是存货的加权平均吧
可能是我表达不好
我的意思就是要根据移动平均法算出出库的单价???
难道你们没看清楚吗?移动平均法啊,
到现在还没有解决出来,闷ing
(
D_code char(11) default '', --入库单号
rq char(10) default '', --入库日期
flag char(2) default '否', --标志 但出库数量达到后就回写为 ‘是’,入库时是'否'
FQty dec(14,2) default '', --数量
fprice dec(14,2) default '', --单价
famount dec(14,2) default '' --金额
)
create table ck --出库
(
D_code char(11) default '', --入库单号
--flag char(2) default '', --标志
FQty dec(14,2) default '', --数量
fprice dec(14,2) default '', --单价
famount dec(14,2) default '' --金额
)
/*以下存储过程针对出库*/SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GOCREATE PROCEDURE PROC_CK
@D_CODE CHAR(11),
@FQty dec(14,2)AS --- DECLARE @ERRCODE INTEGER SET @ERRCODE = 10000 DECLARE @RETURN INTEGER
SET @RETURN = 0---DECLARE @TRAN_POINT INTSET @TRAN_POINT = @@TRANCOUNTIF @TRAN_POINT = 0 BEGIN TRAN TRAN_CK
ELSE
SAVE TRAN TRAN_CK
declare @shl dec(14,2),
declare @dj dec(14,2)select @shl= sum(fqty),@dj=(sum(famount)/sum(FQty)) from rk where flag ='否'if @@error <> 0 begin
set @return= 2
goto err_lab
endif @FQty>@shlbegin inset into ck values(@D_code,@FQty,0,0) end
if @@error <> 0 begin
set @return =3
goto err_lab
endif @fqty = @shl begin insert into ck values(@D_code,@FQty,@shl,@shl*@dj) update ck set flag='是' where flag='否' --回写标志 endif @@error <>0 begin
set @return = 4
goto err_lab
end/* 循环从第一条开始,直到让fqty 消耗为0if @FQty < @shl begin
declare @sl dec(14,2)
select @sl=fdty from rk where flag='否' order by rq */--IF @TRAN_POINT =0
COMMIT TRAN TRAN_CK
GOTO RETURN_LAB
ERR_LAB:
IF @RETRUN<100 SET @RETURN = @ERRCODE + @ERRCODEROLLBACK TRAN TRAN_CKRETURN_LAB:RETURN @RETURNGOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ON
GO ---
不好意思,还有当出库数据 小于入库的数量时,进行计算的循环没有写。
没时间了,我要搬家! 明天有空补上