最近设计库存数据表,入库、出库 有的说放在一起比较好;实时库存通过 月结库存表来 计算,
原本打算设计一个入库表(主从表)和一个出库表(主从表),有点犹豫,为了少走弯路,大家评
一下!
谢谢了!
原本打算设计一个入库表(主从表)和一个出库表(主从表),有点犹豫,为了少走弯路,大家评
一下!
谢谢了!
解决方案 »
- (vb.net)如何下载服务器端的excel文件,并在客户端打开?
- 我问我的牛B同事,牛B同事丢了一句,字符转义,就不里我了,我还是不懂
- Ajax问题
- 在treeView里如何取得节点等级以及它的父节点的数据?
- window.open()被阻止的问题
- 请问怎么用asp.net(C#)调用javabean组件?
- Repeater选择后的样式添加
- 在Response.Redirect中传递两个参变量?
- 急急急!哪位ASP高手可以幫我啊!誰能教教我啊!麻煩了!
- 在datagrid中显示数值的问题,帮忙啊各位
- 求,JS判断CheckBoxList是否被选中.代码.谢谢了..
- 用IHttpModule判断session权限时出现死循的问题?
·详情请访问:http://www.515dns.com
/*
先进先出处理-2-1
2000下,用表变量的方法
*/
/* 数据及结构
入库表数据
入库时间 数量 单价 商品ID
---------- ----------- ----------- -----------
2003.01.01 10 10 1
2003.01.05 20 15 1
2003.01.08 15 20 1
2003.01.05 20 15 2
2003.01.08 15 20 2
出库表数据
出库时间 数量 商品ID
---------- ----------- -----------
2003.01.02 5 1
2003.01.08 260 1
2003.01.08 26 2
要求查询结果
入库时间 数量 单价 商品ID
2003.1.1 5 10 1 对应出库 5
2003.1.1 5 10 1 对应出库 26
2003.1.5 20 15 1 对应出库 26
2003.1.8 1 20 1 对应出库 26
*/
--创建入库信息
declare @tbin table(时间 datetime,数量 int,单价 int,商品ID int)
insert into @tbin
select '2003.1.1',10,10,1
union all select '2003.1.5',20,15,1
union all select '2003.1.8',15,20,1
union all select '2003.1.5',20,15,2
union all select '2003.1.8',15,20,2
--创建出库信息
declare @tbout table(时间 datetime,数量 int,商品ID int)
insert into @tbout
select '2003.1.2',5,1
union all select '2003.1.8',260,1
union all select '2003.1.8',26,2
--创建更新表
declare @up table(inid int,outid int,入库时间 datetime,入库数量 int,单价 int,商品ID int,出库数量 int)
--创建结果表
declare @result table(id int identity(1,1),入库时间 datetime,数量 int,单价 int,商品ID int,对应出库 int)
--创建入库临时表
declare @in table(id int identity(1,1),时间 datetime,数量 int,单价 int,商品ID int)
insert into @in(时间,数量,单价,商品ID)
select 时间,数量,单价,商品ID
from @tbin
where 商品ID in(select 商品ID from @tbout)
order by 商品ID,时间
--创建出库临时表
declare @out table(id int identity(1,1),时间 datetime,数量 int,商品ID int,数量1 int)
insert into @out(时间,数量,商品ID,数量1)
select 时间,数量,商品ID,数量
from @tbout order by 商品ID,时间
while exists (select 1 from @out)
begin
if exists(select 1 from @in)
begin
delete from @up
insert into @up
select i.id,o.id,i.时间
,case when i.数量<o.数量 then i.数量 else o.数量 end
,i.单价,i.商品ID,o.数量1
from
(select * from @in a where id=(select min(id) from @in where 商品ID=a.商品ID)) i
,(select * from @out a where id=(select min(id) from @out where 商品ID=a.商品ID)) o
where i.商品ID=o.商品ID
insert into @result
select 入库时间,入库数量,单价,商品ID,出库数量 from @up
update @in set 数量=数量-b.入库数量
from @in a,@up b where a.id=b.inid
delete from @in where 数量=0
or 商品ID not in(select 商品ID from @out)
update @out set 数量=数量-b.入库数量
from @out a,@up b where a.id=b.outid
delete from @out where 数量=0
end
else
begin
--下面这句是增加出库数量>入库数量的记录,如果不需要,就删除此句
insert into @result(入库时间,数量,商品ID,对应出库)
select 时间,-数量,商品ID,数量1 from @out
--清除出库表,结束处理
delete from @out
end
end
select convert(varchar(10),入库时间,102) as 入库时间
,数量,单价,商品ID,对应出库
from @result order by 商品ID,入库时间
go
加权平均参考
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[td_purchase_s]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[td_purchase_s]
GO
CREATE TABLE [dbo].[td_purchase_s] (
[pssheetno] [char] (15) COLLATE Chinese_PRC_BIN NOT NULL ,--采购单号
[product] [char] (8) COLLATE Chinese_PRC_BIN NOT NULL ,商品编号
[pus_specs] [char] (10) COLLATE Chinese_PRC_BIN NOT NULL ,
[specs_per] [decimal](4, 0) NOT NULL ,
[unit] [char] (4) COLLATE Chinese_PRC_BIN NOT NULL ,--单位
[price] [decimal](8, 2) NOT NULL , --进货价格
[pus_cost] [decimal](10, 4) NOT NULL ,
[fa_cost] [decimal](10, 4) NOT NULL ,--财务成本
[presents] [char] (8) COLLATE Chinese_PRC_BIN NULL ,
[pur_m] [decimal](3, 0) NULL ,
[free_n] [decimal](2, 0) NULL ,
[pus_amt] [decimal](7, 2) NULL ,--进货数量
[pres_amt] [decimal](7, 2) NULL ,
[fact_amt] [decimal](7, 2) NULL ,
[total_amt] [decimal](7, 2) NULL ,
[ff_amt] [decimal](7, 2) NULL ,
[ff_sumamt] [decimal](7, 2) NULL ,
[spec_dis] [decimal](4, 2) NULL ,--特别折扣
[normal_dis] [decimal](4, 2) NULL ,--正常折扣
[commission] [decimal](7, 2) NULL ,商品回拥
[promo_sum] [decimal](7, 2) NULL ,--特价优惠额
[promo_way] [bit] NOT NULL ,--优惠方式
[pur_tax] [decimal](4, 2) NULL ,--进项税率
[sale_tax] [decimal](4, 2) NULL ,--销项税率
[ven_price] [decimal](8, 2) NULL ,
[back_cost] [decimal](10, 4) NULL ,--退货成本
[saleprice] [decimal](9, 2) NULL ,--销售价格
[shelf] [char] (8) COLLATE Chinese_PRC_BIN NULL
) ON [PRIMARY]
GO
@arc
1-经销商品
2-代销商品
3-代理商品
4-物料商品
CREATE procedure tdsp_purcost
(@purprice numeric (8,2),@normaldis numeric(4,2),@specdis numeric(4,2),@commision numeric(7,2),
@promosum numeric(7,2),@promoway bit,@arc tinyint,@purcost numeric(10,4) output)
with recompile,encryption
as
select @purprice=isnull(@purprice,0)
select @normaldis=isnull(@normaldis,0)
select @specdis=isnull(@specdis,0)
select @commision=isnull(@commision,0)
select @promosum=isnull(@promosum,0)
select @promoway=isnull(@promoway,1)
select @arc=isnull(@arc,1)
if @arc>4
begin
raiserror("错误算法标志",16,1)
return
end
select @promoway=isnull(@promoway,1)
if @promoway=0
begin
if @arc=1
begin
select @purcost=(@purprice*(1-@normaldis/100-@specdis/100)-@commision)-@promosum
end
if @arc=2
begin
select @purcost=(@purprice*(1-@normaldis/100)*(1-@specdis/100)-@commision)-@promosum
end
if @arc=3
begin
select @purcost=(@purprice-@commision)*(1-@normaldis/100-@specdis/100)-@promosum
end
if @arc=4
begin
select @purcost=(@purprice-@commision)*(1-@normaldis/100)*(1-@specdis/100)-@promosum
end
return
end
else
begin
if @arc=1
begin
select @purcost=(@purprice*(1-@normaldis/100-@specdis/100)-@commision)*(1-@promosum/100)
end
if @arc=2
begin
select @purcost=(@purprice*(1-@normaldis/100)*(1-@specdis/100)-@commision)*(1-@promosum/100)
end
if @arc=3
begin
select @purcost=(@purprice-@commision)*(1-@normaldis/100-@specdis/100)*(1-@promosum/100)
end
if @arc=4
begin
select @purcost=(@purprice-@commision)*(1-@normaldis/100)*(1-@specdis/100)*(1-@promosum/100)
end
return
end