Foxtable(狐表)用户栏目专家坐堂 → [求助重新的生成


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

主题:[求助重新的生成

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
[求助重新的生成  发帖心情 Post By:2017/10/25 10:53:00 [显示全部帖子]

老师,

  根据精华的帖子,这边需要些更改但是,有些不是很明白,希望老师给改下,通过改过的,学习下这部分代码的使用,劳烦您了。

 


 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:bom - 副本.zip

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:bom展开 - 副本.table

[此贴子已经被作者于2017/10/25 12:20:02编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/25 10:58:00 [显示全部帖子]

原贴是有BOM 表的ID整数列 物料表的ID列,都被删除了;希望通过编号列进行处理


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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/25 12:08:00 [显示全部帖子]

多谢老师,还没吃午饭呢吧。

 

看了下已经实现,追问:

1、bom 表的次序列是需要经常维护的对吗,而不能生成的?

 

 

 


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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/25 12:26:00 [显示全部帖子]

老师,

  能在给改下吗,自动生成层级次序。


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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/25 12:45:00 [显示全部帖子]

老师我先自己试试  您先忙

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/25 16:15:00 [显示全部帖子]

老师,
  这个次序什么规则,没看明白,没看出原来精华帖的次序是什么意思;不知道这样改对不对,是正确答案吗?
'用于展开BOM

Dim BomID As List(Of String) = Args(0)  '要展开的BOM的ID集合
Dim BOMdt As DataTable = Args(1) '存放数据的表
Dim level As Integer = Args(2)  'BOM的级次
Dim flex As C1FlexGrid.C1FlexGrid = Args(3)

Dim i As Integer = 1  '存放序号
If BomID.Count = 0 Then Return Nothing  '检查参数
Dim Filler As String
For Each str As String In BomID
    Filler = Filler & "'" & str & "',"
Next
Filler = Filler.Trim(",")
Filler = "父键 IN(" & Filler & ")"

''获取BOM 数据
Dim dt As DataTable   '存放BOM的表
Dim cmd As New SQLCommand
cmd.C
'cmd.CommandText =  " Select  '1' AS 序号,ID,'' as 编号, '' as 名称, '' as 规格, '' as 材料, '' as 备注,  父键, 子键, " _
'& "数量 As 标准用量,0 As 数量,  次序,0 As BOM级次  FR OM BOM WHERE " & Filler
cmd.CommandText =  " Select  '1' AS 序号,'' as 编号, '' as 名称, '' as 规格, '' as 材料, '' as 备注,  父键, 子键,数量 As 标准用量,0 As 数量,  次序,0 As BOM级次  FR OM BOM WHERE " & Filler
MessageBox.Show(cmd.CommandText)
'output.show(cmd.CommandText)
dt = cmd.ExecuteReader
If dt.DataRows.Count = 0 Then Return Nothing   '没有返回值就返回
Dim j As Integer = 1
Dim Node As C1FlexGrid.Node
If flex.Rows.count = 1 Then   '是第一层,就直接添加
    For Each dr As DataRow In dt.DataRows
        Node = flex.Rows.InsertNode(flex.Rows.Count, level)
        For Each c  As DataCol In dt.DataCols
            Node.Row(c.name) = dr(c.name)
        Next
        Node.Row("序号") = j
        Node.Row("排序列") = dr("次序")
Node.Row("次序") =1
        Node.Row("数量") = dr("标准用量")
        Node.Row("BOM级次") = level     
        j += 1
    Next
Else   '不是第一层,就执行下列语句
    '放入字典,数据量大的时候会快一点,将数据按父键整理
    Dim iid As String
    Dim dic As new Dictionary(of String,List(of DataRow))
    For Each dr As DataRow In dt.Select("","父键,次序")
        iid = dr("父键")
        If dic.ContainsKey(iid) Then
            dic(iid).add(dr)
        Else
            Dim lisa As new List(of DataRow)
            lisa.Add(dr)
            dic.Add(dr("父键"),lisa)
        End If
    Next
    '遍历填充
    Dim lis As List(of DataRow)
    Dim I数量 As Integer
    Dim str序号 As String
    Dim dr1 As C1FlexGrid.Row
    Do While i < flex.Rows.count
        dr1 = flex.Rows(i)
        dr1("排序列") = i
        i += 1
        If dr1("BOM级次") = level - 1 Then
            iid = dr1("子键")
            I数量 = dr1("数量")
            str序号 = dr1("序号")
            If iid <> Nothing AndAlso dic.ContainsKey(iid) Then
                lis = dic(iid)
                For Each dr2 As DataRow In lis      
                    Node = flex.Rows.InsertNode(i,level)
                    For Each dc As DataCol In dr2.DataTable.DataCols
                        Node.Row(dc.name) = dr2(dc.name)
                    Next
                    Node.Row("数量") = dr2("标准用量") * I数量
                    Node.Row("排序列") = i
                    Node.Row("BOM级次") = level
Node.Row("次序") = level
                    Node.Row("序号") = str序号 & "." &  dr2("次序")                    
                    i += 1
                Next
            End If
        End If
    Loop
End If
Dim BID As List(Of String) = dt.GetValues("子键",filler,"")
Functions.Execute("BOMExplosion",BID,BOMdt,level + 1 ,flex)
[此贴子已经被作者于2017/10/25 16:17:09编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/25 16:19:00 [显示全部帖子]

结果不对 ,劳烦您再给看下。

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/25 20:50:00 [显示全部帖子]

老师,
没搞定,您再给看看啊。

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/25 22:02:00 [显示全部帖子]

怎么使用 这列呢  是 生产组装顺序?
[此贴子已经被作者于2017/10/25 22:02:24编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2928 积分:20184 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2017/10/31 10:00:00 [显示全部帖子]

老师,

  问下应用问题,如何读取值:判断最末级


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