近日接到一个需求,CK53N中有成本评估的错误信息,但是没有一个批量查询的报表,财务用户只能一个订单号,一个订单号的查询CK53N中成本评估的错误信息,需要一个报表来批量查询。财务顾问直接拒绝了这个需求,需求被传递到我的RPA流程机器人团队,但这其实就是一个SAP系统的报表开发,直接在SAP中开发批量查询报表才是解决问题的最优解。
CK53N中的错误信息,是放在表中的吗?我的经验告诉我,大概率是的,虽然我只用过几次CK53N。但我们的业务顾问、开发顾问认为不是,看来他们对系统问题的判断还差点水平。所以,我没有得到任何有用的帮助,只能靠自己。
问一下小刚的微信群,给SAP发一个CASE,ST12跟踪一下,都没有线索。但是在SAP社区查询资料,在一篇CK40N的帖子上,有提到财务成本错误信息放在CMFP、CMFK表中。我打开CMFP一看,这错误信息一个不差的就摆在里面,问题迎刃而解。
从ABAP开发的角度,那现在我们知道CMFP表中有我们的数据,之前能不能用ST05跟踪到线索呢?我试了一下,在ST05信息的最后部分,确实出现了CMFP透明表,注意SQL的参数,也许真可以发现一些蛛丝马迹。看来ST05和ST12比起来,对这种小场景功能的跟踪,信息量更准确更好用一些。
*&---------------------------------------------------------------------*
*& Report ZTTT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTTT.
TABLES: KEKO,CMFP.
"定义结构体
TYPES: BEGIN OF ty_table.
INCLUDE TYPE KEKO.
TYPES: ZWERKS TYPE KEKO-WERKS,
ZMATNR TYPE KEKO-MATNR,
ZMSG(200) TYPE C,
END OF ty_table.
"定义内表
DATA gt_table TYPE TABLE OF ty_table.
DATA gs_table TYPE ty_table.
DATA GT_KEKO LIKE TABLE OF KEKO.
DATA GS_KEKO LIKE KEKO.
DATA GT_CMFP LIKE TABLE OF CMFP.
DATA GS_CMFP LIKE CMFP.
SELECT-OPTIONS S_VBELN FOR KEKO-VBELN .
SELECT-OPTIONS S_POSNR FOR KEKO-POSNR .
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
END-OF-SELECTION.
PERFORM FRM_ALV_DISPLAY.
FORM FRM_GET_DATA.
SELECT *
FROM KEKO
WHERE VBELN IN @S_VBELN
AND POSNR IN @S_POSNR
AND MAXMSG eq 'E'
AND CMF_NR <> ''
INTO TABLE @GT_KEKO.
LOOP AT GT_KEKO INTO GS_KEKO.
SELECT * FROM CMFP
WHERE NR = @GS_KEKO-CMF_NR
AND MSGTY = 'E'
INTO TABLE @GT_CMFP.
LOOP AT GT_CMFP INTO gs_cmfp.
MOVE-CORRESPONDING GS_KEKO TO gs_table.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = gs_cmfp-APLID
MSGNR = gs_cmfp-MSGNR
MSGV1 = gs_cmfp-MSGV1
MSGV2 = gs_cmfp-MSGV2
MSGV3 = gs_cmfp-MSGV3
MSGV4 = gs_cmfp-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = gs_table-ZMSG
.
gs_table-ZMATNR = gs_cmfp-OBJECT+0(40).
gs_table-ZWERKS = gs_cmfp-OBJECT+40(4).
APPEND gs_table TO gt_table.
ENDLOOP.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------
* FORM SHOW_DATA
*---------------------------------------------------------------------
FORM FRM_ALV_DISPLAY.
DATA: WS_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
WS_FIELDGROUPS_TAB TYPE SLIS_T_SP_GROUP_ALV,
WS_LAYOUT TYPE SLIS_LAYOUT_ALV,
WS_SORTFIELDS_TAB TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE,
WS_EVENTS TYPE SLIS_T_EVENT.
DATA: NN TYPE I VALUE 0.
DATA: TITLE TYPE LVC_TITLE.
DATA: COLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE.
*
DEFINE HOUT.
NN = NN + 1.
WS_FIELDCAT-COL_POS = NN.
WS_FIELDCAT-TABNAME = 'GT_TABLE'.
WS_FIELDCAT-KEY = &1.
WS_FIELDCAT-FIELDNAME = &2.
WS_FIELDCAT-SELTEXT_M = &3.
WS_FIELDCAT-CFIELDNAME = &4.
WS_FIELDCAT-DATATYPE = &5.
WS_FIELDCAT-REF_TABNAME = &6.
WS_FIELDCAT-REF_FIELDNAME = &7.
WS_FIELDCAT-DO_SUM = &8.
WS_FIELDCAT-HOTSPOT = &9.
APPEND WS_FIELDCAT.
CLEAR WS_FIELDCAT.
END-OF-DEFINITION.
HOUT:
'' 'WERKS' '工厂' '' '' '' '' '' '',
'' 'MATNR' '物料' '' '' '' '' '' '',
'' 'KLVAR' '成本核算变式' '' '' '' '' '' '',
'' 'VBELN' '销售订单' '' '' '' '' '' '',
'' 'POSNR' '行项目' '' '' '' '' '' '',
'' 'ZWERKS' '错误工厂' '' '' '' '' '' '',
'' 'ZMATNR' '错误物料' '' '' '' '' '' '',
'' 'ZMSG' '错误文本' '' '' '' '' '' '',
'' 'CPUDT' '创建日期' '' '' '' '' '' '',
'' 'CPUTIME' '创建时间' '' '' '' '' '' ''.
WS_LAYOUT-ZEBRA = 'X'.
WS_LAYOUT-GET_SELINFOS = 'X'.
WS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
WS_LAYOUT-DETAIL_POPUP = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = WS_LAYOUT
IT_FIELDCAT = WS_FIELDCAT[]
IT_SPECIAL_GROUPS = WS_FIELDGROUPS_TAB[]
IT_SORT = WS_SORTFIELDS_TAB[]
IT_EVENTS = WS_EVENTS[]
I_GRID_TITLE = TITLE
I_DEFAULT = 'X'
I_SAVE = 'A'
TABLES
T_OUTTAB = GT_TABLE[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " OUTPUT_DATA