库存(出库、入库、库存)管理数据表设计请教指点

wuyongbiao 2009-05-15 09:42:18
最近设计库存数据表,入库、出库 有的说放在一起比较好;实时库存通过 月结库存表来 计算,
原本打算设计一个入库表(主从表)和一个出库表(主从表),有点犹豫,为了少走弯路,大家评
一下!
谢谢了!
...全文
3721 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
TOP3098 2011-08-25
  • 打赏
  • 举报
回复
<a href='www.google.com'>免费库存管理</a>
jackeyabc 2010-08-12
  • 打赏
  • 举报
回复
asdfasdfsdf
mengxj85 2009-06-16
  • 打赏
  • 举报
回复
风语者
Up
1. 盘点 、库存调整是否独立设计一个表,还是 放在 出入库表中? //个人觉得可以放入出入库表中,盘点,库存调整从出入库表中获取
2. 建立一个 库存月结表了 ,需要建立 实时存货表 吗?//库存月结表应该可以不用吧,出入库明细表可以反映出来了,实时存货表也可以从出入库明细表获取
AdmiralMeng 2009-06-15
  • 打赏
  • 举报
回复
mark
fstao 2009-05-22
  • 打赏
  • 举报
回复
其实放在一起也可以,不放在一起也可以的。
  • 打赏
  • 举报
回复

1.感觉对每一个单据都应该有 一个表;比较干净

2.我认为应该建立 实时存货表 查看历史库存方便了

对做 成本取值 也方便了,


学习了
cwmwss 2009-05-20
  • 打赏
  • 举报
回复
我们是入出库表单是用同一张表A, 有一张库存表B。
即时库存查的库存表。
表单通过流程核准后,更新库库表。
szh3210 2009-05-19
  • 打赏
  • 举报
回复
up
zzxap 2009-05-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20021213/20/1259465.html
wuyongbiao 2009-05-19
  • 打赏
  • 举报
回复
谢谢 风语者,但我问题关键在 数据表设计上:
1. 盘点 、库存调整是否独立设计一个表,还是 放在 出入库表中?
2. 建立一个 库存月结表了 ,需要建立 实时存货表 吗?
zzxap 2009-05-19
  • 打赏
  • 举报
回复
[CODE=SQL]
加权平均参考
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

[/CODE]
zzxap 2009-05-19
  • 打赏
  • 举报
回复
除了移动平均以外,使用其它方法要额外仔细设计好“退货、盘盈盘亏”等等环节成本计算方法,并且要在一定时间将账面误差进行会计调整,否则,成本误差会像滚雪球一样,整个是笔糊涂账,用计算机管理成本反而比人工计算还乱。
zzxap 2009-05-19
  • 打赏
  • 举报
回复
[code=SQL]

对于先进先出的情况,楼主可以参考:

/*
先进先出处理-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
[/CODE]
zzxap 2009-05-19
  • 打赏
  • 举报
回复
要求有一个库存表,然后采用计价方式计算出库存的成本.每个月做月结,计算出目前的库存成本.

常用的存货计价方式有:
先进先出
后进先出
移动加权平均
全月加权平均
计划成本.
wuyongbiao 2009-05-19
  • 打赏
  • 举报
回复
同时 库存控制上的 库存调整、转移、盘点操作 本想单独设计数据表,但有的大虾一起放在出入库表中,
通过类型来控制。
有经验的来评评... 谢谢了!
iofdcaq 2009-05-15
  • 打赏
  • 举报
回复
·双线主机 100M/35元/年,免费送数据库(自选MY/MSSQL)
·详情请访问:http://www.515dns.com
wuyongbiao 2009-05-15
  • 打赏
  • 举报
回复
考虑到扩展性,将涉及到应收、应付、订单等
itcrazyman 2009-05-15
  • 打赏
  • 举报
回复
1.入库表(主从表)和一个出库表(主从表)
2.设计成一个表,通过增加分类字段来区分入出库
我现在用的是第一种,至于想选择哪种,我感觉是各有优劣,要看你的数据量的大小,如果数据量大,且入出库的类型比较多,我觉得还是用第一种好一些,将数据分散开,不至于使某一个表数据量太大,操作起来也比较直观明了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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