科目余额表批量显示

53 篇文章 10 订阅

科目余额表批量显示

最近做的科目余额表,实现交易货币,集团货币,本位币一个页面展示

代码如下:

*&---------------------------------------------------------------------*
*& Report ZFIR122
*&---------------------------------------------------------------------*
*&科目余额表查询

*&---------------------------------------------------------------------*
REPORT ZFIR122.

*&---------------------------------------------------------------------*
*& 包含               ZFIR092_TOP
*&---------------------------------------------------------------------*

TABLES:ACDOCA,BKPF,EKKN,VBAP,SKB1.

TYPE-POOLS:SLIS.

"定义ALV输出所需变量
DATA: S_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: S_LAYOUT_SUB    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT_SUB TYPE SLIS_T_FIELDCAT_ALV.
DATA: GT_RETURN   LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA: U_BUDAT     TYPE BUDAT.
DATA: N_BUDAT     TYPE BUDAT.
DATA: Y_BUDAT     TYPE BUDAT.
DATA: P_BUDAT     TYPE ACDOCA-BUDAT.

TYPES: BEGIN OF GTS_DATA,
        CLR          TYPE  CHAR4,                    "可以控制行颜色
        RBUKRS       TYPE  ACDOCA-RBUKRS,            "公司代码
        BUTXT        TYPE  T001-BUTXT,               "公司代码名称
        GJAHR        TYPE  ACDOCA-GJAHR,             "财年
        N_MONAT      TYPE  BKPF-MONAT,               "期间从
        U_MONAT      TYPE  BKPF-MONAT,               "期间到
        TXT30        TYPE  T077Z-TXT30,              "科目组
        RFAREA       TYPE  ACDOCA-RFAREA,            "一级科目
        RACCT        TYPE  ACDOCA-RACCT,             "科目代码
        RACMX        TYPE  CHAR30,                   "明细科目
        TXT20        TYPE  SKAT-TXT20,               "科目名称
        WAERS        TYPE  FINSC_001A-WAERS,         "集团货币
        FX_QCYE      TYPE  CHAR4,                    "方向
        KSL_QCYE     TYPE  ACDOCA-KSL,               "期初余额(集团货币)
        KSL_BQJF     TYPE  ACDOCA-KSL,               "本期借方(集团货币)
        KSL_BQDF     TYPE  ACDOCA-KSL,               "本期贷方(集团货币)
        FX_BQYE      TYPE  CHAR4,                    "方向
        KSL_BQYE     TYPE  ACDOCA-KSL,               "本期余额(集团货币)
        FX_LJYE      TYPE  CHAR4,                    "方向
        KSL_LJYE     TYPE  ACDOCA-KSL,               "累计余额(集团货币)

        DRCRK        TYPE  FAGLFLEXT-DRCRK,          "借方/贷方标识

        TSL_QCYE     TYPE  ACDOCA-TSL,               "期初余额(集团货币)"IT与丘  20240429
        TSL_BQJF     TYPE  ACDOCA-TSL,               "本期借方(集团货币)
        TSL_BQDF     TYPE  ACDOCA-TSL,               "本期贷方(集团货币)
        TSL_BQYE     TYPE  ACDOCA-TSL,               "本期余额(集团货币)
        TSL_LJYE     TYPE  ACDOCA-TSL,               "累计余额(集团货币)
        HSL_QCYE     TYPE  ACDOCA-HSL,               "期初余额(集团货币)
        HSL_BQJF     TYPE  ACDOCA-HSL,               "本期借方(集团货币)
        HSL_BQDF     TYPE  ACDOCA-HSL,               "本期贷方(集团货币)
        HSL_BQYE     TYPE  ACDOCA-HSL,               "本期余额(集团货币)
        HSL_LJYE     TYPE  ACDOCA-HSL,               "累计余额(集团货币)

        TSLVT        TYPE  FAGLFLEXT-TSLVT,          "交易货币金额   "IT与丘  20240429
        TSL01        TYPE  FAGLFLEXT-TSL01,          "交易货币金额
        TSL02        TYPE  FAGLFLEXT-TSL02,          "交易货币金额
        TSL03        TYPE  FAGLFLEXT-TSL03,          "交易货币金额
        TSL04        TYPE  FAGLFLEXT-TSL04,          "交易货币金额
        TSL05        TYPE  FAGLFLEXT-TSL05,          "交易货币金额
        TSL06        TYPE  FAGLFLEXT-TSL06,          "交易货币金额
        TSL07        TYPE  FAGLFLEXT-TSL07,          "交易货币金额
        TSL08        TYPE  FAGLFLEXT-TSL08,          "交易货币金额
        TSL09        TYPE  FAGLFLEXT-TSL09,          "交易货币金额
        TSL10        TYPE  FAGLFLEXT-TSL10,          "交易货币金额
        TSL11        TYPE  FAGLFLEXT-TSL11,          "交易货币金额
        TSL12        TYPE  FAGLFLEXT-TSL12,          "交易货币金额
        TSL13        TYPE  FAGLFLEXT-TSL13,          "交易货币金额
        TSL14        TYPE  FAGLFLEXT-TSL14,          "交易货币金额
        TSL15        TYPE  FAGLFLEXT-TSL15,          "交易货币金额
        TSL16        TYPE  FAGLFLEXT-TSL16,          "交易货币金额


        KSLVT        TYPE  FAGLFLEXT-KSLVT,          "集团货币金额   "IT与丘  20240429
        KSL01        TYPE  FAGLFLEXT-KSL01,          "集团货币金额
        KSL02        TYPE  FAGLFLEXT-KSL02,          "集团货币金额
        KSL03        TYPE  FAGLFLEXT-KSL03,          "集团货币金额
        KSL04        TYPE  FAGLFLEXT-KSL04,          "集团货币金额
        KSL05        TYPE  FAGLFLEXT-KSL05,          "集团货币金额
        KSL06        TYPE  FAGLFLEXT-KSL06,          "集团货币金额
        KSL07        TYPE  FAGLFLEXT-KSL07,          "集团货币金额
        KSL08        TYPE  FAGLFLEXT-KSL08,          "集团货币金额
        KSL09        TYPE  FAGLFLEXT-KSL09,          "集团货币金额
        KSL10        TYPE  FAGLFLEXT-KSL10,          "集团货币金额
        KSL11        TYPE  FAGLFLEXT-KSL11,          "集团货币金额
        KSL12        TYPE  FAGLFLEXT-KSL12,          "集团货币金额
        KSL13        TYPE  FAGLFLEXT-KSL13,          "集团货币金额
        KSL14        TYPE  FAGLFLEXT-KSL14,          "集团货币金额
        KSL15        TYPE  FAGLFLEXT-KSL15,          "集团货币金额
        KSL16        TYPE  FAGLFLEXT-KSL16,          "集团货币金额

        HSLVT        TYPE  FAGLFLEXT-HSLVT,          "集团货币金额
        HSL01        TYPE  FAGLFLEXT-HSL01,          "集团货币金额
        HSL02        TYPE  FAGLFLEXT-HSL02,          "集团货币金额
        HSL03        TYPE  FAGLFLEXT-HSL03,          "集团货币金额
        HSL04        TYPE  FAGLFLEXT-HSL04,          "集团货币金额
        HSL05        TYPE  FAGLFLEXT-HSL05,          "集团货币金额
        HSL06        TYPE  FAGLFLEXT-HSL06,          "集团货币金额
        HSL07        TYPE  FAGLFLEXT-HSL07,          "集团货币金额
        HSL08        TYPE  FAGLFLEXT-HSL08,          "集团货币金额
        HSL09        TYPE  FAGLFLEXT-HSL09,          "集团货币金额
        HSL10        TYPE  FAGLFLEXT-HSL10,          "集团货币金额
        HSL11        TYPE  FAGLFLEXT-HSL11,          "集团货币金额
        HSL12        TYPE  FAGLFLEXT-HSL12,          "集团货币金额
        HSL13        TYPE  FAGLFLEXT-HSL13,          "集团货币金额
        HSL14        TYPE  FAGLFLEXT-HSL14,          "集团货币金额
        HSL15        TYPE  FAGLFLEXT-HSL15,          "集团货币金额
        HSL16        TYPE  FAGLFLEXT-HSL16,          "集团货币金额
        KSL          TYPE  ACDOCA-KSL,               "集团货币金额
        HSL          TYPE  ACDOCA-HSL,               "集团货币金额
        TSL          TYPE  ACDOCA-TSL,               "集团货币金额
        LIFNR        TYPE  ACDOCA-LIFNR,             "供应商
        KUNNR        TYPE  ACDOCA-KUNNR,             "客户
        FISCYEARPER  TYPE  ACDOCA-FISCYEARPER,       "期间/年度
        MITKZ        TYPE  SKB1-MITKZ,               "统驭科目
        KTOKS        TYPE  SKA1-KTOKS,               "总帐科目组
        A1           TYPE  char4,                    "A1

      END OF GTS_DATA.

DATA: GLAG_N    TYPE  C  .
DATA: GLAG_E    TYPE  C  .
DATA: GT_DATA   TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_B TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_C TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_D TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_E TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_F TYPE TABLE OF GTS_DATA WITH HEADER LINE.

TYPES: BEGIN OF GTS_DATAMX,

        RBUKRS       TYPE  ACDOCA-RBUKRS,            "公司代码
        GJAHR        TYPE  ACDOCA-GJAHR,             "财年
        BELNR        TYPE  ACDOCA-BELNR,             "会计凭证
        DOCLN        TYPE  ACDOCA-DOCLN,             "行项目
        BLART        TYPE  ACDOCA-BLART,             "凭证类型
        BUDAT        TYPE  ACDOCA-BUDAT,             "过账日期
        FISCYEARPER  TYPE  ACDOCA-FISCYEARPER,       "年度期间
        RACCT        TYPE  ACDOCA-RACCT,             "科目
        HSL          TYPE  ACDOCA-HSL,               "本币金额
        KSL          TYPE  ACDOCA-KSL,               "集团货币金额
        DRCRK        TYPE  ACDOCA-DRCRK,             "借贷
        ZUONR        TYPE  ACDOCA-ZUONR,             "分配
        SGTXT        TYPE  ACDOCA-SGTXT,             "摘要
        LIFNR        TYPE  ACDOCA-LIFNR,             "供应商
        NAMEL        TYPE  LFA1-NAME1,               "供应商名称
        KUNNR        TYPE  ACDOCA-KUNNR,             "客户
        NAMEK        TYPE  KNA1-NAME1,               "客户名称
        RCNTR        TYPE  ACDOCA-RCNTR,             "成本中心
        KTEXT        TYPE  CSKT-KTEXT,               "成本中心名称
        RFAREA       TYPE  ACDOCA-RFAREA,            "功能范围
        ANLN1        TYPE  ACDOCA-ANLN1,             "固定资产
        TXT50        TYPE  ANLA-TXT50,               "资产名称
        PRCTR        TYPE  ACDOCA-PRCTR,             "利润中心
        SEGMENT      TYPE  ACDOCA-SEGMENT,           "段
        WERKS        TYPE  ACDOCA-WERKS,             "工厂
        MATNR        TYPE  ACDOCA-MATNR,             "物料
        AUFNR        TYPE  ACDOCA-AUFNR,             "内部订单
        PS_POSID     TYPE  ACDOCA-PS_POSID,          "WBS

      END OF GTS_DATAMX.

DATA: GT_DATAMX   TYPE TABLE OF GTS_DATAMX WITH HEADER LINE.
DATA: GT_DATAMX_A TYPE TABLE OF GTS_DATAMX WITH HEADER LINE.
DATA: GT_DATAMX_B TYPE TABLE OF GTS_DATAMX WITH HEADER LINE.
DATA: GT_DATAMX_C TYPE TABLE OF GTS_DATAMX WITH HEADER LINE.
DATA: GT_DATAMX_D TYPE TABLE OF GTS_DATAMX WITH HEADER LINE.
DATA: GT_DATAMX_E TYPE TABLE OF GTS_DATAMX WITH HEADER LINE.
DATA: GT_DATAMX_F TYPE TABLE OF GTS_DATAMX WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONS: S_BUKRS  FOR ACDOCA-RBUKRS  MODIF ID C1 OBLIGATORY .              "公司代码
    PARAMETERS: P_GJAHR  LIKE BKPF-GJAHR MODIF ID C1 OBLIGATORY .                 "财年
SELECT-OPTIONS:
                S_MONAT  FOR BKPF-MONAT  MODIF ID C1 OBLIGATORY ,                 "期间
                S_SAKNR  FOR SKB1-SAKNR  MODIF ID C1  ,                           "总账科目
                S_RFAREA FOR ACDOCA-RFAREA  MODIF ID C1  .                        "功能范围
*    PARAMETERS: P_X1 RADIOBUTTON GROUP GP1 DEFAULT 'X',                           "集团货币
*                P_X2 RADIOBUTTON GROUP GP1.                                       "本币
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
*& 包含               ZFIR101_CLASS
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*       CLASS DEMO DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
*CLASS DEMO DEFINITION.
*  PUBLIC SECTION.
*    CLASS-METHODS:
*      MAIN.
*ENDCLASS.
*
*CLASS DEMO IMPLEMENTATION.
*  METHOD MAIN.
*    DATA(OUT) = CL_DEMO_OUTPUT=>NEW( ).
*
*    OUT->BEGIN_SECTION( `报错信息回执`
*      )->WRITE( GT_RETURN[] ).
*
*    OUT->DISPLAY( ).
*  ENDMETHOD.
*ENDCLASS.
*&---------------------------------------------------------------------*
*& 包含               ZFIR092_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_EXCLUDE_OPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_OPTION .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_OUTPUT .
  LOOP AT SCREEN.
    CASE SCREEN-GROUP1.
      WHEN 'M1'.
        SCREEN-INPUT = '0'.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
* AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
*  ID 'BUKRS' FIELD P_BUKRS.
*  IF SY-SUBRC <> 0.
*    MESSAGE '您没有公司:'&& P_BUKRS && '  的权限!' TYPE 'E' .
*  ENDIF.

*  MESSAGE I000(0K) WITH TEXT-115 SPACE SPACE SPACE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  FIELD-SYMBOLS <FS> .
  DATA: G_FIELD(40).
  DATA: LV_NUM   TYPE BKPF-MONAT .
  DATA: LV_MONAT TYPE BKPF-MONAT .
  DATA GV_FISCYEARPER  TYPE JAHRPER .
  DATA GV_FISCYEARPERH TYPE JAHRPER .
*  IF P_X1 IS NOT INITIAL.
*  Access logic A
*  根据科目表(KTOPL)=CP11、科目1000NR)=屏幕科目、科目组(KTOKS)不等于A900;再根据屏幕公司代码、财年(RYEAR)= 屏幕财年、
*  科目(RACCT) = 科目(SAKNR)、RLDNR = 0L、RRCTY=0、RVERS = 001,取表FAGLFLEXT的公司代码、科目、功能范围(RFAREA)、借贷(DRCRK)、
*  集团货币金额(KSLVT、KSLXX:XX表示到屏幕上限期间),再按公司代码、科目、功能范围、借贷汇总集团货币金额;再按以下逻辑赋值:
    SELECT
      FAGLFLEXT~RBUKRS
      FAGLFLEXT~RACCT
      FAGLFLEXT~RFAREA
      FAGLFLEXT~DRCRK

      FAGLFLEXT~TSLVT
      FAGLFLEXT~TSL01
      FAGLFLEXT~TSL02
      FAGLFLEXT~TSL03
      FAGLFLEXT~TSL04
      FAGLFLEXT~TSL05
      FAGLFLEXT~TSL06
      FAGLFLEXT~TSL07
      FAGLFLEXT~TSL08
      FAGLFLEXT~TSL09
      FAGLFLEXT~TSL10
      FAGLFLEXT~TSL11
      FAGLFLEXT~TSL12
      FAGLFLEXT~TSL13
      FAGLFLEXT~TSL14
      FAGLFLEXT~TSL15
      FAGLFLEXT~TSL16

      FAGLFLEXT~HSLVT
      FAGLFLEXT~HSL01
      FAGLFLEXT~HSL02
      FAGLFLEXT~HSL03
      FAGLFLEXT~HSL04
      FAGLFLEXT~HSL05
      FAGLFLEXT~HSL06
      FAGLFLEXT~HSL07
      FAGLFLEXT~HSL08
      FAGLFLEXT~HSL09
      FAGLFLEXT~HSL10
      FAGLFLEXT~HSL11
      FAGLFLEXT~HSL12
      FAGLFLEXT~HSL13
      FAGLFLEXT~HSL14
      FAGLFLEXT~HSL15
      FAGLFLEXT~HSL16

      FAGLFLEXT~KSLVT
      FAGLFLEXT~KSL01
      FAGLFLEXT~KSL02
      FAGLFLEXT~KSL03
      FAGLFLEXT~KSL04
      FAGLFLEXT~KSL05
      FAGLFLEXT~KSL06
      FAGLFLEXT~KSL07
      FAGLFLEXT~KSL08
      FAGLFLEXT~KSL09
      FAGLFLEXT~KSL10
      FAGLFLEXT~KSL11
      FAGLFLEXT~KSL12
      FAGLFLEXT~KSL13
      FAGLFLEXT~KSL14
      FAGLFLEXT~KSL15
      FAGLFLEXT~KSL16
      SKA1~KTOKS
    INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
      FROM FAGLFLEXT
      INNER JOIN SKA1 ON FAGLFLEXT~RACCT = SKA1~SAKNR
      WHERE FAGLFLEXT~RYEAR  =  P_GJAHR
        AND FAGLFLEXT~RBUKRS IN S_BUKRS
        AND FAGLFLEXT~RLDNR  =  '0L'
        AND FAGLFLEXT~RRCTY  =  '0'
        AND FAGLFLEXT~RVERS  =  '001'
        AND SKA1~KTOPL  = '1000'
        AND SKA1~KTOKS <> '900'
        AND SKA1~SAKNR IN S_SAKNR
        .

    LOOP AT GT_DATA.
*  期初余额(集团货币):
      CLEAR GT_DATA-KSL_QCYE .
      GT_DATA-KSL_QCYE = GT_DATA-KSLVT .
      IF S_MONAT-LOW > '01' AND S_MONAT-LOW <= '16'.
        LV_MONAT = S_MONAT-LOW - 1 .
        LV_NUM = '01' .
        WHILE LV_NUM <= LV_MONAT .
          CLEAR G_FIELD .
          G_FIELD = 'GT_DATA-KSL' && LV_NUM .
          ASSIGN (G_FIELD) TO <FS>.
          IF <FS> IS ASSIGNED.
            GT_DATA-KSL_QCYE = GT_DATA-KSL_QCYE + <FS>.
          ENDIF.
          UNASSIGN <FS>.
          ADD 1 TO LV_NUM.
        ENDWHILE.
        CLEAR LV_MONAT .
      ENDIF.

      IF GT_DATA-DRCRK = 'S'.
*  本期借方(集团货币):
          CLEAR GT_DATA-KSL_BQJF .
          LV_NUM = S_MONAT-LOW .
          WHILE LV_NUM <= S_MONAT-HIGH .
            CLEAR G_FIELD .
            G_FIELD = 'GT_DATA-KSL' && LV_NUM .
            ASSIGN (G_FIELD) TO <FS>.
            IF <FS> IS ASSIGNED.
              GT_DATA-KSL_BQJF = GT_DATA-KSL_BQJF + <FS>.
            ENDIF.
            UNASSIGN <FS>.
            ADD 1 TO LV_NUM.
          ENDWHILE.
          CLEAR LV_MONAT .
      ELSEIF GT_DATA-DRCRK = 'H'.
*  本期贷方(集团货币):
          CLEAR GT_DATA-KSL_BQDF .
          LV_NUM = S_MONAT-LOW .
          WHILE LV_NUM <= S_MONAT-HIGH .
            CLEAR G_FIELD .
            G_FIELD = 'GT_DATA-KSL' && LV_NUM .
            ASSIGN (G_FIELD) TO <FS>.
            IF <FS> IS ASSIGNED.
              GT_DATA-KSL_BQDF = GT_DATA-KSL_BQDF + <FS>.
            ENDIF.
            UNASSIGN <FS>.
            ADD 1 TO LV_NUM.
          ENDWHILE.
          CLEAR LV_MONAT .
      ENDIF.

*  本期余额(集团货币):
      CLEAR GT_DATA-KSL_BQYE .
      LV_NUM = S_MONAT-LOW .
      WHILE LV_NUM <= S_MONAT-HIGH .
        CLEAR G_FIELD .
        G_FIELD = 'GT_DATA-KSL' && LV_NUM .
        ASSIGN (G_FIELD) TO <FS>.
        IF <FS> IS ASSIGNED.
          GT_DATA-KSL_BQYE = GT_DATA-KSL_BQYE + <FS>.
        ENDIF.
        UNASSIGN <FS>.
        ADD 1 TO LV_NUM.
      ENDWHILE.
      CLEAR LV_MONAT .

*  累计余额(集团货币):
      CLEAR GT_DATA-KSL_LJYE .
      GT_DATA-KSL_LJYE = GT_DATA-KSLVT .
      LV_NUM = '01' .
      WHILE LV_NUM <= S_MONAT-HIGH .
        CLEAR G_FIELD .
        G_FIELD = 'GT_DATA-KSL' && LV_NUM .
        ASSIGN (G_FIELD) TO <FS>.
        IF <FS> IS ASSIGNED.
*          GT_DATA-KSL_QCYE = GT_DATA-KSL_QCYE + <FS>.
         GT_DATA-KSL_LJYE = GT_DATA-KSL_QCYE + <FS>.
        ENDIF.
        UNASSIGN <FS>.
        ADD 1 TO LV_NUM.
      ENDWHILE.
      CLEAR LV_MONAT .


 CLEAR GT_DATA-TSL_QCYE .
      GT_DATA-TSL_QCYE = GT_DATA-TSLVT .
      IF S_MONAT-LOW > '01' AND S_MONAT-LOW <= '16'.
        LV_MONAT = S_MONAT-LOW - 1 .
        LV_NUM = '01' .
        WHILE LV_NUM <= LV_MONAT .
          CLEAR G_FIELD .
          G_FIELD = 'GT_DATA-TSL' && LV_NUM .
          ASSIGN (G_FIELD) TO <FS>.
          IF <FS> IS ASSIGNED.
            GT_DATA-TSL_QCYE = GT_DATA-TSL_QCYE + <FS>.
          ENDIF.
          UNASSIGN <FS>.
          ADD 1 TO LV_NUM.
        ENDWHILE.
        CLEAR LV_MONAT .
      ENDIF.

      IF GT_DATA-DRCRK = 'S'.
*  本期借方(集团货币):
          CLEAR GT_DATA-TSL_BQJF .
          LV_NUM = S_MONAT-LOW .
          WHILE LV_NUM <= S_MONAT-HIGH .
            CLEAR G_FIELD .
            G_FIELD = 'GT_DATA-TSL' && LV_NUM .
            ASSIGN (G_FIELD) TO <FS>.
            IF <FS> IS ASSIGNED.
              GT_DATA-TSL_BQJF = GT_DATA-TSL_BQJF + <FS>.
            ENDIF.
            UNASSIGN <FS>.
            ADD 1 TO LV_NUM.
          ENDWHILE.
          CLEAR LV_MONAT .
      ELSEIF GT_DATA-DRCRK = 'H'.
*  本期贷方(集团货币):
          CLEAR GT_DATA-TSL_BQDF .
          LV_NUM = S_MONAT-LOW .
          WHILE LV_NUM <= S_MONAT-HIGH .
            CLEAR G_FIELD .
            G_FIELD = 'GT_DATA-TSL' && LV_NUM .
            ASSIGN (G_FIELD) TO <FS>.
            IF <FS> IS ASSIGNED.
              GT_DATA-TSL_BQDF = GT_DATA-TSL_BQDF + <FS>.
            ENDIF.
            UNASSIGN <FS>.
            ADD 1 TO LV_NUM.
          ENDWHILE.
          CLEAR LV_MONAT .
      ENDIF.

*  本期余额(集团货币):
      CLEAR GT_DATA-TSL_BQYE .
      LV_NUM = S_MONAT-LOW .
      WHILE LV_NUM <= S_MONAT-HIGH .
        CLEAR G_FIELD .
        G_FIELD = 'GT_DATA-TSL' && LV_NUM .
        ASSIGN (G_FIELD) TO <FS>.
        IF <FS> IS ASSIGNED.
          GT_DATA-TSL_BQYE = GT_DATA-TSL_BQYE + <FS>.
        ENDIF.
        UNASSIGN <FS>.
        ADD 1 TO LV_NUM.
      ENDWHILE.
      CLEAR LV_MONAT .

*  累计余额(集团货币):
      CLEAR GT_DATA-TSL_LJYE .
      GT_DATA-TSL_LJYE = GT_DATA-TSLVT .
      LV_NUM = '01' .
      WHILE LV_NUM <= S_MONAT-HIGH .
        CLEAR G_FIELD .
        G_FIELD = 'GT_DATA-TSL' && LV_NUM .
        ASSIGN (G_FIELD) TO <FS>.
        IF <FS> IS ASSIGNED.
*          GT_DATA-TSL_QCYE = GT_DATA-TSL_QCYE + <FS>.
          GT_DATA-TSL_LJYE = GT_DATA-TSL_QCYE + <FS>.
        ENDIF.
        UNASSIGN <FS>.
        ADD 1 TO LV_NUM.
      ENDWHILE.
      CLEAR LV_MONAT .

  CLEAR GT_DATA-HSL_QCYE .
      GT_DATA-HSL_QCYE = GT_DATA-HSLVT .
      IF S_MONAT-LOW > '01' AND S_MONAT-LOW <= '16'.
        LV_MONAT = S_MONAT-LOW - 1 .
        LV_NUM = '01' .
        WHILE LV_NUM <= LV_MONAT .
          CLEAR G_FIELD .
          G_FIELD = 'GT_DATA-HSL' && LV_NUM .
          ASSIGN (G_FIELD) TO <FS>.
          IF <FS> IS ASSIGNED.
            GT_DATA-HSL_QCYE = GT_DATA-HSL_QCYE + <FS>.
          ENDIF.
          UNASSIGN <FS>.
          ADD 1 TO LV_NUM.
        ENDWHILE.
        CLEAR LV_MONAT .
      ENDIF.

      IF GT_DATA-DRCRK = 'S'.
*  本期借方(集团货币):
          CLEAR GT_DATA-HSL_BQJF .
          LV_NUM = S_MONAT-LOW .
          WHILE LV_NUM <= S_MONAT-HIGH .
            CLEAR G_FIELD .
            G_FIELD = 'GT_DATA-HSL' && LV_NUM .
            ASSIGN (G_FIELD) TO <FS>.
            IF <FS> IS ASSIGNED.
              GT_DATA-HSL_BQJF = GT_DATA-HSL_BQJF + <FS>.
            ENDIF.
            UNASSIGN <FS>.
            ADD 1 TO LV_NUM.
          ENDWHILE.
          CLEAR LV_MONAT .
      ELSEIF GT_DATA-DRCRK = 'H'.
*  本期贷方(集团货币):
          CLEAR GT_DATA-HSL_BQDF .
          LV_NUM = S_MONAT-LOW .
          WHILE LV_NUM <= S_MONAT-HIGH .
            CLEAR G_FIELD .
            G_FIELD = 'GT_DATA-HSL' && LV_NUM .
            ASSIGN (G_FIELD) TO <FS>.
            IF <FS> IS ASSIGNED.
              GT_DATA-HSL_BQDF = GT_DATA-HSL_BQDF + <FS>.
            ENDIF.
            UNASSIGN <FS>.
            ADD 1 TO LV_NUM.
          ENDWHILE.
          CLEAR LV_MONAT .
      ENDIF.

*  本期余额(集团货币):
      CLEAR GT_DATA-HSL_BQYE .
      LV_NUM = S_MONAT-LOW .
      WHILE LV_NUM <= S_MONAT-HIGH .
        CLEAR G_FIELD .
        G_FIELD = 'GT_DATA-HSL' && LV_NUM .
        ASSIGN (G_FIELD) TO <FS>.
        IF <FS> IS ASSIGNED.
          GT_DATA-HSL_BQYE = GT_DATA-HSL_BQYE + <FS>.
        ENDIF.
        UNASSIGN <FS>.
        ADD 1 TO LV_NUM.
      ENDWHILE.
      CLEAR LV_MONAT .

*  累计余额(集团货币):
      CLEAR GT_DATA-HSL_LJYE .
      GT_DATA-HSL_LJYE = GT_DATA-HSLVT .
      LV_NUM = '01' .
      WHILE LV_NUM <= S_MONAT-HIGH .
        CLEAR G_FIELD .
        G_FIELD = 'GT_DATA-HSL' && LV_NUM .
        ASSIGN (G_FIELD) TO <FS>.
        IF <FS> IS ASSIGNED.
*          GT_DATA-HSL_QCYE = GT_DATA-HSL_QCYE + <FS>.
          GT_DATA-HSL_LJYE = GT_DATA-HSL_QCYE + <FS>.
        ENDIF.
        UNASSIGN <FS>.
        ADD 1 TO LV_NUM.
      ENDWHILE.
      CLEAR LV_MONAT .

      MODIFY GT_DATA .
      CLEAR GT_DATA .
    ENDLOOP.

    GT_DATA_A[] = GT_DATA[] .
    SORT GT_DATA_A[] BY RACCT .
    DELETE ADJACENT DUPLICATES FROM GT_DATA_A[] COMPARING RACCT.

    IF GT_DATA[] IS NOT INITIAL.
      LOOP AT GT_DATA_A.
        CLEAR GT_DATA_A-KSL_QCYE .
        CLEAR GT_DATA_A-KSL_BQJF .
        CLEAR GT_DATA_A-KSL_BQDF .
        CLEAR GT_DATA_A-KSL_BQYE .
        CLEAR GT_DATA_A-KSL_LJYE .

        CLEAR GT_DATA_A-TSL_QCYE .
        CLEAR GT_DATA_A-TSL_BQJF .
        CLEAR GT_DATA_A-TSL_BQDF .
        CLEAR GT_DATA_A-TSL_BQYE .
        CLEAR GT_DATA_A-TSL_LJYE .

        CLEAR GT_DATA_A-HSL_QCYE .
        CLEAR GT_DATA_A-HSL_BQJF .
        CLEAR GT_DATA_A-HSL_BQDF .
        CLEAR GT_DATA_A-HSL_BQYE .
        CLEAR GT_DATA_A-HSL_LJYE .

        LOOP AT GT_DATA WHERE RACCT = GT_DATA_A-RACCT.
          GT_DATA_A-KSL_QCYE = GT_DATA_A-KSL_QCYE + GT_DATA-KSL_QCYE .
          GT_DATA_A-KSL_BQJF = GT_DATA_A-KSL_BQJF + GT_DATA-KSL_BQJF .
          GT_DATA_A-KSL_BQDF = GT_DATA_A-KSL_BQDF + GT_DATA-KSL_BQDF .
          GT_DATA_A-KSL_BQYE = GT_DATA_A-KSL_BQYE + GT_DATA-KSL_BQYE .
          GT_DATA_A-KSL_LJYE = GT_DATA_A-KSL_LJYE + GT_DATA-KSL_LJYE .

          GT_DATA_A-HSL_QCYE = GT_DATA_A-HSL_QCYE + GT_DATA-HSL_QCYE .
          GT_DATA_A-HSL_BQJF = GT_DATA_A-HSL_BQJF + GT_DATA-HSL_BQJF .
          GT_DATA_A-HSL_BQDF = GT_DATA_A-HSL_BQDF + GT_DATA-HSL_BQDF .
          GT_DATA_A-HSL_BQYE = GT_DATA_A-HSL_BQYE + GT_DATA-HSL_BQYE .
          GT_DATA_A-HSL_LJYE = GT_DATA_A-HSL_LJYE + GT_DATA-HSL_LJYE .

          GT_DATA_A-TSL_QCYE = GT_DATA_A-TSL_QCYE + GT_DATA-TSL_QCYE .
          GT_DATA_A-TSL_BQJF = GT_DATA_A-TSL_BQJF + GT_DATA-TSL_BQJF .
          GT_DATA_A-TSL_BQDF = GT_DATA_A-TSL_BQDF + GT_DATA-TSL_BQDF .
          GT_DATA_A-TSL_BQYE = GT_DATA_A-TSL_BQYE + GT_DATA-TSL_BQYE .
          GT_DATA_A-TSL_LJYE = GT_DATA_A-TSL_LJYE + GT_DATA-TSL_LJYE .

          CLEAR GT_DATA .
        ENDLOOP.

*        IF GT_DATA_A-KSL_QCYE > 0.
*          GT_DATA_A-FX_QCYE = '借'.
*        ELSEIF GT_DATA_A-KSL_QCYE < 0.
*          GT_DATA_A-KSL_QCYE = GT_DATA_A-KSL_QCYE * -1 .
*          GT_DATA_A-FX_QCYE = '贷'.
*        ELSE.
*          GT_DATA_A-FX_QCYE = '平'.
*        ENDIF.
*
*        IF GT_DATA_A-KSL_BQYE > 0.
*          GT_DATA_A-FX_BQYE = '借'.
*        ELSEIF GT_DATA_A-KSL_BQYE < 0.
*          GT_DATA_A-KSL_BQYE = GT_DATA_A-KSL_BQYE * -1 .
*          GT_DATA_A-FX_BQYE = '贷'.
*        ELSE.
*          GT_DATA_A-FX_BQYE = '平'.
*        ENDIF.
*
*        IF GT_DATA_A-KSL_LJYE > 0.
*          GT_DATA_A-FX_LJYE = '借'.
*        ELSEIF GT_DATA_A-KSL_LJYE < 0.
*          GT_DATA_A-KSL_LJYE = GT_DATA_A-KSL_LJYE * -1 .
*          GT_DATA_A-FX_LJYE = '贷'.
*        ELSE.
*          GT_DATA_A-FX_LJYE = '平'.
*        ENDIF.

        MODIFY GT_DATA_A .
        CLEAR GT_DATA_A .
      ENDLOOP.
    ENDIF.

*  Access logic B
*  根据公司代码、科目代码查询表SKB1,如果统驭科目(MITKZ)等于D、K,则继续取其明细的往来数据,列在该科目代码下:
*  根据条目的公司代码、FISCYEARPER 小于等于 财年+上限期间(三位)、科目(RACCT)、RLDNR = 0L、RRCTY=0,
*  取表ACDOCA的公司代码、科目、借贷(DRCRK)、集团货币金额(KSL)、供应商(LIFNR)、客户(KUNNR),再按公司代码、科目;再按以下逻辑赋值:统驭科目等于D的:
    CLEAR GV_FISCYEARPER .
    GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-HIGH .
    SELECT
      ACDOCA~RBUKRS
      ACDOCA~RACCT
      ACDOCA~DRCRK
      ACDOCA~KSL

       ACDOCA~TSL  "IT与丘  20240430
       ACDOCA~HSL

      ACDOCA~LIFNR
      ACDOCA~KUNNR
      ACDOCA~FISCYEARPER
      SKB1~MITKZ
    INTO CORRESPONDING FIELDS OF TABLE GT_DATA_B[]
      FROM ACDOCA
      INNER JOIN SKB1 ON ACDOCA~RACCT = SKB1~SAKNR AND ACDOCA~RBUKRS = SKB1~BUKRS
      WHERE ACDOCA~RBUKRS IN S_BUKRS
        AND ACDOCA~RLDNR  = '0L'
        AND ACDOCA~RRCTY  = '0'
        AND ACDOCA~BLART <> ''
        AND SKB1~MITKZ IN ('D','K')
        AND ACDOCA~FISCYEARPER  <=  GV_FISCYEARPER
        AND SKB1~SAKNR IN S_SAKNR
        .

    GT_DATA_C[] = GT_DATA_B[] .
    SORT GT_DATA_C[] BY RACCT KUNNR LIFNR.
    DELETE ADJACENT DUPLICATES FROM GT_DATA_C[] COMPARING RACCT KUNNR LIFNR.

    LOOP AT GT_DATA_C.
      CLEAR GT_DATA_C-KSL_QCYE .
      CLEAR GT_DATA_C-KSL_BQJF .
      CLEAR GT_DATA_C-KSL_BQDF .
      CLEAR GT_DATA_C-KSL_BQYE .
      CLEAR GT_DATA_C-KSL_LJYE .

        CLEAR GT_DATA_A-TSL_QCYE .
        CLEAR GT_DATA_A-TSL_BQJF .
        CLEAR GT_DATA_A-TSL_BQDF .
        CLEAR GT_DATA_A-TSL_BQYE .
        CLEAR GT_DATA_A-TSL_LJYE .

        CLEAR GT_DATA_A-HSL_QCYE .
        CLEAR GT_DATA_A-HSL_BQJF .
        CLEAR GT_DATA_A-HSL_BQDF .
        CLEAR GT_DATA_A-HSL_BQYE .
        CLEAR GT_DATA_A-HSL_LJYE .

      LOOP AT GT_DATA_B WHERE RACCT = GT_DATA_C-RACCT .
        IF  ( GT_DATA_C-MITKZ = 'D' AND GT_DATA_C-KUNNR = GT_DATA_B-KUNNR )
          OR ( GT_DATA_C-MITKZ = 'K' AND GT_DATA_C-LIFNR = GT_DATA_B-LIFNR ).
*    期初余额(集团货币):
          CLEAR LV_MONAT .
          LV_MONAT = S_MONAT-LOW - 1 .
          CLEAR GV_FISCYEARPER .
          GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
          IF GT_DATA_B-FISCYEARPER <= GV_FISCYEARPER.
            GT_DATA_C-KSL_QCYE = GT_DATA_C-KSL_QCYE + GT_DATA_B-KSL .
          ENDIF.

*    本期借方(集团货币):& 本期贷方(集团货币):& 本期余额(集团货币):
          CLEAR GV_FISCYEARPER .
          GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
          CLEAR GV_FISCYEARPERH .
          GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .
          IF GT_DATA_B-FISCYEARPER >= GV_FISCYEARPER AND GT_DATA_B-FISCYEARPER <= GV_FISCYEARPERH.
            IF GT_DATA_B-DRCRK = 'S'.
              GT_DATA_C-KSL_BQJF = GT_DATA_C-KSL_BQJF + GT_DATA_B-KSL .
            ELSEIF GT_DATA_B-DRCRK = 'H'.
              GT_DATA_C-KSL_BQDF = GT_DATA_C-KSL_BQDF + GT_DATA_B-KSL .
            ENDIF.
            GT_DATA_C-KSL_BQYE = GT_DATA_C-KSL_BQYE + GT_DATA_B-KSL .
          ENDIF.

*    累计余额(集团货币):
          CLEAR GV_FISCYEARPERH .
          GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .
          IF GT_DATA_B-FISCYEARPER <= GV_FISCYEARPERH.
            GT_DATA_C-KSL_LJYE = GT_DATA_C-KSL_LJYE + GT_DATA_B-KSL .
          ENDIF.
************************         8888

*         *    期初余额(集团货币):
          CLEAR LV_MONAT .
          LV_MONAT = S_MONAT-LOW - 1 .
          CLEAR GV_FISCYEARPER .
          GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
          IF GT_DATA_B-FISCYEARPER <= GV_FISCYEARPER.
            GT_DATA_C-TSL_QCYE = GT_DATA_C-TSL_QCYE + GT_DATA_B-TSL .
          ENDIF.

*    本期借方(集团货币):& 本期贷方(集团货币):& 本期余额(集团货币):
          CLEAR GV_FISCYEARPER .
          GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
          CLEAR GV_FISCYEARPERH .
          GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .
          IF GT_DATA_B-FISCYEARPER >= GV_FISCYEARPER AND GT_DATA_B-FISCYEARPER <= GV_FISCYEARPERH.
            IF GT_DATA_B-DRCRK = 'S'.
              GT_DATA_C-TSL_BQJF = GT_DATA_C-TSL_BQJF + GT_DATA_B-TSL .
            ELSEIF GT_DATA_B-DRCRK = 'H'.
              GT_DATA_C-TSL_BQDF = GT_DATA_C-TSL_BQDF + GT_DATA_B-TSL .
            ENDIF.
            GT_DATA_C-TSL_BQYE = GT_DATA_C-TSL_BQYE + GT_DATA_B-TSL .
          ENDIF.

*    累计余额(集团货币):
          CLEAR GV_FISCYEARPERH .
          GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .
          IF GT_DATA_B-FISCYEARPER <= GV_FISCYEARPERH.
            GT_DATA_C-TSL_LJYE = GT_DATA_C-TSL_LJYE + GT_DATA_B-TSL .
          ENDIF.

*************
*     *    期初余额(集团货币):
          CLEAR LV_MONAT .
          LV_MONAT = S_MONAT-LOW - 1 .
          CLEAR GV_FISCYEARPER .
          GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
          IF GT_DATA_B-FISCYEARPER <= GV_FISCYEARPER.
            GT_DATA_C-HSL_QCYE = GT_DATA_C-HSL_QCYE + GT_DATA_B-HSL .
          ENDIF.

*    本期借方(集团货币):& 本期贷方(集团货币):& 本期余额(集团货币):
          CLEAR GV_FISCYEARPER .
          GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
          CLEAR GV_FISCYEARPERH .
          GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .
          IF GT_DATA_B-FISCYEARPER >= GV_FISCYEARPER AND GT_DATA_B-FISCYEARPER <= GV_FISCYEARPERH.
            IF GT_DATA_B-DRCRK = 'S'.
              GT_DATA_C-HSL_BQJF = GT_DATA_C-HSL_BQJF + GT_DATA_B-HSL .
            ELSEIF GT_DATA_B-DRCRK = 'H'.
              GT_DATA_C-HSL_BQDF = GT_DATA_C-HSL_BQDF + GT_DATA_B-HSL .
            ENDIF.
            GT_DATA_C-HSL_BQYE = GT_DATA_C-HSL_BQYE + GT_DATA_B-HSL .
          ENDIF.

*    累计余额(集团货币):
          CLEAR GV_FISCYEARPERH .
          GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .
          IF GT_DATA_B-FISCYEARPER <= GV_FISCYEARPERH.
            GT_DATA_C-HSL_LJYE = GT_DATA_C-HSL_LJYE + GT_DATA_B-HSL .
          ENDIF.

        ENDIF.

*        ENDIF.

        CLEAR GT_DATA_B .
      ENDLOOP.

*      IF GT_DATA_C-KSL_QCYE > 0.
*        GT_DATA_C-FX_QCYE = '借'.
*      ELSEIF GT_DATA_C-KSL_QCYE < 0.
*        GT_DATA_C-KSL_QCYE = GT_DATA_C-KSL_QCYE * -1 .
*        GT_DATA_C-FX_QCYE = '贷'.
*      ELSE.
*        GT_DATA_C-FX_QCYE = '平'.
*      ENDIF.
*
*      IF GT_DATA_C-KSL_BQYE > 0.
*        GT_DATA_C-FX_BQYE = '借'.
*      ELSEIF GT_DATA_C-KSL_BQYE < 0.
*        GT_DATA_C-KSL_BQYE = GT_DATA_C-KSL_BQYE * -1 .
*        GT_DATA_C-FX_BQYE = '贷'.
*      ELSE.
*        GT_DATA_C-FX_BQYE = '平'.
*      ENDIF.
*
*      IF GT_DATA_C-KSL_LJYE > 0.
*        GT_DATA_C-FX_LJYE = '借'.
*      ELSEIF GT_DATA_C-KSL_LJYE < 0.
*        GT_DATA_C-KSL_LJYE = GT_DATA_C-KSL_LJYE * -1 .
*        GT_DATA_C-FX_LJYE = '贷'.
*      ELSE.
*        GT_DATA_C-FX_LJYE = '平'.
*      ENDIF.

      MODIFY GT_DATA_C .
      CLEAR GT_DATA_C .
    ENDLOOP.

    APPEND LINES OF GT_DATA_C[] TO GT_DATA_A[] .

*  ENDIF.

  RANGES:R_RACCT FOR ACDOCA-RACCT .
  CLEAR R_RACCT[].
  R_RACCT-SIGN   = 'I'.
  R_RACCT-OPTION = 'BT'.
  R_RACCT-LOW    = '6600000000'.
  R_RACCT-HIGH   = '6600999999'.
  APPEND R_RACCT .

  DATA GV_FKBTX TYPE FKBTX .
  DATA GV_TXT20 TYPE TXT20 .
  LOOP AT GT_DATA_A.

    SELECT SINGLE BUTXT INTO GT_DATA_A-BUTXT FROM T001
      WHERE BUKRS = GT_DATA_A-RBUKRS
      .
    GT_DATA_A-GJAHR = P_GJAHR .
    GT_DATA_A-N_MONAT = S_MONAT-LOW  .
    GT_DATA_A-U_MONAT = S_MONAT-HIGH .

    IF GT_DATA_A-RACCT NOT IN R_RACCT.
      GT_DATA_A-RFAREA = GT_DATA_A-RACCT(4).
    ENDIF.

    IF GT_DATA_A-MITKZ = 'D'.
      GT_DATA_A-RACMX = GT_DATA_A-RACCT && GT_DATA_A-KUNNR .
      SELECT SINGLE NAME1 INTO GT_DATA_A-TXT20 FROM KNA1
        WHERE KUNNR = GT_DATA_A-KUNNR
        .
    ELSEIF GT_DATA_A-MITKZ = 'K'.
      GT_DATA_A-RACMX = GT_DATA_A-RACCT && GT_DATA_A-LIFNR .
      SELECT SINGLE NAME1 INTO GT_DATA_A-TXT20 FROM LFA1
        WHERE LIFNR = GT_DATA_A-LIFNR
        .
    ELSE.

      CLEAR GV_FKBTX .
      CLEAR GV_TXT20 .
      SELECT SINGLE FKBTX INTO GV_FKBTX FROM TFKBT
        WHERE SPRAS = 1
          AND FKBER = GT_DATA_A-RFAREA
          .

      SELECT SINGLE TXT20 INTO GV_TXT20 FROM SKAT
        WHERE SPRAS = 1
          AND KTOPL = '1000'
          AND SAKNR = GT_DATA_A-RACCT
          .

      GT_DATA_A-TXT20 = GV_FKBTX && GV_TXT20 .
*      GT_DATA_A-CLR = 'C700' .

    ENDIF.

    IF GT_DATA_A-KTOKS IS INITIAL.
      SELECT SINGLE KTOKS INTO GT_DATA_A-KTOKS FROM SKA1
         WHERE SAKNR = GT_DATA_A-RACCT
         .
    ENDIF.

    SELECT SINGLE TXT30 INTO GT_DATA_A-TXT30 FROM T077Z
     WHERE SPRAS = 1
       AND KTOPL = '1000'
       AND KTOKS = GT_DATA_A-KTOKS
       .

*    IF P_X1 IS NOT INITIAL.
*      SELECT SINGLE WAERS INTO GT_DATA_A-WAERS FROM FINSC_001A
*        WHERE BUKRS = GT_DATA_A-RBUKRS
*          AND CURTYPE = 30
*          .
*    ELSE.
*      SELECT SINGLE WAERS INTO GT_DATA_A-WAERS FROM T001
*        WHERE BUKRS = GT_DATA_A-RBUKRS
*          .
*    ENDIF.

    MODIFY GT_DATA_A .
    CLEAR GT_DATA_A .
  ENDLOOP.

*  GT_DATA_D[] = GT_DATA_A[] .
*  DELETE GT_DATA_D[] WHERE MITKZ IS NOT INITIAL .
*  GT_DATA_E[] = GT_DATA_D[] .
*  SORT GT_DATA_D[] BY RFAREA .
*  DELETE ADJACENT DUPLICATES FROM GT_DATA_D[] COMPARING RFAREA.
*
**        RBUKRS       TYPE  ACDOCA-RBUKRS,            "公司代码
**        BUTXT        TYPE  T001-BUTXT,               "公司代码名称
**        GJAHR        TYPE  ACDOCA-GJAHR,             "财年
**        N_MONAT      TYPE  BKPF-MONAT,               "期间从
**        U_MONAT      TYPE  BKPF-MONAT,               "期间到
**        TXT30        TYPE  T077Z-TXT30,              "科目组
**        RFAREA       TYPE  ACDOCA-RFAREA,            "一级科目
**        RACCT        TYPE  ACDOCA-RACCT,             "科目代码
**        RACMX        TYPE  CHAR30,                   "明细科目
**        TXT20        TYPE  SKAT-TXT20,               "科目名称
**        WAERS        TYPE  FINSC_001A-WAERS,         "集团货币
**        FX_QCYE      TYPE  CHAR4,                    "方向
**        KSL_QCYE     TYPE  ACDOCA-KSL,               "期初余额(集团货币)
**        KSL_BQJF     TYPE  ACDOCA-KSL,               "本期借方(集团货币)
**        KSL_BQDF     TYPE  ACDOCA-KSL,               "本期贷方(集团货币)
**        FX_BQYE      TYPE  CHAR4,                    "方向
**        KSL_BQYE     TYPE  ACDOCA-KSL,               "本期余额(集团货币)
**        FX_LJYE      TYPE  CHAR4,                    "方向
**        KSL_LJYE     TYPE  ACDOCA-KSL,               "累计余额(集团货币)
*
*  LOOP AT GT_DATA_D.
*    CLEAR GT_DATA_D-KSL_QCYE .
*    CLEAR GT_DATA_D-KSL_BQJF .
*    CLEAR GT_DATA_D-KSL_BQDF .
*    CLEAR GT_DATA_D-KSL_BQYE .
*    CLEAR GT_DATA_D-KSL_LJYE .
*
*    CLEAR GT_DATA_D-TXT30 .
*    CLEAR GT_DATA_D-RACCT .
*    CLEAR GT_DATA_D-RACMX .
*    LOOP AT GT_DATA_E WHERE RFAREA = GT_DATA_D-RFAREA.
*      GT_DATA_D-KSL_QCYE = GT_DATA_D-KSL_QCYE + GT_DATA_E-KSL_QCYE .
*      GT_DATA_D-KSL_BQJF = GT_DATA_D-KSL_BQJF + GT_DATA_E-KSL_BQJF .
*      GT_DATA_D-KSL_BQDF = GT_DATA_D-KSL_BQDF + GT_DATA_E-KSL_BQDF .
*      GT_DATA_D-KSL_BQYE = GT_DATA_D-KSL_BQYE + GT_DATA_E-KSL_BQYE .
*      GT_DATA_D-KSL_LJYE = GT_DATA_D-KSL_LJYE + GT_DATA_E-KSL_LJYE .
*      CLEAR GT_DATA_E .
*    ENDLOOP.
*
*    SPLIT GT_DATA_D-TXT20 AT '-' INTO GT_DATA_D-TXT20 GV_TXT20 .
**    IF GT_DATA_D-KSL_QCYE > 0.
**      GT_DATA_D-FX_QCYE = '借'.
**    ELSEIF GT_DATA_D-KSL_QCYE < 0.
**      GT_DATA_D-KSL_QCYE = GT_DATA_D-KSL_QCYE * -1 .
**      GT_DATA_D-FX_QCYE = '贷'.
**    ELSE.
**      GT_DATA_D-FX_QCYE = '平'.
**    ENDIF.
**
**    IF GT_DATA_D-KSL_BQYE > 0.
**      GT_DATA_D-FX_BQYE = '借'.
**    ELSEIF GT_DATA_D-KSL_BQYE < 0.
**      GT_DATA_D-KSL_BQYE = GT_DATA_D-KSL_BQYE * -1 .
**      GT_DATA_D-FX_BQYE = '贷'.
**    ELSE.
**      GT_DATA_D-FX_BQYE = '平'.
**    ENDIF.
**
**    IF GT_DATA_D-KSL_LJYE > 0.
**      GT_DATA_D-FX_LJYE = '借'.
**    ELSEIF GT_DATA_D-KSL_LJYE < 0.
**      GT_DATA_D-KSL_LJYE = GT_DATA_D-KSL_LJYE * -1 .
**      GT_DATA_D-FX_LJYE = '贷'.
**    ELSE.
**      GT_DATA_D-FX_LJYE = '平'.
**    ENDIF.
*    GT_DATA_D-CLR = 'C700' .
*    GT_DATA_D-A1 = GT_DATA_D-RACCT(4) .
*    MODIFY GT_DATA_D .
*    CLEAR GT_DATA_D .
*  ENDLOOP.
**  SORT GT_DATA_A[] BY A1 RFAREA .
*  APPEND LINES OF GT_DATA_D[] TO GT_DATA_A[] .
*  LOOP AT GT_DATA_A.
*    IF GT_DATA_A-KSL_QCYE > 0.
*      GT_DATA_A-FX_QCYE = '借'.
*    ELSEIF GT_DATA_A-KSL_QCYE < 0.
*      GT_DATA_A-KSL_QCYE = GT_DATA_A-KSL_QCYE * -1 .
*      GT_DATA_A-FX_QCYE = '贷'.
*    ELSE.
*      GT_DATA_A-FX_QCYE = '平'.
*    ENDIF.
*
*    IF GT_DATA_A-KSL_BQYE > 0.
*      GT_DATA_A-FX_BQYE = '借'.
*    ELSEIF GT_DATA_A-KSL_BQYE < 0.
*      GT_DATA_A-KSL_BQYE = GT_DATA_A-KSL_BQYE * -1 .
*      GT_DATA_A-FX_BQYE = '贷'.
*    ELSE.
*      GT_DATA_A-FX_BQYE = '平'.
*    ENDIF.
*
*    IF GT_DATA_A-KSL_LJYE > 0.
*      GT_DATA_A-FX_LJYE = '借'.
*    ELSEIF GT_DATA_A-KSL_LJYE < 0.
*      GT_DATA_A-KSL_LJYE = GT_DATA_A-KSL_LJYE * -1 .
*      GT_DATA_A-FX_LJYE = '贷'.
*    ELSE.
*      GT_DATA_A-FX_LJYE = '平'.
*    ENDIF.
*
*    MODIFY GT_DATA_A .
*    CLEAR GT_DATA_A .
*  ENDLOOP.
  SORT GT_DATA_A[] BY RFAREA CLR A1 RFAREA .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA = 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  S_LAYOUT-INFO_FIELDNAME = 'CLR'.  "行颜色代码的字段
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT                = S_LAYOUT
      IT_FIELDCAT              = GT_FIELDCAT
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
    TABLES
      T_OUTTAB                 = GT_DATA_A[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    wa_fieldcat-fieldname = &1.
    wa_fieldcat-seltext_l = &2.
*    IF wa_fieldcat-fieldname =  'MSLJH' or wa_fieldcat-fieldname =  'WCBJH'.
*      wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
*    ENDIF.
*
*    IF wa_fieldcat-fieldname =  'MSLMB' or wa_fieldcat-fieldname =  'WCBMB'.
*      wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色
*    ENDIF.

    IF wa_fieldcat-fieldname = 'PLNBEZ' OR wa_fieldcat-fieldname = 'MATNR' .
      wa_fieldcat-ref_tabname = 'MARA'.
      wa_fieldcat-ref_fieldname = 'MATNR'.
    ENDIF.

    IF wa_fieldcat-fieldname = 'ARKTX' OR wa_fieldcat-fieldname = 'WAKTX' .
      wa_fieldcat-ref_tabname = 'VBAP'.
      wa_fieldcat-ref_fieldname = 'ARKTX'.
    ENDIF.

    IF wa_fieldcat-fieldname = 'AUFNR' .
      wa_fieldcat-ref_tabname = 'AUFK'.
      wa_fieldcat-ref_fieldname = 'AUFNR'.
    ENDIF.

    APPEND wa_fieldcat TO gt_fieldcat.
    CLEAR wa_fieldcat.
  END-OF-DEFINITION.
  FILL_FIELD :
*        'RBUKRS'         '公司代码',
*        'BUTXT'          '公司代码名称',
        'GJAHR'          '财年',
        'N_MONAT'        '期间从',
        'U_MONAT'        '期间到',
        'TXT30'          '科目组',
        'RFAREA'         '一级科目',
        'RACCT'          '科目代码',
        'RACMX'          '明细科目',
        'TXT20'          '科目名称',
        'WAERS'          '集团货币',
*        'FX_QCYE'        '方向',

        'KSL_QCYE'       '期初余额(集团货币)',
        'KSL_BQJF'       '本期借方(集团货币)',
        'KSL_BQDF'       '本期贷方(集团货币)',
*        'FX_BQYE'        '方向',
*        'KSL_BQYE'       '本期余额(集团货币)',
**        'FX_LJYE'        '方向',
*        'KSL_LJYE'       '累计余额(集团货币)',
        'KSL_LJYE'       '本期余额(集团货币)',
        'KSL_BQYE'       '累计余额(集团货币)',
*        'FX_LJYE'        '方向',

        'TSL_QCYE'       '期初余额(凭证货币)',
        'TSL_BQJF'       '本期借方(凭证货币)',
        'TSL_BQDF'       '本期贷方(凭证货币)',
        'TSL_LJYE'       '本期余额(凭证货币)',
        'TSL_BQYE'       '累计余额(凭证货币)',
*        'KSL_QCYE'       '期初余额(集团货币)',
*        'KSL_BQJF'       '本期借方(集团货币)',
*        'KSL_BQDF'       '本期贷方(集团货币)',
**        'FX_BQYE'        '方向',
*        'KSL_BQYE'       '本期余额(集团货币)',
**        'FX_LJYE'        '方向',
*        'KSL_LJYE'       '累计余额(集团货币)',

        'HSL_QCYE'       '期初余额(本位币)',
        'HSL_BQJF'       '本期借方(本位币)',
        'HSL_BQDF'       '本期贷方(本位币)',
        'HSL_LJYE'       '本期余额(本位币)',
        'HSL_BQYE'       '累计余额(本位币)'.
ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.

 SET PF-STATUS 'STANDARD_FULLSCREEN'.

ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD TYPE SLIS_SELFIELD.
  DATA:   REF 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 I_UCOMM.
    WHEN '&IC1'."表示双击
      CHECK IS_SELFIELD-TABINDEX > 0.
      CLEAR GT_DATA_A .
      READ TABLE GT_DATA_A INDEX IS_SELFIELD-TABINDEX.
      IF IS_SELFIELD-FIELDNAME =  'KSL_BQJF' .
        PERFORM FOM_GETDATAMX_A USING GT_DATA_A.
      ELSEIF IS_SELFIELD-FIELDNAME =  'KSL_BQDF' .
        PERFORM FOM_GETDATAMX_B USING GT_DATA_A.
      ELSEIF IS_SELFIELD-FIELDNAME =  'KSL_BQYE' .
        PERFORM FOM_GETDATAMX_C USING GT_DATA_A.
      ELSE.
        MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
      ENDIF.
*      SET PARAMETER ID : 'MAT' FIELD IT_MATNR-MATNR.
*      CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
    WHEN 'POST_T'.
  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE = LV_STABLE.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FOM_GETDATAMX_A
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GT_DATA_A  text
*&---------------------------------------------------------------------*
FORM FOM_GETDATAMX_A  USING P_GT_DATA_A TYPE GTS_DATA.

  DATA GV_FISCYEARPER  TYPE JAHRPER .
  DATA GV_FISCYEARPERH TYPE JAHRPER .
  CLEAR GV_FISCYEARPER .
  GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
  CLEAR GV_FISCYEARPERH .
  GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .

  CLEAR GT_DATAMX[] .
  SELECT
     ACDOCA~RBUKRS
     ACDOCA~GJAHR
     ACDOCA~BELNR
     ACDOCA~DOCLN
     ACDOCA~BLART
     ACDOCA~BUDAT
     ACDOCA~FISCYEARPER
     ACDOCA~RACCT
     ACDOCA~HSL
     ACDOCA~KSL
     ACDOCA~DRCRK
     ACDOCA~ZUONR
     ACDOCA~SGTXT
     ACDOCA~LIFNR
     ACDOCA~KUNNR
     ACDOCA~RCNTR
     ACDOCA~RFAREA
     ACDOCA~ANLN1
     ACDOCA~PRCTR
     ACDOCA~SEGMENT
     ACDOCA~WERKS
     ACDOCA~MATNR
     ACDOCA~AUFNR
     ACDOCA~PS_POSID
    INTO CORRESPONDING FIELDS OF TABLE GT_DATAMX[]
    FROM ACDOCA
    WHERE RACCT   = P_GT_DATA_A-RACCT
      AND ( KUNNR = P_GT_DATA_A-KUNNR OR LIFNR = P_GT_DATA_A-LIFNR )
      AND FISCYEARPER >= GV_FISCYEARPER
      AND FISCYEARPER <= GV_FISCYEARPERH
      AND RLDNR   = '0L'
      AND RRCTY   = '0'
      AND RBUKRS IN S_BUKRS
      AND DRCRK   = 'S'
      .

  IF GT_DATAMX[] IS NOT INITIAL.
    LOOP AT GT_DATAMX.
      SELECT SINGLE NAME1 INTO GT_DATAMX-NAMEL FROM LFA1
        WHERE LIFNR = GT_DATAMX-LIFNR
        .
      SELECT SINGLE NAME1 INTO GT_DATAMX-NAMEK FROM KNA1
        WHERE KUNNR = GT_DATAMX-KUNNR
        .
      SELECT SINGLE KTEXT INTO GT_DATAMX-KTEXT FROM CSKT
        WHERE KOSTL  = GT_DATAMX-RCNTR
          AND SPRAS  = 1
          AND KOKRS  = '1000'
          AND DATBI >= SY-DATUM
          .
      SELECT SINGLE TXT50 INTO GT_DATAMX-TXT50 FROM ANLA
        WHERE BUKRS  = GT_DATAMX-RBUKRS
          AND ANLN1  = GT_DATAMX-ANLN1
          .
      MODIFY GT_DATAMX .
      CLEAR GT_DATAMX .
    ENDLOOP.
    PERFORM FRM_DISPLAY_SUB.
  ELSE.
    MESSAGE 'NO_DATA!'TYPE 'S' DISPLAY LIKE 'W' .
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATAMX_B
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GT_DATA_A  text
*&---------------------------------------------------------------------*
FORM FOM_GETDATAMX_B  USING P_GT_DATA_A TYPE GTS_DATA.

  DATA GV_FISCYEARPER  TYPE JAHRPER .
  DATA GV_FISCYEARPERH TYPE JAHRPER .
  CLEAR GV_FISCYEARPER .
  GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
  CLEAR GV_FISCYEARPERH .
  GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .

  CLEAR GT_DATAMX[] .
  SELECT
     ACDOCA~RBUKRS
     ACDOCA~GJAHR
     ACDOCA~BELNR
     ACDOCA~DOCLN
     ACDOCA~BLART
     ACDOCA~BUDAT
     ACDOCA~FISCYEARPER
     ACDOCA~RACCT
     ACDOCA~HSL
     ACDOCA~KSL
     ACDOCA~TSL
     ACDOCA~DRCRK
     ACDOCA~ZUONR
     ACDOCA~SGTXT
     ACDOCA~LIFNR
     ACDOCA~KUNNR
     ACDOCA~RCNTR
     ACDOCA~RFAREA
     ACDOCA~ANLN1
     ACDOCA~PRCTR
     ACDOCA~SEGMENT
     ACDOCA~WERKS
     ACDOCA~MATNR
     ACDOCA~AUFNR
     ACDOCA~PS_POSID
    INTO CORRESPONDING FIELDS OF TABLE GT_DATAMX[]
    FROM ACDOCA
    WHERE RACCT   = P_GT_DATA_A-RACCT
      AND ( KUNNR = P_GT_DATA_A-KUNNR OR LIFNR = P_GT_DATA_A-LIFNR )
      AND FISCYEARPER >= GV_FISCYEARPER
      AND FISCYEARPER <= GV_FISCYEARPERH
      AND RLDNR   = '0L'
      AND RRCTY   = '0'
      AND RBUKRS IN S_BUKRS
      AND DRCRK   = 'H'
      .

  IF GT_DATAMX[] IS NOT INITIAL.
    LOOP AT GT_DATAMX.
      SELECT SINGLE NAME1 INTO GT_DATAMX-NAMEL FROM LFA1
        WHERE LIFNR = GT_DATAMX-LIFNR
        .
      SELECT SINGLE NAME1 INTO GT_DATAMX-NAMEK FROM KNA1
        WHERE KUNNR = GT_DATAMX-KUNNR
        .
      SELECT SINGLE KTEXT INTO GT_DATAMX-KTEXT FROM CSKT
        WHERE KOSTL  = GT_DATAMX-RCNTR
          AND SPRAS  = 1
          AND KOKRS  = '1000'
          AND DATBI >= SY-DATUM
          .
      SELECT SINGLE TXT50 INTO GT_DATAMX-TXT50 FROM ANLA
        WHERE BUKRS  = GT_DATAMX-RBUKRS
          AND ANLN1  = GT_DATAMX-ANLN1
          .
      MODIFY GT_DATAMX .
      CLEAR GT_DATAMX .
    ENDLOOP.
    PERFORM FRM_DISPLAY_SUB.
  ELSE.
    MESSAGE 'NO_DATA!'TYPE 'S' DISPLAY LIKE 'W' .
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATAMX_C
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GT_DATA_A  text
*&---------------------------------------------------------------------*
FORM FOM_GETDATAMX_C  USING P_GT_DATA_A TYPE GTS_DATA.

  DATA GV_FISCYEARPER  TYPE JAHRPER .
  DATA GV_FISCYEARPERH TYPE JAHRPER .
  CLEAR GV_FISCYEARPER .
  GV_FISCYEARPER = P_GJAHR && '0' && S_MONAT-LOW .
  CLEAR GV_FISCYEARPERH .
  GV_FISCYEARPERH = P_GJAHR && '0' && S_MONAT-HIGH .

  CLEAR GT_DATAMX[] .
  SELECT
     ACDOCA~RBUKRS
     ACDOCA~GJAHR
     ACDOCA~BELNR
     ACDOCA~DOCLN
     ACDOCA~BLART
     ACDOCA~BUDAT
     ACDOCA~FISCYEARPER
     ACDOCA~RACCT
     ACDOCA~HSL
     ACDOCA~KSL
     ACDOCA~TSL
     ACDOCA~DRCRK
     ACDOCA~ZUONR
     ACDOCA~SGTXT
     ACDOCA~LIFNR
     ACDOCA~KUNNR
     ACDOCA~RCNTR
     ACDOCA~RFAREA
     ACDOCA~ANLN1
     ACDOCA~PRCTR
     ACDOCA~SEGMENT
     ACDOCA~WERKS
     ACDOCA~MATNR
     ACDOCA~AUFNR
     ACDOCA~PS_POSID
    INTO CORRESPONDING FIELDS OF TABLE GT_DATAMX[]
    FROM ACDOCA
    WHERE RACCT   = P_GT_DATA_A-RACCT
      AND ( KUNNR = P_GT_DATA_A-KUNNR OR LIFNR = P_GT_DATA_A-LIFNR )
      AND FISCYEARPER >= GV_FISCYEARPER
      AND FISCYEARPER <= GV_FISCYEARPERH
      AND RLDNR   = '0L'
      AND RRCTY   = '0'
      AND RBUKRS IN S_BUKRS
*      AND DRCRK   = 'S'
      .

  IF GT_DATAMX[] IS NOT INITIAL.
    LOOP AT GT_DATAMX.
      SELECT SINGLE NAME1 INTO GT_DATAMX-NAMEL FROM LFA1
        WHERE LIFNR = GT_DATAMX-LIFNR
        .
      SELECT SINGLE NAME1 INTO GT_DATAMX-NAMEK FROM KNA1
        WHERE KUNNR = GT_DATAMX-KUNNR
        .
      SELECT SINGLE KTEXT INTO GT_DATAMX-KTEXT FROM CSKT
        WHERE KOSTL  = GT_DATAMX-RCNTR
          AND SPRAS  = 1
          AND KOKRS  = '1000'
          AND DATBI >= SY-DATUM
          .
      SELECT SINGLE TXT50 INTO GT_DATAMX-TXT50 FROM ANLA
        WHERE BUKRS  = GT_DATAMX-RBUKRS
          AND ANLN1  = GT_DATAMX-ANLN1
          .
      MODIFY GT_DATAMX .
      CLEAR GT_DATAMX .
    ENDLOOP.
    PERFORM FRM_DISPLAY_SUB.
  ELSE.
    MESSAGE 'NO_DATA!'TYPE 'S' DISPLAY LIKE 'W' .
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_SUB
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_SUB .
  CLEAR S_LAYOUT_SUB.
  S_LAYOUT_SUB-ZEBRA = 'X'.
  S_LAYOUT_SUB-COLWIDTH_OPTIMIZE = 'X'.
*  S_LAYOUT_SUB-INFO_FIELDNAME = 'CLR'.  "行颜色代码的字段
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD_SUB .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT                = S_LAYOUT_SUB
      IT_FIELDCAT              = GT_FIELDCAT_SUB
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET_SUB'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND_SUB'
    TABLES
      T_OUTTAB                 = GT_DATAMX[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILL_FIELD_SUB
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_FILL_FIELD_SUB .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    wa_fieldcat-fieldname = &1.
    wa_fieldcat-seltext_l = &2.
*    IF wa_fieldcat-fieldname =  'MSLJH' or wa_fieldcat-fieldname =  'WCBJH'.
*      wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
*    ENDIF.
*
*    IF wa_fieldcat-fieldname =  'MSLMB' or wa_fieldcat-fieldname =  'WCBMB'.
*      wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色
*    ENDIF.

    IF wa_fieldcat-fieldname = 'PLNBEZ' OR wa_fieldcat-fieldname = 'MATNR' .
      wa_fieldcat-ref_tabname = 'MARA'.
      wa_fieldcat-ref_fieldname = 'MATNR'.
    ENDIF.

    IF wa_fieldcat-fieldname = 'ARKTX' OR wa_fieldcat-fieldname = 'WAKTX' .
      wa_fieldcat-ref_tabname = 'VBAP'.
      wa_fieldcat-ref_fieldname = 'ARKTX'.
    ENDIF.

    IF wa_fieldcat-fieldname = 'AUFNR' .
      wa_fieldcat-ref_tabname = 'AUFK'.
      wa_fieldcat-ref_fieldname = 'AUFNR'.
    ENDIF.

    APPEND wa_fieldcat TO gt_fieldcat_SUB.
    CLEAR wa_fieldcat.
  END-OF-DEFINITION.
  FILL_FIELD :
        'RBUKRS'       '公司代码',
        'GJAHR'        '财年',
        'BELNR'        '会计凭证',
        'DOCLN'        '行项目',
        'BLART'        '凭证类型',
        'BUDAT'        '过账日期',
        'FISCYEARPER'  '年度期间',
        'RACCT'        '科目',
        'HSL'          '本币金额',
        'KSL'          '集团货币金额',
        'DRCRK'        '借贷',
        'ZUONR'        '分配',
        'SGTXT'        '摘要',
        'LIFNR'        '供应商',
        'NAMEL'        '供应商名称',
        'KUNNR'        '客户',
        'NAMEK'        '客户名称',
        'RCNTR'        '成本中心',
        'KTEXT'        '成本中心名称',
        'RFAREA'       '功能范围',
        'ANLN1'        '固定资产',
        'TXT50'        '资产名称',
        'PRCTR'        '利润中心',
        'SEGMENT'      '段',
        'WERKS'        '工厂',
        'MATNR'        '物料',
        'AUFNR'        '内部订单',
        'PS_POSID'     'WBS'.

ENDFORM.
FORM PF_STATUS_SET_SUB USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND_SUB USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD TYPE SLIS_SELFIELD.
  DATA:   REF 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 I_UCOMM.
        WHEN  '&F03' OR  'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN 'CANCEL'.
    WHEN '&IC1'."表示双击
      CHECK IS_SELFIELD-TABINDEX > 0.
      CLEAR GT_DATAMX .
      READ TABLE GT_DATAMX INDEX IS_SELFIELD-TABINDEX.
      SET PARAMETER ID : 'BLN' FIELD GT_DATAMX-BELNR.
      SET PARAMETER ID : 'BUK' FIELD GT_DATAMX-RBUKRS.
      SET PARAMETER ID : 'GJR' FIELD GT_DATAMX-GJAHR.
      CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
    WHEN 'POST_T'.
  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE = LV_STABLE.

ENDFORM.

INITIALIZATION.
  PERFORM FRM_EXCLUDE_OPTION.

AT SELECTION-SCREEN OUTPUT.
  PERFORM SCREEN_OUTPUT.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
    PERFORM FOM_GETDATA.
    PERFORM FRM_DISPLAY.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值