ABAP:表报-工艺路线修改记录获取

本文介绍了如何使用ABAP编程语言从cdpos和cdhdr表中获取特定的修改记录,包括人工、机器和其他操作,然后通过ALV显示在报表中,以满足特定需求,如VGW01、VGW02和VGW03字段的变更记录。
摘要由CSDN通过智能技术生成

        主要是通过修改记录表: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.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值