科目余额表

*****************************************************************************
*  System      :  
*  Module      : FI
*  Program ID  :  
*  Program     :  
*  Author      :  
*  Date        :  
*  Description : 科目余额表
*****************************************************************************
*  Modified Recorder :
*  Date              Task                    Author                Content
*  -----------------------------------------------------------------------  *
*  修改日期          请求号                  修改者                修改内容
*
*****************************************************************************

REPORT z.

TABLES:sscrfields,acdoca.

* +-------------------------------------------------------------------------------------------+
* | 选择屏幕
* +-------------------------------------------------------------------------------------------+
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-a01.
  SELECT-OPTIONS: s_bukrs  FOR acdoca-rbukrs   ,
                  s_kmonth FOR acdoca-fiscyearper NO-EXTENSION DEFAULT sy-datum+0(6) TO sy-datum+0(6),
                  s_racct  FOR acdoca-racct,
                  s_lifnr  FOR acdoca-lifnr,
                  s_kunnr  FOR acdoca-kunnr,
                  s_aufnr  FOR acdoca-aufnr, "内部订单编码
                  s_kostl  FOR acdoca-ukostl,"成本中心编码
                  s_waers  FOR acdoca-rwcur ,"原币别编码
                  s_fkber  FOR acdoca-rfarea.

  SELECTION-SCREEN: SKIP 1.

  PARAMETERS: p_ck_pa AS CHECKBOX,             "客户/供应商
              p_ck_bw AS CHECKBOX DEFAULT 'X', "显示本位币
              p_ck_jy AS CHECKBOX DEFAULT 'X', "显示交易货币
              p_ck_jt AS CHECKBOX.             "显示集团货币
SELECTION-SCREEN:END OF BLOCK blk1.

SELECTION-SCREEN: FUNCTION KEY 1.


* +-------------------------------------------------------------------------------------------+
* | 本地类LCL_ALV1100定义
* +-------------------------------------------------------------------------------------------+
CLASS lcl_alv1100 DEFINITION.
  PUBLIC SECTION.
    DATA: mo_container TYPE REF TO cl_gui_docking_container,
          mo_alv       TYPE REF TO cl_gui_alv_grid,
          mt_fcat      TYPE lvc_t_fcat,
          ms_layout    TYPE lvc_s_layo.

    METHODS: constructor.
    METHODS: display.
    METHODS: refresh.

  PROTECTED SECTION.
    METHODS: data_changed FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.

    METHODS: data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells .

    METHODS: add_button_2toolbar FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING e_object e_interactive.

    METHODS: hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
      IMPORTING e_row_id e_column_id es_row_no.

    METHODS: after_user_command  FOR EVENT after_user_command OF cl_gui_alv_grid
      IMPORTING e_ucomm e_saved e_not_processed.

  PRIVATE SECTION.
    METHODS: set_fcat RETURNING VALUE(rt_fcat) TYPE lvc_t_fcat.

    METHODS: get_toolbar_exclude RETURNING VALUE(rt_func) TYPE ui_functions.

ENDCLASS.

* +-------------------------------------------------------------------------------------------+
* | 数据定义
* +-------------------------------------------------------------------------------------------+
TYPES: BEGIN OF ty_out1100 ,
         bqqj      TYPE char20,            "  本期期间
         rbukrs    TYPE acdoca-rbukrs,     "  公司代码
         racct     TYPE acdoca-racct,      "  总账科目
         txt20     TYPE skat-txt20,        "  总账科目名称
         umskz     TYPE acdoca-umskz,      "  特殊总账标识
         kunnr     TYPE acdoca-kunnr,      "  客户编号
         lifnr     TYPE acdoca-lifnr,      "  供应商编号
         partner   TYPE but000-partner,
         name1     TYPE but000-name_org1,  "  客户/供应商名称
         rfarea    TYPE acdoca-rfarea,     "  职能范围
         fkbtx     TYPE tfkbt-fkbtx,       "  职能范围
         rwcur     TYPE acdoca-rwcur,      "  交易币别(原币)
         sqjf_jy   TYPE acdoca-wsl,        "  上期借方余额(原币)
         sqdf_jy   TYPE acdoca-wsl,        "  上期贷方余额(原币)
         sqfs_jy   TYPE acdoca-wsl,        "  上期发生额(原币)
         bqjf_jy   TYPE acdoca-wsl,        "  本期借方发生额(原币)
         bqdf_jy   TYPE acdoca-wsl,        "  本期贷方发生额(原币)
         bqfs_jy   TYPE acdoca-wsl,        "  本期发生额(原币)
         qmjf_jy   TYPE acdoca-wsl,        "  期末借方余额(原币)
         qmdf_jy   TYPE acdoca-wsl,        "  期末贷方余额(原币)
         qmfs_jy   TYPE acdoca-wsl,        "  期末余额(原币)
         bnljjf_jy TYPE acdoca-wsl,        "  本年累计借方发生额(原币)
         bnljdf_jy TYPE acdoca-wsl,        "  本年累计贷方发生额(原币)
         bnljfs_jy TYPE acdoca-wsl,        "  本年累计发生额(原币)
         rhcur     TYPE acdoca-rhcur,      "  本位币
         sqjf_bw   TYPE acdoca-wsl,        "  上期借方余额(本位币)  (本币期初余额)(借)
         sqdf_bw   TYPE acdoca-wsl,        "  上期贷方余额(本位币)  (本币期初余额)(借)
         sqfs_bw   TYPE acdoca-wsl,        "  上期发生额(本位币)    (本币期初余额)(借)
         bqjf_bw   TYPE acdoca-wsl,        "  本期借方发生额(本位币)(本币本期发生额)(借)
         bqdf_bw   TYPE acdoca-wsl,        "  本期贷方发生额(本位币)(本币本期发生额)(贷)
         bqfs_bw   TYPE acdoca-wsl,        "  本期发生额(本位币)    (本币本期净额)
         qmjf_bw   TYPE acdoca-wsl,        "  期末借方余额(本位币)  本币期末余额(借)
         qmdf_bw   TYPE acdoca-wsl,        "  期末贷方余额(本位币)  本币期末余额(贷)
         qmfs_bw   TYPE acdoca-wsl,        "  期末余额(本位币)      本币期末余
         bnljjf_bw TYPE acdoca-wsl,        "  本年累计借方发生额(本位币)
         bnljdf_bw TYPE acdoca-wsl,        "  本年累计贷方发生额(本位币)
         bnljfs_bw TYPE acdoca-wsl,        "  本年累计发生额(本位币)
         rkcur     TYPE acdoca-rkcur,      "  集团货币
         sqjf_jt   TYPE acdoca-wsl,        "  上期借方余额(集团货币)
         sqdf_jt   TYPE acdoca-wsl,        "  上期贷方余额(集团货币)
         sqfs_jt   TYPE acdoca-wsl,        "  上期发生额(集团货币)
         bqjf_jt   TYPE acdoca-wsl,        "  本期借方发生额(集团货币)
         bqdf_jt   TYPE acdoca-wsl,        "  本期贷方发生额(集团货币)
         bqfs_jt   TYPE acdoca-wsl,        "  本期发生额(集团货币)
         qmjf_jt   TYPE acdoca-wsl,        "  期末借方余额(集团货币)
         qmdf_jt   TYPE acdoca-wsl,        "  期末贷方余额(集团货币)
         qmfs_jt   TYPE acdoca-wsl,        "  期末余额(集团货币)
         bnljjf_jt TYPE acdoca-wsl,        "  本年累计借方发生额(集团货币)
         bnljdf_jt TYPE acdoca-wsl,        "  本年累计贷方发生额(集团货币)
         bnljfs_jt TYPE acdoca-wsl,        "  本年累计发生额(集团货币)

         flag      TYPE char1,             "  数据来源区分:1科目属性为K/D,2反之
       END OF ty_out1100.

DATA: gt_out1100 TYPE TABLE OF ty_out1100,
      go_alv1100 TYPE REF TO lcl_alv1100,
      gv_rc      TYPE sy-subrc.


* +-------------------------------------------------------------------------------------------+
* | I N I T I A L I Z A T I O N
* +-------------------------------------------------------------------------------------------+
INITIALIZATION.
  PERFORM init_prog.


* +-------------------------------------------------------------------------------------------+
* | A T  S E L E C T I O N - S C R E E N  O U T P U T.
* +-------------------------------------------------------------------------------------------+
AT SELECTION-SCREEN OUTPUT.
  PERFORM set_selscr_attribute.


* +-------------------------------------------------------------------------------------------+
* | A T  S E L E C T I O N - S C R E E N  O U T P U T.
* +-------------------------------------------------------------------------------------------+
AT SELECTION-SCREEN.
  PERFORM on_selscr_user_command.


* +-------------------------------------------------------------------------------------------+
* | A T  S E L E C T I O N - S C R E E N  O N
* +-------------------------------------------------------------------------------------------+
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kmonth-low.
  s_kmonth-low = zcl_tools=>select_year_and_month( ).

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kmonth-high.
  s_kmonth-high = zcl_tools=>select_year_and_month( ).

* +-------------------------------------------------------------------------------------------+
* | S T A R T  O F  S E L E C T I O N
* +-------------------------------------------------------------------------------------------+
START-OF-SELECTION.
  PERFORM main.



* +-------------------------------------------------------------------------------------------+
* | Module STATUS_1100 OUTPUT
* +-------------------------------------------------------------------------------------------+
MODULE status_1100 OUTPUT.

  IF go_alv1100 IS INITIAL.
    go_alv1100 = NEW #(  ).
    go_alv1100->display( ).
  ELSE.
    go_alv1100->refresh(  ).
  ENDIF.

  SET PF-STATUS 'STATUS_1100'.
  SET TITLEBAR  'TITLE_1100' .

ENDMODULE.


* +-------------------------------------------------------------------------------------------+
* | Module USER_COMMAND_1100 INPUT
* +-------------------------------------------------------------------------------------------+
MODULE user_command_1100 INPUT.
  CASE sy-ucomm.
    WHEN 'ZBACK'.
      LEAVE TO SCREEN 0.

    WHEN OTHERS.
  ENDCASE.
ENDMODULE.


* +-------------------------------------------------------------------------------------------+
* | 本地类LCL_SALV1100实现
* +-------------------------------------------------------------------------------------------+
CLASS lcl_alv1100 IMPLEMENTATION.
* +--------------------------------------------------------------------+
* | 创建并展示
* +--------------------------------------------------------------------+
  METHOD constructor.

    mo_container = NEW #( repid     = sy-repid
                          dynnr     = '1100'
                          side      = 2
                          extension = 2050 ).

    mo_alv =  NEW #( mo_container ).

  ENDMETHOD.

* +--------------------------------------------------------------------+
* | 展示
* +--------------------------------------------------------------------+
  METHOD display.

    ms_layout = VALUE #( cwidth_opt = 'X'
                         sel_mode   = 'D'  ).

    mt_fcat = set_fcat( ) .

    mo_alv->register_edit_event( cl_gui_alv_grid=>mc_evt_modified ).
    mo_alv->register_edit_event( cl_gui_alv_grid=>mc_evt_enter ).
    mo_alv->set_toolbar_interactive( )."激活状态栏

    SET HANDLER add_button_2toolbar FOR mo_alv.
    SET HANDLER after_user_command  FOR mo_alv.
    SET HANDLER hotspot_click       FOR mo_alv.

    mo_alv->set_table_for_first_display(
      EXPORTING
        is_layout            = ms_layout
        i_save               = 'A'
        is_variant           = VALUE #( report = sy-repid handle = '1' )
        it_toolbar_excluding = get_toolbar_exclude( )
      CHANGING
        it_outtab            = gt_out1100
        it_fieldcatalog      = mt_fcat ).
    IF sy-subrc <> 0.
    ENDIF.

  ENDMETHOD.

* +---------------------------------------------------------------------------+
* | 设置fieldcat
* +---------------------------------------------------------------------------+
  METHOD set_fcat.

    TRY.
        cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_salv)
                                CHANGING  t_table      = gt_out1100 ).

        rt_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
          r_columns      = lo_salv->get_columns( )
          r_aggregations = lo_salv->get_aggregations( ) ).

      CATCH cx_root INTO DATA(lo_error).
        MESSAGE lo_error->get_text( ) TYPE 'I'. RETURN.
    ENDTRY.

    DELETE rt_fcat WHERE fieldname = 'FLAG'.
    DELETE rt_fcat WHERE fieldname = 'KUNNR'.
    DELETE rt_fcat WHERE fieldname = 'LIFNR'.

    IF p_ck_pa = abap_off..
      DELETE rt_fcat WHERE fieldname = 'PARTNER'.
      DELETE rt_fcat WHERE fieldname = 'NAME1'.
      DELETE rt_fcat WHERE fieldname = 'UMSKZ'.
    ENDIF.

    IF p_ck_bw = abap_off."本文币
      DELETE rt_fcat WHERE fieldname = 'RHCUR'.
      DELETE rt_fcat WHERE fieldname+4(3) = '_BW'.
      DELETE rt_fcat WHERE fieldname+6(3) = '_BW'.
    ENDIF.

    IF p_ck_jy = abap_off."交易货币
      DELETE rt_fcat WHERE fieldname = 'RWCUR'.
      DELETE rt_fcat WHERE fieldname+4(3) = '_JY'.
      DELETE rt_fcat WHERE fieldname+6(3) = '_JY'.
    ENDIF.

    IF p_ck_jt = abap_off."集团货币
      DELETE rt_fcat WHERE fieldname = 'RKCUR'.
      DELETE rt_fcat WHERE fieldname+4(3) = '_JT'.
      DELETE rt_fcat WHERE fieldname+6(3) = '_JT'.
    ENDIF.

    LOOP AT rt_fcat ASSIGNING FIELD-SYMBOL(<ls_fcat>).
      CASE <ls_fcat>-fieldname.
        WHEN 'BQQJ'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期期间'.
          <ls_fcat>-key = 'X'.

        WHEN 'TXT20'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '总账科目描述'.
          <ls_fcat>-key = 'X'.

        WHEN 'UMSKZ' OR 'RFAREA' OR 'RBUKRS' OR 'FKBTX'.
          <ls_fcat>-key = 'X'.

        WHEN 'RACCT'.
          <ls_fcat>-key     = 'X'.
          <ls_fcat>-hotspot = 'X'.

        WHEN 'PARTNER'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '核算维度编码'.
          <ls_fcat>-key = 'X'.

        WHEN 'NAME1'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '核算维度名称'.
          <ls_fcat>-key = 'X'.

        WHEN 'RWCUR'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '原币'.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-just = 'C'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'SQJF_JY'.
          <ls_fcat>-coltext   = <ls_fcat>-reptext = '期初借方余额(原币)'.
          <ls_fcat>-no_zero   = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'SQDF_JY'.
          <ls_fcat>-coltext   = <ls_fcat>-reptext = '期初贷方余额(原币)'.
          <ls_fcat>-no_zero   = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'SQFS_JY'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期初余额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BQJF_JY'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期借方发生额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BQDF_JY'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期贷方发生额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BQFS_JY' .
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期发生额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN'QMJF_JY' .
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末借方余额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.

        WHEN 'QMDF_JY' .
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末贷方余额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'QMFS_JY' .
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末余额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.

        WHEN  'BNLJJF_JY'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计借方发生额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BNLJDF_JY'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计贷方发生额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BNLJFS_JY'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计发生额(原币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C700'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'RHCUR'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本位币'.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-just = 'C'.
          <ls_fcat>-do_sum = 'X'.

        WHEN  'SQJF_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期初借方余额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.

        WHEN  'SQDF_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期初贷方余额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN  'SQFS_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期初余额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN  'BQJF_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期借方发生额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN  'BQDF_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期贷方发生额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BQFS_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期发生额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN  'QMJF_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末借方余额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'QMDF_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末贷方余额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'QMFS_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末余额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BNLJJF_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计借方发生额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BNLJDF_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计贷方发生额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BNLJFS_BW'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计发生额(本位币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C500'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'RKCUR'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '集团货币'.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-just = 'C'.

        WHEN 'SQJF_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期初借方余额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'SQDF_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期初贷方余额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN'SQFS_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期初余额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BQJF_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期借方发生额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BQDF_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期贷方发生额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BQFS_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本期发生额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'QMJF_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末借方余额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'QMDF_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末贷方余额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'QMFS_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '期末余额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN  'BNLJJF_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计借方发生额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BNLJDF_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计贷方发生额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN 'BNLJFS_JT'.
          <ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计发生额(集团货币)'.
          <ls_fcat>-no_zero = abap_true.
          <ls_fcat>-emphasize = 'C400'.
          <ls_fcat>-do_sum = 'X'.

        WHEN OTHERS.
      ENDCASE.
    ENDLOOP.

  ENDMETHOD.

* +---------------------------------------------------------------------------+
* | 设置排除按钮
* +---------------------------------------------------------------------------+
  METHOD get_toolbar_exclude.

    APPEND cl_gui_alv_grid=>mc_fc_maximum             TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_minimum             TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_print               TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_graph               TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_info                TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_find_more           TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_check               TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_refresh             TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_copy_row        TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_paste           TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_cut             TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_paste_new_row   TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_copy            TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_append_row      TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_move_row        TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row      TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_insert_row      TO rt_func.
    APPEND cl_gui_alv_grid=>mc_fc_loc_undo            TO rt_func.

  ENDMETHOD.

* +---------------------------------------------------------------------------+
* | 处理ALV数据改变
* +---------------------------------------------------------------------------+
  METHOD data_changed.
  ENDMETHOD.

* +---------------------------------------------------------------------------+
* | 添加自定义按钮
* +---------------------------------------------------------------------------+
  METHOD add_button_2toolbar.

    e_object->mt_toolbar = VALUE #( BASE e_object->mt_toolbar
           ( icon        = icon_export
             function    = 'DOWNLOAD'
             butn_type   = '0'
             disabled    = ''
             quickinfo   = '下载'
             text        = '下载' ) ).

  ENDMETHOD.

* +---------------------------------------------------------------------------+
* | 自定义按钮
* +---------------------------------------------------------------------------+
  METHOD after_user_command.

    CASE e_ucomm.
      WHEN 'DOWNLOAD'.
        PERFORM download_data_2local.

      WHEN OTHERS.
    ENDCASE.

  ENDMETHOD.
* +---------------------------------------------------------------------------+
* | Instance Protected Method 热点事件
* +---------------------------------------------------------------------------+
  METHOD hotspot_click.

    DATA(ls_line) = gt_out1100[ e_row_id-index  ] .

    CASE e_column_id-fieldname.
      WHEN 'RACCT'.
        PERFORM call_zfir005 USING ls_line.

    ENDCASE.

  ENDMETHOD.

* +---------------------------------------------------------------------------+
* | Instance Protected Method 处理ALV数据改变结束事件
* +---------------------------------------------------------------------------+
  METHOD data_changed_finished.
  ENDMETHOD.

* +---------------------------------------------------------------------------+
* | Static Public Method 刷新
* +---------------------------------------------------------------------------+
  METHOD refresh.

    mo_alv->refresh_table_display( is_stable = VALUE #( row = 'X' col = 'X' ) ).
    mo_alv->set_frontend_layout( ms_layout ).

  ENDMETHOD.
ENDCLASS.

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

*&---------------------------------------------------------------------*
*& Form set_selscr_attribute
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM set_selscr_attribute .

  LOOP AT SCREEN.
    IF screen-name = 'S_BUKRS-LOW' OR screen-name CS 'S_KMONTH'.
      screen-required = '2'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form on_selscr_user_command
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM on_selscr_user_command .
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
    WHEN OTHERS. RETURN.
  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form main
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM main .

  PERFORM check_selscr.
  CHECK gv_rc = 0.

  PERFORM check_authority.
  CHECK gv_rc = 0.

  PERFORM get_data.
  CHECK gv_rc = 0.

  CALL SCREEN 1100.

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

  IF s_kmonth-high IS INITIAL.
    s_kmonth-high = s_kmonth-low.
  ENDIF.

  IF s_kunnr[] IS NOT INITIAL OR s_lifnr[] IS NOT INITIAL.
    p_ck_pa = abap_on.
  ENDIF.

* 取基础数据
  PERFORM get_data_basic.

* 处理货币
  PERFORM get_data_hb.

* 取描述文本
  PERFORM get_data_default_text.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form check_selscr
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM check_selscr .

  CLEAR: gv_rc.

  IF s_bukrs-low IS INITIAL  OR s_bukrs-low = '*'.
    MESSAGE '请输入公司代码!' TYPE 'S' DISPLAY LIKE 'E'.
    gv_rc = 1.  RETURN.
  ENDIF.

  IF s_kmonth-low IS INITIAL.
    MESSAGE '请输入会计期间!' TYPE 'S' DISPLAY LIKE 'E'.
    gv_rc = 1.  RETURN.
  ENDIF.

  IF s_kmonth-high IS INITIAL.
    MESSAGE '请输入会计期间!' TYPE 'S' DISPLAY LIKE 'E'.
    gv_rc = 1.  RETURN.
  ENDIF.

  IF s_kmonth-low+0(4) <> s_kmonth-high+0(4).
    MESSAGE |不支持跨年选择!| TYPE 'S' DISPLAY LIKE 'E'.
    gv_rc = 2.   RETURN.
  ENDIF.

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

  SELECT bukrs FROM t001 WHERE bukrs IN @s_bukrs INTO TABLE @DATA(lt_t001).

  LOOP AT lt_t001 ASSIGNING FIELD-SYMBOL(<ls_t001>).
    AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
      ID 'BUKRS' FIELD <ls_t001>-bukrs.
    IF sy-subrc <> 0.
      MESSAGE |{ TEXT-t01 }{ <ls_t001>-bukrs }{ TEXT-t03 }| TYPE 'S' DISPLAY LIKE 'E'.
      gv_rc = 2.   RETURN.
    ENDIF.
  ENDLOOP.

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

  DATA: lt_out LIKE gt_out1100.

*------------------------------------------------------------
* 取供应商/客户描述
  lt_out = gt_out1100.
  DELETE lt_out WHERE kunnr IS INITIAL AND lifnr IS INITIAL.
  SORT lt_out BY kunnr lifnr.
  DELETE ADJACENT DUPLICATES FROM lt_out COMPARING kunnr lifnr.


  SELECT but000~partner,but000~name_org1,'K' AS flag
    FROM but000
   INNER JOIN @lt_out AS itab ON but000~partner = itab~kunnr
    INTO TABLE @DATA(lt_but000) ##ITAB_KEY_IN_SELECT.

  SELECT but000~partner,but000~name_org1,'L' AS flag
    FROM but000
   INNER JOIN @lt_out AS itab ON but000~partner = itab~lifnr
   APPENDING TABLE @lt_but000 ##ITAB_KEY_IN_SELECT.

  LOOP AT lt_but000 ASSIGNING FIELD-SYMBOL(<ls_but000>).
    CASE <ls_but000>-flag.
      WHEN 'K'.
        MODIFY gt_out1100 FROM VALUE #( name1 = <ls_but000>-name_org1 )
                          TRANSPORTING name1
                          WHERE kunnr = <ls_but000>-partner.
      WHEN 'L'.
        MODIFY gt_out1100 FROM VALUE #( name1 = <ls_but000>-name_org1 )
                          TRANSPORTING name1
                          WHERE lifnr = <ls_but000>-partner.
    ENDCASE.

  ENDLOOP.

  FREE: lt_but000.

*------------------------------------------------------------
* 取科目描述
  lt_out = gt_out1100.
  DELETE lt_out WHERE racct IS INITIAL.
  SORT lt_out BY racct.
  DELETE ADJACENT DUPLICATES FROM lt_out COMPARING racct.

  SELECT skat~saknr,skat~txt20
    FROM skat INNER JOIN @lt_out AS itab ON skat~saknr = itab~racct
   WHERE skat~spras = @sy-langu
     AND skat~ktopl = '1000'
    INTO TABLE @DATA(lt_skat) ##ITAB_KEY_IN_SELECT.

  LOOP AT lt_skat ASSIGNING FIELD-SYMBOL(<ls_skat>).
    MODIFY gt_out1100 FROM VALUE #( txt20 = <ls_skat>-txt20 )
                      TRANSPORTING txt20
                      WHERE racct = <ls_skat>-saknr.
  ENDLOOP.

  FREE: lt_skat.

*------------------------------------------------------------
* 取功能范围描述
  SELECT fkber,fkbtx FROM tfkbt WHERE spras = @sy-langu INTO TABLE @DATA(lt_tfkbt).

  LOOP AT lt_tfkbt ASSIGNING FIELD-SYMBOL(<ls_tfkbt>).
    MODIFY gt_out1100 FROM VALUE #( fkbtx = <ls_tfkbt>-fkbtx )
                      TRANSPORTING fkbtx
                      WHERE rfarea = <ls_tfkbt>-fkber.
  ENDLOOP.

  FREE: lt_tfkbt.

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

  DATA: ls_out1100 TYPE ty_out1100.

  IF p_ck_pa = abap_on.
    SELECT DISTINCT rbukrs,racct,rwcur,rkcur,rhcur,kunnr,lifnr,acdoca~umskz,'1' AS flag,rfarea
      FROM acdoca
     INNER JOIN skb1 ON acdoca~racct = skb1~saknr
     WHERE rldnr = '0L'
       AND substring( belnr,1,1 ) <> 'B'
       AND rbukrs IN @s_bukrs
       AND racct  IN @s_racct
       AND lifnr  IN @s_lifnr
       AND kunnr  IN @s_kunnr
       AND aufnr  IN @s_aufnr
       AND rcntr  IN @s_kostl
       AND rwcur  IN @s_waers
       AND rfarea IN @s_fkber
       AND skb1~mitkz  IN ( 'D','K' )
      INTO TABLE @DATA(lt_acdoca).

    SELECT DISTINCT rbukrs,racct,rwcur,rkcur,rhcur,' ' AS kunnr,' ' AS lifnr,' ' AS umskz,'2' AS flag,rfarea
      FROM acdoca
     INNER JOIN skb1 ON acdoca~racct = skb1~saknr
     WHERE rldnr = '0L'
       AND substring( belnr,1,1 ) <> 'B'
       AND rbukrs IN @s_bukrs
       AND racct  IN @s_racct
       AND lifnr  IN @s_lifnr
       AND kunnr  IN @s_kunnr
       AND aufnr  IN @s_aufnr
       AND rcntr  IN @s_kostl
       AND rwcur  IN @s_waers
       AND rfarea IN @s_fkber
       AND skb1~mitkz NOT IN ( 'D','K' )
      APPENDING TABLE @lt_acdoca.

  ELSE.
    SELECT DISTINCT rbukrs,racct,rwcur,rkcur,rhcur,' ' AS kunnr,' ' AS lifnr,' ' AS umskz,'2' AS flag,rfarea
      FROM acdoca
     WHERE rldnr = '0L'
       AND substring( belnr,1,1 ) <> 'B'
       AND rbukrs IN @s_bukrs
       AND racct  IN @s_racct
       AND lifnr  IN @s_lifnr
       AND kunnr  IN @s_kunnr
       AND aufnr  IN @s_aufnr
       AND rcntr  IN @s_kostl
       AND rwcur  IN @s_waers
       AND rfarea IN @s_fkber
      APPENDING TABLE @lt_acdoca.
  ENDIF.

  IF s_lifnr IS NOT INITIAL.
    DELETE lt_acdoca WHERE lifnr NOT IN s_lifnr[].
  ENDIF.

  IF s_kunnr IS NOT INITIAL.
    DELETE lt_acdoca WHERE kunnr NOT IN s_kunnr[].
  ENDIF.

  SORT lt_acdoca BY rbukrs racct rwcur rkcur rhcur kunnr lifnr umskz rfarea.
  DELETE ADJACENT DUPLICATES FROM lt_acdoca COMPARING ALL FIELDS.

  LOOP AT lt_acdoca ASSIGNING FIELD-SYMBOL(<ls_acdoca>).
    CLEAR: ls_out1100.
    ls_out1100 = CORRESPONDING #( <ls_acdoca> ).

    APPEND ls_out1100 TO gt_out1100.
  ENDLOOP.


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

  DATA: lv_gjahr TYPE gjahr.

  IF s_kmonth-high IS INITIAL .
    lv_gjahr = s_kmonth-high+0(4).
  ELSE.
    lv_gjahr = s_kmonth-low+0(4).
  ENDIF.

  DATA(lt_out1100) = gt_out1100.
  SORT lt_out1100 BY rbukrs racct rwcur rkcur rhcur lifnr kunnr umskz flag.
  DELETE ADJACENT DUPLICATES FROM lt_out1100 COMPARING rbukrs racct rwcur rkcur rhcur lifnr kunnr umskz flag.

  IF p_ck_pa = abap_on.
    "上期
    SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
           acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'S' AS flag,acdoca~rfarea,
           SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
           SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
           SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
      FROM acdoca
     INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
                                   AND acdoca~racct  = itab~racct
                                   AND acdoca~rwcur  = itab~rwcur
                                   AND acdoca~rkcur  = itab~rkcur
                                   AND acdoca~rhcur  = itab~rhcur
                                   AND acdoca~lifnr  = itab~lifnr
                                   AND acdoca~kunnr  = itab~kunnr
                                   AND acdoca~umskz  = itab~umskz
                                   AND acdoca~rfarea = itab~rfarea
     WHERE acdoca~rldnr = '0L'
       AND substring( acdoca~belnr,1,1 ) <> 'B'
       AND acdoca~fiscyearper < @s_kmonth-low
       AND itab~flag = '1'
       AND acdoca~racct NOT BETWEEN '5001010000' AND '9999999999'
       AND acdoca~racct NOT BETWEEN '0000942001' AND '0009943006'
       AND aufnr  IN @s_aufnr
       AND rcntr  IN @s_kostl
     GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
              acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
      INTO TABLE @DATA(lt_acdoca) ##ITAB_KEY_IN_SELECT.

    "上期:只取本年
    SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
           acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'S' AS flag,acdoca~rfarea,
           SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
           SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
           SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
      FROM acdoca
     INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
                                   AND acdoca~racct  = itab~racct
                                   AND acdoca~rwcur  = itab~rwcur
                                   AND acdoca~rkcur  = itab~rkcur
                                   AND acdoca~rhcur  = itab~rhcur
                                   AND acdoca~lifnr  = itab~lifnr
                                   AND acdoca~kunnr  = itab~kunnr
                                   AND acdoca~umskz  = itab~umskz
                                   AND acdoca~rfarea = itab~rfarea
     WHERE acdoca~rldnr = '0L'
       AND substring( acdoca~belnr,1,1 ) <> 'B'
       AND acdoca~fiscyearper < @s_kmonth-low
       AND substring( acdoca~fiscyearper,1,4 ) = @lv_gjahr
       AND itab~flag = '1'
       AND ( acdoca~racct BETWEEN '5001010000' AND '9999999999' OR acdoca~racct BETWEEN '0000942001' AND '0009943006' )
       AND aufnr  IN @s_aufnr
       AND rcntr  IN @s_kostl
     GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
              acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
     APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.

    "本期
    SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
           acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'B' AS flag,acdoca~rfarea,
           SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
           SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
           SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
      FROM acdoca
     INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
                                   AND acdoca~racct  = itab~racct
                                   AND acdoca~rwcur  = itab~rwcur
                                   AND acdoca~rkcur  = itab~rkcur
                                   AND acdoca~rhcur  = itab~rhcur
                                   AND acdoca~lifnr  = itab~lifnr
                                   AND acdoca~kunnr  = itab~kunnr
                                   AND acdoca~umskz  = itab~umskz
                                   AND acdoca~rfarea = itab~rfarea
     WHERE acdoca~rldnr = '0L'
       AND substring( acdoca~belnr,1,1 ) <> 'B'
       AND fiscyearper >= @s_kmonth-low
       AND fiscyearper <= @s_kmonth-high
       AND itab~flag = '1'
       AND aufnr  IN @s_aufnr
       AND rcntr  IN @s_kostl
     GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
              acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
     APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.

    "本年累计
    SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
           acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'B' AS flag,acdoca~rfarea,
           SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
           SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
           SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
      FROM acdoca
     INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
                                   AND acdoca~racct  = itab~racct
                                   AND acdoca~rwcur  = itab~rwcur
                                   AND acdoca~rkcur  = itab~rkcur
                                   AND acdoca~rhcur  = itab~rhcur
                                   AND acdoca~lifnr  = itab~lifnr
                                   AND acdoca~kunnr  = itab~kunnr
                                   AND acdoca~umskz  = itab~umskz
                                   AND acdoca~rfarea = itab~rfarea
     WHERE acdoca~rldnr = '0L'
       AND substring( acdoca~belnr,1,1 ) <> 'B'
       AND substring( acdoca~fiscyearper,1,4 ) = @lv_gjahr
       AND fiscyearper <= @s_kmonth-high
       AND itab~flag = '1'
       AND aufnr  IN @s_aufnr
       AND rcntr  IN @s_kostl
     GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
              acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
      INTO TABLE @DATA(lt_acdoca_bnlj) ##ITAB_KEY_IN_SELECT.
  ENDIF.

  "上期:不带特殊总账
  SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,' ' AS umskz,
         acdoca~drcrk,' ' AS kunnr,' ' AS lifnr,'S' AS flag,acdoca~rfarea,
         SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
         SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
         SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
    FROM acdoca
   INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
                                 AND acdoca~racct  = itab~racct
                                 AND acdoca~rwcur  = itab~rwcur
                                 AND acdoca~rkcur  = itab~rkcur
                                 AND acdoca~rhcur  = itab~rhcur
                                 AND acdoca~rfarea = itab~rfarea
   WHERE rldnr = '0L'
     AND substring( acdoca~belnr,1,1 ) <> 'B'
     AND fiscyearper < @s_kmonth-low
     AND itab~flag = '2'
     AND acdoca~racct NOT BETWEEN '5001010000' AND '9999999999'
     AND acdoca~racct NOT BETWEEN '0000942001' AND '0009943006'
       AND aufnr  IN @s_aufnr
       AND rcntr  IN @s_kostl
   GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~drcrk,acdoca~rfarea
   APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.

  "上期:不带特殊总账:只取本年
  SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,' ' AS umskz,
         acdoca~drcrk,' ' AS kunnr,' ' AS lifnr,'S' AS flag,acdoca~rfarea,
         SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
         SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
         SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
    FROM acdoca
   INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
                                 AND acdoca~racct  = itab~racct
                                 AND acdoca~rwcur  = itab~rwcur
                                 AND acdoca~rkcur  = itab~rkcur
                                 AND acdoca~rhcur  = itab~rhcur
                                 AND acdoca~rfarea = itab~rfarea
   WHERE rldnr = '0L'
     AND substring( acdoca~belnr,1,1 ) <> 'B'
     AND fiscyearper < @s_kmonth-low
     AND substring( acdoca~fiscyearper,1,4 ) = @lv_gjahr
     AND itab~flag = '2'
     AND ( acdoca~racct BETWEEN '5001010000' AND '9999999999' OR acdoca~racct BETWEEN '0000942001' AND '0009943006' )
     AND aufnr  IN @s_aufnr
     AND rcntr  IN @s_kostl
   GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~drcrk,acdoca~rfarea
   APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.

  "本期:不带特殊总账
  SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,' ' AS umskz,
         acdoca~drcrk,' ' AS kunnr,' ' AS lifnr,'B' AS flag,acdoca~rfarea,
         SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
         SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
         SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
    FROM acdoca
   INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
                                 AND acdoca~racct  = itab~racct
                                 AND acdoca~rwcur  = itab~rwcur
                                 AND acdoca~rkcur  = itab~rkcur
                                 AND acdoca~rhcur  = itab~rhcur
                                 AND acdoca~rfarea = itab~rfarea
   WHERE rldnr = '0L'
     AND substring( acdoca~belnr,1,1 ) <> 'B'
     AND acdoca~fiscyearper >= @s_kmonth-low
     AND acdoca~fiscyearper <= @s_kmonth-high
     AND itab~flag = '2'
     AND aufnr  IN @s_aufnr
     AND rcntr  IN @s_kostl
   GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~drcrk,acdoca~rfarea
   APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.

  "本年累计:不带特殊总账
  SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
         acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'B' AS flag,acdoca~rfarea,
         SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
         SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
         SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
    FROM acdoca
   INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
                                 AND acdoca~racct  = itab~racct
                                 AND acdoca~rwcur  = itab~rwcur
                                 AND acdoca~rkcur  = itab~rkcur
                                 AND acdoca~rhcur  = itab~rhcur
                                 AND acdoca~rfarea = itab~rfarea
   WHERE acdoca~rldnr = '0L'
     AND substring( acdoca~belnr,1,1 ) <> 'B'
     AND substring( acdoca~fiscyearper,1,4 ) = @lv_gjahr
     AND fiscyearper <= @s_kmonth-high
     AND itab~flag = '2'
     AND aufnr  IN @s_aufnr
     AND rcntr  IN @s_kostl
   GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
            acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
   APPENDING TABLE @lt_acdoca_bnlj ##ITAB_KEY_IN_SELECT.



  LOOP AT lt_acdoca ASSIGNING FIELD-SYMBOL(<ls_acdoca>).
    IF ( <ls_acdoca>-rwcur = 'JPY' OR <ls_acdoca>-rwcur = 'KRW' ) AND <ls_acdoca>-wsl IS NOT INITIAL.
      PERFORM conv_currency USING <ls_acdoca>-rwcur CHANGING <ls_acdoca>-wsl .
    ENDIF.

    IF ( <ls_acdoca>-rkcur = 'JPY' OR <ls_acdoca>-rkcur = 'KRW' ) AND <ls_acdoca>-ksl IS NOT INITIAL.
      PERFORM conv_currency USING <ls_acdoca>-rkcur CHANGING <ls_acdoca>-ksl .
    ENDIF.

    IF ( <ls_acdoca>-rhcur = 'JPY' OR <ls_acdoca>-rhcur = 'KRW' ) AND <ls_acdoca>-hsl IS NOT INITIAL.
      PERFORM conv_currency USING <ls_acdoca>-rhcur CHANGING <ls_acdoca>-hsl .
    ENDIF.
  ENDLOOP.

  LOOP AT lt_acdoca_bnlj ASSIGNING FIELD-SYMBOL(<ls_acdoca_bnlj>).
    IF ( <ls_acdoca_bnlj>-rwcur = 'JPY' OR <ls_acdoca_bnlj>-rwcur = 'KRW' ) AND <ls_acdoca_bnlj>-wsl IS NOT INITIAL.
      PERFORM conv_currency USING <ls_acdoca_bnlj>-rwcur CHANGING <ls_acdoca_bnlj>-wsl .
    ENDIF.

    IF ( <ls_acdoca_bnlj>-rkcur = 'JPY' OR <ls_acdoca_bnlj>-rkcur = 'KRW' ) AND <ls_acdoca_bnlj>-ksl IS NOT INITIAL.
      PERFORM conv_currency USING <ls_acdoca_bnlj>-rkcur CHANGING <ls_acdoca_bnlj>-ksl .
    ENDIF.

    IF ( <ls_acdoca_bnlj>-rhcur = 'JPY' OR <ls_acdoca_bnlj>-rhcur = 'KRW' ) AND <ls_acdoca_bnlj>-hsl IS NOT INITIAL.
      PERFORM conv_currency USING <ls_acdoca_bnlj>-rhcur CHANGING <ls_acdoca_bnlj>-hsl .
    ENDIF.
  ENDLOOP.

  DATA: ls_out1100 TYPE ty_out1100.

  LOOP AT gt_out1100 ASSIGNING FIELD-SYMBOL(<ls_out1100>).

    ASSIGN lt_acdoca[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
                      rwcur  = <ls_out1100>-rwcur  rkcur = <ls_out1100>-rkcur
                      rhcur  = <ls_out1100>-rhcur  umskz = <ls_out1100>-umskz
                      lifnr  = <ls_out1100>-lifnr  kunnr = <ls_out1100>-kunnr
                      flag   = 'S' drcrk  = 'S'    rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca>.
    IF sy-subrc = 0.
      <ls_out1100>-sqjf_jy = <ls_acdoca>-wsl.
      <ls_out1100>-sqjf_bw = <ls_acdoca>-hsl.
      <ls_out1100>-sqjf_jt = <ls_acdoca>-ksl.
    ENDIF.

    ASSIGN lt_acdoca[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
                      rwcur  = <ls_out1100>-rwcur  rkcur = <ls_out1100>-rkcur
                      rhcur  = <ls_out1100>-rhcur  umskz = <ls_out1100>-umskz
                      lifnr  = <ls_out1100>-lifnr  kunnr = <ls_out1100>-kunnr
                      flag   = 'S' drcrk  = 'H'    rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca>.
    IF sy-subrc = 0.
      <ls_out1100>-sqdf_jy = <ls_acdoca>-wsl.
      <ls_out1100>-sqdf_bw = <ls_acdoca>-hsl.
      <ls_out1100>-sqdf_jt = <ls_acdoca>-ksl.
    ENDIF.

    ASSIGN lt_acdoca[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
                      rwcur  = <ls_out1100>-rwcur  rkcur = <ls_out1100>-rkcur
                      rhcur  = <ls_out1100>-rhcur  umskz = <ls_out1100>-umskz
                      lifnr  = <ls_out1100>-lifnr  kunnr = <ls_out1100>-kunnr
                      flag   = 'B' drcrk  = 'S'    rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca>.
    IF sy-subrc = 0.
      <ls_out1100>-bqjf_jy = <ls_acdoca>-wsl.
      <ls_out1100>-bqjf_bw = <ls_acdoca>-hsl.
      <ls_out1100>-bqjf_jt = <ls_acdoca>-ksl.
    ENDIF.

    ASSIGN lt_acdoca[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
                      rwcur  = <ls_out1100>-rwcur  rkcur = <ls_out1100>-rkcur
                      rhcur  = <ls_out1100>-rhcur  umskz = <ls_out1100>-umskz
                      lifnr  = <ls_out1100>-lifnr  kunnr = <ls_out1100>-kunnr
                      flag  = 'B' drcrk  = 'H'     rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca>.
    IF sy-subrc = 0.
      <ls_out1100>-bqdf_jy = <ls_acdoca>-wsl.
      <ls_out1100>-bqdf_bw = <ls_acdoca>-hsl.
      <ls_out1100>-bqdf_jt = <ls_acdoca>-ksl.
    ENDIF.

    ASSIGN lt_acdoca_bnlj[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
                           rwcur  = <ls_out1100>-rwcur  rkcur = <ls_out1100>-rkcur
                           rhcur  = <ls_out1100>-rhcur  umskz = <ls_out1100>-umskz
                           lifnr  = <ls_out1100>-lifnr  kunnr = <ls_out1100>-kunnr
                           flag  = 'B' drcrk  = 'S'     rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca_bnlj>.
    IF sy-subrc = 0.
      <ls_out1100>-bnljjf_jy = <ls_acdoca>-wsl.
      <ls_out1100>-bnljjf_bw = <ls_acdoca>-hsl.
      <ls_out1100>-bnljjf_jt = <ls_acdoca>-ksl.
    ENDIF.

    ASSIGN lt_acdoca_bnlj[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
                           rwcur  = <ls_out1100>-rwcur  rkcur = <ls_out1100>-rkcur
                           rhcur  = <ls_out1100>-rhcur  umskz = <ls_out1100>-umskz
                           lifnr  = <ls_out1100>-lifnr  kunnr = <ls_out1100>-kunnr
                           flag  = 'B' drcrk  = 'H'     rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca_bnlj>.
    IF sy-subrc = 0.
      <ls_out1100>-bnljdf_jy = <ls_acdoca>-wsl.
      <ls_out1100>-bnljdf_bw = <ls_acdoca>-hsl.
      <ls_out1100>-bnljdf_jt = <ls_acdoca>-ksl.
    ENDIF.

    <ls_out1100>-bqfs_jy   = <ls_out1100>-bqjf_jy - <ls_out1100>-bqdf_jy.
    <ls_out1100>-qmjf_jy   = <ls_out1100>-sqjf_jy + <ls_out1100>-bqjf_jy.
    <ls_out1100>-qmdf_jy   = <ls_out1100>-sqdf_jy + <ls_out1100>-bqdf_jy.
    <ls_out1100>-sqfs_jy   = <ls_out1100>-sqjf_jy - <ls_out1100>-sqdf_jy.
    <ls_out1100>-qmfs_jy   = <ls_out1100>-qmjf_jy - <ls_out1100>-qmdf_jy.
    <ls_out1100>-bnljfs_jy = <ls_out1100>-bnljjf_jy - <ls_out1100>-bnljdf_jy.

    <ls_out1100>-bqfs_bw = <ls_out1100>-bqjf_bw - <ls_out1100>-bqdf_bw.
    <ls_out1100>-qmjf_bw = <ls_out1100>-sqjf_bw + <ls_out1100>-bqjf_bw.
    <ls_out1100>-qmdf_bw = <ls_out1100>-sqdf_bw + <ls_out1100>-bqdf_bw.
    <ls_out1100>-sqfs_bw = <ls_out1100>-sqjf_bw - <ls_out1100>-sqdf_bw.
    <ls_out1100>-qmfs_bw = <ls_out1100>-qmjf_bw - <ls_out1100>-qmdf_bw.
    <ls_out1100>-bnljfs_bw = <ls_out1100>-bnljjf_bw - <ls_out1100>-bnljdf_bw.

    <ls_out1100>-bqfs_jt   = <ls_out1100>-bqjf_jt - <ls_out1100>-bqdf_jt.
    <ls_out1100>-qmjf_jt   = <ls_out1100>-sqjf_jt + <ls_out1100>-bqjf_jt.
    <ls_out1100>-qmdf_jt   = <ls_out1100>-sqdf_jt + <ls_out1100>-bqdf_jt.
    <ls_out1100>-sqfs_jt   = <ls_out1100>-sqjf_jt - <ls_out1100>-sqdf_jt.
    <ls_out1100>-qmfs_jt   = <ls_out1100>-qmjf_jt - <ls_out1100>-qmdf_jt.
    <ls_out1100>-bnljfs_jt = <ls_out1100>-bnljjf_jt - <ls_out1100>-bnljdf_jt.

    "判断金额是否全部为0
    ls_out1100 = CORRESPONDING #( <ls_out1100> EXCEPT rbukrs racct txt20 umskz kunnr lifnr
                                                      name1 rfarea fkbtx rwcur rhcur rkcur flag bqqj  ).
    IF ls_out1100 IS INITIAL.
      <ls_out1100>-rbukrs = ''.
      <ls_out1100>-racct = ''.
    ENDIF.

    IF s_kmonth-high IS INITIAL OR s_kmonth-low = s_kmonth-high.
      <ls_out1100>-bqqj = |{ s_kmonth-low+0(4) }{ s_kmonth-low+5(2) }|.
    ELSE.
      <ls_out1100>-bqqj = |{ s_kmonth-low+0(4) }{ s_kmonth-low+5(2) }-{ s_kmonth-high+0(4) }{ s_kmonth-high+5(2) }|.
    ENDIF.

    IF <ls_out1100>-lifnr IS NOT INITIAL.
      <ls_out1100>-partner = <ls_out1100>-lifnr.
    ENDIF.

    IF <ls_out1100>-kunnr IS NOT INITIAL.
      <ls_out1100>-partner = <ls_out1100>-kunnr.
    ENDIF.

  ENDLOOP.

  DELETE gt_out1100 WHERE rbukrs IS INITIAL AND racct IS INITIAL.

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


  DATA: lv_cellvalue TYPE string,
        lv_row       TYPE sy-tabix VALUE 1,
        lv_col       TYPE sy-tabix,
        lv_letter    TYPE char50,
        lv_file      TYPE string,
        lv_xstring   TYPE xstring,
        lv_name      TYPE text80.


  lv_name = |科目余额表|.
  lv_file = zcl_tools=>load_path_2parameter_save( iv_filename = |{ lv_name }-{ sy-datum }.xlsx| ).

  IF lv_file IS INITIAL .
    RETURN.
  ENDIF.

  TRY.
      DATA(lo_excel)     = NEW zcl_excel( ).
      DATA(lo_worksheet) = lo_excel->get_active_worksheet(  ).


      IF s_kmonth-low = s_kmonth-high.
        lo_worksheet->set_title( |{ lv_name }-{ s_kmonth-low+0(4) }{ s_kmonth-low+5(2) }| ).
      ELSE.
        lo_worksheet->set_title( |{ lv_name }-{ s_kmonth-low+0(4) }{ s_kmonth-low+5(2) }到{ s_kmonth-high+0(4) }{ s_kmonth-high+5(2) }| ).
      ENDIF.

      DATA(lo_style)  = lo_excel->add_new_style( ).
      DATA(lo_border) = NEW zcl_excel_style_border( ).

      lo_style->font->bold = abap_true.
      lo_style->font->name = zcl_excel_style_font=>c_name_arial.
      lo_style->font->size = 11.

      lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center.
      lo_style->alignment->vertical   = zcl_excel_style_alignment=>c_vertical_center.

      lo_border->border_color-rgb = zcl_excel_style_color=>c_black.
      lo_border->border_style = zcl_excel_style_borders=>c_diagonal_both.

      lo_style->borders->allborders = lo_border.

      DATA(lv_style_guid) = lo_style->get_guid( ).

      LOOP AT go_alv1100->mt_fcat ASSIGNING FIELD-SYMBOL(<ls_fcat>).
        lv_col = lv_col + 1.
        lo_worksheet->set_cell( ip_row       = 1
                                ip_column    = lv_col
                                ip_value     = <ls_fcat>-reptext
                                ip_abap_type = cl_abap_typedescr=>typekind_string
                                ip_style     = lv_style_guid ).
      ENDLOOP.

      CLEAR: lv_style_guid.
      lo_style = lo_excel->add_new_style( ).
      lo_style->font->bold = abap_false.
      lo_style->font->name = zcl_excel_style_font=>c_name_arial.
      lo_style->font->size = 11.
      lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_right.
      lo_style->alignment->vertical   = zcl_excel_style_alignment=>c_vertical_center.
      lo_border->border_color-rgb = zcl_excel_style_color=>c_black.
      lo_border->border_style = zcl_excel_style_borders=>c_diagonal_both.
      lo_style->borders->allborders = lo_border.
      lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_number_comma_sep1.
      lv_style_guid = lo_style->get_guid( ).


      lo_style = lo_excel->add_new_style( ).
      lo_style->font->bold = abap_false.
      lo_style->font->name = zcl_excel_style_font=>c_name_arial.
      lo_style->font->size = 11.
      lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_left.
      lo_style->alignment->vertical   = zcl_excel_style_alignment=>c_vertical_center.
      lo_border->border_color-rgb = zcl_excel_style_color=>c_black.
      lo_border->border_style = zcl_excel_style_borders=>c_diagonal_both.
      lo_style->borders->allborders = lo_border.
      DATA(lv_style_guid_item_left) = lo_style->get_guid( ).


      lo_style = lo_excel->add_new_style( ).
      lo_style->font->bold = abap_false.
      lo_style->font->name = zcl_excel_style_font=>c_name_arial.
      lo_style->font->size = 11.
      lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center.
      lo_style->alignment->vertical   = zcl_excel_style_alignment=>c_vertical_center.
      lo_border->border_color-rgb = zcl_excel_style_color=>c_black.
      lo_border->border_style = zcl_excel_style_borders=>c_diagonal_both.
      lo_style->borders->allborders = lo_border.
      DATA(lv_style_guid_item_center) = lo_style->get_guid( ).


      LOOP AT gt_out1100 ASSIGNING FIELD-SYMBOL(<ls_item>).

        lv_row = lv_row + 1.

        CLEAR: lv_cellvalue,lv_col.

        LOOP AT go_alv1100->mt_fcat ASSIGNING <ls_fcat>.

          CLEAR: lv_cellvalue.
          lv_col = lv_col + 1.

          ASSIGN COMPONENT <ls_fcat>-fieldname OF STRUCTURE <ls_item> TO FIELD-SYMBOL(<lv_field>).
          IF sy-subrc <> 0 OR <lv_field> IS INITIAL.
            CONTINUE.
          ENDIF.

          lv_cellvalue = <lv_field>.
          IF <ls_fcat>-fieldname <> 'NAME1' AND <ls_fcat>-fieldname <> 'GTXT20' AND <ls_fcat>-fieldname <> 'TXT20'.
            CONDENSE lv_cellvalue NO-GAPS.
          ENDIF.

          IF <ls_fcat>-fieldname = 'KUNNR' OR <ls_fcat>-fieldname = 'LIFNR' OR <ls_fcat>-fieldname = 'BILKT'.
            lv_cellvalue = |{ lv_cellvalue ALPHA = OUT }|.
          ENDIF.

          IF <ls_fcat>-inttype = 'P' AND <lv_field> < 0.
            CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
              CHANGING
                value = lv_cellvalue.
          ENDIF.

          CASE <ls_fcat>-datatype.
            WHEN 'CURR'.
              lo_worksheet->set_cell( ip_row       = lv_row
                                      ip_column    = lv_col
                                      ip_value     = lv_cellvalue
                                      "ip_formula = |TEXT({ lv_cellvalue },"#,###")|
                                      ip_abap_type = cl_abap_typedescr=>typekind_float
                                      ip_style     = lv_style_guid ).
            WHEN 'CUKY'.
              lo_worksheet->set_cell( ip_row       = lv_row
                                      ip_column    = lv_col
                                      ip_value     = lv_cellvalue
                                      ip_abap_type = cl_abap_typedescr=>typekind_string
                                      ip_style     = lv_style_guid_item_center ).
            WHEN OTHERS.
              lo_worksheet->set_cell( ip_row       = lv_row
                                      ip_column    = lv_col
                                      ip_value     = lv_cellvalue
                                      ip_abap_type = cl_abap_typedescr=>typekind_string
                                      ip_style     = lv_style_guid_item_left ).
          ENDCASE.

          lo_worksheet->get_column( lv_col )->set_auto_size( ip_auto_size = abap_true ).
        ENDLOOP.
      ENDLOOP.


      lo_worksheet->calculate_column_widths( ).
      lo_worksheet->freeze_panes( ip_num_rows = 1 ).


      "导出文件
      DATA(lo_excel_writer) = NEW zcl_excel_writer_2007( ).
      DATA(lv_filecontent) = lo_excel_writer->zif_excel_writer~write_file( lo_excel ).


      cl_scp_change_db=>xstr_to_xtab( EXPORTING im_xstring = lv_filecontent
                                      IMPORTING ex_xtab    = DATA(lt_filecontenttab) ).

      cl_gui_frontend_services=>gui_download(
        EXPORTING
          bin_filesize  = xstrlen( lv_filecontent ) "文件内容大小
          filename      = lv_file
          filetype      = 'BIN'
          confirm_overwrite = abap_true
        CHANGING
          data_tab      = lt_filecontenttab ).

    CATCH zcx_excel INTO DATA(lo_excel_e).
      MESSAGE lo_excel_e->get_text( ) TYPE 'I'. RETURN.
  ENDTRY.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form conv_currency
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> <FS_ACDOCA>_RWCUR
*&      <-- <FS_ACDOCA>_WSL
*&---------------------------------------------------------------------*
FORM conv_currency  USING pv_cur TYPE waers CHANGING cv_wsl.

  DATA lv_amount TYPE bapicurx-bapicurx.

  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERN_9'
    EXPORTING
      currency        = pv_cur
      amount_internal = CONV bapicurext( cv_wsl )
    IMPORTING
      amount_external = lv_amount.

  cv_wsl = lv_amount.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form call_ZFIR005
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM call_zfir005 USING is_data TYPE ty_out1100.

  DATA: lt_sel TYPE TABLE OF rsparams.

  IF s_bukrs-low IS NOT INITIAL.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'S_BUKRS'  sign = 'I' option = 'EQ' low = s_bukrs-low  ) ).
  ENDIF.

  IF is_data-racct IS NOT INITIAL.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'S_HKONT'  sign = 'I' option = 'EQ' low = is_data-racct  ) ).
  ENDIF.

  IF p_ck_pa = abap_on AND is_data-lifnr IS NOT INITIAL.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'S_LIFNR'  sign = 'I' option = 'EQ' low = is_data-lifnr  ) ).
  ENDIF.

  IF p_ck_pa = abap_on AND is_data-kunnr IS NOT INITIAL.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'S_KUNNR'  sign = 'I' option = 'EQ' low = is_data-kunnr  ) ).
  ENDIF.

  IF p_ck_pa = abap_on.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'P_DISBAD'  sign = 'I' option = 'EQ' low = 'X'  ) ).
  ENDIF.

  lt_sel = VALUE #( BASE lt_sel ( selname = 'P_SUBMIT'  sign = 'I' option = 'EQ' low = 'X'  ) ).
  lt_sel = VALUE #( BASE lt_sel ( selname = 'S_WAERS'   sign = 'I' option = 'EQ' low = is_data-rwcur  ) ).
  lt_sel = VALUE #( BASE lt_sel ( selname = 'S_GJAHR'   sign = 'I' option = 'EQ' low = is_data-bqqj+0(4)  ) ).

  SEARCH is_data-bqqj FOR '-'.
  IF sy-subrc <> 0.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'S_BUDAT'  sign = 'I' option = 'BT'
                                    low  = CONV datum( |{ is_data-bqqj+0(6) }01| )
                                    high = CONV datum( |{ zcl_tools=>get_lastday_of_month( CONV kmonth( is_data-bqqj+0(6) ) ) }| )  ) ).
  ELSE.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'S_BUDAT'  sign = 'I' option = 'BT'
                                    low  = CONV datum( |{ is_data-bqqj+0(6) }01| )
                                    high = CONV datum( |{ zcl_tools=>get_lastday_of_month( CONV kmonth( is_data-bqqj+7(6) ) ) }| )  ) ).
  ENDIF.


  LOOP AT s_kostl.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'S_KOSTL'  sign = s_kostl-sign option = s_kostl-option low = s_kostl-low high = s_kostl-high ) ).
  ENDLOOP.

  LOOP AT s_aufnr.
    lt_sel = VALUE #( BASE lt_sel ( selname = 'S_AUFNR'  sign = s_aufnr-sign option = s_aufnr-option low = s_aufnr-low high = s_aufnr-high ) ).
  ENDLOOP.

  SUBMIT zfir005 WITH SELECTION-TABLE lt_sel AND RETURN.
ENDFORM.

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值