| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3936 人关注过本帖, 1 人收藏
标题:bom 根据一阶 BOM 表整理多阶层 BOM 表。
只看楼主 加入收藏
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
结帖率:100%
收藏(1)
已结贴  问题点数:100 回复次数:16 
bom 根据一阶 BOM 表整理多阶层 BOM 表。
现在我们用用下面这张表的BOM
父阶编码    子阶编码    用量
A1001    B1001    1
A1001    B1002    1
B1001    C1001    2
B1001    C1002    1
C1001    D1001    2
C1001    D1002    1


希望整理之后的结果为如下BOM .
阶层    父阶编码    子阶编码    用量    是否被拆分
*1    A1001    B1001    1    y
**2    A1001    C1001    2    y
***3    A1001    D1001    4   
***3    A1001    D1002    2   
**2    A1001    C1002    1   
*1    A1001    B1002    1   
*1    B1001    C1001    2    y
**2    B1001    D1001    2   
**2    B1001    D1002    1   
*1    B1001    C1002    1

 
整理多阶层BOM.zip (4.43 KB)
2014-09-29 17:20
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
看起来较复杂的样子
2014-09-29 18:23
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11818
专家分:43421
注 册:2006-5-13
收藏
得分:0 
不明白

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-09-29 20:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不是很难,但需要费点心思。

授人以渔,不授人以鱼。
2014-09-29 21:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是否被拆分是什么意思?数据样本不够,而且还只是给Excel文档,连数据表也没做,全空白前提求助。

授人以渔,不授人以鱼。
2014-09-30 10:18
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:654
专家分:2167
注 册:2014-2-7
收藏
得分:0 
我理解楼主的意图,这是一个典型的树状结构,多用于按树状结构展开的材料 BOM、工时 BOM、按部门显示的员工、……等等,一般用 oleTree 控件显示。
由于结构树的层数不定,所以这类问题应采用“递归”算法。
假设来源表为 tblSource.dbf,并对“父阶编码”建立普通索引,则主程序 main.prg 的代码如下:
程序代码:
CLEAR ALL
CLOSE ALL

* 建立结果表
CREATE TABLE tblResult (阶层 c(10),父阶编码 c(10),子阶编码 c(10),用量 n(10,2),拆分 c(1))

* 打开源表
SELECT 0
USE tblSource ORDER 父阶编码

* 生成父阶代码“A1001”的结果,第2个参数表示数量为1,第三个参数表示阶层的初始值为0
MakeTree('A1001',1,0)

* 显示结果表
SELECT tblResult
GO TOP
BROWSE

子程序 MakeTree.prg 的代码如下:
程序代码:
* ===========================================================
* 参数:tcFather 父阶编码
*       tnCount  父项数量
*       tnLevel  层级
* ===========================================================
LPARAMETERS tcFather,tnCount,tnLevel
LOCAL nRec,cSon,nCnt,cSplit,cLevel

nRec = RECNO()           && 保存记录指针
SEEK tcFather            && 定位到父项代码的首记录
tnLevel = tnLevel + 1    && 层级累加

* 遍历所有子项
SCAN REST WHILE 父阶编码 = tcFather
    cSon = 子阶编码
    nCnt = 用量 * tnCount
    cSplit = IIF(INDEXSEEK(cSon,.f.),'y',' ')    && 是否被拆分
    cLevel = REPL('*',tnLevel) + TRAN(tnLevel)   && 层级

    * 添加到结果表
    INSERT INTO tblResult (阶层,父阶编码,子阶编码,用量,拆分) VALUES (cLevel,tcFather,cSon,nCnt,cSplit)

    * 存在子项时,仍需拆分,采用递归
    IF cSplit = 'y'    
        MakeTree(cSon,nCnt,tnLevel)
    ENDIF
ENDSCAN
GO nRec                  && 恢复记录指针

运行结果如下图:
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 liuxingang28 于 2014-9-30 10:51 编辑 ]
收到的鲜花
  • tlliqi2014-09-30 14:48 送鲜花  30朵   附言:加分
  • hyz000012014-10-08 17:50 送鲜花  5朵   附言:我很赞同

泉城飞狐
2014-09-30 10:48
chenjf
Rank: 1
来 自:四川成都
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-10-18
收藏
得分:0 
方法正确!
2014-09-30 16:48
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
回复 6 楼 liuxingang28
谢谢大师。


请问能不能能一次性导出全部物料的阶层表。

在或者是按照我需要的料号来导出阶层表,而不是去到main主表中进行修改,谢谢。

现在我执行代码:
MakeTree('A02.11.017170',1,0)

弹出的错误为:
表没有设置排序索引。
错误的位置在:
SEEK tcFather            && 定位到父项代码的首记录

感谢大师。
2014-09-30 16:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
嘿嘿,做过多假设害死人。

授人以渔,不授人以鱼。
2014-09-30 16:56
jgtren
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-9-30
收藏
得分:0 
回复 楼主 hyz00001
有点难度
2014-09-30 17:35
快速回复:bom 根据一阶 BOM 表整理多阶层 BOM 表。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022819 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved