SAP PP顾问实战构建COGI删除审计体系的三大策略与NOTE 309050深度解析在SAP PP模块的日常运维中COGI事务码下的AFFW记录管理一直是让顾问头疼的灰色地带。当生产线上的货物移动出现差异时系统会自动在COGI中生成错误记录这本是让用户修正数据的最后机会。但现实情况往往是——某些缺乏培训的操作人员会直接删除这些关键记录导致后续审计时无法追溯原始错误。更糟糕的是标准SAP系统不会自动记录这些删除操作就像用橡皮擦去了犯罪现场的所有指纹。1. 问题本质与解决方案全景图AFFW表作为COGI事务的核心数据容器存储着所有待处理的货物移动错误。标准SAP设计逻辑中当用户通过COGI删除某条记录时系统只是简单执行DELETE FROM affw WHERE...语句不会在任何地方留下删除痕迹。这就好比图书馆管理员直接扔掉借阅记录本却不在注销台账上做任何备注。面对这种情况我们通常有三种技术路径可选方案类型实施难度维护成本审计完整性业务适应性权限管控(SHD0)★★☆低部分需流程配合NOTE 309050★★★中完整原生支持函数增强★★★★高可定制灵活度高权限管控方案看似简单但实际会遇到两个致命缺陷一是业务部门总会有特殊情况需要删除记录二是权限收得太紧会导致运维效率骤降。这就引出了我们需要重点探讨的NOTE 309050方案——SAP官方提供的删除日志标准解决方案。关键提示在实施任何技术方案前务必先与业务部门确认删除记录的合理频率和审批流程。技术手段永远只是管理流程的补充而非替代。2. NOTE 309050技术解析与实战部署这个被许多顾问忽略的SAP Note实际上提供了一个精巧的解决方案通过修改标准函数CO_FW_AFFW_POST在删除AFFW记录时同步在AFFWPRO表中生成审计日志。就像银行在销毁作废支票时必须先在登记簿上记录支票编号和销毁人。2.1 NOTE实施前的关键检查点系统版本验证SELECT * FROM vrsn WHERE component SAP_APPL AND release ...;根据Note说明4.7以后版本可能已包含该功能函数模块分析 使用SE37检查CO_FW_AFFW_POST源码确认是否存在以下关键代码段PERFORM log_deletion USING l_affw. 该调用应写入AFFWPRO表表结构确认SELECT * FROM dd03l WHERE tabname AFFWPRO AND fieldname DELETED_BY; 确保存在记录删除者的字段2.2 分步实施指南若检查发现系统未包含该功能则需要按以下流程实施NOTE获取NOTE文件使用S-user登录SAP Marketplace搜索并下载309050号Note的SAR格式文件解压与部署# 使用SAPCAR工具解压 SAPCAR -xvf K309050.SAR解压后将得到可执行的TXT文件SNOTE实施执行事务码SNOTE上传解压后的Note文件依次执行检查→实施→测试常见陷阱Note实施失败通常源于版本不匹配。此时可考虑直接修改函数模块但需获得开发权限。3. 函数修改的精细操作与风险防控当NOTE方案不可行时直接修改CO_FW_AFFW_POST函数成为最后选择。但这里存在两个技术决策点是简单注释原有代码还是采用更安全的增强模式3.1 关键代码修改策略原始删除逻辑通常类似DELETE FROM affw WHERE aufnr l_aufnr.应修改为* 先写入日志表 INSERT INTO affwpro SELECT * FROM affw WHERE aufnr l_aufnr. * 再执行删除 DELETE FROM affw WHERE aufnr l_aufnr.替代方案更安全* 使用隐式增强点 ENHANCEMENT 1 ZCO_FW_AFFW_DEL_LOG. 自定义增强点 DATA: lt_affwpro LIKE TABLE OF affwpro. SELECT * FROM affw INTO CORRESPONDING FIELDS OF TABLE lt_affwpro WHERE aufnr l_aufnr. INSERT affwpro FROM TABLE lt_affwpro. ENDENHANCEMENT.3.2 变更管理最佳实践版本控制使用SE38创建函数副本ZCO_FW_AFFW_POST在修改前通过SCFN创建传输请求回退方案* 在增强中增加开关控制 IF sy-uname DEL_USER. 限制特定用户才记录 INSERT INTO affwpro... ENDIF.监控机制* 在日志表中添加时间戳 affwpro-erdat sy-datum. affwpro-ernam sy-uname.4. 审计体系的完整构建与报表开发仅仅记录删除日志远远不够我们需要构建完整的监控体系。这就像不仅安装监控摄像头还要配备24小时值班的安保人员。4.1 关键报表字段设计建议的审计报表应包含以下维度字段名技术名称数据来源业务意义物料编号MATNRAFFWPRO被删除记录关联的物料删除时间ERDATAFFWPRO操作发生日期删除人ERNAMAFFWPRO责任追溯原始错误类型MSGTYAFFWPRO问题分类移动类型BWARTAFFWPRO业务场景分析4.2 自动化监控方案定期作业设置REPORT zcogi_deletion_alert. SELECT * FROM affwpro WHERE erdat sy-datum INTO TABLE DATA(lt_deletions). IF lines( lt_deletions ) 5. 阈值控制 PERFORM send_alert USING lt_deletions. ENDIF.权限关联分析SELECT a~ernam, b~ustyp FROM affwpro AS a JOIN usr02 AS b ON a~ernam b~bname WHERE a~erdat sy-datum INTO TABLE DATA(lt_user_analysis).趋势分析SQLSELECT ernam, COUNT(*) as del_count FROM affwpro WHERE erdat BETWEEN 20240101 AND 20241231 GROUP BY ernam ORDER BY del_count DESC;在实际项目中我们曾遇到某工厂一个月内神秘消失37条COGI记录的情况。通过这套审计系统最终发现是某位操作员误将删除操作当作确认完成按钮频繁点击。这促使我们增加了操作确认对话框和二次密码验证——技术方案永远需要与业务流程优化同步推进。
SAP PP顾问必看:如何用NOTE 309050和SE37记录COGI删除操作,防止用户误删AFFW记录
SAP PP顾问实战构建COGI删除审计体系的三大策略与NOTE 309050深度解析在SAP PP模块的日常运维中COGI事务码下的AFFW记录管理一直是让顾问头疼的灰色地带。当生产线上的货物移动出现差异时系统会自动在COGI中生成错误记录这本是让用户修正数据的最后机会。但现实情况往往是——某些缺乏培训的操作人员会直接删除这些关键记录导致后续审计时无法追溯原始错误。更糟糕的是标准SAP系统不会自动记录这些删除操作就像用橡皮擦去了犯罪现场的所有指纹。1. 问题本质与解决方案全景图AFFW表作为COGI事务的核心数据容器存储着所有待处理的货物移动错误。标准SAP设计逻辑中当用户通过COGI删除某条记录时系统只是简单执行DELETE FROM affw WHERE...语句不会在任何地方留下删除痕迹。这就好比图书馆管理员直接扔掉借阅记录本却不在注销台账上做任何备注。面对这种情况我们通常有三种技术路径可选方案类型实施难度维护成本审计完整性业务适应性权限管控(SHD0)★★☆低部分需流程配合NOTE 309050★★★中完整原生支持函数增强★★★★高可定制灵活度高权限管控方案看似简单但实际会遇到两个致命缺陷一是业务部门总会有特殊情况需要删除记录二是权限收得太紧会导致运维效率骤降。这就引出了我们需要重点探讨的NOTE 309050方案——SAP官方提供的删除日志标准解决方案。关键提示在实施任何技术方案前务必先与业务部门确认删除记录的合理频率和审批流程。技术手段永远只是管理流程的补充而非替代。2. NOTE 309050技术解析与实战部署这个被许多顾问忽略的SAP Note实际上提供了一个精巧的解决方案通过修改标准函数CO_FW_AFFW_POST在删除AFFW记录时同步在AFFWPRO表中生成审计日志。就像银行在销毁作废支票时必须先在登记簿上记录支票编号和销毁人。2.1 NOTE实施前的关键检查点系统版本验证SELECT * FROM vrsn WHERE component SAP_APPL AND release ...;根据Note说明4.7以后版本可能已包含该功能函数模块分析 使用SE37检查CO_FW_AFFW_POST源码确认是否存在以下关键代码段PERFORM log_deletion USING l_affw. 该调用应写入AFFWPRO表表结构确认SELECT * FROM dd03l WHERE tabname AFFWPRO AND fieldname DELETED_BY; 确保存在记录删除者的字段2.2 分步实施指南若检查发现系统未包含该功能则需要按以下流程实施NOTE获取NOTE文件使用S-user登录SAP Marketplace搜索并下载309050号Note的SAR格式文件解压与部署# 使用SAPCAR工具解压 SAPCAR -xvf K309050.SAR解压后将得到可执行的TXT文件SNOTE实施执行事务码SNOTE上传解压后的Note文件依次执行检查→实施→测试常见陷阱Note实施失败通常源于版本不匹配。此时可考虑直接修改函数模块但需获得开发权限。3. 函数修改的精细操作与风险防控当NOTE方案不可行时直接修改CO_FW_AFFW_POST函数成为最后选择。但这里存在两个技术决策点是简单注释原有代码还是采用更安全的增强模式3.1 关键代码修改策略原始删除逻辑通常类似DELETE FROM affw WHERE aufnr l_aufnr.应修改为* 先写入日志表 INSERT INTO affwpro SELECT * FROM affw WHERE aufnr l_aufnr. * 再执行删除 DELETE FROM affw WHERE aufnr l_aufnr.替代方案更安全* 使用隐式增强点 ENHANCEMENT 1 ZCO_FW_AFFW_DEL_LOG. 自定义增强点 DATA: lt_affwpro LIKE TABLE OF affwpro. SELECT * FROM affw INTO CORRESPONDING FIELDS OF TABLE lt_affwpro WHERE aufnr l_aufnr. INSERT affwpro FROM TABLE lt_affwpro. ENDENHANCEMENT.3.2 变更管理最佳实践版本控制使用SE38创建函数副本ZCO_FW_AFFW_POST在修改前通过SCFN创建传输请求回退方案* 在增强中增加开关控制 IF sy-uname DEL_USER. 限制特定用户才记录 INSERT INTO affwpro... ENDIF.监控机制* 在日志表中添加时间戳 affwpro-erdat sy-datum. affwpro-ernam sy-uname.4. 审计体系的完整构建与报表开发仅仅记录删除日志远远不够我们需要构建完整的监控体系。这就像不仅安装监控摄像头还要配备24小时值班的安保人员。4.1 关键报表字段设计建议的审计报表应包含以下维度字段名技术名称数据来源业务意义物料编号MATNRAFFWPRO被删除记录关联的物料删除时间ERDATAFFWPRO操作发生日期删除人ERNAMAFFWPRO责任追溯原始错误类型MSGTYAFFWPRO问题分类移动类型BWARTAFFWPRO业务场景分析4.2 自动化监控方案定期作业设置REPORT zcogi_deletion_alert. SELECT * FROM affwpro WHERE erdat sy-datum INTO TABLE DATA(lt_deletions). IF lines( lt_deletions ) 5. 阈值控制 PERFORM send_alert USING lt_deletions. ENDIF.权限关联分析SELECT a~ernam, b~ustyp FROM affwpro AS a JOIN usr02 AS b ON a~ernam b~bname WHERE a~erdat sy-datum INTO TABLE DATA(lt_user_analysis).趋势分析SQLSELECT ernam, COUNT(*) as del_count FROM affwpro WHERE erdat BETWEEN 20240101 AND 20241231 GROUP BY ernam ORDER BY del_count DESC;在实际项目中我们曾遇到某工厂一个月内神秘消失37条COGI记录的情况。通过这套审计系统最终发现是某位操作员误将删除操作当作确认完成按钮频繁点击。这促使我们增加了操作确认对话框和二次密码验证——技术方案永远需要与业务流程优化同步推进。