以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  非常奇怪的事情:代码在设计的窗口按钮中无任何反应,但在命令窗口中运行没有任何问题。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=101587)

--  作者:dyzkdxy
--  发布时间:2017/6/3 13:48:00
--  非常奇怪的事情:代码在设计的窗口按钮中无任何反应,但在命令窗口中运行没有任何问题。

      很奇怪:在订货单表中选取数据行,按客户每天的金额汇总到采购应付款中进行处理。代码在设计的窗口按钮中无任何反应,但在命令窗口中运行没有任何问题。 (类似的代码,用同样的方法处理订单和客户应收款时,没有问题 。)

             代码如下:

 

If Tables("进货单").rows().count=0 Then
    MessageBox.Show("暂时没有符合条件的进货数据!")
Else
    Dim dtb As New DataTableBuilder("采购应付款0")      \' 添加临时表
    dtb.AddDef("是否打印", Gettype(Boolean))
    dtb.AddDef("是否结清", Gettype(Boolean))
    dtb.AddDef("供应商名称", Gettype(String), 40)
    dtb.AddDef("已付款总额", Gettype(Single))
    dtb.AddDef("应付款", Gettype(Single))
    dtb.AddDef("总金额", Gettype(Double))
    dtb.AddDef("联系人", Gettype(String), 16)
    dtb.AddDef("联系电话", Gettype(String), 40)
    dtb.AddDef("综合名称", Gettype(String), 60)
    dtb.AddDef("到货日期", Gettype(Date))
    dtb.Build()
   
    DataTables("采购应付款0").DataRows.clear()
    Dim zje As Single
      
    For Each dr As Row In Tables("进货单").GetCheckedRows                  \' For Each dr As Row In Tables("进货单").rows   按钮的代码改为此代码后,对所有表中数据进行处理没问题。
        dr("已编入应付款")=True
        Dim dr2 As DataRow = DataTables("采购应付款0").AddNew()
        For Each dc As DataCol In DataTables("进货单").DataCols
            If DataTables("采购应付款0").DataCols.Contains(dc.Name) Then
                dr2(dc.Name) = dr(dc.name)
            End If
        Next
       
        Dim t As TimeSpan
        Dim d0 As Date = #12/31/2015#
        Dim d1 As Date = dr2("到货日期")
        t = d1 - d0
        dr2("综合名称")= t.TotalDays & "/" & dr2("供应商名称")
       
    Next
    Dim zhms As List(Of String)
    zhms = DataTables("采购应付款0").GetValues("综合名称")
    For Each zhm As String In zhms
        zje=DataTables("采购应付款0").Compute("Sum(总金额)","综合名称 = \'" & zhm &  "\'")
        Dim ddr As DataRow
        ddr =DataTables("采购应付款0").Find("综合名称 = \'" & zhm &   "\'")
        If ddr IsNot Nothing Then \'如果找到的话
            ddr("总金额")=zje
            Dim drdr As DataRow
            drdr =DataTables("采购应付款").Find("综合名称 = \'" & zhm &   "\'")
            If drdr IsNot Nothing Then \'如果找到的话,重写总金额,因为可能金额有变化。
                drdr("总金额")=ddr("总金额")
            Else    
                drdr= DataTables("采购应付款").AddNew()
                For Each dc As DataCol In DataTables("采购应付款0").DataCols
                    If DataTables("采购应付款").DataCols.Contains(dc.Name) Then
                        drdr(dc.Name) = ddr(dc.name)
                    End If
                Next
            End If
        End If
    Next
   
    For Each addr2 As Row In Tables("采购应付款").rows
        addr2("应付款")=addr2("总金额")-addr2("已付款总额")
        If addr2("应付款")<=0 Then
            addr2("是否结清")= True
            addr2("是否打印")= False
            addr2.Locked = True
        Else
            addr2("是否结清")= False
            addr2("是否打印")= True
        End If
    Next
   
    Tables("采购应付款").Cols("总金额").GrandTotal = True
    Tables("采购应付款").Cols("已付款总额").GrandTotal = True
    Tables("采购应付款").Cols("应付款").GrandTotal = True
    Tables("采购应付款").GrandTotal = True


End If


Tables("采购应付款").Sort = "供应商名称,到货日期 desc"
Tables("采购应付款").Select(0,0)


--  作者:有点蓝
--  发布时间:2017/6/3 14:30:00
--  
Tables("进货单")是窗口里的表还是主表?

如果是窗口表,是不是副本?

--  作者:有点蓝
--  发布时间:2017/6/3 14:32:00
--  
代码中看不明白你的业务逻辑,做个例子发上来看看
--  作者:dyzkdxy
--  发布时间:2017/6/4 2:32:00
--  
谢谢老师!  这是我开发项目中的一个窗口中的一段代码,功能比较复杂,代码不好看懂。经过反复调试和分析,问题终于解决了。