Foxtable(狐表)用户栏目专家坐堂 → 累计出库自动更新的问题?(已解决)


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

主题:累计出库自动更新的问题?(已解决)

帅哥哟,离线,有人找我吗?
晕了快扶我
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 21:40:00 [只看该作者]

If e.DataCol.Name = "数量_本次交"
    e.DataRow("金额")= e.NewValue * e.DataRow("单价") '计算金额
    Dim dr As DataRow = DataTables("销售出库单主表").Find("出库单号='" & e.DataRow("出库单号") & "'")
    dr("总金额") = DataTables("销售出库单子表").Compute("sum(金额)","出库单号 ='" & e.DataRow("出库单号") & "'") '计算主表总金额
    '=======================================================================================================
    DataTables("临时销售出库单子表").LoadFilter="客户订单编号 = '" & e.DataRow("客户订单编号") & "' And 料号 ='" & e.DataRow("料号") & "'"
    DataTables("临时销售出库单子表").Load '加载历史入库单
    Dim vr As DataRow =  DataTables("临时销售出库单子表").Find("_Identify = '" & e.DataRow("_identify") & "'")
    Dim count As Integer = DataTables("临时销售出库单子表").DataRows.Count
    If vr Is Nothing  AndAlso count = 0
        e.DataRow("数量_累交数")  = e.NewValue
        e.DataRow("数量_未交数")  = e.DataRow("数量_订单数") - e.DataRow("数量_累交数")
    ElseIf vr Is Nothing AndAlso count <> 0
        For Each cr As DataRow In  DataTables("临时销售出库单子表").DataRows
            cr("数量_累交数")=  DataTables("临时销售出库单子表").Compute("sum(数量_本次交)") + e.NewValue
            cr("数量_未交数") = cr("数量_订单数") - cr("数量_累交数") '更新后台表单数据
            For Each mr As DataRow In DataTables("销售出库单子表").Select("客户订单编号 = '" & e.DataRow("客户订单编号") & "' And 料号 ='" & e.DataRow("料号") & "'")
                mr("数量_累交数") = cr("数量_累交数")
                mr("数量_未交数") = cr("数量_未交数")
            Next '更新前台表单数据
        Next
    ElseIf vr IsNot Nothing AndAlso count = 1
        e.DataRow("数量_累交数")  = e.NewValue
        e.DataRow("数量_未交数")  = e.DataRow("数量_订单数") - e.DataRow("数量_累交数")
        vr("数量_累交数") = e.NewValue
        vr("数量_本次交") = e.NewValue
        vr("数量_未交数") = vr("数量_订单数") - vr("数量_累交数")
    ElseIf vr IsNot Nothing AndAlso count > 1
        For Each ccr As DataRow In DataTables("临时销售出库单子表").DataRows
            ccr("数量_累交数") = DataTables("临时销售出库单子表").Compute("sum(数量_本次交)","[_Identify] <> '" & e.DataRow("_Identify") & "'") + e.NewValue
            ccr("数量_未交数") = ccr("数量_订单数") - ccr("数量_累交数")
            For Each mmr As DataRow In DataTables("销售出库单子表").Select("客户订单编号 = '" & e.DataRow("客户订单编号") & "' And 料号 ='" & e.DataRow("料号") & "'")
                mmr("数量_累交数") = ccr("数量_累交数")
                mmr("数量_未交数") = ccr("数量_未交数")
            Next '更新前台表单数据
        Next
        vr("数量_本次交") = e.NewValue
    End If
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "update {客户订单子表} SET 未交数 = '" & e.DataRow("数量_未交数") & "' where 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And OPN = '" & e.DataRow("料号") & "'"
    cmd.ExecuteNonQuery()
    Dim cmd1 As New SQLCommand
    cmd1.C
    'Dim temp As Integer = DataTables("临时销售出库单子表").Compute("sum(数量_本次交)","客户订单编号 = '" & e.DataRow("客户订单编号") & "'And [_Identify] <> '" & e.DataRow("_Identify") & "'") + e.DataRow("数量_本次交")
    Dim cmd5 As New SQLCommand
    cmd5.C
    cmd5.CommandText = "select sum(未交数) from {客户订单子表} where 客户订单编号 = '" & e.DataRow("客户订单编号") & "'"
    Dim temp1 As Integer = cmd5.ExecuteScalar
    If temp1 >0
        cmd1.CommandText ="update {客户订单主表} SET 结案 = 0 Where 客户订单编号 = '" & e.DataRow("客户订单编号") & "'"
        cmd1.ExecuteNonQuery()
    ElseIf temp1 <= 0
        cmd1.CommandText ="update {客户订单主表} SET 结案 = 1 Where 客户订单编号 = '" & e.DataRow("客户订单编号") & "'"
        cmd1.ExecuteNonQuery()
    End If
    Dim cmd3 As New SQLCommand
    cmd3.C
    cmd3.CommandText="select 当前库存 from {产品资料子表} Where 料号 = '" & e.DataRow("料号") & "'"
    Dim kc As Integer = cmd3.ExecuteScalar
    Dim cmd2 As New SQLCommand
    cmd2.C
    cmd2.CommandText = "Update {产品资料子表} SET 当前库存 ='" & kc - e.NewValue + e.OldValue & "' where 料号 = '" & e.DataRow("料号") & "'"
    cmd2.ExecuteNonQuery()
End If

 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 21:42:00 [只看该作者]

我有加一个{临时销售出库单子表},后台表是销售出库单子表,核心思想就是把load错开,用一张临时表来加载需要更改的后台数据,而不是直接用销售出库单子表来加载,这样跟用COMMAND取后台表出来的效果是一样的,只是代码繁琐了很多,等狐狸爸爸更新了COMMAND出来的Datatables可以保存修改的时候,就简单多了..一直不更新,郁闷啊

这个是deleting事件里的

 

Dim cmd3 As New SQLCommand
cmd3.C
cmd3.CommandText="select 当前库存 from {产品资料子表} Where 料号 = '" & e.DataRow("料号") & "'"
Dim kc As Integer = cmd3.ExecuteScalar
DataTables("临时销售出库单子表").LoadFilter = "客户订单编号 = '" & e.DataRow("客户订单编号") & "' And 料号 = '" & e.DataRow("料号") & "'"
DataTables("临时销售出库单子表").load
Dim count As Integer = DataTables("临时销售出库单子表").DataRows.Count
Dim dr As DataRow = DataTables("临时销售出库单子表").Find("[_Identify] = '" & e.DataRow("_Identify") & "'")
Dim count1 As Integer = DataTables("销售出库单子表").Select("[_Identify] = '" & e.DataRow("_Identify") & "'And 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And 料号 = '" & e.DataRow("料号") & "'").Count
If dr Is Nothing AndAlso count = 0
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "Update {客户订单子表} SET 未交数 = 未交数 + '" & e.DataRow("数量_本次交") & "'where 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And OPN = '" & e.DataRow("料号") & "'"
    cmd.ExecuteNonQuery()
ElseIf dr Is Nothing AndAlso count <> 0
    For Each mr As DataRow In DataTables("临时销售出库单子表").DataRows
        mr("数量_累交数") = mr("数量_累交数") - e.DataRow("数量_本次交")
        mr("数量_未交数") = mr("数量_订单数") - mr("数量_累交数")
        For Each cr As DataRow In DataTables("销售出库单子表").Select("[_Identify] <> '" & e.DataRow("_Identify") & "' And 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And 料号 ='" & e.DataRow("料号") & "'")
            cr("数量_累交数") = mr("数量_累交数")
            cr("数量_未交数") = mr("数量_未交数")
        Next
    Next
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "Update {客户订单子表} SET 未交数 = 未交数 + '" & e.DataRow("数量_本次交") & "'where 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And OPN = '" & e.DataRow("料号") & "'"
    cmd.ExecuteNonQuery()
ElseIf dr IsNot Nothing AndAlso count =1
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "Update {客户订单子表} SET 未交数 = 未交数 + '" & e.DataRow("数量_本次交") & "'where 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And OPN = '" & e.DataRow("料号") & "'"
    cmd.ExecuteNonQuery()
    Dim cmd2 As New SQLCommand
    cmd2.C
    cmd2.CommandText = "Update {产品资料子表} SET 当前库存 ='" & kc + e.DataRow("数量_本次交") & "' where 料号 = '" & e.DataRow("料号") & "'"
    cmd2.ExecuteNonQuery()
    dr.Delete
ElseIf dr IsNot Nothing AndAlso count >1
    For Each mmr As DataRow In DataTables("临时销售出库单子表").DataRows
        'mmr("数量_累交数") = DataTables("临时销售出库单子表").Compute("sum(数量_本次交)","[_Identify] <> '" & e.DataRow("_Identify") & "' And 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And OPN = '" & e.DataRow("OPN") & "'") - e.DataRow("数量_本次交")
        mmr("数量_累交数")= mmr("数量_累交数") - e.DataRow("数量_本次交")
        mmr("数量_未交数") = mmr("数量_订单数") - mmr("数量_累交数")
        For Each ccr As DataRow In DataTables("销售出库单子表").Select("[_Identify] <> '" & e.DataRow("_Identify") & "' And 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And 料号 ='" & e.DataRow("料号") & "'")
            ccr("数量_累交数") = mmr("数量_累交数")
            ccr("数量_未交数") = mmr("数量_未交数")
        Next
    Next
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "Update {客户订单子表} SET 未交数 = 未交数 + '" & e.DataRow("数量_本次交") & "'where 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And OPN = '" & e.DataRow("料号") & "'"
    cmd.ExecuteNonQuery()
    Dim cmd2 As New SQLCommand
    cmd2.C
    cmd2.CommandText = "Update {产品资料子表} SET 当前库存 ='" & kc + e.DataRow("数量_本次交") & "' where 料号 = '" & e.DataRow("料号") & "'"
    cmd2.ExecuteNonQuery()
    dr.Delete
End If
Dim cmd1 As New SQLCommand
cmd1.C
Dim cmd5 As New SQLCommand
cmd5.C
cmd5.CommandText = "select sum(未交数) from {客户订单子表} where 客户订单编号 = '" & e.DataRow("客户订单编号") & "'"
Dim temp1 As Integer = cmd5.ExecuteScalar
If temp1 >0
    cmd1.CommandText ="Update {客户订单主表} SET 结案 = 0 Where 客户订单编号 = '" & e.DataRow("客户订单编号") & "'"
    cmd1.ExecuteNonQuery()
ElseIf temp1 <= 0
    cmd1.CommandText ="Update {客户订单主表} SET 结案 = 1 Where 客户订单编号 = '" & e.DataRow("客户订单编号") & "'"
    cmd1.ExecuteNonQuery()
End If

[此贴子已经被作者于2013-3-30 22:02:40编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 21:42:00 [只看该作者]

我的代码肯定有可以简化的地方,没时间去推敲了,有高手看到也帮忙指正一下

cmd.c这里是论坛BUG,就是指定后台的数据库名称connection打不出来

[此贴子已经被作者于2013-3-30 21:46:07编辑过]

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 21:43:00 [只看该作者]

謝謝,一看就倒,怎麼這麼多啊!

 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 21:45:00 [只看该作者]

我出库后需要更新 销售订单子表里的 未交数 更新后台同订单号同料号的 累交数 还要更新产品资料子表里的当前库存数,当满足客户订单子表里的全部未交数为0的时候,还要更新订单主表里的结案

这个比你的复杂吧?图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 21:51:00 [只看该作者]

以下是引用zpx_2012在2013-3-30 21:43:00的发言:
謝謝,一看就倒,怎麼這麼多啊!

我的出库单表结构里有

累交,未交,本次交,订单数 4个值

这样代码的效果是任意一条明细或者一张出库单不管是新增也好,删除,更改本次交的数量,也好,都能实现这4个数值的同步,比如A出库单出了20个,本次交了10,那么A出库单的累交变成30,本次出的累交数也变成30,这样做的好处是load进任何一张出库单都知道此明细一共出了多少,最大化的方便操作员查看

我的业务要求比较BT,你应该用不了那么多的

代码里的4个IF是根据新增,修改等4种情况来进行的,你仔细看下代码就明白了


 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 21:54:00 [只看该作者]

图片点击可在新窗口打开查看强烈呼吁狐狸爸爸赶紧更新啊,这是没法直接操作后台数据的血泪代码啊

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 22:01:00 [只看该作者]

其实在订单明细里已经用了如下代码(按狐爸的指点):
Case "产品编码"
              '计算累计出库
        Dim flt1 As String = "[产品编码] = '" & e.NewValue & "'and [来源单号] = '" & e.DataRow("订单编号") & "'"
        Dim cmd As New Sqlcommand
        Dim sd As Single
        cmd.CommandText = "SELECT Sum(数量) From {出库明细} where " & flt1
        sd = cmd.ExecuteScalar()
        e.DataRow("累计出库") = sd
   只要在出库明细里的数量改变时能在后台触发一下这个代码就可以了。对狐爸来讲应该是轻而易举啊,怎么大家都回避这个问题,看来狐爸是忙着发布更新了吧。

 回到顶部
帅哥哟,离线,有人找我吗?
晕了快扶我
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 22:05:00 [只看该作者]

以下是引用zpx_2012在2013-3-30 22:01:00的发言:
其实在订单明细里已经用了如下代码(按狐爸的指点):
Case "产品编码"
              '计算累计出库
        Dim flt1 As String = "[产品编码] = '" & e.NewValue & "'and [来源单号] = '" & e.DataRow("订单编号") & "'"
        Dim cmd As New Sqlcommand
        Dim sd As Single
        cmd.CommandText = "SELECT Sum(数量) From {出库明细} where " & flt1
        sd = cmd.ExecuteScalar()
        e.DataRow("累计出库") = sd
   只要在出库明细里的数量改变时能在后台触发一下这个代码就可以了。对狐爸来讲应该是轻而易举啊,怎么大家都回避这个问题,看来狐爸是忙着发布更新了吧。

你除非操作员可以做到每次修改数据后都保存,否则后台数据一定乱掉的,我加的4个IF条件就是不管操作员保存不保存,后台数据都可以正确被刷新


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/30 22:30:00 [只看该作者]

晕了快扶兄,不是说你那个不好,只是真的太多了。其实我的需求应该和你是一样的,每次录入进出库的单据时都只能弹出没有进出库的物料进行选择,完成后更新又为下次作准备,只要解决了一个,其他的3个都是一样的。
想简单一点,
只要是用户操作了数据后,想要切换到其他表时或者要关闭时都会提示保存的,如果不保存只能选择取消改变变成旧的数据。

[此贴子已经被作者于2013-3-30 22:35:22编辑过]

 回到顶部
总数 34 上一页 1 2 3 4 下一页