Foxtable(狐表)用户栏目专家坐堂 → [求助]EPR系统的仓库数据问题,一直找不到好的解决方法


  共有10138人关注过本帖树形打印复制链接

主题:[求助]EPR系统的仓库数据问题,一直找不到好的解决方法

帅哥哟,离线,有人找我吗?
zhangqinyun
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:272 积分:2324 威望:0 精华:0 注册:2011/7/14 16:23:00
[求助]EPR系统的仓库数据问题,一直找不到好的解决方法  发帖心情 Post By:2012/6/20 11:29:00 [只看该作者]

狐狸爸爸,我去年学的狐表,想做一个系统,但是仓库问题一直找不到好的解决方法,下面是我的思路,你看看,有没有完美点的方案

 

 

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20120620110459.jpg
图片点击可在新窗口打开查看

 

这个是仓库主界面


 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20120620110518.jpg
图片点击可在新窗口打开查看

这个是生产领料单界面

 

我的思路是:

 

通过计划单号,在物料需求表中找到相关信息,输入领出数量,然后通过输入行,添加到生产领料单,

 

 

输入几行后,按《确认》,执行

 

一,在出入库单表中加入这个领料单的信息

二,For Each 行 In 生产领料单

1。在出入库明细表中 Insert 领料数据

2。在仓库库存中减掉领料数量,在预计出库(已分配物料)中剪掉领料数量

3。在物料需求表中加上领料数量

 

 

 

具体的代码是

 

'检测不为空表
If DataTables("仓库出入单").DataRows.Count = 0 Then
    Messagebox.Show("禁止保存空单!")
    Return
End If
If e.Form.Controls("员工ID").Text = "none" Then
    Messagebox.Show("请输入领料人!")
    Return
End If
e.Sender.Enabled = False
'记入父表仓库出入单
Dim label As WinForm.Label = e.Form.Controls("仓库ID")
Dim ckid As String
Dim cmd,cmd1 As New SQLCommand
Dim count,Key As Integer
Dim td As Date = Date.Today
cmd.ConnectionName = _UserCompany
cmd1.ConnectionName = _UserCompany
cmd.commandText = "Select 编号 From {ID} Where 字母='Y'"
Do
    Key = cmd.ExecuteScalar()
    cmd1.commandText = "Update {ID} Set 编号=" & (Key + 1) & " Where 编号=" & Key & " And 字母='Y'"
    If cmd1.ExecuteNonQuery() > 0 Then
        Exit Do
    End If
Loop
ckid = "Y" & Format(td,"yyMM") & Format(Key,"000")
Dim ss,ry,bz As String
ss = e.Form.Controls("所属").Text
ry = e.Form.Controls("员工ID").Text
bz = e.Form.Controls("备注").Value
cmd.CommandText = "Insert into {仓库} (仓库ID,日期,事项,所属,人员,备注,录入人) Values ('" & ckid & "',#" & td & "#,'生领','" & ss & "','" & ry & "','" & bz & "','" & _UserName & "')"
count = cmd.ExecuteNonQuery
If count = 0 Then
    Return
End If
'记入每一条数据
Dim i As Byte = 0
Dim dr As DataRow
Dim wlid,pd,ph As String
Dim js As Integer
Dim sl,yll,kc,yj As Double
Dim dt As DataTable
Dim drs As List(Of DataRow) = DataTables("仓库出入单").Select("")
For Each dr In drs
    I = I + 1
    '记入进出1表
    wlid = dr("物料ID")
    js = dr("件数")
    sl = dr("数量")
    pd = dr("凭单")
    ph = dr("凭行")
    cmd.CommandText = "Insert into {仓库1} (仓库ID,行号,物料ID,件数,数量,凭单,凭行) Values ('" & ckid & "'," & I & ",'" & wlid & "'," & js & "," & sl & ",'" & pd & "'," & ph & ")"
    If cmd.ExecuteNonQuery = 0 Then
        Return
    End If
    '记入生产BOM
    cmd.CommandText = "Select 已领量 From {生产BOM} Where 令号ID='" & pd & "' And 行号=" & ph
    yll = cmd.ExecuteScalar
    cmd.CommandText = "Update {生产BOM} Set 已领量=" & yll - sl & " Where 令号ID='" & pd & "' And 行号=" & ph
    If cmd.ExecuteNonQuery = 0 Then
        Return
    End If
    '占用记录
    cmd.commandText = "Update {物料} Set 修改中='" & _UserName & "' Where 物料ID='" & wlid & "'And 修改中 Is Null"
    If cmd.ExecuteNonQuery = 0 Then
        Return
    End If
    cmd.commandText = "Select 仓库库存,预计出库 From {物料} Where 物料ID='" & wlid & "' And 修改中='" & _UserName & "'"
    dt = cmd.ExecuteReader
    kc = dt.DataRows(0)("仓库库存")
    yj = dt.DataRows(0)("预计出库")
    cmd.commandText = "Update {物料} Set 仓库库存=" & kc + sl & ",预计出库=" & yj + sl & " Where 物料ID='" & wlid & "' And 修改中='" & _UserName & "'"
    If cmd.ExecuteNonQuery = 0 Then
        Return
    End If
    '取消占用
    cmd.commandText = "Update {物料} Set 修改中 = Null Where 物料ID='" & wlid & "' And 修改中='" & _UserName & "'"
    If cmd.ExecuteNonQuery = 0 Then
        Return
    End If
Next
Label.Text = ckid
'打印
Dim Book As New XLS.Book(ProjectPath & "Attachments\生产领料单.xls")
Dim fl As String = ProjectPath & "Reports\出库单.xls"
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Sheet(2,1).Value = "单号:" & ckid
Sheet(3,1).Value = "出库日期:" & td
Sheet(3,5).Value = "产线:" & ss
Sheet(3,7).Value = "领料人:" & e.Form.Controls("人员").Value
Book.Build() '生成细节区
Sheet = Book.Sheets(0)
Sheet(Sheet.Rows.Count-4, 0).Value = "备注:" & bz
Sheet(Sheet.Rows.Count-3, 5).Value = "制单人:" & _UserName
Book.Save(fl) '保存工作簿
e.Sender.Enabled = True
MessageBox.Show("出库成功,出库单号:" & ckid)
e.Form.Close

 

 

但是现在的问题是,执行时间好长阿。。。。。。。。。。还容易中断,,,,晕死

 

我还有一个思路,修改上面的独占,把单行独占改成整个表独占,这样可能会快一点。。但是不是很好。。

 

 

狐狸爸爸,你有什么建议啊


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/6/20 14:54:00 [只看该作者]

我不知道该如何回答你的问题,因为不理解你的业务逻辑。

似乎你搞得太复杂了,一般这种问题,应该用不了这么多sql语句。


 回到顶部
帅哥哟,离线,有人找我吗?
zhangqinyun
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:272 积分:2324 威望:0 精华:0 注册:2011/7/14 16:23:00
  发帖心情 Post By:2012/6/20 15:31:00 [只看该作者]

图片点击可在新窗口打开查看我是自学的,以前不是学软件的/。。。

 

 

学了1年狐表了快。。

因为仓库入库会涉及到好几个方面,所以代码长

 

还要防止多人操作的错误。。好难搞定啊。。。


 回到顶部