主要是通过修改记录表:cdpos和cdhdr 来获取对应的修改记录,我这里只是获取了对应:人工,机器和其他一共三个值的修改记录,如果有其他需求的请自行增加字段。
选择界面:
报表效果图:
代码如下:
*&---------------------------------------------------------------------*
*& Report ZHHPP020
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zhhpp020.
TABLES: mseg,stpo.
DATA: gt_fieldcatalog TYPE lvc_t_fcat,
gw_fieldcatalog TYPE lvc_s_fcat,
gt_ddval TYPE lvc_t_drop, "定义存储下拉列表的数据
gw_ddval TYPE lvc_s_drop,
gt_sort TYPE lvc_t_sort,
gw_sort TYPE lvc_s_sort,
gt_events TYPE slis_t_event,
gw_events TYPE slis_alv_event,
gw_layout TYPE lvc_s_layo,
gt_exclude TYPE slis_t_extab,
g_repid TYPE sy-repid VALUE sy-repid,
gw_grid_setting TYPE lvc_s_glay,
g_ref_grid TYPE REF TO cl_gui_alv_grid.
DATA:BEGIN OF it_data OCCURS 0 ,
werks TYPE werks_d,
matnr TYPE matnr,
plnnr TYPE plnnr, "组
plnal TYPE plnal, "组计数器
objectid TYPE cdobjectv, "组-
udate TYPE cddatum,
utime TYPE cdhdr-utime,
username TYPE cdhdr-username,
vornr TYPE ckis-vornr, "操作/活动编号
ltxa1 TYPE plpo-ltxa1, "工序文本描述
tabkey TYPE cdpos-tabkey,
fname TYPE fieldname, "
text1 TYPE string,
value_old TYPE cdfldvalo,
value_new TYPE cdfldvaln,
END OF it_data.
DATA it_data2 LIKE TABLE OF it_data WITH HEADER LINE.
DEFINE macro_fill_fcat.
CLEAR gw_fieldcatalog.
gw_fieldcatalog-fieldname = &1.
gw_fieldcatalog-coltext = &2.
gw_fieldcatalog-outputlen = &3.
gw_fieldcatalog-fix_column = 'X'.
APPEND gw_fieldcatalog TO gt_fieldcatalog.
END-OF-DEFINITION.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.
SELECT-OPTIONS: s_werks FOR mseg-werks.
SELECT-OPTIONS: s_matnr FOR mseg-matnr .
SELECTION-SCREEN END OF BLOCK b1.
INITIALIZATION.
START-OF-SELECTION.
PERFORM get_data.
PERFORM init_fieldcat.
PERFORM show_alv.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data .
DATA it_plpo TYPE TABLE OF plpo WITH HEADER LINE.
SELECT * FROM mapl INTO CORRESPONDING FIELDS OF TABLE it_data WHERE matnr IN s_matnr AND werks IN s_werks.
SORT it_data BY werks matnr objectid.
LOOP AT it_data.
it_data-objectid = sy-mandt && 'N' && it_data-plnnr.
MODIFY it_data.
ENDLOOP.
"通过修改记录表获取相关修改记录
SELECT cdpos~objectid cdhdr~udate cdhdr~utime cdhdr~username cdpos~tabkey cdpos~fname cdpos~value_old cdpos~value_new
FROM cdpos JOIN cdhdr ON cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
INTO CORRESPONDING FIELDS OF TABLE it_data2
FOR ALL ENTRIES IN it_data WHERE cdpos~objectid = it_data-objectid AND cdpos~fname IN ( 'VGW01' ,'VGW02' ,'VGW03' ) ."and CDHDR~UDATE > '20230630'.
SELECT * FROM plpo INTO TABLE it_plpo FOR ALL ENTRIES IN it_data WHERE plnnr = it_data-plnnr .
SORT it_plpo BY plnnr.
LOOP AT it_data2.
READ TABLE it_data WITH KEY objectid = it_data2-objectid.
IF sy-subrc = 0.
it_data2-matnr = it_data-matnr.
it_data2-werks = it_data-werks.
it_data2-plnnr = it_data-plnnr.
it_data2-plnal = it_data-plnal.
ENDIF.
it_data2-vornr = it_data2-tabkey+17(4)."活动编号
IF it_data2-fname = 'VGW01'."人工
it_data2-text1 = 'H001-人工'.
ELSEIF it_data2-fname = 'VGW02'."机器
it_data2-text1 = 'H002-机器'.
ELSEIF it_data2-fname = 'VGW03'."其他
it_data2-text1 = 'H003-其他'.
ENDIF.
READ TABLE it_plpo WITH KEY plnnr = it_data2-plnnr zaehl = it_data2-plnal vornr = it_data2-vornr.
IF sy-subrc = 0 .
it_data2-ltxa1 = it_plpo-ltxa1."工序文本
ENDIF.
MODIFY it_data2.
ENDLOOP.
.
SORT it_data2 BY matnr DESCENDING tabkey.
LOOP AT it_data2.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = it_data-matnr
IMPORTING
output = it_data-matnr.
MODIFY it_data2.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form init_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM init_fieldcat .
macro_fill_fcat:
'WERKS' '工厂' '4' ,
'MATNR' '物料编号' '18' ,
* 'STLNR' '物料清单' '8' ,
'PLNNR' '组' '10' ,
'PLNAL' '组计数器' '6',
'UDATE' '更改日期' '8' ,
'UTIME' '更改时间' '6',
'USERNAME' '更改用户' '8',
'VORNR' '工序编号' '6',
'LTXA1' '工序文本' '6',
* 'TABKEY' '序号' '16',
* 'FNAME' '字段名' '6' ,
'TEXT1' '活动描述' '6',
'VALUE_OLD' '旧值' '6' ,
'VALUE_NEW' '新值' '6'
.
ENDFORM.
FORM show_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* i_callback_pf_status_set = 'SET_STAT'
* i_callback_user_command = 'USER_COMMAND'
it_fieldcat_lvc = gt_fieldcatalog
TABLES
t_outtab = it_data2
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.