ABAP算法:找出递归的物料
来源:互联网 发布:方鸿渐和小姐 知乎 编辑:程序博客网 时间:2024/05/17 07:55
今天有人在群里问了这样一个问题,一个内表有2个字段:f1和f2,每个条目代表物料f1消耗了f2。有一种可能是,f1消耗了f2,f2直接或间接又消耗了f1,形成一种递归关系。
现在希望找出内表中所有的这种物料,因为这些物料对成本分摊有不良影响。比如:[a,b] [b,c] [a,d] [b,d] [c,a];则结果包含a,b,c,不包含d。乍一看需求有点晕,仔细一想,其实就是将内表中所有条目,两两之间进行运算而已。
程序思路:每次取内表中的一个条目,将它与内表中位于其前面的所有条目进行运算;运算过程中,如果生成了新对应关系,则将其添加到内表后面(也等待着与内表中所有条目进行运算);如此循环……等到内表循环结束,所有可能的对应关系,自然都被考虑到了。
DATA: BEGIN OF wa1,
f1 TYPE c,
f2 TYPE c,
END OF wa1.
DATA: wa2 LIKE wa1,
tabix LIKE sy-tabix,
itab LIKE TABLE OF wa1 WITH HEADER LINE,
itab2 TYPE TABLE OF c WITH HEADER LINE.
itab-f1 = 'a'.
itab-f2 = 'b'.
APPEND itab.
itab-f1 = 'b'.
itab-f2 = 'c'.
APPEND itab.
itab-f1 = 'a'.
itab-f2 = 'd'.
APPEND itab.
itab-f1 = 'b'.
itab-f2 = 'd'.
APPEND itab.
itab-f1 = 'c'.
itab-f2 = 'a'.
APPEND itab.
LOOP AT itab INTO wa1.
tabix = sy-tabix - 1.
LOOP AT itab INTO wa2 TO tabix.
IF wa2-f2 = wa1-f1. "运算一
READ TABLE itab WITH KEY
f1 = wa2-f1 f2 = wa1-f2.
IF sy-subrc <> 0.
IF wa2-f1 = wa1-f2.
APPEND wa2-f1 TO itab2. "存到结果表
ELSE.
itab-f1 = wa2-f1.
itab-f2 = wa1-f2.
APPEND itab. "添加新对应关系到内表
ENDIF.
ENDIF.
ENDIF.
IF wa2-f1 = wa1-f2. "运算二
READ TABLE itab WITH KEY
f1 = wa1-f1 f2 = wa2-f2.
IF sy-subrc <> 0.
IF wa1-f1 = wa2-f2.
APPEND wa1-f1 TO itab2. "存到结果表
ELSE.
itab-f1 = wa1-f1.
itab-f2 = wa2-f2.
APPEND itab. "添加新对应关系到内表
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
SORT itab2.
DELETE ADJACENT DUPLICATES FROM itab2.
LOOP AT itab2. "输出结果表
WRITE: / itab2.
ENDLOOP.
LOOP AT itab. "输出所有对应关系作参考
WRITE: / itab-f1, itab-f2.
ENDLOOP.
程序运行过程:
1,[a,b][b,c][a,d][b,d][c,a],他们相互间运算完毕后,生成了新对应关系[a,c][c,b][b,a][c,d];
2,[a,c][c,b][b,a][c,d]这些新对应关系与老对应关系两两运算,同时相互间也两两运算,生成了新对应关系[c,c][a,a][b,b]。这是特殊的对应关系(即递归关系),它们不需要重新参与运算,直接写到了我们的结果表。
由于没有新对应关系的生成,程序运行完毕,结果表中形成了a,b,c三条记录。- ABAP算法:找出递归的物料
- ABAP 仓库库存-物料拆分的算法
- ABAP 开发物料接口
- ABAP用BAPI函数BAPI_MATERIAL_SAVEDATA 修改物料的净重
- ABAP 用BAPI批量导入物料的质量视图
- 二级物料处理程序,上(品尝ABAP的味道)
- 二级物料处理程序,中(品尝ABAP的味道)
- 二级物料处理程序,下(品尝ABAP的味道)
- 利用递归算法找出黑洞数
- abap物料凭证冲销BAPI_GOODSMVT_CANCEL
- 递归方法计划销售订单的计划物料成本
- 递归方法计划销售订单的计划物料成本
- 在二元树中找出和为某一值的所有路径-递归算法
- 从数组中找出相同的元素,并且分组存放,采用递归算法
- 从数组中找出相同的元素,并且分组存放,采用递归算法
- 使用递归算法重做:找出字符串中第一个只出现一次的字符
- CK11N对物料进行价格标记时,系统提示物料递归错误;物料的BOM里面勾选了“递归允许”。
- ABAP增强开发:更新物料主数据毛重,净重,单位的BAPI使用方法(经典)
- ABAP:下载服务器文件到本机
- (C语言)共用体union的用法举例
- POJ 1703 并查集
- Delphi的内存管理及内存泄露问题
- kmalloc详解
- ABAP算法:找出递归的物料
- cat /proc/meminfo
- ABAP:利用SAP定时器自动刷新LIST
- 在WPF中读写config配置文件
- Direct3D win32框架(显示每秒帧率)
- ABAP:利用SAP定时器自动刷新ALV
- HTML <frameset> 标签的使用
- 很多浮云,实质的很少
- SAP中的文档维护