【ABAP】SAP 批次特性值,以增强方式写入自定义表案例
前言这篇文章结合实际业务代码分享一套通过 CLFM 标准增强将批次特性值自动同步至自定义表的完整实现方案可直接落地复用。一、案例介绍在 SAP 批次管理业务中批次分类类类型 023特性值通常存放在标准表 AUSP 中虽然数据完整但表结构复杂、关联繁琐直接用于报表查询、接口读取、逻辑校验时非常不便。二、实现思路a. 使用批次分类保存增强 EXIT_SAPLCLFM_002 捕获特性变更b. 通过IN UPDATE TASK异步更新函数保证数据一致性c. 解析批次内部号→物料 批次号d. 根据特性名 表字段名映射赋值e. 同步新增 / 修改 / 删除状态自动更新自定义表 ZMMT004。三、关键增强步骤演示1、输入事务代码CMOD → 创建一个项目名称“ZMM001” → 选择增强分配 → 填入“CLFM0002” → 点击保存2、点击 “组件” 在用户出口 “EXIT_SAPLCLFM_002” 双击进入3、增强代码该增强属于 SAP 分类系统 (CLFM) 标准出口在分类 / 特性值保存前触发专门用于拦截、处理特性数据。KLART 023限定只处理批次分类IN UPDATE TASK异步更新跟随数据库 COMMIT 执行避免锁表、性能等问题T_ALLAUSP增强传出的变更特性集合包含状态、值、内部对象号等*---------------------------------------------------------------------* * 包含 ZXCLFU02 *---------------------------------------------------------------------* IF I_RMCLF-KLART EQ IF_SGT_PPDS_MASTERMC_CLASSTYPE_023. CALL FUNCTION ZMMFM011 IN UPDATE TASK TABLES IT_ALLAUSP T_ALLAUSP. ENDIF.4、更新批次函数模块FUNCTION ZMMFM011. *---------------------------------------------------------------------- **更新函数模块 * **本地接口 * TABLES * IT_ALLAUSP STRUCTURE RMCLAUSP OPTIONAL *---------------------------------------------------------------------- TYPES:BEGIN OF LS_MCH1, MATNR TYPE MATNR, CHARG TYPE CHARG_D, OBJEK TYPE CUOBN, END OF LS_MCH1. DATA: LT_MCH1 TYPE TABLE OF LS_MCH1, LT_ALLAUSP TYPE TT_RMCLAUSP. LT_ALLAUSP IT_ALLAUSP[]. DELETE LT_ALLAUSP WHERE STATU EQ SPACE.排除未更新数据 先删除 后更新 STATU 先 L 后 N SORT LT_ALLAUSP BY OBJEK ATINN STATU DESCENDING. LT_MCH1 CORRESPONDING #( LT_ALLAUSP ). SORT LT_MCH1 BY OBJEK. DELETE ADJACENT DUPLICATES FROM LT_MCH1 COMPARING OBJEK. LOOP AT LT_MCH1 ASSIGNING FIELD-SYMBOL(LS_MCH1). LS_MCH1 CONV MCH1_KEY( LS_MCH1-OBJEK ). ENDLOOP. 历史数据获取 SELECT A~* FROM ZMMT004 AS A INNER JOIN LT_MCH1 AS B ON B~MATNR EQ A~MATNR AND B~CHARG EQ A~CHARG ORDER BY A~MATNR, A~CHARG INTO TABLE DATA(LT_MMT004). 特性信息 WITH CABN AS ( SELECT DISTINCT ATINN FROM LT_ALLAUSP AS A ) SELECT A~ATINN, A~ATNAM, A~ATFOR FROM CABN AS A INNER JOIN CABN AS B ON B~ATINN EQ A~ATINN ORDER BY A~ATINN INTO TABLE DATA(LT_CABN). LOOP AT LT_ALLAUSP ASSIGNING FIELD-SYMBOL(LS_GROUP) GROUP BY ( OBJEK LS_GROUP-OBJEK ). DATA(LS_MCH1) CONV MCH1_KEY( LS_GROUP-OBJEK ). READ TABLE LT_MMT004 ASSIGNING FIELD-SYMBOL(LS_MMT004) WITH KEY MATNR LS_MCH1-MATNR CHARG LS_MCH1-CHARG BINARY SEARCH. IF NOT SY-SUBRC EQ 0.不存在 APPEND INITIAL LINE TO LT_MMT004 ASSIGNING LS_MMT004. LS_MMT004 CORRESPONDING #( LS_MCH1 ). SORT LT_MMT004 BY MATNR CHARG. ENDIF. LOOP AT GROUP LS_GROUP ASSIGNING FIELD-SYMBOL(LS_ALLAUSP). READ TABLE LT_CABN ASSIGNING FIELD-SYMBOL(LS_CABN) WITH KEY ATINN LS_ALLAUSP-ATINN BINARY SEARCH. CHECK SY-SUBRC EQ 0. ASSIGN COMPONENT LS_CABN-ATNAM OF STRUCTURE LS_MMT004 TO FIELD-SYMBOL(LV_FIELD). CHECK SY-SUBRC EQ 0. CASE LS_ALLAUSP-STATU. WHEN IF_EX_CACL_CLFN_NOTIFY_AT_SAVEGC_ALLAUSP_STATU_DEL.删除 FREE LV_FIELD. WHEN IF_EX_CACL_CLFN_NOTIFY_AT_SAVEGC_ALLAUSP_STATU_INS.新建 CASE LS_CABN-ATFOR. WHEN /ACCGO/IF_CCK_DPQS_CONSTANTSGC_CHAR. LV_FIELD LS_ALLAUSP-ATWRT. WHEN OTHERS. TRY. LV_FIELD LS_ALLAUSP-ATFLV. CATCH CX_ROOT. ENDTRY. ENDCASE. ENDCASE. ENDLOOP. ENDLOOP. MODIFY ZMMT004 FROM TABLE LT_MMT004. ENDFUNCTION.四、自定义表结构设计字段名数据元素数据类型长度小数位关键字字段描述MANDTMANDTCLNT300客户端主键MATNRMATNRCHAR4000物料编号主键CHARGCHARG_DCHAR1000批次编号主键Z_SCCBZE_SCCBCHAR7000生产厂别Z_SCCXZE_SCCXCHAR7000生产产线Z_KHGGZE_KHGGCHAR7000规格Z_KHDMZE_KHDMCHAR7000客户代码Z_KHPHZE_KHPHCHAR7000客户批号Z_OAIDZEL_OAIDCHAR3000流程 IDZ_CLYJZE_CLYJCHAR3000处理意见