低层码更新装置和低层码更新方法 技术领域 本发明涉及计算机技术领域, 具体而言, 涉及一种低层码更新装置和一种低层码 更新方法。
背景技术 在数据处理的过程中, 往往会需要数据的低层码进行更新操作, 低层码表示数据 处理系统的每个数据项一个从 0 至 N 的数字码。一个数据项只能有一个低层码, 当一个数 据项所处的结构层次不同, 则取处在最低层的层次码作为该数据项的低层码, 也即取数字 最大的层次码。
以企业资源规划 (Enterprise Resource Planning, ERP) 系统为例, 在 ERP 系统 中, 进行物料需求计划 (Material Requirement Planning, MRP) 运算时, 需要使用到物料 的低层码作为计算依据。传统低层码的计算采用全部物料计算、 全部物料清单 (Bill Of Material, BOM) 遍历的方式。而如果物料数量较多, BOM 结构比较复杂, 这时采用传统低层
码计算方法就需要花费较长时间, 这直接影响接下来 MRP 运算的总体效率, 需要研究如何 对其效率进行提高。
目前, 解决该效率问题主要有以下方案 :
1、 优化低层码计算算法, 提高计算效率。 该方法是比较主流的解决策略, 通过算法 优化, 确实可以大幅度提高传统低层码计算效率。
缺陷 : 算法优化效果是有限的, 计算低层码所耗用的时间不可能减少为 0, 当物料 数量较大时, 被物料基数放大后的计算时间依然是用户所无法接受的。
2、 在非工作时间执行计算。 该方案采用变相手段规避低层码运算耗时较长带来的 问题, 在非工作时间进行低层码计算, 在工作时间对其进行使用。
缺陷 : 并未真正解决其效率问题。在非工作时间执行时, 如果出现异常情况, 无法 处理, 同样会造成企业损失。
3、 采用多线程技术, 令低层码计算任务在后台运行。该方案较之方案 2 更为优化, 可以随时进行低层码计算。
缺陷 : 也并没有从根本上解决效率问题。而且, 多线程技术比较复杂, 容易受到环 境影响, 出现错误。
4、 在 BOM 维护时, 计算并更新物料低层码。该方案在维护 BOM 时, 对进行了结构修 改的物料进行其层次运算, 并计算及更新该物料和其全部子项物料的低层码, 该方案与本 发明中采用的轻量型低层码计算方法类似, 可以缩小计算物料范围, 减轻计算负担。
缺陷 : 将低层码计算的负担转嫁给 BOM 维护操作, 使得 BOM 维护时效率降低。
5、 在 BOM 维护时, 后台计算并更新物料低层码。这是方案 4 的优化, 采用多线程技 术, 在 BOM 维护时, 在后台进行方案 4 中进行的计算过程, 用户不会感觉到 BOM 维护效率的 降低。
缺陷 : 技术复杂, 实现难度高, 并且容易出现并发问题。以上方案有的是从算法角度提高低层码计算效率, 有的是从计算物料范围角度提 高效率, 但是都有各自的明显缺陷, 如效率提高有限, 技术实现难度高, 易受环境影响, 容易 出错, 用户体验较差等等。
因此, 需求一种高效率、 易实现的低层码更新方案, 能够保证在数据之间的结构关 系比较复杂情况下, 也能顺利完成低层码的更新, 且不受系统环境影响, 不易出错。 发明内容
本发明所要解决的技术问题在于, 提供一种高效率、 易实现的低层码更新方案, 能 够保证在数据之间的结构关系比较复杂情况下, 也能顺利完成低层码的更新, 且不受系统 环境影响, 不易出错。
有鉴于此, 本发明提供一种低层码更新装置, 包括 : 数据项记录单元, 记录所有发 生变化的数据项 ; 层次码计算单元, 在记录完成后, 根据与所述数据项相关的层次关系数 据, 取得所述数据项的层次码, 并从所述数据项的层次码中取得出所述数据项的最大层次 码, 以及根据与所述数据项相关的层次关系数据以及所述数据项的最大层次码, 取得所述 数据项的子项数据项的最大层次码 ; 低层码更新单元, 使用所述数据项和所述子项数据项 的最大层次码, 对所述数据项和所述子项数据项的低层码进行更新。 通过该技术方案, 一次 性记录发生变化的数据, 并进行低层码的更新, 快速有效, 减少了资源的消耗。本技术方案 尤其适用于 ERP 系统中的物料管理, 所述层次关系数据可以是物料清单。
在上述技术方案中, 优选地, 还包括 : 过滤单元, 将所述数据项和所述子项数据项 的最大层次码与原低层码进行对比, 从所述数据项和所述子项数据中过滤掉最大层次码与 原低层码相同的数据项 ; 所述低层码更新单元使用过滤后的剩余数据项的最大层次码, 对 所述剩余数据项的低层码进行更新。 通过该技术方案, 通过过滤操作后, 减少了需更新的数 据项, 也就减少了更新操作所需占用的资源。
在上述技术方案中, 优选地, 所述数据项记录单元在所述层次关系数据发生结构 变化时, 记录所述层次关系数据中发生变化的所述数据项。 通过该技术方案, 对于不影响层 次关系结构变化的数据变更, 则不记录, 进一步减少资源消耗。
在上述技术方案中, 优选地, 所述层次码计算单元在所述层次关系数据中, 逐层遍 历所述数据项的父项数据项, 根据遍历结果来取得所述数据项的层次码。 通过该技术方案, 可以准确有效地取得多个数据项的层次码。
在上述技术方案中, 优选地, 所述层次关系数据的数量为一个或多个, 所述数据项 的层次码为一个或多个。 通过该技术方案, 可以对多个层次关系进行管理, 能够保证变化数 据记录不会疏漏。
本发明还提供一种低层码更新方法, 包括 : 步骤 202, 记录所有发生变化的数据 项; 步骤 204, 在记录完成后, 根据与所述数据项相关的层次关系数据, 取得所述数据项的 层次码, 并从所述数据项的层次码中取得出所述数据项的最大层次码 ; 步骤 206, 根据与所 述数据项相关的层次关系数据以及所述数据项的最大层次码, 取得所述数据项的子项数据 项的最大层次码 ; 步骤 208, 使用所述数据项和所述子项数据项的最大层次码, 对所述数据 项和所述子项数据项的低层码进行更新。 通过该技术方案, 一次性记录发生变化的数据, 并 进行低层码的更新, 快速有效, 减少了资源的消耗。本技术方案尤其适用于 ERP 系统中的物料管理, 所述层次关系数据可以是物料清单。
在上述技术方案中, 优选地, 在所述步骤 208 之前, 还包括 : 将所述数据项和所述 子项数据项的最大层次码与原低层码进行对比, 从所述数据项和所述子项数据中过滤掉最 大层次码与原低层码相同的数据项 ; 所述步骤 208 具体包括 : 使用过滤后的剩余数据项的 最大层次码, 对所述剩余数据项的低层码进行更新。通过该技术方案, 通过过滤操作后, 减 少了需更新的数据项, 也就减少了更新操作所需占用的资源。
在上述技术方案中, 优选地, 所述步骤 202 具体包括 : 在所述层次关系数据发生结 构变化时, 从所述层次关系数据中查询出所述数据项。 通过该技术方案, 对于不影响层次关 系结构变化的数据变更, 则不记录, 进一步减少资源消耗。
在上述技术方案中, 优选地, 所述步骤 204, 根据所述层次关系数据, 取得所述数据 项的层次码, 具体包括 : 在所述层次关系数据中, 逐层遍历所述数据项的父项数据项, 根据 遍历结果来取得所述数据项的层次码。通过该技术方案, 可以准确有效地取得多个数据项 的层次码。
在上述技术方案中, 优选地, 所述层次关系数据的数量为一个或多个, 所述数据项 的层次码为一个或多个。 通过该技术方案, 可以对多个层次关系进行管理, 能够保证变化数 据记录不会疏漏。
通过以上技术方案, 可以实现提供一种高效率、 易实现的低层码更新方案, 能够保 证在数据之间的结构关系比较复杂情况下, 也能顺利完成低层码的更新, 且不受系统环境 影响, 不易出错。附图说明
图 1 是根据本发明的一个实施例的低层码更新装置的框图 ;
图 2 是根据本发明的一个实施例的低层码更新方法的流程图 ;
图 3 是根据本发明的一个实施例的低层码更新方法中使用的物料清单的结构示 意图 ;
图 4 是根据本发明的一个实施例的低层码更新方法中使用的物料清单的结构示 意图 ;
图 5 是根据本发明的一个实施例的低层码更新方法的工作流程图 ;
图 6 是物料清单的结构示意图 ;
图 7 是物料清单的结构示意图。 具体实施方式
为了能够更清楚地理解本发明的上述目的、 特征和优点, 下面结合附图和具体实 施方式对本发明进行进一步的详细描述。
在下面的描述中阐述了很多具体细节以便于充分理解本发明, 但是, 本发明还可 以采用其他不同于在此描述的其他方式来实施, 因此, 本发明并不限于下面公开的具体实 施例的限制。
图 1 是根据本发明的一个实施例的低层码更新装置的框图。
如图 1 所示, 本发明提供一种低层码更新装置 100, 包括 : 数据项记录单元 102,记录所有发生变化的数据项 ; 层次码计算单元 104, 在记录完成后, 根据与所述数据项相关 的层次关系数据, 取得所述数据项的层次码, 并从所述数据项的层次码中取得出所述数据 项的最大层次码, 以及根据与所述数据项相关的层次关系数据以及所述数据项的最大层次 码, 取得所述数据项的子项数据项的最大层次码 ; 低层码更新单元 106, 使用所述数据项和 所述子项数据项的最大层次码, 对所述数据项和所述子项数据项的低层码进行更新。通过 该技术方案, 一次性记录发生变化的数据, 并进行低层码的更新, 快速有效, 减少了资源的 消耗。本技术方案尤其适用于 ERP 系统中的物料管理, 所述层次关系数据可以是物料清单。
在上述技术方案中, 还包括 : 过滤单元 108, 将所述数据项和所述子项数据项的最 大层次码与原低层码进行对比, 从所述数据项和所述子项数据中过滤掉最大层次码与原低 层码相同的数据项 ; 所述低层码更新单元 106 使用过滤后的剩余数据项的最大层次码, 对 所述剩余数据项的低层码进行更新。 通过该技术方案, 通过过滤操作后, 减少了需更新的数 据项, 也就减少了更新操作所需占用的资源。
在上述技术方案中, 优选地, 所述数据项记录单元 102 在所述层次关系数据发生 结构变化时, 记录所述层次关系数据中发生变化的所述数据项。 通过该技术方案, 对于不影 响层次关系结构变化的数据变更, 则不记录, 进一步减少资源消耗。 在上述技术方案中, 所述层次码计算单元 104 在所述层次关系数据中, 逐层遍历 所述数据项的父项数据项, 根据遍历结果来取得所述数据项的层次码。 通过该技术方案, 可 以准确有效地取得多个数据项的层次码。
在上述技术方案中, 所述层次关系数据的数量为一个或多个, 所述数据项的层次 码为一个或多个。 通过该技术方案, 可以对多个层次关系进行管理, 能够保证变化数据记录 不会疏漏。
图 2 是根据本发明的一个实施例的低层码更新方法的流程图。
如图 2 所示, 本发明还提供一种低层码更新方法, 包括 : 步骤 202, 记录所有发生变 化的数据项 ; 步骤 204, 在记录完成后, 根据与所述数据项相关的层次关系数据, 取得所述 数据项的层次码, 并从所述数据项的层次码中取得出所述数据项的最大层次码 ; 步骤 206, 根据与所述数据项相关的层次关系数据以及所述数据项的最大层次码, 取得所述数据项的 子项数据项的最大层次码 ; 步骤 208, 使用所述数据项和所述子项数据项的最大层次码, 对 所述数据项和所述子项数据项的低层码进行更新。通过该技术方案, 一次性记录发生变化 的数据, 并进行低层码的更新, 快速有效, 减少了资源的消耗。本技术方案尤其适用于 ERP 系统中的物料管理, 所述层次关系数据可以是物料清单。
在上述技术方案中, 在所述步骤 208 之前, 还包括 : 将所述数据项和所述子项数据 项的最大层次码与原低层码进行对比, 从所述数据项和所述子项数据中过滤掉最大层次码 与原低层码相同的数据项 ; 所述步骤 208 具体包括 : 使用过滤后的剩余数据项的最大层次 码, 对所述剩余数据项的低层码进行更新。通过该技术方案, 通过过滤操作后, 减少了需更 新的数据项, 也就减少了更新操作所需占用的资源。
在上述技术方案中, 所述步骤 202 具体包括 : 在所述层次关系数据发生结构变化 时, 从所述层次关系数据中查询出所述数据项。 通过该技术方案, 对于不影响层次关系结构 变化的数据变更, 则不记录, 进一步减少资源消耗。
在上述技术方案中, 所述步骤 204, 根据所述层次关系数据, 取得所述数据项的层
次码, 具体包括 : 在所述层次关系数据中, 逐层遍历所述数据项的父项数据项, 根据遍历结 果来取得所述数据项的层次码。通过该技术方案, 可以准确有效地取得多个数据项的层次 码。
在上述技术方案中, 所述层次关系数据的数量为一个或多个, 所述数据项的层次 码为一个或多个。 通过该技术方案, 可以对多个层次关系进行管理, 能够保证变化数据记录 不会疏漏。
以下详细说明本发明的技术方案的低层码更新装置, 在 ERP 系统中物料管理上的 应用。
在物料数量较大, BOM 结构比较复杂的情况下, 单纯的低层码计算算法优化对效率 提高所起到的作用是有限的。而对企业应用场景分析中发现, BOM 的结构修改范围有限, 因 此对全部物料进行低层码运算是效率低下的, 这种计算方式对很多结构没有变化的物料进 行了无用的计算。本发明的技术方案就是解决如何确定结构变更的物料, 并对其以及由其 引起的层次结构变化的物料进行低层码计算。 本发明提供的轻量型的低层码更新方法最大 限度的缩小了低层码运算的物料范围, 减少了低层码计算基数, 从而提高低层码计算效率。
相比于全部物料计算的 “重型” 计算方案, 该轻量型的更新方法, 可有效减轻低层 码计算负担, 减少总体计算时间, 切实符合企业实际应用场景并满足其效率要求。 根据本发明的低层码更新方法, 工作时需要遵守以下模型 :
BOM 的维护采用主子表模型, 即主表存储的是父项物料信息, 结构如图 3 所示, 子 表存储的是该 BOM 的子项物料信息, 结构如图 4 所示。这是一种仅有 2 层的树形结构, 有且 只有一个父节点, 可以有多个子节点。采用该种模型的特点是 BOM 之间的维护是相互独立 的, 对物料 B1 的维护, 仅仅会影响物料 B1 的下一层子项结构, 并不会影响物料 C1 的下一层 子项 D1 和 D2 的结构, 也不会影响 B1 的父项 A 的结构。
因此, 低层码更新方法的实现需要以下前提条件 :
1、 BOM 维护采用父项、 子项形式, 例如采用 2 张数据库表 ( 主子表形式 ) 进行维护。
2、 已知物料信息数据, 并可以正常获取。如将物料信息存储在数据库中。本文中 用 mt 表示物料的信息数据集合。
3、 已经计算过 mt 中物料的低层码, 存放至 mt 集合中。
如图 5 所示, 低层码更新方法的具体步骤包括 :
步骤 502, 变更物料表记录。存储 BOM 维护中更改的物料信息。存储更改物料信息 的表记为 m_mt。
在进行 BOM 维护时, 如果对 BOM 进行了增加节点、 删除节点及修改节点 ( 是指替换 原有节点物料 )3 种操作, 就会对 BOM 的结构进行改动, 从而可能会影响该物料及其全部子 项物料的低层码, 需要将该物料记入变更物料表, 用于后面的计算。
如果采用该文中的 BOM 数据结构模型, 会出现以下几种情况 :
1) 增加 BOM。在增加一个新的 BOM 时, 由于只能增加该 BOM 的下一层子项物料, 与 其他的 BOM 数据是互相独立的, 这并不会影响该物料在其他 BOM 中的层次结构, 只会影响该 物料全部 ( 层级 ) 子项物料的低层码, 而在步骤 508 中对此进行了处理, 因此, 只需要将当 前增加的 BOM 的全部子项物料记入变更物料表即可。
2) 删除 BOM。与增加 BOM 时类似, 删除 BOM 时也不会影响该物料在其他 BOM 中的
层次结构, 同样只需要将当前删除的 BOM 的全部子项物料记入变更物料表即可。
3) 修改 BOM。对 BOM 进行修改, 同样会有 3 种情况 :
a) 增加 BOM 子项, 将增加的子项物料记入变更物料表。
b) 删除 BOM 子项, 将删除的子项物料记入变更物料表。
c) 替换 BOM 子项, 此情况等同于先删除再增加子项, 因此需要将被替换子项物料 及替换子项物料都记入变更物料表。
需要说明的是, 只有在 BOM 维护时对 BOM 的树状结构进行了更改的, 才要按照如上 3 种情况进行处理, 如果只是修改了 BOM 的属性信息, 或者只修改了 BOM 中物料的属性信息, 并未对结构产生影响, 则不要将其记入变更物料表中。
从本质上来讲, 表更物料表中记录的是在 BOM 树结构中发生变化的物料, 因为这 种变化, 可能会使得该物料及其全部子项物料的层次码产生变化, 从而影响其低层码。
步骤 504, 变更物料层次码计算。 计算 m_mt 中物料在 BOM 树中的最大层次码, 该集 合记为 Map。
在步骤 502 中, 已经将低层码可能发生改变, 或者可能会影响其子项物料低层码 的那些物料记录在变更物料表中, 本步骤中要计算这些物料的最大层次码。
根据物料检索 BOM, 计算出 m_mt 中各物料的层次码, 即查找出该物料在 BOM 树中的 层次号 ( 一般将 BOM 树根节点记为 0 层, 下层子项层次号加 1, 依次类推 )。由于同一物料 可能在不同的 BOM 中出现, 因此 m_mt 中物料在不同 BOM 中的层次码可能是不同的, 这时只 需要获取其层次码最大值即可。
BOM 树的遍历及 m_mt 中各物料层次码的计算可以运用临时表, 并采用以下方案进 行:
1) 构建缓存 Map, 用来存储物料及层次码的键值对, 将 m_mt 中的物料放入 Map 中, 并将其所有物料的层次码初始化置为 0 ;
2) 构建临时表 temp, 分别存储 : 子项物料、 变更物料和层次码 ;
3) 初始化 temp, 将 m_mt 中的物料放入 temp 的变更物料列和子项物料列 ( 即该两 列每一行的数据均相同 ), 层次码列全部置为 0 ;
4) 设 i 为正整数, 初始化 i = 1 ;
5) 根据物料在 BOM 中检索, 查找出子项物料列的各个物料在 BOM 中的父项物料, 即 相应变更物料列中物料的向上第 i 层物料 ;
6) 查找出的集合记为 S1, 如果 S1 为空, 则说明当前子项物料列的物料已经没有任 何父项节点了, 即已经遍历出了 m_mt 中物料的全部父项节点 ( 全部级别 ), 转入步骤 11 ;
7) 将 S1 中物料的层次码加 1( 在其父项物料层次码基础上加 1), 需要注意的是, 由于物料可能出现在多个 BOM 中, 因此一次查询时可能找出同一物料的多个父项 ;
8) 将 S1 中物料的层次码与 Map 中相应物料的层次码进行比较, 如果前者数值大于 后者, 则更新 Map 中物料的层次码 ;
9) 清空临时表 temp, 并将 S1 中物料放入 temp 的子项物料列中, 作为下次查询父 项的子项物料数据 ;
10) 令 i = i+1, 并返回步骤 5 ;
11) 此时 temp 中的数据已经为空, Map 中存储的更新物料的层次码为其在全部 BOM中的最大层次码, 即其最大深度 ( 根结点记为 0 层 )。Map 中数据在步骤 506 中作为输入数 据使用。
步骤 506, 变更物料过滤。将 Map 中物料的层次码与 mt 中相应物料的低层码进行 比较, 过滤掉数值相同的那些物料。
由于当前 Map 中的更新物料中可能存在着某些物料的低层码没有发生变化, 即 Map 中物料的层次码与 mt 中相应物料的低层码相同, 这些物料对低层码没有产生影响, 可 以过滤掉。可以采用如下方案进行过滤 :
1) 令 i 为正整数, 初始化 i = 1 ;
2) 取出 Map 中第 i 个物料及其层次码, 与 mt 中相应物料的低层码进行比较, 如果 前者等于后者, 则将其从 Map 中去除 ;
3) 令 i = i+1, 判断 i 是否等于 Map 中物料的个数, 如果相等, 则转入步骤 4, 否则 转入步骤 2 ;
4) 当前 Map 就是经过过滤的结果集, 将作为步骤 508 的输入参数参与后面的计算。
步骤 508, 子项物料层次码计算。 计算 Map 中物料在 BOM 树中全部子项物料的层次 码, 同样只保留物料的最大层次码, 所得集合记为 S_Map。 根据物料检索 BOM, 并向下展开计算 Map 中物料的各级子项的层次码, 直至遍历至 所有叶子节点。可以将这一过程看成是以 Map 中物料为根节点, 根据 BOM 向下遍历并计算 层次码, 只不过 Map 中被作为根节点的物料的层次码不是 0, 而是保存在 Map 中的物料相应 的层次码 ( 由步骤 504 中计算得出的 )。由于同一物料可能在不同的 BOM 中出现, 因此 Map 中物料在不同 BOM 中查找出的子项物料可能是相同的, 但由于 Map 中两个物料的层次码可 能不同, 因此查找出来的相同子项物料的层次码也可能不同, 这时只需要获取其层次码最 大值即可。
该步骤的计算也可以运用临时表, 并采用以下方案进行 :
1) 构建缓存 S_Map, 将 Map 中的数据拷贝至 S_Map 中。S_Map 用来存储物料及层次 码的键值对, 本步骤中可能会产生遍历出新的子项物料及其层次码, 同样要放入 Map 集合 中;
2) 构建临时表 temp2, 分别存储 : 父项物料和层次码 ;
3) 初始化 temp2, 将 S_Map 中的物料和层次码分别放 temp2 的入父项物料列和层 次码列 ;
4) 查找出父项物料列的各个物料在 BOM 中的向下一层子项物料 ;
5) 查找出的集合记为 S2, 如果 S2 为空, 则说明当前父项物料列的物料已经没有任 何子项节点了, 即已经遍历出了原 Map 中物料 ( 即过滤后的变更物料 ) 的全部子项节点 ( 全 部级别 ), 转入步骤 9 ;
6) 将 S2 中物料的相应的层次码加 1( 在其父项物料层次码基础上加 1), 需要注意 的是, 由于物料可能出现在多个 BOM 中, 因此一次查询时可能找出同一物料的多个子项 ;
7) 将 S2 中物料的层次码与 S_Map 中相应物料的层次码进行比较, 如果前者数值大 于后者, 则更新 S_Map 中物料的层次码 ; 如果 S2 的某物料是中不存在的, 则将该物料添加到 S_Map 中 ;
8) 清空临时表 temp2, 并将 S2 中物料及其层次码分别放入 temp2 的子项物料列和
层次码列中 ; 返回步骤 4 ;
9) 此时 temp2 中的数据已经为空, S_Map 中存储的物料及其层次码为原有的过滤 后的变更物料, 以及其在全部 BOM 中的所有子项物料及其次码, 注意这里只需要保存物料 的最大层次码。S_Map 中数据在步骤 510 中作为输入数据使用。
步骤 510, 变更物料低层码更新。将 S_Map 中物料的层次码与 mt 中相应物料的低 层码进行比较, 如果前者与后者不相同, 则将 S_Map 中物料的层次码更新至该物料在 mt 中 的低层码
由于低层码是记录层次码的最大值, 因此在对 S_Map 中物料进行低层码更新时, 需要注意, 只有在 S_Map 中物料的层次码比 mt 中相应物料的低层码数值大的情况下, 才去 更新该物料的低层码。
可以采用如下方案进行过滤 :
1) 令 i 为正整数, 初始化 i = 1 ;
2) 取出 S_Map 中第 i 个物料及其层次码, 与 mt 中相应物料的低层码进行比较, 如 果前者与后者不相同, 则将其在 mt 中的低层码更新 ;
3) 令 i = i+1, 判断 i 是否等于 S_Map 中物料的个数, 如果相等, 则结束 ; 否则转入 步骤 2。 根据以上技术方案的低层码更新方法的一个实例如下。
下面以图 6 及图 7 中的三个 BOM 为例进行案例说明, 原有 BOM 为 A1、 A2 和 A3, 结 构如图 6 所示, 通过传统低层码计算方法可以计算出各个物料的低层码。现对其中的 B1 结 构进行修改, 将其下属子项 C1 和 C2 删除, 以此来模拟 BOM 维护操作。此时根据本发明技术 方案的轻量型的低层码更新方法进行低层码计算, 为清晰展示整个过程, 特采用数据库表 中的临时表为计算工具进行说明, 数据推演过程如下 :
1) 数据准备 : BOM 在修改前进行低层码计算, 得出 C1 的低层码为 2, D1 及 D2 的低 层码均为 3, C2 的低层码为 2, 将这些值存入数据库表 mt 中, 如表 1 所示。
表1: 原低层码记录表 :
2) 变更物料记录 : 在 BOM 维护时, 对将 B1 下属子项 C1 及 C2 删除。这时, 将更改 的物料 C1 和 C2 计入变更物料表中, 如表 2 所示。
表2: 变更物料表 :
3) 变更物料层次码计算 : 遍历 BOM, 查找出 C1 和 C2 的父项节点。首先建立临时 表, 并设置初始数据, 如表 3 所示。
表3: 临时表初始数据 :
表4: 缓存 Map :
表 5 中的 “子项物料” 列展示了一次父项检索后的结果。注意, 由于修改后 BOM 中 C1 存在两个父项节点, 因此检索出来两条数据, 分别为 A2 和 A3, 而 C1 的层次码要加 1。
表5: 第一次父项检索后结果 :
表6: 缓存 Map :
以表 5 中子项物料列的物料为子节点, 在 BOM 树中查找其父节点, 如果查找到父节 点, 则并将其层次码加 1, 否则层次码不变, 结果如表 7 所示。
表7: 第二次父项检索后结果 :
表8: 缓存 Map :
继续遍历父项节点, 会发现此时已经遍历到了所有根节点, 则缓存 Map 中存储的 C1 及 C2 的层次码是其在所有 BOM 中的最大层次数值, 如表 9 所示。
表9: 第三次父项检索后结果 :
表 10 : 最终缓存 Map :
4) 变更物料过滤 : 将 Map 中 C1 的层次码 (1) 与 mt 中 C1 的低层码 (2) 相比较, 发 现两者值不相同, 则不可以过滤掉该物料 ; 同理, Map 中 C2 的层次码 (2) 与 mt 中 C2 的低层 码 (2) 相比较, 发现两者值相同, 则过滤掉 C2, 此时 Map 中仅剩下 C1 及其层次码 1。
5) 子项物料层次码计算 : 遍历 BOM, 检索 Map 中 C1 的子节点, 并计算其层次码 :
构建临时表 temp2, 将 Map 中物料 C1 及其层次码放入表中。构建缓存 S_Map, 同样 将 Map 中数据拷贝至 S_Map 中, 如表 11 和表 12 所示。
表 11 : 初始化临时表 temp2 :
表 12 : 缓存 S_Map :
查找 C1 的子项节点, 有 D1 和 D2 两个节点, 其层次码为在 C1 的层次码基础上加 1。 并将这些数据添加或更新至 S_Map 中, 如表 13 和表 14 所示。
表 13 : 第一次检索子项节点 :
表 14 : 缓存 S_Map :
遍历 D1 和 D2 的子项物料, 该例子中, D1 和 D2 已经是叶子节点, 因此遍历出的结 果为空, 此时可以结束遍历。
6) 变更物料低层码更新 : 循环比较 S_Map 中物料层次码与 mt 表中相应物料的低 层码, 如果两者不相同, 则更新 mt 表中物料的低层码, 如表 15 所示。
表 15 :
通过上面的案例说明也可以看出, 在进行 BOM 更改后, 对新的 BOM 进行低层码计算 时, 并没有对 BOM 中所有的物料进行低层码运算, 只是有针对性的对部分物料进行运算, 缩 小了计算范围, 尤其是在 BOM 复杂, 物料较多, BOM 修改不大的情况下, 可显著提高低层码计 算效率。
通过以上技术方案, 可以实现提供一种高效率、 易实现的低层码更新方案, 该轻量 型的低层码更新方案虽然也增加了 BOM 维护时的负担, 即将修改的物料进行保存, 但是仅
有一次读取操作, 效率损失并不明显, 出错率较低。在低层码计算时, 再将这些修改过的物 料读取出来, 对其进行有限范围的遍历和计算。
极端情况下, 企业在两次低层码计算之间没有对 BOM 结构进行任何修改, 如果采 用以往全部物料计算方案, 则依然要进行全部遍历和计算。但如果采用本发明的轻量型的 低层码更新方案, 待计算的物料为空, 即不必再进行低层码计算过程。 这与实际情况也是相 符的。
另外一种极端情况, 即企业在两次低层码计算之间将 BOM 结构进行了较大改动, 使得全部物料的低层码都发生了变化, 这时采用轻量型低层码更新方案与采用以往计算方 法的效率是几乎相同的, 都进行了全部 BOM、 全部物料的遍历和计算。
因此, 在 BOM 修改不频繁或者 BOM 修改范围不大的企业中, 采用本发明的轻量型的 低层码更新方案可以大幅度提高其低层码计算效率。
以上所述仅为本发明的优选实施例而已, 并不用于限制本发明, 对于本领域的技 术人员来说, 本发明可以有各种更改和变化。 凡在本发明的精神和原则之内, 所作的任何修 改、 等同替换、 改进等, 均应包含在本发明的保护范围之内。