Foxtable(狐表)用户栏目专家坐堂 → 在Ctrl进入项目时应用窗口无错,正常进入时窗口事件报错


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

主题:在Ctrl进入项目时应用窗口无错,正常进入时窗口事件报错

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


加好友 发短信
等级:婴狐 帖子:87 积分:646 威望:0 精华:0 注册:2017/3/5 20:07:00
在Ctrl进入项目时应用窗口无错,正常进入时窗口事件报错  发帖心情 Post By:2017/5/4 15:00:00 [只看该作者]

Dim lj As String = e.Form.Controls("TextBox1").value
If lj = "" Then
    MessageBox.Show("请选择要导入的Excel文件,暂时仅支持2003版!", "错误提示", MessageBoxButtons.Ok, MessageBoxIcon.Warning)
    e.Sender.Enabled = False
    Return
End If
If MessageBox.Show("确定要导入商品数据吗?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = 1 Then
    Dim mg As New Merger
    mg.SourcePath = lj
    mg.Format = "excel" '指定格式
    mg.SourceTableName = "个人$"  '指定要合并的表
    mg.DataTableName = "个人出库导入" '指定接收数据的表
    mg.Merge()
    Dim s2 As Integer = 0
    For Each r As Row In Tables("个人出库导入").Rows
        Dim d1 As Row = Tables("当天出库").AddNew()
        d1("商品编号") = r("ProductCode")
        d1("订单编号") = r("订单编号")
        d1("数量") = r("OrderQty")
        d1("单价") = r("UnitPrice")
        d1("总价") = r("TotalPrice")
        d1("收货地址") = r("收货地址")
        d1("收货人电话") = r("收货人电话")
        d1("收货人") = r("收货人")
        d1("出库日期") = Date.today
        'd1("可用库存") = r("入库数量")
        'd1("提醒数量") = Tables("系统设置").Current("库存提醒数量")
        'd1("提醒天数") = Tables("系统设置").Current("到期提醒天数")
        s2 = s2 + 1
       
    Next
   
    For Each dr As Row In Tables("当天出库").Rows
        If dr("库位") = "" Then
            Dim d1 As DataRow = DataTables("商品库存").Find("Item = '" & dr("商品编号") & "'")
            If d1 IsNot Nothing Then
                dr("中文名称") = d1("ChineseBrand")
                dr("中文描述") = d1("ChineseDescription")
            End If
            If d1("可用库存") >= dr("数量") Then
                d1("可用库存") = d1("可用库存") - dr("数量")
                d1("实时库存") = d1("实时库存") - dr("数量")
                d1("待发库存") = d1("待发库存") + dr("数量")
                dr("可用库存") = d1("可用库存")
                'If dr("可用库存") >= 0 Then
                Dim d2 As DataRow = DataTables("商品库存明细").Find("货品编号 = '" & dr("商品编号") & "' and 可用库存 >= " & dr("数量"))
                If d2 IsNot Nothing  Then
                    dr("库位") = d2("货格")
                    d2("可用库存") = d2("可用库存") - dr("数量")
                    d2("实时库存") = d2("实时库存") - dr("数量")
                    d2("待发库存") = d2("待发库存") + dr("数量")
                    dr("剩余库存") = d2("可用库存")
                    'dr("可用库存") = d1("可用库存")
                    dr("数量") = dr("数量")
                Else
                    Dim count As Integer = 0
                    Dim drs As List(Of DataRow) = DataTables("商品库存明细").Select("货品编号 = '" & dr("商品编号") & "' AND 可用库存 > 0", "生产日期, _Identify")
                    Dim s As String = ""
                    Dim coun As Integer
                    For i As Integer = 0 To drs.count - 1
                        Dim dw As DataRow = drs(i)
                        count + = dw("可用库存")
                        Dim sy As Integer = count - dr("数量")
                        's &= dw("货格") & ","
                        If sy >= 0 Then
                            coun = i
                            Exit For
                        End If
                    Next
                    'dr("库位") = s.trim(",")
                    Dim cun As Integer = 0
                    For j As Integer = 0 To coun
                        Dim dj As DataRow = drs(j)
                        If j = 0 Then
                            dj("可用库存") = dj("可用库存") - dj("可用库存")
                            dj("实时库存") = dj("实时库存") - dj("可用库存")
                            dj("待发库存") = dj("待发库存") + dj("可用库存")
                            dr("库位") = dj("货格")
                            dr("剩余库存") = dj("可用库存")
                            dr("可用库存") = d1("可用库存")
                            dr("数量") = dj("可用库存")
                            cun += dj("可用库存")
                        ElseIf j < coun AndAlso j > 0 Then
                            Dim d3 As Row = Tables("当天出库").AddNew()
                            d3("商品编号") = dr("ProductCode")
                            d3("订单编号") = dr("订单编号")
                            'd3("数量") = dr("OrderQty")
                            d3("单价") = dr("UnitPrice")
                            d3("总价") = dr("TotalPrice")
                            d3("收货地址") = dr("收货地址")
                            d3("收货人电话") = dr("收货人电话")
                            d3("收货人") = dr("收货人")
                            d3("出库日期") = Date.today
                            dj("可用库存") = dj("可用库存") - dj("可用库存")
                            dj("实时库存") = dj("实时库存") - dj("可用库存")
                            dj("待发库存") = dj("待发库存") + dj("可用库存")
                            d3("库位") = dj("货格")
                            d3("剩余库存") = dj("可用库存")
                            d3("可用库存") = d1("可用库存")
                            d3("数量") = dj("可用库存")
                            cun += dj("可用库存")
                            s2 = s2 + 1
                        ElseIf j = coun Then
                            Dim d4 As Row = Tables("当天出库").AddNew()
                            d4("商品编号") = dr("ProductCode")
                            d4("订单编号") = dr("订单编号")
                            'd4("数量") = dr("OrderQty")
                            d4("单价") = dr("UnitPrice")
                            d4("总价") = dr("TotalPrice")
                            d4("收货地址") = dr("收货地址")
                            d4("收货人电话") = dr("收货人电话")
                            d4("收货人") = dr("收货人")
                            d4("出库日期") = Date.today
                            dj("可用库存") = dj("可用库存") - (dr("数量") - cun)
                            dj("实时库存") = dj("实时库存") - (dr("数量") - cun)
                            dj("待发库存") = dj("待发库存") + (dr("数量") - cun)
                            d4("库位") = dj("货格")
                            d4("剩余库存") = dj("可用库存")
                            d4("可用库存") = d1("可用库存")
                            d4("数量") = dr("数量") - cun
                        End If
                    Next
                End If
            Else
                dr("剩余库存") = ""
                dr("可用库存") = ""
                dr("库位") = "库存不足"
            End If
        End If
    Next
    DataTables("当天出库").Save()
    DataTables("商品库存").Save()
    DataTables("商品库存明细").Save()
    MessageBox.Show("导入成功!本次导入了 " & Tables("当天出库").Compute("Sum(数量)") & " 个商品数量,其中新增了 " & s2 & " 种新商品!")
    With DataTables("个人出库导入")
        .DataRows.Clear() '清除所有行
    End With
    DataTables("个人出库导入").Save()
    e.Form.Controls("TextBox1").value = Nothing
    e.Form.Controls("Button5").Enabled = False
End If

以上代码目的是:导入外部数据时先写入在遍历《当天出库》每一行,假如库位为空,则在《商品库存》中找到这一行 赋值中文名称和中文描述,假如该行<可用库存>大于等于<数量> 则可用库存和实时库存扣减,并把<数量>写入到待发库存。并在《商品库存明细》中找该货品编号而且可用库存大于等于<数量> 找到就把该库位赋值给当前遍历行,再扣减《商品库存明细》中的可用库存和实时库存,并把<数量>写入到待发库存。

如果找不到符合条件的,则遍历商品库存明细中所有该货品编号的行,把可用库存相加,直到所加的总数大于等于<数量> ,再拆分取得这些行,当《当天出库》所遍历行需要《商品库存明细》中若干个库位同时出货才能满足出货时,假如是三个库位同时出货,那么第一个库位和第二个库位有多少库存就出多少库存 (所遍历的《商品库存明细》行按生产日期排序),第三个库位出货等于<数量>- 第一第二个库位所出货量的总和。

等于说原本的《当天出库》中只有一行,现在变成了三行,所以在遍历到第二个库位时,《当天出库》增加一行,并且数量等该库的可用库存,到第三个库位时,再增加一行,数量等于<数量>- 前两库已经出的库存。

这么做,主要是想在删除时把待发的数量还回去。就是下面的代码:

If Tables("商品出库_table1").Current("商品编号") IsNot Nothing AndAlso Tables("商品出库_table1").Current("库位") <> "库存不足" Then 
Dim dr As DataRow = DataTables("商品库存").Find("Item = '" & Tables("商品出库_table1").Current("商品编号") & "'")
If dr IsNot Nothing Then
    dr("可用库存") = dr("可用库存") + val(Tables("商品出库_table1").Current("数量"))
 dr("实时库存") = dr("实时库存") + val(Tables("商品出库_table1").Current("数量"))
dr("待发库存") = dr("待发库存") - val(Tables("商品出库_table1").Current("数量"))
End If
Dim dr1 As DataRow = DataTables("商品库存明细").Find("货品编号 = '" & Tables("商品出库_table1").Current("商品编号") & "' and 货格 = '" & Tables("商品出库_table1").Current("库位") & "' ")
    If dr1 IsNot Nothing Then
    dr1("可用库存") = dr1("可用库存") + val(Tables("商品出库_table1").Current("数量"))
 dr1("实时库存") = dr1("实时库存") + val(Tables("商品出库_table1").Current("数量"))
dr1("待发库存") = dr1("待发库存") - val(Tables("商品出库_table1").Current("数量"))

DataTables("商品库存").Save()
DataTables("商品库存明细").Save()
Tables("商品出库_table1").Current.Delete
DataTables("当天出库").Save()

 

 

 

我在ctrl进入项目时,应用窗口测试是正常的,但是正常进入 ,导入时就会报错,我把Bin删了也是一样,报.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2017.3.18.1
错误所在事件:窗口,出库导入,Button2,Click
详细错误信息:
未将对象引用设置到对象的实例。

 


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


加好友 发短信
等级:婴狐 帖子:87 积分:646 威望:0 精华:0 注册:2017/3/5 20:07:00
  发帖心情 Post By:2017/5/4 15:02:00 [只看该作者]

是我哪里写错了

 


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/4 15:26:00 [只看该作者]

 你的表如果没有数据,那么取当前行数据 Tables("商品出库_table1").Current 就会报错,因为没有数据

 

 加上判断

 

If Tables("商品出库_table1").Current isNot Nothing Then

 

    '这里写你原来的代码

 

End If


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/4 15:27:00 [只看该作者]

 调试技巧,加入msgbox定位错误

 

http://www.foxtable.com/webhelp/scr/1485.htm

 


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


加好友 发短信
等级:婴狐 帖子:87 积分:646 威望:0 精华:0 注册:2017/3/5 20:07:00
  发帖心情 Post By:2017/5/4 16:29:00 [只看该作者]

感谢指导,找到了问题的所在,外部数据源实际数据只有4行的情况下,mg.Merge()有五行,加合并条件mg.Filter= "[第一列] isnot nothing and [ 第二列] isnot nothing ” 是这样一直加到最后一列么?

 


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/4 17:42:00 [只看该作者]

 

mg.Filter= "[第一列] is not null and [ 第二列] is not null"

mg.Merger()

 

 


 回到顶部