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


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

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

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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 15:15:00 [显示全部帖子]

哈,楼主的问题跟我的一样的,解决这个问题的思路在狐爸没有更新的情况下很复杂,要分4种情况来分别写代码


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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 15:18:00 [显示全部帖子]

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=29331&replyID=&skin=1

 

解决问题的思路是狐狸爸爸提供的:

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=29426&replyID=&skin=1

 

楼主先看看,搞不定我把我的代码贴给你


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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 16:01:00 [显示全部帖子]

以下是引用zpx_2012在2013-3-30 15:48:00的发言:
谢谢二位,其实我要求也很简单,就是在订单明细的datachanged事件中的代码计算累计出库
Select Case e.DataCol.Name
    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     
End Select

而每次当出库明细中的数量改变时用订单明细中的下述代码触发一下订单明细中的事件即可。
Select Case e.DataCol.Name
    Case "数量"
        If e.OldValue <> e.NewValue Then  '如果数量改变重置生产明细中的列更新出库累计
            '先加载订单明细表中的数据
            Dim flt = "产品编码 = '" & e.DataRow("产品编码") & "' And 订单编号 = '" & e.DataRow("来源单号") & "'"
            DataTables("订单明细").Loadfilter = flt
            DataTables("订单明细").Load()
            
            Dim pr As DataRow ''触发事件更新累计出库
            pr = DataTables("订单明细").Find("[产品编码] = '" & e.DataRow("产品编码") & "'" & _
            "And 订单编号 = '" & e.DataRow("来源单号") & "'")
            If pr IsNot Nothing Then
                DataTables("订单明细").DataCols("产品编码").RaiseDataColChanged(pr)
            End If
        End If
End Select

关键是出库明细中的数量改变后订单明细中的累计出库没有改变,但若用手动重置列的就可以,请问一下是哪里出的问题啊?


[此贴子已经被作者于2013-3-30 15:49:47编辑过]

疯掉了,这个太简单了,你怎么搞那么复杂

你直接在出库单里用UPDATE更新订单明细不就好了吗?


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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 16:02:00 [显示全部帖子]

Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "update {客户订单子表} SET 未交数 = '" & e.DataRow("数量_未交数") & "' where 客户订单编号 = '" & e.DataRow("客户订单编号") & "' And OPN = '" & e.DataRow("料号") & "'"
    cmd.ExecuteNonQuery()

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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 16:07:00 [显示全部帖子]

我觉得楼主问题没你想得那么简单的,你动态加载的话要考虑到没有可能没有加载到前台来的数据的...

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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 16:18:00 [显示全部帖子]

以下是引用zpx_2012在2013-3-30 16:12:00的发言:
不行啊,你这种情况是累计总数是在出库明细表里的,而我是将累计出库设计在来源表中即订单明细中的。

图片点击可在新窗口打开查看你换个角度看不是一样的吗?你把同订单号同料号的统计出来的这个值UPDATE到订单明细中去


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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 16:19:00 [显示全部帖子]

而且动态加载的话,我建议楼主不要用关联,表达式的话对动态加载基本没用

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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 17:37:00 [显示全部帖子]

你真的确定没有问题吗?load当前表的时候,会把当前编辑的数据刷新,导致代码出错,因为当前Datarow也被刷新,如果用你的第二个办法,更是不行,我不说RaiseDataColChanged效率问题,你前面load的是后台的数据,其实已经刷新了,除非你保存,否则你怎么RaiseDataColChanged都没用的

狐爸更新前,咱们这种要求指望用CMD的方法直接更新后台数据你就别想了,这里面涉及前台表和后台表同步机制的问题,我卡了半个多月前两天才想明白解决,是狐爸提醒的用一张临时表来加载后台数据,避免正式的表被load刷新前台数据

 

你先弄弄吧,实在不行我贴我的代码给你参考,经过测试完美计算库存,累交,未交等等


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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 19:10:00 [显示全部帖子]

以下是引用zpx_2012在2013-3-30 18:41:00的发言:
如果不考虑效率的话,我1楼那个当然是可行的,只要把
 DataTables("出库明细").LoadFilter = flt 改为
 DataTables("出库明细").LoadFilter = ""
即不要任何条件全部加载。这样的话在出库明细中更改数据时就不会出现我说的第3个问题,你在出库明细中随便怎么更改后台数据都是正确的。只要回到订单主表时订单主表及明细表的数据就重新加载成最新的了。

如果按你说的用update 语句在出库明细中直接更新订单明细中的累计出库的话
Dim flt2 As String = "[产品编码] = '" & e.DataRow("产品编码") & "' and 订单编号 = '" & e.DataRow("来源单号") & "'"
cmd.CommandText = "Update {订单明细} Set 累计出库 = " & sd & "+'" & e.DataRow & "'-'" & e.OldValue & "' where " & flt2
cmd.ExecuteNonQuery()

就会出现操作者如果每次更改数量后不保存又更改一次这样结果就不正确,如果每次都保存就没问题,不知我理解的是否正确?

图片点击可在新窗口打开查看那你这样何必用动态加载?这跟把数据全部加载到前台来有什么区别,不是多此一举嘛,我指的就是加了flt的情况会存在加载机制的问题

[此贴子已经被作者于2013-3-30 19:13:25编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1199 积分:7096 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/3/30 19:55:00 [显示全部帖子]

图片点击可在新窗口打开查看解决问题就好了,这个问题非常有意思,论坛肯定有高手做进销存的时候遇到解决了,觉得太简单,没有分享出来而已,俺是菜鸟,只有不要脸的不断问狐狸爸爸,自己逻辑思维又差,凌乱的一塌糊涂

 回到顶部
总数 19 1 2 下一页