以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  出错了  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=133161)

--  作者:采菊东篱下
--  发布时间:2019/4/8 20:58:00
--  出错了

  我昨晚做了一个多选加载树,今天早上发现整个软件打不开,以为试用版到期不让打开了,于是中午赶紧付了16888元的企业高级开发版的钱,现在发现不是试用版到期,我用了不到一个月应没到期,输入密码后同时摁着CTRL键点打开,能打开了,说明出现错误了,现在数据列表中的进仓金额、出仓金额代表式列不会自动计数,左停靠的多选加载树窗口也没显,项目属性的AfterOpenProject事件中的这段代码应也有问题,麻烦帮我看一下,我刚学,不知怎么处理,谢谢。

Dim drs As New List(of DataRow)
With DataTables("数据列表")
    For Each nm As String() In .GetValues("产品名称|规格型号") \'找出每个产品的第一行数据, 添加到集合drs中
\'For Each nm As String() In nms
        drs.Add(.Find("[产品名称] = \'" & nm(0) & "\'","[_SortKey]"))
        drs.Add(.Find("[规格型号] = \'" & nm(1) & "\'","[_SortKey]"))
    Next
    For Each r As DataRow In drs
        .DataCols("主计量单位进仓数量").RaiseDataColChanged(r) \'重置每个产品的第一行
    Next
End With
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:仓库账.rar


--  作者:有点蓝
--  发布时间:2019/4/8 21:04:00
--  
请贴出开发者密码
--  作者:采菊东篱下
--  发布时间:2019/4/8 21:06:00
--  
732100
--  作者:有点蓝
--  发布时间:2019/4/8 22:06:00
--  
去掉数据列表的BeforeSort和AfterSort代码。死循环了
--  作者:采菊东篱下
--  发布时间:2019/4/8 22:14:00
--  
我有点明白了,

数据列表的表属性DataColChanged事件中的高级流水账,金额列是代表式,不能直接运算,要用数量乘单价计算,大概是这出错了,点项目属性确定一下,数据列表中的加载树又出现了。


--  作者:采菊东篱下
--  发布时间:2019/4/9 0:02:00
--  

现在加载树正常显示了,但显示所有行是去除复选框中的勾才显示,我想改为打勾显示,另表属性中DataColChanged事件的高效率流水账代码有问题,无法算出结余,我注识了,麻烦帮我看看。

开发者密码是:732100

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:仓库账.rar

[此贴子已经被作者于2019/4/9 0:03:12编辑过]

--  作者:有点甜
--  发布时间:2019/4/9 10:10:00
--  

1、改成下面

 

Dim trv As WinForm.TreeView = e.Sender
Dim flt As String = "1=2"
\'If e.node.Text = "显示所有行" Then
\'flt = ""
\'Else
For Each nd As WinForm.TreeNode In e.node.Nodes \'清除子节点选中状态
    nd.Checked = False
Next
If e.node.ParentNode IsNot Nothing Then \'去掉父节点选中状态
    e.node.ParentNode.Checked = False
End If
For Each nd As WinForm.TreeNode In trv.AllNodes
    If nd.Checked Then
        If e.node.Text = "显示所有行" Then
            flt = ""
        Else
            If flt > "" Then
                flt = flt & " Or "  \'注意用or而不是And
            End If
            If nd.Level = 0 Then \'注意下面的条件都要用括号括起来
                flt = flt & "( 货品属性 = \'" & nd.Text & "\')"
            Else
                flt = flt & "( 货品属性 = \'" & nd.ParentNode.Text & "\' And 物料分类 = \'" & nd.Text & "\')"
            End If
        End If
    End If
Next
DataTables("数据列表").LoadFilter = flt
DataTables("数据列表").Load()

 

2、你这个是加载,不是筛选

 

DataTables("数据列表").LoadFilter = flt
DataTables("数据列表").Load()

 

如果要筛选,改成,如

 

Tables("数据列表").Filter = flt

 

但你的数据加载不完全,计算流水有可能出错的。你试试把全部数据都加载出来以后,再测试计算流水账。


--  作者:采菊东篱下
--  发布时间:2019/4/9 13:46:00
--  

现在我改了一下流水账代码,表事件里只计算数量结余,金额因单价要进行月末一次加权平均法计算,要另做在安扭上执行。现出现问题,请问怎么解决?哦对了,部份存货因未清期初结存,只有领用没进仓,出现负数,是否负数影响的问题?能否先让它负数显示,等以后领清了存货,再补记存货结平账。

 


图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:仓库账.rar

开发者密码:732100
[此贴子已经被作者于2019/4/9 13:47:53编辑过]

--  作者:有点甜
--  发布时间:2019/4/9 15:53:00
--  

参考代码

 

For Each ary() As String In DataTables("数据列表").GetValues("产品名称|规格型号", "规格型号 is not null")
    Dim dr As DataRow = DataTables("数据列表").Find("[产品名称] = \'" & ary(0) & "\' And [规格型号] = \'" & ary(1) & "\'", "[_SortKey]")
    Dim drs As List(of DataRow)
    dr("结余数量") = dr("主计量单位进仓数量") - dr("主计量单位出仓数量")
   
    drs = DataTables("数据列表").Select("[_SortKey] >= " & dr("_SortKey") & "And [产品名称] = \'" & dr("产品名称") & "\' And [规格型号] = \'" & dr("规格型号") & "\'", "[_SortKey]")
    For i As Integer = 1 To drs.Count - 1
        drs(i)("结余数量") = drs(i-1)("结余数量") + drs(i)("主计量单位进仓数量") - drs(i)("主计量单位出仓数量")
    Next
Next


--  作者:采菊东篱下
--  发布时间:2019/4/9 16:08:00
--  
不行,规格为空的没计算出结余,有的货品只有产品名称没规格的,你这代码不全面。