当前位置: 首页 > news >正文

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实施前的关键检查点

  1. 系统版本验证

    SELECT * FROM vrsn WHERE component = 'SAP_APPL' AND release = '...';

    根据Note说明,4.7以后版本可能已包含该功能

  2. 函数模块分析: 使用SE37检查CO_FW_AFFW_POST源码,确认是否存在以下关键代码段:

    PERFORM log_deletion USING l_affw. " 该调用应写入AFFWPRO表
  3. 表结构确认

    SELECT * FROM dd03l WHERE tabname = 'AFFWPRO' AND fieldname = 'DELETED_BY'; " 确保存在记录删除者的字段

2.2 分步实施指南

若检查发现系统未包含该功能,则需要按以下流程实施NOTE:

  1. 获取NOTE文件

    • 使用S-user登录SAP Marketplace
    • 搜索并下载309050号Note的SAR格式文件
  2. 解压与部署

    # 使用SAPCAR工具解压 SAPCAR -xvf K309050.SAR

    解压后将得到可执行的TXT文件

  3. 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 变更管理最佳实践

  1. 版本控制

    • 使用SE38创建函数副本ZCO_FW_AFFW_POST
    • 在修改前通过SCFN创建传输请求
  2. 回退方案

    * 在增强中增加开关控制 IF sy-uname <> 'DEL_USER'. "限制特定用户才记录 INSERT INTO affwpro... ENDIF.
  3. 监控机制

    * 在日志表中添加时间戳 affwpro-erdat = sy-datum. affwpro-ernam = sy-uname.

4. 审计体系的完整构建与报表开发

仅仅记录删除日志远远不够,我们需要构建完整的监控体系。这就像不仅安装监控摄像头,还要配备24小时值班的安保人员。

4.1 关键报表字段设计

建议的审计报表应包含以下维度:

字段名技术名称数据来源业务意义
物料编号MATNRAFFWPRO被删除记录关联的物料
删除时间ERDATAFFWPRO操作发生日期
删除人ERNAMAFFWPRO责任追溯
原始错误类型MSGTYAFFWPRO问题分类
移动类型BWARTAFFWPRO业务场景分析

4.2 自动化监控方案

  1. 定期作业设置

    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.
  2. 权限关联分析

    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).
  3. 趋势分析SQL

    SELECT ernam, COUNT(*) as del_count FROM affwpro WHERE erdat BETWEEN '20240101' AND '20241231' GROUP BY ernam ORDER BY del_count DESC;

在实际项目中,我们曾遇到某工厂一个月内神秘消失37条COGI记录的情况。通过这套审计系统,最终发现是某位操作员误将删除操作当作"确认完成"按钮频繁点击。这促使我们增加了操作确认对话框和二次密码验证——技术方案永远需要与业务流程优化同步推进。

http://www.jsqmd.com/news/895164/

相关文章:

  • Quarkus与POJO-actor模式构建高并发LLM聊天应用实战
  • 如何3步搞定Windows“此电脑”中删不掉的顽固快捷方式?
  • 生成式AI背后的数学:概率、推断与世界建模
  • Bolt-On工程哲学:非侵入式模块化扩展的设计与实践
  • Git 代码误删除恢复
  • Keil µVision构建流程中运行外部程序的配置指南
  • 手机热点办公必看:一招解决Win10后台svchost疯狂偷跑流量的烦恼
  • 避坑指南:Unity 2019/2020导入Standard Assets后脚本报错?两步快速修复GUIText过时问题
  • 一步到位的宝塔面板修复与重装命令清单
  • 贝叶斯联合建模:小区域估计中连续与二元数据的协同推断
  • 超越官方手册:用CoppeliaSim 4.6.0搞科研?这些隐藏技巧和实战配置你必须知道
  • 从负载变化到模式切换:一个实际案例,讲透Buck电路DCM与CCM的边界
  • AetherPane:AI生成前端代码的视觉质量自动化评审工具
  • 「新品发布」全新Alicona µCMM NEO微米级三坐标测量系统正式亮相
  • 用Unity UGUI打造游戏内的可折叠技能树或背包系统:基于Hierarchy视图的UI设计思路
  • 告别枯燥教程!用Unity复刻《超级马里奥》第一关:Tilemap实战拆解与性能优化心得
  • Jmeter 性能压测 —— 分析定位2
  • 别再让无人机‘断电炸机’了!保姆级教程:用BB响设置3.6V安全报警阈值
  • 基于WebGPU的浏览器端轻量级大语言模型推理实践
  • 别急着降级Gradle!先试试这招:彻底清理Android项目构建缓存与依赖的完整流程
  • 【C++基础篇】学习C++就看这篇--->类和对象之static成员、友元、内部类、匿名对象
  • Windows系统hidserv.dll文件丢失找不到问题解决
  • 环形定向耦合器设计避坑指南:HFSS仿真中那些容易出错的边界条件与端口设置
  • Godot游戏源码,交流学习
  • 冥想第一千八百八十九天(1889)
  • F411-WeAct(二)SPI Flash存储实战:W25Q64驱动优化与文件系统初探
  • Keil MDK编译器警告级别设置问题解析与解决方案
  • Webots新手避坑指南:从零搭建仿真环境与核心操作解析
  • 直线流:生成式模型高效采样的理论边界与多模态挑战
  • Unity 2020.2 + ShaderGraph 10.3.2 实战:从涂鸦到刮刮乐,一个RenderTexture搞定两种交互效果