应收账款回款计划明细表-(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZFIR090
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2018-08-31
*& Program Type        :  Report
*& Description         :  应收账款回款计划明细表
*&---------------------------------------------------------------------*
REPORT ZFIR107.

*&---------------------------------------------------------------------*
*& 包含               ZFIR090_TOP
*&---------------------------------------------------------------------*

TABLES:T001,BKPF,KNA1,TVKO.

TYPE-POOLS:SLIS.

"OOALV-DEFINITION
  DATA GO_ALV_GRID     TYPE REF TO CL_GUI_ALV_GRID.
  DATA GO_ALV_GRID_SUB TYPE REF TO CL_GUI_ALV_GRID.
  DATA LO_CONTAINER    TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
  DATA gt_tools        TYPE UI_FUNCTIONS .
  DATA OK_CODE         TYPE SY-UCOMM.
  DATA OK_SAVE         TYPE SY-UCOMM.

  FIELD-SYMBOLS:<F1>.
"""" 如下参数定义为操作EXCEL所用
  INCLUDEOLE2INCL,
           ZFIR090_EXCEL.

  DATAI_EXCEL_CONTROL     TYPE REF TO EXCEL_CONTROL,
        I_EXCEL_DESTINATION TYPE REF TO EXCEL_DESTINATION.
  DATAI_ROWS_TABLE TYPE ROWS_TAB.

  DATABEGIN OF EXCEL_COLUMN OCCURS 0,
          S_INDEX LIKE SY-TABIX,
          S_ID    TYPE C,
        END OF EXCEL_COLUMN.

TYPESBEGIN OF GTS_DATA,

        VLFAG             TYPE  C,                      "标记字段
        LV_LINES          TYPE  SY-TABIX,               "序号
        BUKRS             TYPE  T001-BUKRS,             "公司代码
        BUTXT             TYPE  T001-BUTXT,             "公司代码名称
        BUDAT             TYPE  BKPF-BUDAT,             "过账日期
        BUDATJ            TYPE  BKPF-BUDAT,             "屏幕截止日期
        KUNNR             TYPE  KNA1-KUNNR,             "客户
        NAME1             TYPE  KNA1-NAME1,             "客户名称
        BLDAT             TYPE  BLDAT,                  "月度付款日
        BLDA              TYPE  CHAR2,                  "月度付款日
        DYQJ              TYPE  CHAR6,                  "当月期间
        DQRNY             TYPE  CHAR6,                  "到期日年月
        ZTAGG             TYPE  ZSDRP_001-ZTAGG,        "信用账期
        ZTAGQ             TYPE  ZSDRP_001-ZTAGG,        "信用期
        WAERS             TYPE  T001-WAERS,             "本币币别
        DMBTR_YS          TYPE  DMBTR,                  "应收总额
        DMBTR_YQ          TYPE  DMBTR,                  "已经逾期
        DMBTR_N           TYPE  DMBTR,                  "当月(N)到期
        DMBTR_N1          TYPE  DMBTR,                  "N+1到期
        DMBTR_N2          TYPE  DMBTR,                  "N+2到期
        DMBTR_N3          TYPE  DMBTR,                  "N+3到期
        DMBTR_N4          TYPE  DMBTR,                  "N+4到期
        DMBTR_N5          TYPE  DMBTR,                  "N+5到期
        TEXT20            TYPE  TEXT20,                 "备注

        VKORG             TYPE  ZSDRP_001-VKORG,        "销售组织
        ZFBDT             TYPE  BSID-ZFBDT,             "起算日
        ZFBDQ             TYPE  BSID-ZFBDT,             "到期日
        ZBD1T             TYPE  BSID-ZBD1T,             "天数
        BELNR             TYPE  BSID-BELNR,             "凭证
        BUZEI             TYPE  BSID-BUZEI,             "行项目
        HKONT             TYPE  BSID-HKONT,             "总账科目
        AUGBL             TYPE  BSID-AUGBL,             "清算凭证
        SHKZG             TYPE  BSID-SHKZG,             "借贷
        DMBTR             TYPE  BSID-DMBTR,             "本币金额
        GJAHR             TYPE  GJAHR,                  "财年

      END OF GTS_DATA.

DATAGT_DATA      TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_ADD  TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_A    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_B    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_C    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_D    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_E    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_F    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_G    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_T001      TYPE TABLE OF T001     WITH HEADER LINE.
DATALV_FLAG      TYPE C.

DATA LV_DATUM1 TYPE DATS .
DATA LV_DATUM2 TYPE DATS .
DATA LV_DATUM3 TYPE DATS .
DATA LV_DATUM4 TYPE DATS .
DATA LV_DATUM5 TYPE DATS .

CONSTANTS:SELECTED VALUE 'X'.
DATACONTROLS_CREATED.
DATALV_WAERS TYPE T001-WAERS .

* global fields
DATADRAGDROP_TREE TYPE REF TO CL_DRAGDROP,
      DRAGDROP_ALV  TYPE REF TO CL_DRAGDROP,
      FLG_NEW,
      GRID          TYPE REF TO CL_GUI_ALV_GRID,
      GS_LAYOUT_ALV TYPE LVC_S_LAYO,
      GS_TOOLBAR    TYPE STB_BUTTON,
      G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      G_CONTAINER_OBJECT TYPE REF TO CL_GUI_DOCKING_CONTAINER,
      G_DROPEFFECT  TYPE I,
      G_HANDLE_TREE TYPE I,
      G_HANDLE_ALV  TYPE I,
      G_HIERARCHY_HEADER TYPE TREEV_HHDR,
      G_REPID       LIKE SY-REPID,
      CONTROLS_CREATED1,
      TREE1  TYPE REF TO CL_GUI_ALV_TREE.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONSS_BUKRS  FOR  T001-BUKRS  MODIF ID C1 OBLIGATORY .                    "公司代码
SELECT-OPTIONSS_KUNNR  FOR  KNA1-KUNNR  MODIF ID C1            .                    "客户
PARAMETERS:     P_BUDAT  TYPE BKPF-BUDAT  MODIF ID C1 OBLIGATORY .                    "截止日期                              "SO2订单号
SELECTION-SCREEN END OF BLOCK B1.
*
*SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
*PARAMETERS: p_chong AS CHECKBOX USER-COMMAND mx MODIF ID mb.
*SELECTION-SCREEN END OF BLOCK b3.
*&---------------------------------------------------------------------*
*& 包含               ZFIR090_CLASS
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*       CLASS cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    声明单击事件的方法
    METHODS HANDLE_HOTSPOT_CLICK
                  
FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
        
IMPORTING E_ROW_ID E_COLUMN_ID.
    声明双击事件方法
    METHODS HANDLE_DOUBLE_CLICK
                  
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
        
IMPORTING E_ROW E_COLUMN.
    声明TOOLBAR事件方法
    METHODS HANDLE_TOOLBAR
                  
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
        
IMPORTING E_OBJECT E_INTERACTIVE.
    声明USER-COMMAND 事件方法
    METHODS HANDLE_COMMAND
                  
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
        
IMPORTING E_UCOMM.
    "修改时触发
    METHODS HANDLE_DATA_CHANGED
                  
FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
        
IMPORTING ER_DATA_CHANGED.
    "Drag
    METHODS HANDLE_ONDRAG
                  
FOR EVENT ONDRAG OF CL_GUI_ALV_GRID
        
IMPORTING E_ROW
                  E_COLUMN
                  ES_ROW_NO
                  E_DRAGDROPOBJ
.
    "Drop
     METHODS HANDLE_ONDROP
                  
FOR EVENT ONDROP OF CL_GUI_ALV_GRID
        
IMPORTING E_ROW
                  E_COLUMN
                  E_DRAGDROPOBJ
.
  PRIVATE SECTION.
ENDCLASS.                    "CL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*       CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
  单击事件方法的实现
  METHOD HANDLE_HOTSPOT_CLICK.

  ENDMETHOD.                    "HANDLE_HOTSPOT_CLICK
  双击事件方法的实现
  METHOD HANDLE_DOUBLE_CLICK.
    DATAGRID_TITLE TYPE LVC_TITLE.
    CLEAR GT_DATA_D .
    READ TABLE GT_DATA_D[] INDEX E_ROW-INDEX INTO GT_DATA_D .

    CLEAR GT_DATA_E[] .
    CASE E_COLUMN-FIELDNAME.
      WHEN 'DMBTR_YS'."应收总额
        GRID_TITLE =  GT_DATA_D-BUTXT && '->' && GT_DATA_D-NAME1 && '--应收总额明细数据'.
        LOOP AT GT_DATA INTO GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR.
          APPEND GT_DATA TO GT_DATA_E[] .
          CLEAR GT_DATA .
        ENDLOOP.
      WHEN 'DMBTR_YQ'"已经逾期
        GRID_TITLE =  GT_DATA_D-BUTXT && '->' && GT_DATA_D-NAME1 && '--已经逾期明细数据'.
        LOOP AT GT_DATA INTO GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR AND DQRNY < P_BUDAT(6).
          APPEND GT_DATA TO GT_DATA_E[] .
          CLEAR GT_DATA .
        ENDLOOP.
      WHEN 'DMBTR_N'"当月(N)到期
        GRID_TITLE =  GT_DATA_D-BUTXT && '->' && GT_DATA_D-NAME1 && '--当月(N)到期明细数据'.
        LOOP AT GT_DATA INTO GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR AND DQRNY P_BUDAT(6).
          APPEND GT_DATA TO GT_DATA_E[] .
          CLEAR GT_DATA .
        ENDLOOP.
      WHEN 'DMBTR_N1'"N+1到期
        GRID_TITLE =  GT_DATA_D-BUTXT && '->' && GT_DATA_D-NAME1 && '--N+1到期明细数据'.
        LOOP AT GT_DATA INTO GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR AND DQRNY LV_DATUM1(6).
          APPEND GT_DATA TO GT_DATA_E[] .
          CLEAR GT_DATA .
        ENDLOOP.
      WHEN 'DMBTR_N2'"N+2到期
        GRID_TITLE =  GT_DATA_D-BUTXT && '->' && GT_DATA_D-NAME1 && '--N+2到期明细数据'.
        LOOP AT GT_DATA INTO GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR AND DQRNY LV_DATUM2(6).
          APPEND GT_DATA TO GT_DATA_E[] .
          CLEAR GT_DATA .
        ENDLOOP.
      WHEN 'DMBTR_N3'"N+3到期
        GRID_TITLE =  GT_DATA_D-BUTXT && '->' && GT_DATA_D-NAME1 && '--N+3到期明细数据'.
        LOOP AT GT_DATA INTO GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR AND DQRNY LV_DATUM3(6).
          APPEND GT_DATA TO GT_DATA_E[] .
          CLEAR GT_DATA .
        ENDLOOP.
      WHEN 'DMBTR_N4'"N+4到期
        GRID_TITLE =  GT_DATA_D-BUTXT && '->' && GT_DATA_D-NAME1 && '--N+4到期明细数据'.
        LOOP AT GT_DATA INTO GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR AND DQRNY LV_DATUM4(6).
          APPEND GT_DATA TO GT_DATA_E[] .
          CLEAR GT_DATA .
        ENDLOOP.
      WHEN 'DMBTR_N5'"N+5到期
        GRID_TITLE =  GT_DATA_D-BUTXT && '->' && GT_DATA_D-NAME1 && '--N+5到期明细数据'.
        LOOP AT GT_DATA INTO GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR AND DQRNY >= LV_DATUM5(6).
          APPEND GT_DATA TO GT_DATA_E[] .
          CLEAR GT_DATA .
        ENDLOOP.
      WHEN OTHERS.
        MESSAGE '请双击有效字段!TYPE 'S' DISPLAY LIKE 'W' .
        GRID_TITLE 'NULL !' .
    ENDCASE.

    DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
    LV_STABLE-ROW '1'.
    LV_STABLE-COL '1'.

    GS_LAYOUT_ALV-GRID_TITLE GRID_TITLE."标题栏文本
    GS_LAYOUT_ALV-SEL_MODE   'D'.      "选择方式
    GS_LAYOUT_ALV-CWIDTH_OPT 'X'.    "优化列宽
*     handle for D'n'D
*    GS_LAYOUT_ALV-S_DRAGDROP-ROW_DDID = G_HANDLE_ALV.

    CALL METHOD GO_ALV_GRID_SUB->SET_FRONTEND_LAYOUT
      
EXPORTING
        IS_LAYOUT GS_LAYOUT_ALV.

    CALL METHOD GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY
      
EXPORTING
        IS_STABLE LV_STABLE.

      CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
        
EXPORTING
          CONTROL GO_ALV_GRID_SUB.
      CALL METHOD CL_GUI_CFW=>FLUSH.

      CALL SCREEN 200 .
  ENDMETHOD.                    "HANDLE_DOUBLE_CLICK
  实现TOOLBAR事件方法
  METHOD HANDLE_TOOLBAR.
    DATALS_TOOLBAR TYPE STB_BUTTON.
*    DELETE E_OBJECT->MT_TOOLBAR WHERE FUNCTION = '&PRINT_BACK'.
*    CLEAR: LS_TOOLBAR.
*    LS_TOOLBAR-BUTN_TYPE = 3. " 分隔符
*    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
*    CLEAR: LS_TOOLBAR.


*    ls_toolbar-function = 'BT_8'.    "功能码
*    ls_toolbar-icon = icon_incomplete.  " 图标名称
*    ls_toolbar-text = '功能按钮1'.    " 按钮上显示的文本
*    ls_toolbar-quickinfo = '功能按钮'.   " 图标的提示信息
*    ls_toolbar-butn_type = 0.        " 0表示正常按钮
*    ls_toolbar-disabled = ''.        " X表示灰色,不可用
*    APPEND ls_toolbar TO e_object->mt_toolbar.
  ENDMETHOD.                    "HANDLE_TOOLBAR
  实现USER-COMMAND 事件方法
  METHOD HANDLE_COMMAND.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
*  RANGES: L_WERKS FOR T001W-WERKS.
*  RANGES: L_MATNR FOR MARA-MATNR.
  DATA:L_BUKRS TYPE T001K-BUKRS.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

*    CASE E_UCOMM.
*      WHEN 'BT_8'.
**        SORT gt_data[] BY bedat.
**        CALL METHOD go_alv_grid->refresh_table_display "内表改变时刷新ALV
**          EXPORTING
**            is_stable = lv_stable.
*      WHEN OTHERS.
*    ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.


  ENDMETHOD.                    "HANDLE_COMMAND
  实现DATA_CHANGED 事件方法
  METHOD HANDLE_DATA_CHANGED.

  ENDMETHOD.                    "handle_data_changed
* Drag & Drop
  METHOD HANDLE_ONDRAG.
     CHECK NOT E_ROW IS INITIAL.

*    PERFORM DISPLAY_FLIGHTS USING NODE_KEY.
*    CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE EXPORTING NEW_CODE =
*    FCODE_ENTR.
  ENDMETHOD.
* Drag & Drop
  METHOD HANDLE_ONDROP.
    CHECK NOT E_ROW IS INITIAL.
*
  ENDMETHOD.
ENDCLASS.                    "cl_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------*
*& 包含               ZFIR090_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form GET_MONTH_LASTDAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM GET_MONTH_LASTDAY .
*取上个月最后一天
  P_BUDAT SY-DATUM(6&& '01'.
  P_BUDAT P_BUDAT .

*取本月最后一天
*  CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
*    EXPORTING
*      i_date        = P_BUDAT
*   IMPORTING
*      e_date        = p_budat
*      .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .

  CLEAR LV_FLAG.
  CLEAR GT_T001[].
  SELECT BUKRS INTO CORRESPONDING FIELDS OF TABLE GT_T001[] FROM T001
    
WHERE BUKRS IN S_BUKRS .
  LOOP AT GT_T001.
   AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
    ID 'BUKRS' FIELD GT_T001-BUKRS.
    IF SY-SUBRC <> 0.
      LV_FLAG 'X' .
      EXIT .
    ENDIF.
    CLEAR GT_T001 .
  ENDLOOP.
  IF LV_FLAG IS NOT INITIAL.
    MESSAGE '您没有公司:'&& GT_T001-BUKRS && '  的权限!TYPE 'E' .
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .

*取未清项BSID
  CLEAR GT_DATA[] .
  SELECT
    BSID~ZFBDT
    BSID
~ZBD1T
    BSID
~BELNR
    BSID
~BUZEI
    BSID
~HKONT
    BSID
~AUGBL
    BSID
~SHKZG
    BSID
~BUKRS
    BSID
~KUNNR
    BSID
~DMBTR
    BSID
~GJAHR
    BSID
~BUDAT
    
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
    
FROM BSID
    
WHERE BSID~BUKRS IN S_BUKRS
      
AND BSID~KUNNR IN S_KUNNR
      
AND BSID~BUDAT <= P_BUDAT
      
AND BSID~HKONT IN ('1122010000','1122020000','1122030000')
      AND BSID~BSTAT  ''
      .

*取已清项BSAD
  CLEAR GT_DATA_ADD[] .
  SELECT
    BSAD~ZFBDT
    BSAD
~ZBD1T
    BSAD
~BELNR
    BSAD
~BUZEI
    BSAD
~HKONT
    BSAD
~AUGBL
    BSAD
~SHKZG
    BSAD
~BUKRS
    BSAD
~KUNNR
    BSAD
~DMBTR
    BSAD
~GJAHR
    BSAD
~BUDAT
    
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_ADD[]
    
FROM BSAD
    
WHERE BSAD~BUKRS IN S_BUKRS
      
AND BSAD~KUNNR IN S_KUNNR
      
AND BSAD~BUDAT <= P_BUDAT
      
AND BSAD~HKONT IN ('1122010000','1122020000','1122030000')
      AND BSAD~BSTAT  ''
      AND BSAD~AUGDT >  P_BUDAT
      
.

  APPEND LINES OF GT_DATA_ADD[] TO GT_DATA[] .

  IF GT_DATA[] IS NOT INITIAL.
*根据公司代码查询销售组织(TVKO-VKORG);
    CLEAR GT_DATA_A[] .
    SELECT BUKRS VKORG INTO CORRESPONDING FIELDS OF TABLE GT_DATA_A[] FROM TVKO
      
FOR ALL ENTRIES IN  GT_DATA[]
      
WHERE BUKRS GT_DATA-BUKRS
      
.

    LOOP AT GT_DATA.
      READ TABLE GT_DATA_A WITH KEY BUKRS GT_DATA-BUKRS .
      IF SY-SUBRC 0.
        GT_DATA-VKORG GT_DATA_A-VKORG .
      ENDIF.
*如果借贷(SHKZG)是H,则对本币金额(DMBTR)取负数
      IF GT_DATA-SHKZG 'H' .
        GT_DATA-DMBTR GT_DATA-DMBTR * -.
      ENDIF.
      MODIFY GT_DATA  .
      CLEAR GT_DATA   .
      CLEAR GT_DATA_A .
    ENDLOOP.

*客户取表ZSDRP_001的应收信用账期(ZSDRP_001-ZTAGG
    CLEAR GT_DATA_B[] .
    SELECT VKORG KUNNR ZTAGG INTO CORRESPONDING FIELDS OF TABLE GT_DATA_B[] FROM ZSDRP_001
      
FOR ALL ENTRIES IN  GT_DATA[]
      
WHERE VKORG GT_DATA-VKORG
        
AND KUNNR GT_DATA-KUNNR
      
.
    LOOP AT GT_DATA_B.
      READ TABLE GT_DATA WITH KEY VKORG GT_DATA_B-VKORG KUNNR GT_DATA_B-KUNNR .
      IF SY-SUBRC 0.
        GT_DATA_B-BUKRS GT_DATA-BUKRS .
      ENDIF.
      MODIFY GT_DATA_B .
      CLEAR  GT_DATA_B .
      CLEAR  GT_DATA .
    ENDLOOP.

    SORT GT_DATA_B[] BY BUKRS KUNNR ZTAGG.
    DELETE ADJACENT DUPLICATES FROM GT_DATA_B[] COMPARING BUKRS KUNNR .

*按公司代码、客户汇总本币金额得到应收总额。
    GT_DATA_C[] GT_DATA[] .
    SORT GT_DATA_C[] BY BUKRS KUNNR .
    DELETE ADJACENT DUPLICATES FROM GT_DATA_C[] COMPARING BUKRS KUNNR .

    LOOP AT GT_DATA_C.
      CLEAR GT_DATA_C-DMBTR_YS.
      LOOP AT GT_DATA WHERE BUKRS GT_DATA_C-BUKRS AND KUNNR GT_DATA_C-KUNNR.
        GT_DATA_C-DMBTR_YS GT_DATA_C-DMBTR_YS + GT_DATA-DMBTR .
        CLEAR GT_DATA .
      ENDLOOP.
      MODIFY GT_DATA_C .
      CLEAR GT_DATA_C  .
    ENDLOOP.

    LOOP AT GT_DATA.

      READ TABLE GT_DATA_B WITH KEY BUKRS GT_DATA-BUKRS KUNNR GT_DATA-KUNNR .
      IF SY-SUBRC 0.
        GT_DATA-ZTAGG GT_DATA_B-ZTAGG .
      ENDIF.

      IF GT_DATA-ZTAGG IS INITIAL.
        GT_DATA-ZTAGG 30 .
      ENDIF.

      READ TABLE GT_DATA_C WITH KEY BUKRS GT_DATA-BUKRS KUNNR GT_DATA-KUNNR .
      IF SY-SUBRC 0.
        GT_DATA-DMBTR_YS GT_DATA_C-DMBTR_YS .
      ENDIF.
*将取到的未清项、已清项的起算日 加上 天数 加上应收信用账期得到 到期日
      GT_DATA-ZFBDQ GT_DATA-ZFBDT + GT_DATA-ZBD1T + GT_DATA-ZTAGG .
      GT_DATA-DYQJ   =  P_BUDAT(6).
      GT_DATA-DQRNY  =  GT_DATA-ZFBDQ(6).

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  GT_DATA-KUNNR
        
IMPORTING
          OUTPUT GT_DATA-KUNNR.

      SELECT SINGLE NAME1 INTO GT_DATA-NAME1 FROM KNA1
        
WHERE KUNNR GT_DATA-KUNNR
        
.

      SELECT SINGLE BUTXT WAERS INTO GT_DATA-BUTXT,GT_DATA-WAERS FROM T001
        
WHERE BUKRS GT_DATA-BUKRS
        
.

      GT_DATA-BUDATJ P_BUDAT .

      MODIFY GT_DATA   .
      CLEAR  GT_DATA   .
      CLEAR  GT_DATA_B .
      CLEAR  GT_DATA_C .
    ENDLOOP.

*信用期的处理:将未清项、已清项中取到的条目的天数 加上 应收信用账期得到临时信用期,按照公司代码、客户、过账日期、凭证排序,最大一条的临时信用期即为信用期。
    GT_DATA_F[] GT_DATA[] .
    LOOP AT GT_DATA_F.
     GT_DATA_F-ZTAGQ GT_DATA_F-ZBD1T + GT_DATA_F-ZTAGG .
     MODIFY GT_DATA_F .
     CLEAR  GT_DATA_F .
    ENDLOOP.
    SORT GT_DATA_F[] BY BUKRS KUNNR ZTAGQ DESCENDING.
    DELETE ADJACENT DUPLICATES FROM GT_DATA_F[] COMPARING BUKRS KUNNR .

*按公司代码、客户、到期日的年月汇总本币金额
    GT_DATA_D[] GT_DATA[] .
    SORT GT_DATA_D[] BY BUKRS KUNNR DQRNY.
    DELETE ADJACENT DUPLICATES FROM GT_DATA_D[] COMPARING BUKRS KUNNR DQRNY .

    LOOP AT GT_DATA_D.
      CLEAR GT_DATA_D-DMBTR.
      LOOP AT GT_DATA WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR AND DQRNY GT_DATA_D-DQRNY.
        GT_DATA_D-DMBTR GT_DATA_D-DMBTR + GT_DATA-DMBTR .
        CLEAR GT_DATA .
      ENDLOOP.
      MODIFY GT_DATA_D .
      CLEAR GT_DATA_D  .
    ENDLOOP.

*取所选期间的最后一天
    CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
      EXPORTING
        I_DATE        P_BUDAT
     
IMPORTING
        E_DATE        LV_DATUM1
        
.
*取下一个期间的第一天
    LV_DATUM1 LV_DATUM1 + .

*取所选期间的最后一天
    CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
      EXPORTING
        I_DATE        LV_DATUM1
     
IMPORTING
        E_DATE        LV_DATUM2
        
.
*取下一个期间的第一天
    LV_DATUM2 LV_DATUM2 + .

*取所选期间的最后一天
    CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
      EXPORTING
        I_DATE        LV_DATUM2
     
IMPORTING
        E_DATE        LV_DATUM3
        
.
*取下一个期间的第一天
    LV_DATUM3 LV_DATUM3 + .

*取所选期间的最后一天
    CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
      EXPORTING
        I_DATE        LV_DATUM3
     
IMPORTING
        E_DATE        LV_DATUM4
        
.
*取下一个期间的第一天
    LV_DATUM4 LV_DATUM4 + .

*取所选期间的最后一天
    CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
      EXPORTING
        I_DATE        LV_DATUM4
     
IMPORTING
        E_DATE        LV_DATUM5
        
.
*取下一个期间的第一天
    LV_DATUM5 LV_DATUM5 + .

    DATA LV_LINES TYPE SY-TABIX .
    CLEAR LV_LINES .
    LOOP AT GT_DATA_D.
      IF P_BUDAT(6)   > GT_DATA_D-DQRNY."已经逾期
        GT_DATA_D-DMBTR_YQ GT_DATA_D-DMBTR_YQ + GT_DATA_D-DMBTR .
      ENDIF.
      IF P_BUDAT(6)   = GT_DATA_D-DQRNY."当月(N)到期
        GT_DATA_D-DMBTR_N GT_DATA_D-DMBTR_N + GT_DATA_D-DMBTR .
      ENDIF.
      IF LV_DATUM1(6)  = GT_DATA_D-DQRNY."N+1到期
        GT_DATA_D-DMBTR_N1 GT_DATA_D-DMBTR_N1 + GT_DATA_D-DMBTR .
      ENDIF.
      IF LV_DATUM2(6)  = GT_DATA_D-DQRNY."N+2到期
        GT_DATA_D-DMBTR_N2 GT_DATA_D-DMBTR_N2 + GT_DATA_D-DMBTR .
      ENDIF.
      IF LV_DATUM3(6)  = GT_DATA_D-DQRNY."N+3到期
        GT_DATA_D-DMBTR_N3 GT_DATA_D-DMBTR_N3 + GT_DATA_D-DMBTR .
      ENDIF.
      IF LV_DATUM4(6)  = GT_DATA_D-DQRNY."N+4到期
        GT_DATA_D-DMBTR_N4 GT_DATA_D-DMBTR_N4 + GT_DATA_D-DMBTR .
      ENDIF.
      IF LV_DATUM5(6<= GT_DATA_D-DQRNY."N+5到期
        GT_DATA_D-DMBTR_N5 GT_DATA_D-DMBTR_N5 + GT_DATA_D-DMBTR .
      ENDIF.

      ADD TO LV_LINES .
      GT_DATA_D-LV_LINES LV_LINES .

      MODIFY GT_DATA_D .
      CLEAR GT_DATA_D  .
    ENDLOOP.

    DELETE GT_DATA_D WHERE DMBTR_YS IS INITIAL .
    GT_DATA_G[] GT_DATA_D[] .
    SORT GT_DATA_D[] BY BUKRS KUNNR .
    DELETE ADJACENT DUPLICATES FROM GT_DATA_D[] COMPARING BUKRS KUNNR  .

    LOOP AT GT_DATA_D.
      CLEAR GT_DATA_D-DMBTR_YQ .
      CLEAR GT_DATA_D-DMBTR_N .
      CLEAR GT_DATA_D-DMBTR_N1 .
      CLEAR GT_DATA_D-DMBTR_N2 .
      CLEAR GT_DATA_D-DMBTR_N3 .
      CLEAR GT_DATA_D-DMBTR_N4 .
      CLEAR GT_DATA_D-DMBTR_N5 .
      LOOP AT GT_DATA_G WHERE BUKRS GT_DATA_D-BUKRS AND KUNNR GT_DATA_D-KUNNR.
        GT_DATA_D-DMBTR_YQ GT_DATA_D-DMBTR_YQ + GT_DATA_G-DMBTR_YQ .
        GT_DATA_D-DMBTR_N  GT_DATA_D-DMBTR_N  + GT_DATA_G-DMBTR_N .
        GT_DATA_D-DMBTR_N1 GT_DATA_D-DMBTR_N1 + GT_DATA_G-DMBTR_N1 .
        GT_DATA_D-DMBTR_N2 GT_DATA_D-DMBTR_N2 + GT_DATA_G-DMBTR_N2 .
        GT_DATA_D-DMBTR_N3 GT_DATA_D-DMBTR_N3 + GT_DATA_G-DMBTR_N3 .
        GT_DATA_D-DMBTR_N4 GT_DATA_D-DMBTR_N4 + GT_DATA_G-DMBTR_N4 .
        GT_DATA_D-DMBTR_N5 GT_DATA_D-DMBTR_N5 + GT_DATA_G-DMBTR_N5 .
        CLEAR GT_DATA_G .
      ENDLOOP.

      SELECT SINGLE BLDAT INTO GT_DATA_D-BLDAT FROM ZTFI107
        
WHERE BUKRS GT_DATA_D-BUKRS
          
AND KUNNR GT_DATA_D-KUNNR
          
.
      READ TABLE GT_DATA_F WITH KEY BUKRS GT_DATA_D-BUKRS KUNNR GT_DATA_D-KUNNR .
        IF SY-SUBRC 0.
          GT_DATA_D-ZTAGQ GT_DATA_F-ZTAGQ .
        ENDIF.

      GT_DATA_D-BLDA GT_DATA_D-BLDAT+6(2) .

      MODIFY GT_DATA_D .
      CLEAR  GT_DATA_D .
      CLEAR  GT_DATA_F .
    ENDLOOP.

  ELSE.
    MESSAGE 'NO_DATA!'TYPE'S'DISPLAY LIKE 'E'.
  ENDIF.

ENDFORM.
FORM FRM_SET_ALV_TOOLBAR .
  REFRESH GT_TOOLS[].

"你也可以删除标准的功能按钮



*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&DETAIL'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&REFRESH'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&LOCAL&UNDO'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&SORT_ASC'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&SORT_DSC'.
*
*
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&FIND'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&FIND_MORE'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_FILTER'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_SUM'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_SUBTOT'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_EXPORT'.
*
*    DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_VARIANT'.
*
*
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '插入行'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '删除行'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '剪切'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '复制文本'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '插入总览'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '附加行'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '复制行'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '视图'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '显示图形'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '撤销'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '明细'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '打印'.
*
*    DELETE e_object->mt_toolbar WHERE quickinfo = '最终用户文档'.


  APPEND CL_GUI_ALV_GRID=>MC_FC_CHECK             TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_CUT           TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_COPY          TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW      TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW    TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW    TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW      TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE         TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_SUM               TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_INFO              TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_REFRESH           TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_GRAPH             TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW    TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO          TO GT_TOOLS.
  APPEND CL_GUI_ALV_GRID=>MC_FC_SAVE_VARIANT      TO GT_TOOLS.



ENDFORM.                    " FRM_SET_ALV_TOOLBAR
*&---------------------------------------------------------------------*
*& Form CREATEDOCKINGCONTROL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM CREATEDOCKINGCONTROL .
* create container for alv-tree
  CREATE OBJECT G_CONTAINER_OBJECT
      
EXPORTING SIDE CL_GUI_DOCKING_CONTAINER=>DOCK_AT_LEFT
                EXTENSION 
1300
                REPID     G_REPID
                DYNNR     
'0100'.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM CREATETREECONTROL
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM CREATETREECONTROL .

  DATA L_FCAT_CACHE    TYPE LVC_T_FCAT.
  DATA WA_LAYOUT_CACHE TYPE LVC_S_LAYO.
  DATA WA_FIELD        TYPE LVC_S_FCAT.
  DATA LO_EVENT        TYPE REF TO CL_EVENT_RECEIVER.
  DATA L_DISVARIANT    TYPE DISVARIANT.
*  CREATE OBJECT GO_ALV_GRID
*    EXPORTING
*      I_PARENT = G_CONTAINER_OBJECT.

  CREATE OBJECT LO_CONTAINER
    
EXPORTING
      CONTAINER_NAME 'CONT01'.

  CREATE OBJECT GO_ALV_GRID
    
EXPORTING
      I_PARENT LO_CONTAINER.

  DEFINE FILL_FIELD.
    WA_FIELD-FIELDNAME &1.
    WA_FIELD-COLTEXT   &2.

*    IF WA_FIELD-FIELDNAME = 'MATNR' .
*      WA_FIELD-REF_TABLE  = 'MARA'.
*      WA_FIELD-REF_FIELD  = 'MATNR'.
*    ENDIF.

    IF WA_FIELD-FIELDNAME   'BUKRS'
      OR WA_FIELD-FIELDNAME 'KUNNR'
      OR WA_FIELD-FIELDNAME 'LV_LINES'
      .
      WA_FIELD-KEY 'X'.
    ENDIF.

    APPEND WA_FIELD TO L_FCAT_CACHE .
    CLEAR WA_FIELD.
  END-OF-DEFINITION.

  FILL_FIELD :

        'LV_LINES'     '序号',
        'BUKRS'        '公司代码',
        'BUTXT'        '公司代码名称',
        'BUDATJ'       '屏幕的截止日期',
        'KUNNR'        '客户',
        'NAME1'        '客户名称',
        'BLDA'         '月度付款日',
        'DYQJ'         '当月期间',
*        'DQRNY'        '到期日年月',
        'ZTAGQ'        '信用期',
        'WAERS'        '本币币别',
        'DMBTR_YS'     '应收总额',
        'DMBTR_YQ'     '已经逾期',
        'DMBTR_N'      '当月(N)到期',
        'DMBTR_N1'     'N+1到期',
        'DMBTR_N2'     'N+2到期',
        'DMBTR_N3'     'N+3到期',
        'DMBTR_N4'     'N+4到期',
        'DMBTR_N5'     'N+5到期',
        'TEXT20'       '备注'.

  CREATE OBJECT LO_EVENT.
  SET HANDLER LO_EVENT->HANDLE_DOUBLE_CLICK FOR GO_ALV_GRID.
  SET HANDLER LO_EVENT->HANDLE_ONDRAG  FOR GO_ALV_GRID.
  SET HANDLER LO_EVENT->HANDLE_TOOLBAR FOR GO_ALV_GRID.
  SET HANDLER LO_EVENT->HANDLE_COMMAND FOR GO_ALV_GRID.

  WA_LAYOUT_CACHE-GRID_TITLE '应收账款回款计划总表'."标题栏文本
*  WA_LAYOUT_CACHE-SEL_MODE   = 'D'.    "选择方式
  WA_LAYOUT_CACHE-CWIDTH_OPT 'X'.    "优化列宽
*  WA_LAYOUT_CACHE-ZEBRA = 'X'.
  CLEAR L_DISVARIANT.
  L_DISVARIANT-REPORT SY-REPID"当前程序
*添加自定义工具条
    PERFORM FRM_SET_ALV_TOOLBAR.

  CALL METHOD GO_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    
EXPORTING
      IS_LAYOUT            WA_LAYOUT_CACHE
      I_SAVE               
'A'
      IS_VARIANT           L_DISVARIANT
*      IT_TOOLBAR_EXCLUDING = GT_TOOLS
    CHANGING
      IT_FIELDCATALOG L_FCAT_CACHE
      IT_OUTTAB       
GT_DATA_D[].

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FORM_INIT_0101
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FORM_INIT_0101 .

  DATA L_FCAT_CACHE    TYPE LVC_T_FCAT.
  DATA WA_LAYOUT_CACHE TYPE LVC_S_LAYO.
  DATA WA_FIELD        TYPE LVC_S_FCAT.
  DATA LO_EVENT        TYPE REF TO CL_EVENT_RECEIVER.
  DATA L_DISVARIANT    TYPE DISVARIANT.

  CREATE OBJECT LO_CONTAINER
    
EXPORTING
      CONTAINER_NAME 'CONT02'.

  CREATE OBJECT GO_ALV_GRID_SUB
    
EXPORTING
      I_PARENT LO_CONTAINER.

  DEFINE FILL_FIELD.
    WA_FIELD-FIELDNAME &1.
    WA_FIELD-COLTEXT &2.

    IF WA_FIELD-FIELDNAME 'DMBTR' .
      WA_FIELD-DO_SUM    'X'.
    ENDIF.

*    IF WA_FIELD-FIELDNAME = 'MATNR' .
*      WA_FIELD-REF_TABLE = 'MARA'.
*      WA_FIELD-REF_FIELD = 'MATNR'.
*    ENDIF.

    IF WA_FIELD-FIELDNAME   'BUKRS'
      OR WA_FIELD-FIELDNAME 'KUNNR'
      .
      WA_FIELD-KEY 'X'.
    ENDIF.

    APPEND WA_FIELD TO L_FCAT_CACHE .
    CLEAR WA_FIELD.
  END-OF-DEFINITION.

  FILL_FIELD :

        'BUKRS'   '公司代码',
        'BUTXT'   '公司代码名称',
        'BELNR'   '会计凭证',
        'BUZEI'   '行项目',
        'BUDATJ'  '屏幕的截止日期',
        'KUNNR'   '客户',
        'NAME1'   '客户名称',
        'WAERS'   '本币币别',
        'GJAHR'   '年度',
        'DMBTR'   '本币金额',
        'SHKZG'   '借贷标识',
        'BUDAT'   '过账日期',
        'ZFBDT'   '起算日',
        'ZFBDT'   '起算日',
        'ZBD1T'   '天数',
        'ZTAGG'   '信用账期',
        'ZFBDQ'   '到期日',
        'HKONT'   '总账科目',
        'AUGBL'   '清算凭证'.

  CREATE OBJECT LO_EVENT.
  SET HANDLER LO_EVENT->HANDLE_TOOLBAR FOR GO_ALV_GRID_SUB.
  SET HANDLER LO_EVENT->HANDLE_COMMAND FOR GO_ALV_GRID_SUB.
  SET HANDLER LO_EVENT->HANDLE_ONDROP FOR GO_ALV_GRID_SUB.
  WA_LAYOUT_CACHE-GRID_TITLE '应收账款回款计划明细表(请双击总表数据查看)'."标题栏文本
*  WA_LAYOUT_CACHE-SEL_MODE   = 'D'.      "选择方式
  WA_LAYOUT_CACHE-CWIDTH_OPT 'X'.      "优化列宽
  CLEAR L_DISVARIANT.
  L_DISVARIANT-REPORT SY-REPID"当前程序

  CALL METHOD GO_ALV_GRID_SUB->SET_TABLE_FOR_FIRST_DISPLAY
    
EXPORTING
      IS_LAYOUT       WA_LAYOUT_CACHE
      I_SAVE               
'A'
      IS_VARIANT           L_DISVARIANT
    
CHANGING
      IT_FIELDCATALOG L_FCAT_CACHE
      IT_OUTTAB       
GT_DATA_E[].

    GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY( ).

ENDFORM.
*&---------------------------------------------------------------------*
*& Form INIT_DRAGDROP
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM INIT_DRAGDROP .
* set allowed drop effect
  G_DROPEFFECT CL_DRAGDROP=>MOVE.
* Initialize drag & drop descriptions
* -> tree
  CREATE OBJECT DRAGDROP_TREE.
  CALL METHOD DRAGDROP_TREE->ADD EXPORTING
                                 FLAVOR 'LINE'
                                 DRAGSRC SELECTED
                                 DROPTARGET 
''
                                 EFFECT G_DROPEFFECT.
  CALL METHOD DRAGDROP_TREE->GET_HANDLE IMPORTING
                                          HANDLE G_HANDLE_TREE.
* -> ALV grid
  CREATE OBJECT DRAGDROP_ALV.
  CALL METHOD DRAGDROP_ALV->ADD EXPORTING
                            FLAVOR 'LINE'
                            DRAGSRC ''
                            DROPTARGET SELECTED
                            EFFECT 
G_DROPEFFECT.
  CALL METHOD DRAGDROP_ALV->GET_HANDLE IMPORTING
                                          HANDLE G_HANDLE_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含               ZFIR090_PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
 SET PF-STATUS 'PF_0100'.
 SET TITLEBAR  'TITLE_0100'.

 CHECK CONTROLS_CREATED IS INITIAL.
 CALL METHOD CL_GUI_CFW=>FLUSH."触发SAP GUI更新界面
 PERFORM FORM_INIT_0101.  "实例化ALV_GRID
 CONTROLS_CREATED SELECTED.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SCREEN_SETTING_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SCREEN_SETTING_0100 OUTPUT.
  LOOP AT SCREEN.
    CASE SCREEN-GROUP1 .
      WHEN 'G1'.
        SCREEN-ACTIVE '0'.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module TREE_AND_DOCKING OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE TREE_AND_DOCKING OUTPUT.
  CHECK CONTROLS_CREATED1 IS INITIAL.
*   docking control
*  PERFORM CREATEDOCKINGCONTROL.
*   tree control
  PERFORM CREATETREECONTROL.
  CONTROLS_CREATED1 SELECTED.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含               ZFIR090_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE cancel INPUT.
  LEAVE PROGRAM .
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  ok_save sy-ucomm .
  CLEAR sy-ucomm .
  CLEAR ok_code .
  CASE  ok_save.
    WHEN 'BACK'  .
      LEAVE TO SCREEN .
    WHEN OTHERS .
  ENDCASE .
ENDMODULE.

INITIALIZATION .
  PERFORM GET_MONTH_LASTDAY.

AT SELECTION-SCREEN OUTPUT.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
* Initialization Drag and Drop
  PERFORM INIT_DRAGDROP.
  PERFORM FOM_GETDATA .
  CALL SCREEN 100.

猜你喜欢

转载自blog.csdn.net/Sundam/article/details/86609374