SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第四篇:可视化校验结果输出与问题闭环流程实现
SAP基础数据校验工具开发系列博客(共5篇)
第四篇:可视化校验结果输出与问题闭环流程实现
校验规则配置好了,接口也打通了,但用户最关心的是:哪些数据有问题?问题出在哪里?谁来修?修好了怎么确认?如果只给出一堆晦涩的错误代码列表,业务人员无从下手,整改效率低下。本文介绍校验结果的多维度可视化展示方案,包括错误明细定位、数据问题分级标签、问题台账自动生成功能,并讲解如何打通从问题预警、责任分发到整改复核的全流程闭环,让主数据质量问题从“发现”到“解决”形成完整链路,大幅提升整改效率。
一、校验结果展示的核心需求
经过对多个业务部门的调研,用户对校验结果的期望可归纳为以下四点:
| 需求 | 说明 | 用户痛点 |
|---|---|---|
| 直观定位 | 能直接看到错误数据在哪张表、哪个字段,最好能一键跳转到修改界面 | 错误日志中只有物料号,但不知道具体是哪个字段错误 |
| 问题分级 | 根据严重程度(错误/警告/提示)区分优先级,红色高亮 | 几百条错误混在一起,不知道先改哪个 |
| 趋势分析 | 展示历史问题数量变化、各类型问题分布 | 无法评估数据质量改善效果 |
| 闭环跟踪 | 每个问题有责任人、状态(未处理/整改中/已修复/已验证),形成闭环 | 整改后无人复核,问题反复出现 |
基于这些需求,我们设计了一套集ALV报表、问题台账、责任派发、整改确认于一体的可视化解决方案。
二、校验结果的数据存储设计
在规则引擎执行后,需要将每条失败记录持久化到自定义表中,以便后续查询和跟踪。
2.1 主结果表ZMD_CHECK_RESULT
| 字段名 | 类型 | 说明 | 示例 |
|---|---|---|---|
| RUN_ID | CHAR20 | 批量校验批次号(时间戳) | 20260604120000 |
| OBJECT_TYPE | CHAR2 | 主数据类型 | 01 |
| OBJECT_KEY | CHAR40 | 主数据业务键(如物料号、供应商号) | 000000000010000321 |
| RULE_ID | CHAR10 | 违反的规则编号 | ZMM_001 |
| SEVERITY | CHAR1 | 严重级别 | E |
| ERROR_MSG | CHAR200 | 错误描述 | 物料号长度应为18,当前为15 |
| FIELD_NAME | CHAR30 | 具体字段名(可选) | MATNR |
| FIELD_VALUE | CHAR100 | 错误字段当前值(可选) | 000000000010000321 |
| STATUS | CHAR1 | 整改状态 | 0=未处理,1=整改中,2=已修复,3=已验证 |
| RESPONSIBLE | CHAR12 | 责任人(用户ID或角色) | MATERIAL_MASTER |
| CREATE_DATE | DATS | 发现日期 | 20260604 |
| FIX_DATE | DATS | 修复日期 | 空 |
| VERIFY_DATE | DATS | 复核日期 | 空 |
2.2 批次日志表ZMD_CHECK_LOG
记录每次批量校验的执行情况,用于性能分析和趋势统计。
| 字段名 | 说明 |
|---|---|
| RUN_ID | 批次号 |
| START_TIME | 开始时间 |
| END_TIME | 结束时间 |
| TOTAL_OBJECTS | 校验总数 |
| ERROR_COUNT | 错误数 |
| WARNING_COUNT | 警告数 |
三、多维度可视化展示方案
3.1 错误明细定位:ALV报表 + 跳转功能
通过事务码(如ZMD_RESULT_VIEW)开发一个ALV报表,展示校验结果,并提供双击跳转到主数据修改界面的功能。
ALV字段目录示例:
DATA: lt_fieldcat TYPE slis_t_fieldcat_alv. " 物料号列(设置为热点) ls_fieldcat-fieldname = 'OBJECT_KEY'. ls_fieldcat-seltext_l = '物料号'. ls_fieldcat-hotspot = 'X'. " 可点击跳转 APPEND ls_fieldcat TO lt_fieldcat. " 错误信息 ls_fieldcat-fieldname = 'ERROR_MSG'. ls_fieldcat-seltext_l = '错误描述'. APPEND ls_fieldcat TO lt_fieldcat. " 状态(显示为带颜色的文本) ls_fieldcat-fieldname = 'STATUS'. ls_fieldcat-seltext_l = '状态'. ls_fieldcat-icon = 'X'. " 显示为图标 APPEND ls_fieldcat TO lt_fieldcat. " 责任人 ls_fieldcat-fieldname = 'RESPONSIBLE'. ls_fieldcat-seltext_l = '责任人'. APPEND ls_fieldcat TO lt_fieldcat.双击热点跳转到MM02修改物料:
FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. CASE r_ucomm. WHEN '&IC1'. " 双击或点击热点 READ TABLE lt_result INDEX rs_selfield-tabindex INTO DATA(ls_result). IF sy-subrc = 0 AND ls_result-object_type = '01'. SET PARAMETER ID 'MAT' FIELD ls_result-object_key. CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN. ENDIF. ENDCASE. ENDFORM.3.2 数据问题分级标签
在ALV中,可以根据SEVERITY和STATUS给不同行着色,快速识别优先级。
" 布局结构 DATA: ls_layout TYPE slis_layout_alv. ls_layout-info_fieldname = 'ROW_COLOR'. " 行颜色字段 " 在填充内表时,根据严重程度设置颜色 LOOP AT lt_result INTO ls_result. IF ls_result-severity = 'E'. ls_result-row_color = 'C610'. " 红色(错误) ELSEIF ls_result-severity = 'W'. ls_result-row_color = 'C710'. " 橙色(警告) ELSE. ls_result-row_color = ''. ENDIF. MODIFY lt_result. ENDLOOP.3.3 问题台账自动生成
每月或每周,可以自动生成问题台账报表,统计各类型问题的数量、整改率、平均修复时长等指标,发送给质量负责人。
示例:统计各物料组的错误分布
SELECT matkl, COUNT(*) AS err_cnt FROM mara INNER JOIN zmd_check_result ON mara~matnr = zmd_check_result~object_key WHERE zmd_check_result~severity = 'E' AND zmd_check_result~create_date >= lv_start GROUP BY matkl INTO TABLE lt_stats.将统计结果输出为ALV或导出Excel。
四、问题闭环流程设计与实现
闭环流程包括五个阶段:发现 → 预警 → 分发 → 整改 → 复核。
4.1 问题预警
在每次批量校验完成后,系统自动统计问题数量。如果错误数超过预设阈值(如>100),或出现严重级别为“E”的问题,通过以下方式预警:
- 邮件通知:调用函数
SO_NEW_DOCUMENT_ATT_SEND_API1发送邮件给数据治理团队。 - SAP收件箱:使用
SAP_WAPI_CREATE_EVENT创建工作流任务。 - 企业微信/钉钉:通过HTTP接口发送Webhook通知(需额外开发)。
" 发送邮件示例 DATA: lv_subject TYPE so_obj_des, lv_text TYPE string, lt_receivers TYPE TABLE OF somlreci1. lv_subject = '【数据质量预警】物料主数据校验发现新问题'. lv_text = |批次{ lv_run_id } 共发现{ lv_err_count }个错误,请及时处理|. " 构建收件人 ls_receiver-receiver = 'DATA_GOVERNANCE_TEAM@company.com'. APPEND ls_receiver TO lt_receivers. CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1' EXPORTING document_data = ls_doc_data put_in_outbox = 'X' TABLES packing_list = lt_packing contents_txt = lt_content receivers = lt_receivers.4.2 责任分发
根据问题类型(物料主数据、供应商主数据等)和业务范围(如工厂、采购组织),自动派发到对应的责任人。
- 静态规则:在表
ZMD_RESPONSIBLE中配置,例如:物料类型ROH的错误分配给MM_PURCHASE_TEAM。 - 动态规则:基于组织架构(如物料所属工厂的物料经理)。
" 自动确定责任人 FORM determine_responsible USING iv_object_key iv_rule_id CHANGING cv_responsible. " 例如:根据物料号前两位代表产品组,找到对应产品经理 DATA(lv_matnr_head) = iv_object_key(2). SELECT SINGLE responsible INTO cv_responsible FROM zmd_mat_group_resp WHERE mat_group = lv_matnr_head. IF sy-subrc <> 0. cv_responsible = 'DEFAULT_OWNER'. ENDIF. ENDFORM.在写入结果表时,将责任人填入RESPONSIBLE字段。
4.3 整改与复核
- 整改入口:用户通过ALV报表的热点跳转,直接进入MM02/XD02等事务码修正数据。
- 状态变更:用户修正后,可以在校验工具中手动标记状态为“已修复”。也可通过增强自动检测:当物料再次通过校验时,自动将对应结果行的状态更新为“已修复”。
自动检测示例:
每次执行校验时,如果某条记录在本次校验中通过了(即不再违反规则),则将其状态更新为2(已修复)。若需要人工复核,可增加VERIFY_DATE字段,由质量管理员确认后置为3(已验证)。
UPDATE zmd_check_result SET status = '2', fix_date = sy-datum WHERE object_key = lv_matnr AND status = '0' AND NOT EXISTS ( SELECT 1 FROM zmd_check_result_tmp WHERE object_key = lv_matnr AND rule_id = ... ).4.4 闭环看板
开发一个仪表板报表,展示:
- 待处理问题数量(按责任人分组)
- 近三个月问题趋势图
- 各类型问题占比(饼图)
- 平均整改时长
使用ALV的图形化功能(CALL FUNCTION 'GRAPHICS')或导出到Excel生成图表。
五、完整示例:从校验结果到闭环的代码片段
*&---------------------------------------------------------------------* *& 程序 ZMD_RESULT_CLOSED_LOOP *& 问题闭环处理主程序 *&---------------------------------------------------------------------* REPORT zmd_result_closed_loop. TABLES: zmd_check_result. SELECT-OPTIONS: s_matnr FOR zmd_check_result-object_key, s_status FOR zmd_check_result-status. START-OF-SELECTION. PERFORM f_fetch_results. PERFORM f_display_alv. FORM f_fetch_results. SELECT * FROM zmd_check_result INTO TABLE @DATA(lt_results) WHERE object_key IN @s_matnr AND status IN @s_status AND severity = 'E' ORDER BY priority. ENDFORM. FORM f_display_alv. " 构建字段目录(略) " 调用ALV函数,并注册双击事件 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_user_command = 'FRM_USER_COMMAND' it_fieldcat = lt_fieldcat TABLES t_outtab = lt_results. ENDFORM. FORM frm_user_command USING r_ucomm TYPE sy-ucomm rs_selfield TYPE slis_selfield. CASE r_ucomm. WHEN '&IC1'. " 双击跳转修改 READ TABLE lt_results INTO DATA(ls_result) INDEX rs_selfield-tabindex. IF sy-subrc = 0 AND ls_result-object_type = '01'. SET PARAMETER ID 'MAT' FIELD ls_result-object_key. CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN. ENDIF. WHEN 'CHANGE_STATUS'. " 自定义按钮:更新状态为已修复 PERFORM f_update_status USING rs_selfield. ENDCASE. ENDFORM. FORM f_update_status USING rs_selfield TYPE slis_selfield. DATA: lv_index TYPE i. lv_index = rs_selfield-tabindex. READ TABLE lt_results INTO ls_result INDEX lv_index. IF sy-subrc = 0. UPDATE zmd_check_result SET status = '2', fix_date = sy-datum WHERE run_id = ls_result-run_id AND object_key = ls_result-object_key AND rule_id = ls_result-rule_id. IF sy-subrc = 0. MESSAGE '状态已更新为“已修复”' TYPE 'S'. " 刷新ALV PERFORM f_fetch_results. PERFORM f_display_alv. ENDIF. ENDIF. ENDFORM.六、总结与最佳实践
| 功能模块 | 关键技术 | 收益 |
|---|---|---|
| 错误明细定位 | ALV热点 + 跳转事务 | 用户点击即可修改,减少查找时间 |
| 问题分级标签 | 行颜色、图标、优先级排序 | 快速识别高风险问题 |
| 问题台账 | 数据归档 + 统计分析 | 支持质量考核与趋势分析 |
| 问题预警 | 邮件/收件箱自动通知 | 及时发现新问题 |
| 责任分发 | 规则表或动态映射 | 任务明确到人 |
| 整改复核 | 状态流转 + 人工/自动确认 | 形成闭环,避免问题反复 |
通过可视化输出和闭环流程,主数据校验工具不仅是一个“查错器”,更演变为一套完整的数据治理解决方案。下一篇文章将聚焦性能优化与上线运维,探讨如何在海量数据和高并发场景下保障工具稳定运行。
💬 你们公司的主数据问题整改流程是怎样的?有没有用系统化工具来跟踪?欢迎分享经验。
作者:你的SAP学习伙伴
版本记录:2026年6月
