Foxtable(狐表)用户栏目专家坐堂 → [求助]增加行


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

主题:[求助]增加行

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/26 11:57:00 [显示全部帖子]

报什么错误?2个表有没有做关联?

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/26 14:14:00 [显示全部帖子]

错误提示是入库明细的datacolchanged事件有问题,不是入库单的这个事件

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/26 20:19:00 [显示全部帖子]

不是摆在那个事件的问题。


是入库明细的datacolchanged事件有问题,把入库明细的datacolchanged事件代码贴上来看看

建议先花时间看看开发指南的视频:http://pan.baidu.com/s/1kV8pUwn#list/path=%2F

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/26 21:13:00 [显示全部帖子]


按照下面的方式每一段代码后面加上MessageBox.Show,看运行到哪一个MessageBox之后出错了

然后缩小范围在代码段里面加上MessageBox,看是那一句代码有问题

'自动输入入库单编号明细列的值
Select Case e.DataCol.Name
    Case "入库单编号"
        If e.DataRow.IsNull("入库单编号") Then
            e.DataRow("入库单编号明细") = Nothing
        Else
            Dim bh As  String = e.DataRow("入库单编号")
            Dim max  As  String
            Dim idx  As  Integer
            max = e.DataTable.Compute("Max(入库单编号明细)","入库单编号 = '" & bh  & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大入库单编号
            If max > ""  Then  '如果存在最大入库单编号
                Dim l As Integer = bh.Length
                idx = CInt(max.Substring(l,3)) + 1  '获得最大入库单编号的后两位顺序号,并加1
            Else
                idx = 1  '否则顺序号等于1
            End  If
            e.DataRow("入库单编号明细") = bh & Format(idx,"000")
            
        End If
End Select
MessageBox.Show(1)

'===============================提取字符=============================================
Dim s As String = e.DataRow("入库单编号明细")
e.DataRow("批次号") = s.SubString(s.Length-6,3) & s.SubString(s.Length-2,2)

MessageBox.Show(2)
'==================================================================================================
Dim ck As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "入库_数量","入库_单价","入库_税率"
        ck("入库_金额") = ck("入库_单价") * ck("入库_数量") / ck("入库_税率")
    Case "入库_单价","入库_数量","入库_金额"
        ck("入库_税金") = ck("入库_单价") * ck("入库_数量") - ck("入库_金额")
    Case "入库_金额","入库_税金"
        ck("入库_价税合计") = ck("入库_金额") + ck("入库_税金")
    Case "运输_数量","运输_单价"
        ck("运输_金额") = ck("运输_数量") * ck("运输_单价")
    Case "入库_价税合计","运输_金额"
        ck("合计金额") = ck("入库_价税合计") + ck("运输_金额")
End Select
MessageBox.Show(3)
'-----------------------------------------------------------计算库存------------------------------------------
Select Case e.DataCol.Name
    Case "入库单编号明细","入库批次号","入库_数量"
        Dim filter As String = "入库批次号 = '" & e.DataRow("入库单编号明细") & "' and 批次号 = '" & e.DataRow("批次号")  & "'"
        e.DataRow("库存") = e.DataRow("入库_数量") - DataTables("出库明细").Compute("sum(出库_数量)", filter)
End Select
MessageBox.Show(4)

.......后面的其它段自己补上MessageBox.Show

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/26 21:49:00 [显示全部帖子]

看看分别弹出什么内容,运行到哪个弹出框后出错

Select Case e.DataCol.Name
    Case "入库单编号"
        If e.DataRow.IsNull("入库单编号") Then
            e.DataRow("入库单编号明细") = Nothing
        Else
            Dim bh As  String = e.DataRow("入库单编号")
MessageBox.Show(bh)
            Dim max  As  String
            Dim idx  As  Integer
            max = e.DataTable.Compute("Max(入库单编号明细)","入库单编号 = '" & bh  & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大入库单编号
MessageBox.Show(max)
            If max > ""  Then  '如果存在最大入库单编号
                Dim l As Integer = bh.Length
MessageBox.Show(max.Substring(l,3))
                idx = CInt(max.Substring(l,3)) + 1  '获得最大入库单编号的后两位顺序号,并加1
            Else
                idx = 1  '否则顺序号等于1
            End  If
            e.DataRow("入库单编号明细") = bh & Format(idx,"000")
            MessageBox.Show(e.DataRow("入库单编号明细")) 
        End If
End Select

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/26 22:14:00 [显示全部帖子]

图片的顺序和messagebox的顺序是一致的吗?如果是,从这些数据难道还看不出问题?

入库单编号明细比入库单编号还短,是不是搞反了

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/26 22:43:00 [显示全部帖子]

12楼的图片是什么回事?第三个框弹不出来,明显是max.Substring(l,3)出错

自己跟踪一下自己的数据

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/26 22:51:00 [显示全部帖子]

搞不定就上传例子吧

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


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/27 8:51:00 [显示全部帖子]

代码问题在这里
'===============================提取字符=============================================
Dim s As String = e.DataRow("入库单编号明细")
e.DataRow("批次号") = s.SubString(s.Length-6,3) & s.SubString(s.Length-2,2)


应该这样用

Select Case e.DataCol.Name
    Case "入库单编号明细"
        Dim s As String = e.DataRow("入库单编号明细")
        e.DataRow("批次号") = s.SubString(s.Length-6,3) & s.SubString(s.Length-2,2)
End Select

再优化,可以这样用

Select Case e.DataCol.Name
    Case "入库单编号"
        If e.DataRow.IsNull("入库单编号") Then
            e.DataRow("入库单编号明细") = Nothing
        Else
            Dim bh As  String = e.DataRow("入库单编号")
            Dim max  As  String
            Dim idx  As  Integer
            max = e.DataTable.Compute("Max(入库单编号明细)","入库单编号 = '" & bh  & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大入库单编号
            If max > ""  Then  '如果存在最大入库单编号
                Dim l As Integer = bh.Length
                idx = CInt(max.Substring(l,3)) + 1  '获得最大入库单编号的后两位顺序号,并加1
            Else
                idx = 1  '否则顺序号等于1
            End  If
            e.DataRow("入库单编号明细") = bh & Format(idx,"000")
        End If
    Case "入库单编号明细"
        Dim s As String = e.DataRow("入库单编号明细")
        e.DataRow("批次号") = s.SubString(s.Length-6,3) & s.SubString(s.Length-2,2)
End Select

再优化,还可以这样用

Select Case e.DataCol.Name
    Case "入库单编号"
        If e.DataRow.IsNull("入库单编号") Then
            e.DataRow("入库单编号明细") = Nothing
            e.DataRow("批次号") = Nothing
        Else
            Dim bh As  String = e.DataRow("入库单编号")
            Dim max  As  String
            Dim idx  As  Integer
            max = e.DataTable.Compute("Max(入库单编号明细)","入库单编号 = '" & bh  & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大入库单编号
            If max > ""  Then  '如果存在最大入库单编号
                Dim l As Integer = bh.Length
                idx = CInt(max.Substring(l,3)) + 1  '获得最大入库单编号的后两位顺序号,并加1
            Else
                idx = 1  '否则顺序号等于1
            End  If
            e.DataRow("入库单编号明细") = bh & Format(idx,"000")
            Dim s As String = e.DataRow("入库单编号明细")
            e.DataRow("批次号") = s.SubString(s.Length-6,3) & s.SubString(s.Length-2,2)
        End If
End Select

这个事件很多地方都可以像上面一样优化一下,具体自己体会一下

 回到顶部