ABAP内表重复值标记问题:首条重复值未被标记求解决
解决ABAP内表重复值全标记问题
原代码仅通过与前一条记录的knumh对比标记后续重复条目,导致首次出现的重复值无法被标记。要实现所有重复值(包括首次出现的)都标记为X,可通过先统计每个knumh的出现次数,再根据次数判断标记的方式实现,具体修改如下:
修改后的代码
sort result_package stable by knumh zzklfn1. * 定义统计内表,用于记录每个knumh的出现次数 data: gt_count type hashed table of i with unique key table_line, lv_count type i. * 第一次循环:统计每个knumh的出现次数 loop at result_package assigning <result_fields>. read table gt_count with table line <result_fields>-knumh into lv_count. if sy-subrc = 0. lv_count = lv_count + 1. modify gt_count from lv_count index sy-tabix. else. insert 1 into gt_count. modify gt_count from <result_fields>-knumh index sy-tabix. endif. endloop. * 第二次循环:根据次数标记重复值 loop at result_package assigning <result_fields>. read table gt_count with table line <result_fields>-knumh into lv_count. <result_fields>-zzstafkz = cond #( when lv_count > 1 then 'X' else '' ). endloop.
逻辑说明
- 排序保证相同
knumh的记录连续,提升统计效率; - 哈希表(HASHED TABLE)用于存储计数,确保查找和修改操作的高效性;
- 第一次遍历完成对每个
knumh出现次数的累加统计; - 第二次遍历根据统计的次数判断:只要该
knumh出现次数大于1,所有对应记录的zzstafkz均设为X,否则为空。
简化方案(ABAP 7.40+版本适用)
利用GROUP BY语法可更简洁实现统计逻辑:
sort result_package stable by knumh zzklfn1. * 分组统计每个knumh的出现次数 data(gt_knumh_count) = value #( for groups <group> of <result_fields> in result_package group by <result_fields>-knumh ( knumh = group-key count = lines( group ) ) ). * 遍历标记重复值 loop at result_package assigning <result_fields>. read table gt_knumh_count with key knumh = <result_fields>-knumh into data(ls_count). <result_fields>-zzstafkz = cond #( when ls_count-count > 1 then 'X' else '' ). endloop.
内容的提问来源于stack exchange,提问作者trapvader23
相关产品推荐
相关产品推荐

