B/S模式仓库管理系统,VS2003,SQL2000
(kcbgyp表)
id 物品编号 品名 单价 初始数量 当前数量 入库日期
1 001 签字笔 5 10 5 2006-1-1
2 110 油性笔 6 10 6 2006-1-2
3 001 签字笔 9 10 4 2006-1-3
4 001 签字笔 10 10 4 2006-1-4
以上是在库情况,用户端展现:
物品编号 品名 当前数量
001 签字笔 13
110 油性笔 6
即由于同一物品单价会发生变更,因此系统控制用户不能看到单价,只能看到总数,出库的时候按照用户申请的数量以及入库日期进行出库
例如:用户A申请物品编号为001的签字笔10支后的在库情况:
id 物品编号 品名 单价 初始数量 当前数量 入库日期
1 001 签字笔 5 10 0 2006-1-1
2 110 油性笔 6 10 6 2006-1-2
3 001 签字笔 9 10 0 2006-1-3
4 001 签字笔 10 10 3 2006-1-4
申请表(SQ_LIST):(单据号取系统时间)
id 单据号 物品编号 单价 申请数量 金额
1 1022190014 001 5 5 25
3 1022190014 001 9 4 36
4 1022190014 001 10 1 10
申请表ID与物品在库ID相同,作为唯一标识,第一步提交不更新库存表,只更新申请表
我现在遇到的困难是当填入申请数量提交时,不知道怎么写这条SQL语句把用户申请的东西写入申请表,我感觉一条SQL语句无法实现,有什么办法吗?
谢谢!
(kcbgyp表)
id 物品编号 品名 单价 初始数量 当前数量 入库日期
1 001 签字笔 5 10 5 2006-1-1
2 110 油性笔 6 10 6 2006-1-2
3 001 签字笔 9 10 4 2006-1-3
4 001 签字笔 10 10 4 2006-1-4
以上是在库情况,用户端展现:
物品编号 品名 当前数量
001 签字笔 13
110 油性笔 6
即由于同一物品单价会发生变更,因此系统控制用户不能看到单价,只能看到总数,出库的时候按照用户申请的数量以及入库日期进行出库
例如:用户A申请物品编号为001的签字笔10支后的在库情况:
id 物品编号 品名 单价 初始数量 当前数量 入库日期
1 001 签字笔 5 10 0 2006-1-1
2 110 油性笔 6 10 6 2006-1-2
3 001 签字笔 9 10 0 2006-1-3
4 001 签字笔 10 10 3 2006-1-4
申请表(SQ_LIST):(单据号取系统时间)
id 单据号 物品编号 单价 申请数量 金额
1 1022190014 001 5 5 25
3 1022190014 001 9 4 36
4 1022190014 001 10 1 10
申请表ID与物品在库ID相同,作为唯一标识,第一步提交不更新库存表,只更新申请表
我现在遇到的困难是当填入申请数量提交时,不知道怎么写这条SQL语句把用户申请的东西写入申请表,我感觉一条SQL语句无法实现,有什么办法吗?
谢谢!
int int申请数量 = 10;for ( int i = 0; i < 10; i++ )
{
//先取日期最小的在库数
Select top 1 当前数量,品名,单价 from kcbgyp where 物品编号 = '001' AND 当前数量>0 Order by 入库日期 //用取出的在库数跟int申请数量比较。如果在库数大于int申请数量
if ( 取出的在库数 >= int申请数量 )
{
insert into SQ_LIST .....//申请数量=int申请数量
break;//退出循环
}
else
{
insert into SQ_LIST .....//申请数量=取出的在库数
int申请数量 = int申请数量 - 取出的在库数; }}大概的逻辑。
首先问一个问题,既然是先进先出,为什么下表的初始数量都是10,当前数量都是小于10呢?
是不是应该id=1的当前数量为0时才出库id=3的呢?初始数量难道不是表示入库时的数量吗?
先给解释一下id 物品编号 品名 单价 初始数量 当前数量 入库日期
1 001 签字笔 5 10 5 2006-1-1
2 110 油性笔 6 10 6 2006-1-2
3 001 签字笔 9 10 4 2006-1-3
4 001 签字笔 10 10 4 2006-1-4
入库(登陆在库表)-->提交申请-->登陆申请表-->出库(更新在库表)没明白你想问什么,你是想问出库时如何更新在库表吗?
还是问几种物品同时出库,怎么登陆申请表?
id 物品编号 品名 单价 初始数量 当前数量 入库日期
1 001 签字笔 5 10 5 2006-1-1
2 110 油性笔 6 10 6 2006-1-2
3 001 签字笔 9 10 4 2006-1-3
4 001 签字笔 10 10 4 2006-1-4
这部分是仓库信息表,但是对于程序,仓库只有当前数量可记录!要取 签字笔 10支 ,对程序来说,就是看仓库中是否有足够的数量,以供取用.id ,品名,入库时间,在仓库这个类中都是只是规则.下面来针对具体的申请,用这些规则判断,(true or false).
申请表 同样道理
首先解释一下流程
大家说的没错,是我弄错了
id 物品编号 品名 单价 初始数量 当前数量 入库日期
1 001 签字笔 5 10 0 2006-1-1
2 110 油性笔 6 10 6 2006-1-2
3 001 签字笔 9 10 4 2006-1-3
4 001 签字笔 10 10 10 2006-1-4应该是以上这个样子。
我的问题是:根据入库日期先后出库,如果单价为9的签字笔数量不足时,再用单价为10的签字笔补充数量,并将这两种单价不同的物品ID以及数量写入库中。
另外用户每次都要申请好几种物品,也存在多行更新的问题
{
string djh="BG"+Session["gcdm"]+DateTime.Now.ToString("yyMMddHHmmss");
for ( int j = 0; j < sqsl; j++ )
{
//先取日期最小的在库数
string str_insert = "";
string str_update = "";
string sql="Select top 1 id,zksl,pm from kcbgyp where wpbh = '"+wpbh+"' AND zksl>0 Order by rkrq";
string strconn = System.Configuration.ConfigurationSettings.AppSettings["DSN"];//从Web.config中读取
SqlConnection conn =new SqlConnection(strconn);
SqlCommand comm = new SqlCommand(sql,conn);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
dr.Read();
int id=dr.GetInt32(0);
int zksl=dr.GetInt32(1);
//用取出的在库数跟int申请数量比较。如果在库数大于int申请数量
if ( zksl >= sqsl )
{
str_insert= "insert into SQ_LIST VALUES('"+id+"','"+djh+"','"+wpbh+"','"+sqsl+"','2006-10-28','aa',bgyp',cast('10' as money),'10','test'";//申请数量=int申请数量
ExecuteSql(str_insert);
break;//退出循环
} else
{
str_insert= "insert into SQ_LIST VALUES('"+id+"','"+djh+"','"+wpbh+"','"+zksl+"','2006-10-28','aa','bgyp',cast('10' as money),'10','test')";//申请数量=取出的在库数
str_update="update kcbgyp set zksl='0' where id='"+id+"'";
sqsl = sqsl - zksl; }
ExecuteSql(str_insert);
ExecuteSql(str_update);
}}private void btn_OK_Click(object sender, System.EventArgs e)
{for(int i = 0;i < dg_Cart.Items.Count; i++)
{
string str_wpbh=dg_Cart.Items[i].Cells[1].Text;
TextBox txtSL = (TextBox)dg_Cart.Items[i].FindControl("Txt_Sqsl");
string str_Tmp = txtSL.Text;
int sqsl = new int();
sqsl=int.Parse(str_Tmp);
this.chuku(str_wpbh,sqsl);
}
object[] obj申请= new object[]
{
申请物品ID,
申请件数
};
arr申请.Add(obj申请);for ( int j = 0; j < arr申请.Count; j++ )
{object[] objKey = ( object[] )arr申请[i];string strID=objKey[0].ToString(); //申请物品ID
int int申请数量 = objKey[1].ToString() //申请数量for ( int i = 0; i < 申请数量; i++ )
{
//先取日期最小的在库数
Select top 1 当前数量,品名,单价 from kcbgyp where 物品编号 = strID AND 当前数量>0 Order by 单价,入库日期 //根据自己的要求定排序 //用取出的在库数跟int申请数量比较。如果在库数大于int申请数量
if ( 取出的在库数 >= int申请数量 )
{
insert into SQ_LIST .....//申请数量=int申请数量
break;//退出循环
}
else
{
insert into SQ_LIST .....//申请数量=取出的在库数
int申请数量 = int申请数量 - 取出的在库数; }}}