汇总前(N)列并对比第(N+1)列的金额(数量)

在排查财务问题的时候,往往会遇到需要汇总和对比的操作,EXCEL需要用很多公式,还有VLOOKUP。

这里直接写个程序来自动对比:

本文链接:https://www.cnblogs.com/chaguoguo/p/18051432

使用界面如下:

即“汇总表的前N项并比对”填N。
举例:比如要按物料汇总,并比较金额,两个文档都是一列物料号、一列金额。“汇总表的前N项并比对”那里填1

文档1和文档2的格式为:

 下面是代码参考:

ZIT0001:

*&---------------------------------------------------------------------*
*& Report  ZIT0001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZIT0001.

INCLUDE ZIT0001_HEAD.
INCLUDE ZIT0001_SCREEN.
INCLUDE ZIT0001_FORMS.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE2.
* 选择文件搜索帮助
  PERFORM FRM_SET_FILE_F4 USING P_FILE2 CHANGING P_FILE2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE1.
* 选择文件搜索帮助
  PERFORM FRM_SET_FILE_F4 USING P_FILE1 CHANGING P_FILE1.

START-OF-SELECTION.
  PERFORM FRM_GET_FILE_DATA.
  PERFORM FRM_COMPARE_DATA.

END-OF-SELECTION.
  PERFORM F_DISPLAY_DATA.
View Code

ZIT0001_HEAD:

*&---------------------------------------------------------------------*
*&  INCLUDE           ZIT0001_HEAD
*&---------------------------------------------------------------------*
TABLES: BSEG.
TYPE-POOLS: SLIS,OLE2.
DATA: D_REF      TYPE REF TO DATA,
      D_REF2     TYPE REF TO DATA,
      D_REF3     TYPE REF TO DATA,
      LT_ALV_CAT TYPE TABLE OF LVC_S_FCAT,
      GT_ALV_CAT TYPE TABLE OF LVC_S_FCAT,
      LS_ALV_CAT LIKE LINE OF LT_ALV_CAT.

DATA: LT_TABLE LIKE TABLE OF DNTAB.
DATA: LS_TABLE TYPE DNTAB.

DATA: DYN_TABLE TYPE REF TO DATA.
DATA: DYN_WA TYPE REF TO DATA.
FIELD-SYMBOLS :<DYN_TABLE> TYPE TABLE,
               <DYN_WA>    TYPE ANY,
               <DYN_FIELD> TYPE ANY,
               <FS_STR>    TYPE ANY,
               <FS_STRB>   TYPE ANY.


DATA: DYN_TABLE2 TYPE REF TO DATA.
DATA: DYN_WA2 TYPE REF TO DATA.

FIELD-SYMBOLS :<DYN_TABLE2> TYPE TABLE,
               <DYN_WA2>    TYPE ANY,
               <DYN_FIELD2> TYPE ANY,
               <FS_STR2>    TYPE ANY.

DATA: DYN_TABLE3 TYPE REF TO DATA.
DATA: DYN_WA3 TYPE REF TO DATA.

FIELD-SYMBOLS :<DYN_TABLE3> TYPE TABLE,
               <DYN_WA3>    TYPE ANY,
               <DYN_FIELD3> TYPE ANY,
               <FS_STR3>    TYPE ANY.
TYPES: BEGIN OF SY_OUTPUT,
          ZSTRA TYPE STRING,
          DMBTR TYPE BSEG-DMBTR,
          ZSTRB TYPE STRING,
       END OF SY_OUTPUT.
DATA: GT_OUTPUT TYPE TABLE OF SY_OUTPUT,
      GS_OUTPUT TYPE SY_OUTPUT.
DATA: GS_LAYOUT   TYPE LVC_S_LAYO,
      GT_FIELDCAT TYPE LVC_T_FCAT.
View Code

ZIT0001_SCREEN:

*&---------------------------------------------------------------------*
*&  INCLUDE           ZIT0001_SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE1 TYPE STRING MODIF ID M2,
            P_FILE2 TYPE STRING MODIF ID M2.
PARAMETERS: p_MENGE1  TYPE BSEG-DMBTR DEFAULT '1' OBLIGATORY."
*PARAMETERS: p_MENGE2  TYPE BSEG-DMBTR DEFAULT '3'."
SELECTION-SCREEN: END OF BLOCK b01.
View Code

ZIT0001_FORMS:

*&---------------------------------------------------------------------*
*&  INCLUDE           ZIT0001_FORMS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& FORM FRM_SET_FILE_F4
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*      -->P_P_FILE2  TEXT
*      <--P_P_FILE2  TEXT
*&---------------------------------------------------------------------*
FORM FRM_SET_FILE_F4  USING I_FILE CHANGING I_FILE2.
* 局部变量-文件名定义
  DATA L_FILENAME TYPE RLGRAP-FILENAME.
* 选择文件搜索帮助
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      DEF_PATH         = I_FILE
      MASK             = ',*.XLSX,*.XLSX,*.XLS,*.XLS.'
      MODE             = '0'
      TITLE            = TEXT-002
    IMPORTING
      FILENAME         = L_FILENAME
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.
* 如果选择了文件
  IF SY-SUBRC = 0 AND L_FILENAME IS NOT INITIAL.
    I_FILE2 = L_FILENAME.
  ENDIF.

ENDFORM.                    "frm_set_file_f4
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_FILE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_FILE_DATA .
  DATA: LV_STR1 TYPE STRING.
  DATA: LV_MENGE TYPE BSEG-MENGE.
  LV_MENGE = P_MENGE1 + 1.
  DO P_MENGE1 TIMES.
    LV_STR1 = SY-INDEX.
    CONCATENATE 'ZSTR' LV_STR1 INTO LS_ALV_CAT-FIELDNAME.
    LS_ALV_CAT-REF_TABLE = 'ALSMEX_TABLINE'.
    LS_ALV_CAT-REF_FIELD = 'VALUE'.
    LS_ALV_CAT-SELTEXT   = '汇总条件'.
    LS_ALV_CAT-SCRTEXT_L = '汇总条件'.
    LS_ALV_CAT-SCRTEXT_M = '汇总条件'.
    LS_ALV_CAT-SCRTEXT_S = '汇总条件'.
    APPEND LS_ALV_CAT TO LT_ALV_CAT.
  ENDDO.

  LS_ALV_CAT-FIELDNAME = 'DMBTR'.
  LS_ALV_CAT-REF_TABLE = 'BSEG'.
  LS_ALV_CAT-REF_FIELD = 'DMBTR'.
  LS_ALV_CAT-SELTEXT   = '汇总条件'.
  LS_ALV_CAT-SCRTEXT_L = '汇总条件'.
  LS_ALV_CAT-SCRTEXT_M = '汇总条件'.
  LS_ALV_CAT-SCRTEXT_S = '汇总条件'.
  APPEND LS_ALV_CAT TO LT_ALV_CAT[].
  LS_ALV_CAT-FIELDNAME = 'ZSTRA'.
  LS_ALV_CAT-REF_TABLE = 'ALSMEX_TABLINE'.
  LS_ALV_CAT-REF_FIELD = 'VALUE'.
  LS_ALV_CAT-SELTEXT   = '比对条件'.
  LS_ALV_CAT-SCRTEXT_L = '比对条件'.
  LS_ALV_CAT-SCRTEXT_M = '比对条件'.
  LS_ALV_CAT-SCRTEXT_S = '比对条件'.
  APPEND LS_ALV_CAT TO LT_ALV_CAT[].
*内表创建

  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG = LT_ALV_CAT
    IMPORTING
      EP_TABLE        = D_REF.
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG = LT_ALV_CAT
    IMPORTING
      EP_TABLE        = D_REF2.
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG = LT_ALV_CAT
    IMPORTING
      EP_TABLE        = D_REF3.
*指定生成的内表到字段符号
  ASSIGN D_REF->* TO <DYN_TABLE>.
  ASSIGN D_REF2->* TO <DYN_TABLE2>.
  ASSIGN D_REF3->* TO <DYN_TABLE3>.

*创建动态工作区结构
  CREATE DATA DYN_WA LIKE LINE OF <DYN_TABLE>.
  CREATE DATA DYN_WA2 LIKE LINE OF <DYN_TABLE2>.
  CREATE DATA DYN_WA3 LIKE LINE OF <DYN_TABLE3>.

*创建动态工作区
  ASSIGN DYN_WA->* TO <DYN_WA>.
  ASSIGN DYN_WA2->* TO <DYN_WA2>.
  ASSIGN DYN_WA3->* TO <DYN_WA3>.

  DATA: LV_END TYPE C.
  DATA: LT_DATA  TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
  DATA  LV_FILENAME TYPE RLGRAP-FILENAME.
  DATA: LV_DATUM TYPE SY-DATUM,
        LV_UZEIT TYPE SY-UZEIT.
*  DATA LV_TABIX TYPE SY-TABIX.
*  LV_FILENAME = P_FILE2.

  DATA LV_TABIX TYPE SY-TABIX.
  LV_FILENAME = P_FILE1.
  DATA LV_LINE TYPE I.
  LV_LINE = LINES( LT_ALV_CAT[] ).

  DATA: LV_LEN TYPE I.
  DATA: LT_STR  LIKE TABLE OF LV_STR1.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'    "读取EXCEL文件中的内容
      EXPORTING
        FILENAME                = LV_FILENAME
        I_BEGIN_COL             = '1'
        I_BEGIN_ROW             = '2'
        I_END_COL               = LV_LINE
        I_END_ROW               = '99999'
      TABLES
        INTERN                  = LT_DATA
      EXCEPTIONS
        INCONSISTENT_PARAMETERS = 1
        UPLOAD_OLE              = 2
        OTHERS                  = 3.
*  BREAK-POINT.
  LOOP AT LT_DATA.
*    CLEAR LV_END.
*    AT END OF ROW.
*      LV_END = 'X'.
*    ENDAT.
    LV_TABIX = LT_DATA-COL.
*    ADD 1 TO LV_TABIX.
    READ TABLE LT_ALV_CAT INTO LS_ALV_CAT INDEX LV_TABIX.
    IF SY-SUBRC EQ 0.
      IF LV_MENGE > LV_TABIX.
        ASSIGN COMPONENT LS_ALV_CAT-FIELDNAME OF STRUCTURE <DYN_WA> TO <FS_STR>.
        IF SY-SUBRC EQ 0.
          IF LS_ALV_CAT-FIELDNAME+0(4) EQ 'ZSTR'.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
              EXPORTING
                INPUT  = LT_DATA-VALUE
              IMPORTING
                OUTPUT = <FS_STR>.
          ELSE.
            <FS_STR> = LT_DATA-VALUE.
          ENDIF.
        ENDIF.
      ELSEIF LV_MENGE = LV_TABIX.
        ASSIGN COMPONENT 'DMBTR' OF STRUCTURE <DYN_WA> TO <FS_STR>.
        IF SY-SUBRC EQ 0.
          <FS_STR> = LT_DATA-VALUE.
        ENDIF.
      ENDIF.
    ENDIF.
    AT END OF ROW.
      COLLECT <DYN_WA> INTO <DYN_TABLE>[].
      CLEAR: <DYN_WA>.
    ENDAT.

  ENDLOOP.


  LV_FILENAME = P_FILE2.

  CLEAR: LT_DATA[].
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'    "读取EXCEL文件中的内容
      EXPORTING
        FILENAME                = LV_FILENAME
        I_BEGIN_COL             = '1'
        I_BEGIN_ROW             = '2'
        I_END_COL               = LV_LINE
        I_END_ROW               = '99999'
      TABLES
        INTERN                  = LT_DATA
      EXCEPTIONS
        INCONSISTENT_PARAMETERS = 1
        UPLOAD_OLE              = 2
        OTHERS                  = 3.

  LOOP AT LT_DATA.
*    CLEAR LV_END.
*    AT END OF ROW.
*      LV_END = 'X'.
*    ENDAT.
    LV_TABIX = LT_DATA-COL.
*    ADD 1 TO LV_TABIX.
    READ TABLE LT_ALV_CAT INTO LS_ALV_CAT INDEX LV_TABIX.
    IF SY-SUBRC EQ 0.
      IF LV_MENGE > LV_TABIX.
        ASSIGN COMPONENT LS_ALV_CAT-FIELDNAME OF STRUCTURE <DYN_WA2> TO <FS_STR2>.
        IF SY-SUBRC EQ 0.
          IF LS_ALV_CAT-FIELDNAME+0(4) EQ 'ZSTR'.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
              EXPORTING
                INPUT  = LT_DATA-VALUE
              IMPORTING
                OUTPUT = <FS_STR2>.
          ELSE.
            <FS_STR2> = LT_DATA-VALUE.
          ENDIF.
*        <FS_STR2> = LT_DATA-VALUE.

        ENDIF.
      ELSEIF LV_MENGE = LV_TABIX.
        ASSIGN COMPONENT 'DMBTR' OF STRUCTURE <DYN_WA2> TO <FS_STR2>.
        IF SY-SUBRC EQ 0.
          <FS_STR2> = LT_DATA-VALUE.
        ENDIF.
      ENDIF.
    ENDIF.
    AT END OF ROW.
      COLLECT <DYN_WA2> INTO <DYN_TABLE2>[].
      CLEAR: <DYN_WA2>.
    ENDAT.

  ENDLOOP.
ENDFORM.                    " FRM_GET_FILE_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_COMPARE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_COMPARE_DATA .
  DATA: LV_STR1 TYPE STRING,
        LV_STR2 TYPE STRING,
        LV_STR3 TYPE STRING.
  DATA: LT_OUTPUT TYPE TABLE OF SY_OUTPUT,
        LS_OUTPUT TYPE SY_OUTPUT.
  DATA: LV_TABIX1 TYPE SY-TABIX,
        LV_TABIX2 TYPE SY-TABIX,
        LV_DELFLG TYPE CHAR1.

  LOOP AT <DYN_TABLE> INTO <DYN_WA>.
    DO P_MENGE1 TIMES.
      LV_STR1 = SY-INDEX.
      CONCATENATE 'ZSTR' LV_STR1 INTO LV_STR2.
      ASSIGN COMPONENT LV_STR2 OF STRUCTURE <DYN_WA> TO <FS_STR>.
      IF SY-SUBRC EQ 0.
        LV_STR3 = <FS_STR>.
        IF LV_STR1 EQ 1.
          GS_OUTPUT-ZSTRA = LV_STR3.
        ELSE.
          CONCATENATE GS_OUTPUT-ZSTRA ':' LV_STR3 INTO GS_OUTPUT-ZSTRA.
        ENDIF.
      ENDIF.
    ENDDO.
    ASSIGN COMPONENT 'DMBTR' OF STRUCTURE <DYN_WA> TO <FS_STR>.
    IF SY-SUBRC EQ 0.
      GS_OUTPUT-DMBTR = <FS_STR>.
    ENDIF.
    APPEND GS_OUTPUT TO GT_OUTPUT[].
    CLEAR GS_OUTPUT.
  ENDLOOP.

  LOOP AT <DYN_TABLE2> INTO <DYN_WA2>.
    DO P_MENGE1 TIMES.
      LV_STR1 = SY-INDEX.
      CONCATENATE 'ZSTR' LV_STR1 INTO LV_STR2.
      ASSIGN COMPONENT LV_STR2 OF STRUCTURE <DYN_WA2> TO <FS_STR2>.
      IF SY-SUBRC EQ 0.
        LV_STR3 = <FS_STR2>.
        IF LV_STR1 EQ 1.
          CONCATENATE LV_STR3 '' INTO LS_OUTPUT-ZSTRA.
        ELSE.
          CONCATENATE LS_OUTPUT-ZSTRA ':' LV_STR3 INTO LS_OUTPUT-ZSTRA.
        ENDIF.

      ENDIF.
    ENDDO.
    ASSIGN COMPONENT 'DMBTR' OF STRUCTURE <DYN_WA2> TO <FS_STR2>.
    IF SY-SUBRC EQ 0.
      LS_OUTPUT-DMBTR = <FS_STR2>.
    ENDIF.
    APPEND LS_OUTPUT TO LT_OUTPUT[].
    CLEAR LS_OUTPUT.
  ENDLOOP.

  SORT LT_OUTPUT[] BY ZSTRA.
  LOOP AT GT_OUTPUT INTO GS_OUTPUT.
    READ TABLE LT_OUTPUT INTO LS_OUTPUT WITH KEY ZSTRA = GS_OUTPUT-ZSTRA BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      LV_TABIX2 = SY-TABIX.
      GS_OUTPUT-DMBTR = GS_OUTPUT-DMBTR - LS_OUTPUT-DMBTR.
      DELETE LT_OUTPUT[] INDEX LV_TABIX2.
      GS_OUTPUT-ZSTRB = '文件1和文件2都存在,但是有差异'.
      else.
        GS_OUTPUT-ZSTRB = '文件1有,文件2不存在该条数据'.
    ENDIF.

    MODIFY GT_OUTPUT FROM GS_OUTPUT.
    CLEAR GS_OUTPUT.
  ENDLOOP.

  DELETE GT_OUTPUT[] WHERE DMBTR EQ 0.

  LOOP AT LT_OUTPUT INTO LS_OUTPUT.
    LS_OUTPUT-ZSTRB = '文件1没有,文件2有该条数据'.
    APPEND LS_OUTPUT TO GT_OUTPUT[].
    CLEAR LS_OUTPUT.
  ENDLOOP.

ENDFORM.                    " FRM_COMPARE_DATA
*&---------------------------------------------------------------------*
*&      Form  F_DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM F_DISPLAY_DATA .
  PERFORM FRM_SET_ALVCAT.
*  BREAK-POINT.
*  CLEAR: GT_OUTPUT[].
*  GS_OUTPUT-ZSTRA = 'ZTEST'.
*  GS_OUTPUT-DMBTR = 111.
*  GS_OUTPUT-ZSTRB = 'B'.
*  APPEND GS_OUTPUT TO GT_OUTPUT[].
  PERFORM F_ALV_DISPLAY TABLES GT_OUTPUT.
ENDFORM.                    " F_DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_ALVCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_ALVCAT .
  CLEAR: GT_ALV_CAT[].
  DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
  DEFINE SET_FIELDCAT.
    CLEAR: LS_FIELDCAT.
    LS_FIELDCAT-FIELDNAME = &1.
    LS_FIELDCAT-REF_FIELD = &2.
    LS_FIELDCAT-REF_TABLE = &3.
    LS_FIELDCAT-CONVEXIT  = &4.
    LS_FIELDCAT-DO_SUM    = &5.
    LS_FIELDCAT-SELTEXT   = &6.
    LS_FIELDCAT-SCRTEXT_L = &6.
    LS_FIELDCAT-SCRTEXT_M = &6.
    LS_FIELDCAT-SCRTEXT_S = &6.
    LS_FIELDCAT-COLTEXT   = &6.
    APPEND LS_FIELDCAT TO GT_ALV_CAT.
  END-OF-DEFINITION.
*显示内容
  SET_FIELDCAT 'ZSTRA' '' '' '' ''  '对比条件'.
  SET_FIELDCAT 'DMBTR'  'DMBTR'  'BSEG' '' ''  '对比差异'.
  SET_FIELDCAT 'ZSTRB' '' '' '' ''  '表结果'.
ENDFORM.                    " FRM_SET_ALVCAT

*&---------------------------------------------------------------------*
*&      Form  f_set_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_SET_LAYOUT.
  CLEAR: GS_LAYOUT.
*  GS_LAYOUT-BOX_FNAME = 'SLBOX'.
  GS_LAYOUT-ZEBRA = 'X'.
  GS_LAYOUT-CWIDTH_OPT = 'X'.
*  GS_LAYOUT-CTAB_FNAME = 'CELLCOLOR'.
ENDFORM.                    "f_set_layout
*FORM F_SET_FIELDCAT.
*  CLEAR: GT_FIELDCAT[].
*  DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
*  DEFINE SET_FIELDCAT.
*    CLEAR: LS_FIELDCAT.
*    LS_FIELDCAT-FIELDNAME = &1.
*    LS_FIELDCAT-REF_FIELD = &2.
*    LS_FIELDCAT-REF_TABLE = &3.
*    LS_FIELDCAT-CONVEXIT  = &4.
*    LS_FIELDCAT-DO_SUM    = &5.
*    LS_FIELDCAT-SELTEXT   = &6.
*    LS_FIELDCAT-SCRTEXT_L = &6.
*    LS_FIELDCAT-SCRTEXT_M = &6.
*    LS_FIELDCAT-SCRTEXT_S = &6.
*    LS_FIELDCAT-COLTEXT   = &6.
*    APPEND LS_FIELDCAT TO GT_FIELDCAT.
*  END-OF-DEFINITION.
**显示内容
*  SET_FIELDCAT 'RBUKRS' 'RBUKRS' 'ACDOCA' '' ''  '公司代码'.
*  SET_FIELDCAT 'GJAHR'  'GJAHR'  'ACDOCA' '' ''  '会计年度'.
*  SET_FIELDCAT 'BUDAT'  'BUDAT'  'ACDOCA' '' ''  '过账日期'.
*ENDFORM.
FORM F_ALV_DISPLAY TABLES IT_TABLE.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
*      I_CALLBACK_PF_STATUS_SET = 'F_SET_PF_STATUS'
*      I_CALLBACK_USER_COMMAND  = 'F_USER_COMMAND'
      IS_LAYOUT_LVC            = GS_LAYOUT
      IT_FIELDCAT_LVC          = GT_ALV_CAT
      I_SAVE                   = 'U'
    TABLES
      T_OUTTAB                 = IT_TABLE
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
  ENDIF.
ENDFORM.                    "f_alv_display
*-----------------------------------------------------------------------* *
*-----------------------------------------------------------------------*
FORM F_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
*  SET PF-STATUS 'STD'.
ENDFORM.                    "f_set_pf_status
*-----------------------------------------------------------------------* *
*-----------------------------------------------------------------------*
FORM F_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
 RS_SELFIELD TYPE SLIS_SELFIELD.
  PERFORM F_CHECK_CHANGE_DATA.
  CASE R_UCOMM.
    WHEN 'ZALL'."全選
*      PERFORM FRM_SELECT_ALL.
    WHEN 'ZUNALL'."取消全選
*      PERFORM FRM_SELECT_INI.
    WHEN 'ZSAVE'.
*      PERFORM FRM_SAVE_DATA.
    WHEN 'ZDEL'.
*      PERFORM FRM_DEL_DATA.
    WHEN '&IC1'."双击事件
*      READ TABLE GT_OUTPUT INTO GS_OUTPUT INDEX RS_SELFIELD-TABINDEX.
*      IF SY-SUBRC EQ 0.
*        SET PARAMETER ID 'BLN' FIELD GS_OUTPUT-BELNR.
*        SET PARAMETER ID 'BUK' FIELD GS_OUTPUT-RBUKRS.
*        SET PARAMETER ID 'GJR' FIELD GS_OUTPUT-GJAHR.
*        CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*      ENDIF.
  ENDCASE.
  PERFORM F_REFRESH_ALV.
ENDFORM.                    "f_user_command
*-----------------------------------------------------------------------* *
*-----------------------------------------------------------------------*
FORM F_CHECK_CHANGE_DATA.
  DATA: LO_GRID TYPE REF TO CL_GUI_ALV_GRID.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LO_GRID.
  LO_GRID->CHECK_CHANGED_DATA( ).
ENDFORM.                    "f_check_change_data
*-----------------------------------------------------------------------* *
*-----------------------------------------------------------------------*
FORM F_REFRESH_ALV.
  DATA: LO_GRID      TYPE REF TO CL_GUI_ALV_GRID,
        LS_IS_STABLE TYPE LVC_S_STBL.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LO_GRID.
  LS_IS_STABLE-COL = 'X'.
  LS_IS_STABLE-ROW = 'X'.
  LO_GRID->REFRESH_TABLE_DISPLAY(
  EXPORTING
  IS_STABLE = LS_IS_STABLE
  EXCEPTIONS
  FINISHED = 1
  OTHERS = 2 ).
  IF SY-SUBRC <> 0.
  ENDIF.
ENDFORM.                    "f_refresh_alv
View Code

 

posted @ 2024-03-04 11:13  蛀牙首领  阅读(4)  评论(0编辑  收藏  举报