【实用】SAP修改记录表开发

首先我们看一下运行效果图:


大部分都是CDHDR表的查询字段。


双击某一行可以查看具体的修改明细字段。


源代码:

REPORT Z_ALV_CDHDR_CDPOS.
TYPE-POOLS SLIS.
DATA : CDHDR TYPE CDHDR.
SELECT-OPTIONS :
        S_OBJCLS FOR CDHDR-OBJECTCLAS OBLIGATORY,
        S_OBJTID FOR CDHDR-OBJECTID,
        S_CHNGNR FOR CDHDR-CHANGENR,
        S_USRNAM FOR CDHDR-USERNAME,
        S_UDATE FOR CDHDR-UDATE,
        S_TIME FOR CDHDR-UTIME,
        S_TCODE FOR CDHDR-TCODE,
        S_PLNCNR FOR CDHDR-PLANCHNGNR,
        S_CHNGNO FOR CDHDR-ACT_CHNGNO,
        S_WSPLND FOR CDHDR-WAS_PLANND,
        S_CHNGID FOR CDHDR-CHANGE_IND.
SELECTION-SCREEN SKIP.
PARAMETERS P_MAX TYPE NUMC3 OBLIGATORY DEFAULT '200'.

*---------------------------------------------------------------------*
TYPES :
BEGIN OF TY_S_CDHDR.
        INCLUDE STRUCTURE CDHDR.
TYPES : CHECKBOX,
        END OF TY_S_CDHDR,

        BEGIN OF TY_S_CDPOS.
        INCLUDE STRUCTURE CDPOS.
TYPES : CHECKBOX,
END OF TY_S_CDPOS.

*---------------------------------------------------------------------*
DATA :
* Layout for ALV
  GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
* Change document header
  T_CDHDR   TYPE TABLE OF TY_S_CDHDR.

*---------------------------------------------------------------------*
START-OF-SELECTION.

* Read Change document header
  SELECT * INTO TABLE T_CDHDR
  UP TO P_MAX ROWS
  FROM CDHDR
  WHERE OBJECTCLAS IN S_OBJCLS
  AND OBJECTID IN S_OBJTID
  AND CHANGENR IN S_CHNGNR
  AND USERNAME IN S_USRNAM
  AND UDATE IN S_UDATE
  AND UTIME IN S_TIME
  AND TCODE IN S_TCODE
  AND PLANCHNGNR IN S_PLNCNR
  AND ACT_CHNGNO IN S_CHNGNO
  AND WAS_PLANND IN S_WSPLND
  AND CHANGE_IND IN S_CHNGID.

  GS_LAYOUT-ZEBRA = 'X'.
  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  GS_LAYOUT-BOX_FIELDNAME = 'CHECKBOX'.

* Display ALV
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-CPROG
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
      I_STRUCTURE_NAME        = 'CDHDR'
      IS_LAYOUT               = GS_LAYOUT
    TABLES
      T_OUTTAB                = T_CDHDR.

*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING U_UCOMM TYPE SYUCOMM
      US_SELFIELD TYPE SLIS_SELFIELD.                       "#EC CALLED

* Macro definition
  DEFINE M_SORT.
    ADD 1 TO ls_sort-spos.
    ls_sort-fieldname = &1.
    ls_sort-UP = 'X'.
    APPEND ls_sort TO lt_sort.
  END-OF-DEFINITION.

  DATA :
    LS_CDHDR TYPE TY_S_CDHDR,
    LS_SORT  TYPE SLIS_SORTINFO_ALV,
    LT_SORT  TYPE SLIS_T_SORTINFO_ALV,
* Change document items
    LT_CDPOS TYPE TABLE OF TY_S_CDPOS.

  CASE U_UCOMM.
    WHEN '&IC1'.
      PERFORM CHECK_MARKED USING US_SELFIELD.

* Read Change document items
      LOOP AT T_CDHDR INTO LS_CDHDR WHERE CHECKBOX = 'X'.
        SELECT * APPENDING TABLE LT_CDPOS
        FROM CDPOS
        WHERE OBJECTCLAS = LS_CDHDR-OBJECTCLAS
        AND OBJECTID = LS_CDHDR-OBJECTID
        AND CHANGENR = LS_CDHDR-CHANGENR.
      ENDLOOP.

      M_SORT 'CHANGENR'.

* Display ALV
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_STRUCTURE_NAME = 'CDPOS'
          IS_LAYOUT        = GS_LAYOUT
          IT_SORT          = LT_SORT
        TABLES
          T_OUTTAB         = LT_CDPOS.

  ENDCASE.

ENDFORM. " USER_COMMAND
*---------------------------------------------------------------------*
* Form CHECK_MARKED
*---------------------------------------------------------------------*
* What has been marked in t_cdhdr
*---------------------------------------------------------------------*
FORM CHECK_MARKED USING US_SELFIELD TYPE SLIS_SELFIELD.

  FIELD-SYMBOLS : <FS>
    TYPE TY_S_CDHDR.

  READ TABLE T_CDHDR TRANSPORTING NO FIELDS WITH KEY CHECKBOX = 'X'.
  IF NOT SY-SUBRC IS INITIAL AND
  NOT US_SELFIELD-TABINDEX IS INITIAL.
    READ TABLE T_CDHDR INDEX US_SELFIELD-TABINDEX ASSIGNING <FS>.
    <FS>-CHECKBOX = 'X'.
  ENDIF.

ENDFORM. " CHECK_MARKED


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值