ZFIR054-现金流量表

时间:2021-08-30 14:50:56
***********************************************************************
*
Title : ZFIR102 *
*
Application : FI   *
*
Subject : 现金流量表 *
*
Requested by : 财务部 *
*
Execution : any time *
*
Ref no: : *
*
Author : ABAP30/ABAP20 *
*
Req Date : 20151103 *
*
**********************************************************************
*
*
*
**********************************************************************
*
**********************************************************************
*
增强1.FBCJ(现金日记账) 财务凭证过账保存BSEG同时,用业务交易从自建表 *
*
关联原因代码将原因代码直接存入BSEG表, *
*
GBB1 替代实现, *
*
2.业务交易 原因代码关联表 ZFIT102. *
*
*
*
1.取数:按照 年度,公司代码,科目 = 1001*&1002*. *
*
会计期间 取数公司代码货币计金额(BSEG-DMBTR)根据项目类型对应原因代码
*
按类型合计DMBTR,
*
*
2.以固定格式,ALV list显示报表( 6列、35行 )
*
*
**********************************************************************
*
MODIFICATIONS (latest entry at the top) *
*
------------------------------------------------------------------- *
*
REL DATE NAME (COMPANY) DESCRIPTION TASK-NO *
*
--- ---- ---- --------- ----------- ------- *
*
*
*
**********************************************************************
REPORT ZFIR054 MESSAGE-ID ZMM_001
LINE-COUNT 130
LINE-SIZE 300.



*----------------------------------------------------------------------
*
TYPE-POOLS
*
----------------------------------------------------------------------
TYPE-POOLS: SLIS.

"相关表引用声明
TABLES:BKPF,
BSEG,
T001,
TF189.



*----------------------------------------------------------------------
*
Internal table
*
----------------------------------------------------------------------
*
&ALV
DATA: BEGIN OF GT_DATA OCCURS 0,
TEXT_XM
TYPE STRING,
LINE_XM
TYPE STRING,
DMBTR
LIKE BSEG-DMBTR,"项目金额-BSEG
TEXT_BC TYPE STRING,
LINE_BC
TYPE STRING,
HSL00
LIKE FAGLFLEXT-HSL01,"补充金额-FAGLFLEXT
SEL TYPE C,
END OF GT_DATA.
DATA:WA_DATA LIKE GT_DATA.
DATA: BEGIN OF GT_REGUP OCCURS 0,
VBLNR
TYPE REGUP-VBLNR,
BUKRS
TYPE REGUP-BUKRS,
* VBLNR TYPE REGUP-VBLNR,
BELNR TYPE REGUP-BELNR,
GJAHR
TYPE REGUP-GJAHR,
BUZEI
TYPE REGUP-BUZEI,
DMBTR
TYPE REGUP-DMBTR,
* vbeln type
END OF GT_REGUP.
DATA:LT_REGUP_ADD LIKE TABLE OF GT_REGUP WITH HEADER LINE.
*&现金流量表-项目
DATA:BEGIN OF GT_BSEG OCCURS 0,
BUKRS
LIKE BSEG-BUKRS,
BELNR
LIKE BSEG-BELNR,
BUZEI
LIKE BSEG-BUZEI,
GJAHR
LIKE BSEG-GJAHR,"会计年度
RSTGR LIKE BSEG-RSTGR,"原因代码
HKONT LIKE BSEG-HKONT,"科目
SHKZG LIKE BSEG-SHKZG,"借贷方(S(+) H(-))
DMBTR LIKE BSEG-DMBTR,"项目金额-BSEG
EBELN LIKE BSEG-EBELN,
*BUKRS
*
BELNR
*
GJAHR
*
BUZEI
*
&->add on 20160324 BY ABAP30 req by fi_ljj.
KOART LIKE BSEG-KOART,
LIFNR
LIKE BSEG-LIFNR,
*&->end add.
END OF GT_BSEG.
DATA:WA_BSEG LIKE GT_BSEG.

*&1000版本
DATA:BEGIN OF GT_1000 OCCURS 0,
ZZNUMB
LIKE ZFI030_TEXT-ZZNUMB,
ZZTEXT
LIKE ZFI030_TEXT-ZZTEXT,
ZZSUM
LIKE ZFI030_TEXT-ZZSUM,
ZZTXPE
LIKE ZFI030_TEXT-ZZTXPE,
HSLVT
LIKE FAGLFLEXT-HSLVT,
HSL01
LIKE FAGLFLEXT-HSL01,
HSL02
LIKE FAGLFLEXT-HSL01,
HSL03
LIKE FAGLFLEXT-HSL01,
HSL04
LIKE FAGLFLEXT-HSL01,
HSL05
LIKE FAGLFLEXT-HSL01,
HSL06
LIKE FAGLFLEXT-HSL01,
HSL07
LIKE FAGLFLEXT-HSL01,
HSL08
LIKE FAGLFLEXT-HSL01,
HSL09
LIKE FAGLFLEXT-HSL01,
HSL10
LIKE FAGLFLEXT-HSL01,
HSL11
LIKE FAGLFLEXT-HSL01,
HSL12
LIKE FAGLFLEXT-HSL01,
HSL01_Y
LIKE FAGLFLEXT-HSL01,
LIN
TYPE SY-TABIX,
END OF GT_1000.
DATA:WA_1000 LIKE GT_1000.

DATA: BEGIN OF GT_FAGT OCCURS 0,
RYEAR
LIKE FAGLFLEXT-RYEAR,
RACCT
LIKE FAGLFLEXT-RACCT,
DRCRK
LIKE FAGLFLEXT-DRCRK,"借方/贷方标识
HSLVT LIKE FAGLFLEXT-HSLVT,
HSL01
LIKE FAGLFLEXT-HSLVT,
HSL02
LIKE FAGLFLEXT-HSLVT,
HSL03
LIKE FAGLFLEXT-HSLVT,
HSL04
LIKE FAGLFLEXT-HSLVT,
HSL05
LIKE FAGLFLEXT-HSLVT,
HSL06
LIKE FAGLFLEXT-HSLVT,
HSL07
LIKE FAGLFLEXT-HSLVT,
HSL08
LIKE FAGLFLEXT-HSLVT,
HSL09
LIKE FAGLFLEXT-HSLVT,
HSL10
LIKE FAGLFLEXT-HSLVT,
HSL11
LIKE FAGLFLEXT-HSLVT,
HSL12
LIKE FAGLFLEXT-HSLVT,
HSL13
LIKE FAGLFLEXT-HSLVT,
HSL14
LIKE FAGLFLEXT-HSLVT,
HSL15
LIKE FAGLFLEXT-HSLVT,
HSL16
LIKE FAGLFLEXT-HSLVT,
END OF GT_FAGT.
DATA:WA_FAGT LIKE GT_FAGT.

*&ADD
DATA:BEGIN OF GT_TAB OCCURS 0,
ZZSUM
LIKE ZFI030-ZZSUM, "汇总栏位
ZZNUMB LIKE ZFI030-ZZNUMB, "栏位编号
HKONT LIKE ZFI030-HKONT, "总账科目
HSLVT LIKE FAGLFLEXT-HSLVT,
HSL01
LIKE FAGLFLEXT-HSL01,
HSL02
LIKE FAGLFLEXT-HSL01,
HSL03
LIKE FAGLFLEXT-HSL01,
HSL04
LIKE FAGLFLEXT-HSL01,
HSL05
LIKE FAGLFLEXT-HSL01,
HSL06
LIKE FAGLFLEXT-HSL01,
HSL07
LIKE FAGLFLEXT-HSL01,
HSL08
LIKE FAGLFLEXT-HSL01,
HSL09
LIKE FAGLFLEXT-HSL01,
HSL10
LIKE FAGLFLEXT-HSL01,
HSL11
LIKE FAGLFLEXT-HSL01,
HSL12
LIKE FAGLFLEXT-HSL01,
HSL01_Y
LIKE FAGLFLEXT-HSL01,
* DMBTR1 LIKE FAGLFLEXT-HSLVT, "当月
*
DMBTR2 LIKE FAGLFLEXT-HSLVT, "本年
END OF GT_TAB.
DATA:WA_TAB LIKE GT_TAB.
DATA:GT_SUM_C LIKE TABLE OF GT_TAB WITH HEADER LINE,
GT_SUM_S
LIKE TABLE OF GT_TAB WITH HEADER LINE.


FIELD-SYMBOLS:<FN1>,
<FN2>,
<FN1_QC>,
<FN2_QC>.
DATA:GV_BZ_HSL00 LIKE FAGLFLEXT-HSL01.

*----------------------------------------------------------------------
*
Variants
*
----------------------------------------------------------------------
DATA: G_LEN TYPE I, "内表行数
G_TABIX TYPE SY-TABIX.

*---------------------------------------------------------------------*
*
Data parameters for alv report use
*
---------------------------------------------------------------------*
DATA: G_PROGRAM TYPE SY-REPID,
GS_LAYOUT
TYPE SLIS_LAYOUT_ALV,
GS_LAYOUT1
TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT
TYPE SLIS_T_FIELDCAT_ALV,
GS_FIELDCAT
LIKE LINE OF GT_FIELDCAT,
GT_FIELDCAT1
TYPE SLIS_T_FIELDCAT_ALV,
GS_FIELDCAT1
LIKE LINE OF GT_FIELDCAT,
WA_FIELDCAT
TYPE SLIS_FIELDCAT_ALV,
WA_FIELDCAT1
TYPE SLIS_FIELDCAT_ALV,
IT_EVENTS
TYPE SLIS_T_EVENT WITH HEADER LINE,
GT_EVENT
TYPE SLIS_T_EVENT,
WA_EVENT
TYPE SLIS_ALV_EVENT.
DATA: GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
DATA: GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
VALUE
'ALV_TOP_OF_PAGE'.

************************************************************************
*
Select Screen *
*
***********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.

PARAMETERS:P_BUKRS LIKE BKPF-BUKRS OBLIGATORY DEFAULT '3000',
P_GJAHR
LIKE BKPF-GJAHR DEFAULT SY-DATUM(4) OBLIGATORY.
SELECT-OPTIONS:S_MONAT FOR BKPF-MONAT DEFAULT SY-DATUM+4(2) NO-EXTENSION OBLIGATORY MODIF ID R01.
PARAMETERS:P_MONAT LIKE BKPF-MONAT DEFAULT SY-DATUM+4(2) NO-DISPLAY."MODIF ID R02
PARAMETERS:P_PRINT AS CHECKBOX MODIF ID R02.
PARAMETERS:P_EXCEL AS CHECKBOX MODIF ID R02.
PARAMETERS:FN1 LIKE RLGRAP-FILENAME MEMORY ID M01 MODIF ID R02 DEFAULT 'C:\' NO-DISPLAY.
*SELECT-OPTIONS:S_HKONT FOR BSEG-HKONT ."NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK BLK1.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:RB_01 RADIOBUTTON GROUP RB DEFAULT
'X' USER-COMMAND RB."3000版本
SELECTION-SCREEN COMMENT 3(12) TEXT-B01 MODIF ID RZ2.
PARAMETERS:P_3000 AS CHECKBOX.
SELECTION-SCREEN COMMENT 18(10) TEXT-B02 MODIF ID RZ2.
SELECTION-SCREEN END OF LINE.

PARAMETERS:RB_02 RADIOBUTTON GROUP RB. "1000 版本
PARAMETERS:RB_03 NO-DISPLAY."集团版本
*SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-003.
*PARAMETERS:RB_ RADIOBUTTON GROUP RB . "1000 版本
*SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN END OF BLOCK B1.


*&------------------------------------------------------------------*
*& INITIALIZATION
*&------------------------------------------------------------------*
INITIALIZATION.
*&初始化数据
PERFORM FRM_INIT_DATA.

AT SELECTION-SCREEN OUTPUT.
CASE
'X'.
WHEN RB_01.
LOOP AT SCREEN.
IF SCREEN-GROUP1 EQ
'R02'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

WHEN RB_02 OR RB_03.
LOOP AT SCREEN.
IF SCREEN-GROUP1 EQ
'R01'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
WHEN OTHERS.

ENDCASE.

*&------------------------------------------------------------------*
*& AT SELECTION-SCREEN
*&------------------------------------------------------------------*
AT SELECTION-SCREEN.

PERFORM FRM_CHECK_AUTHOR.

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

CASE
'X'.
WHEN RB_01.
PERFORM FRM_GET_DATA.
PERFORM FRM_ALV_OUTPUT.

WHEN RB_02.
PERFORM FRM_GET_1000.
IF P_PRINT =
'X'.
* PERFORM FRM_ALV_OUTPUT_3000.
PERFORM FRM_PRINT_DATA.
ELSE.
IF P_EXCEL =
'X'.
PERFORM FRM_EXCEL_OUT.
PERFORM FRM_WRITE_OUT.
ELSE.
PERFORM FRM_WRITE_OUT.
ENDIF.

ENDIF.

WHEN RB_03.

ENDCASE.

END-OF-SELECTION.

*& page header
TOP-OF-PAGE.
PERFORM DISPLAY_HEADER.

*& page footer
END-OF-PAGE.

*&------------------------------------------------------------------*
*& END-OF-SELECTION
*&------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_AUTHOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_AUTHOR .

*&init screen.
CASE
'X'.
WHEN RB_02 OR RB_03.
P_BUKRS =
'1000'.
WHEN RB_01.
P_BUKRS =
'3000'.
WHEN OTHERS.

ENDCASE.

LOOP AT S_MONAT.
IF S_MONAT-HIGH IS INITIAL.
S_MONAT-HIGH = S_MONAT-LOW.
ENDIF.

IF S_MONAT-LOW IS INITIAL.
S_MONAT-LOW = S_MONAT-HIGH.
ENDIF.
MODIFY S_MONAT.
ENDLOOP.

IF P_EXCEL =
'X' AND P_PRINT = 'X'.
MESSAGE E000(ZMM_001) WITH
'不能同时打印并导出' DISPLAY LIKE 'S'.
ENDIF.
ENDFORM. " FRM_CHECK_AUTHOR
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA.
DATA:LT_DA LIKE TABLE OF GT_DATA WITH HEADER LINE.
DATA:BEGIN OF LT_BKPF OCCURS 0,
BUKRS LIKE BKPF-BUKRS,
BELNR LIKE BKPF-BELNR,
GJAHR LIKE BKPF-GJAHR,
BLART LIKE BKPF-BLART,
END OF LT_BKPF.
DATA:LT_BKPF_C LIKE TABLE OF LT_BKPF WITH HEADER LINE.
DATA:LT_BSEG LIKE TABLE OF GT_BSEG WITH HEADER LINE,
LT_BSEG_C LIKE TABLE OF GT_BSEG WITH HEADER LINE,
LT_BSEG_P LIKE TABLE OF GT_BSEG WITH HEADER LINE,
LT_BSEG_BC LIKE TABLE OF GT_BSEG WITH HEADER LINE.
DATA:LT_BSEG_BF LIKE TABLE OF GT_BSEG WITH HEADER LINE.
DATA:LT_BSEG_ADD LIKE TABLE OF GT_BSEG WITH HEADER LINE.

DATA:LV_DMBTR LIKE BSEG-DMBTR,
LV_VAL16 LIKE BSEG-DMBTR,
LV_VAL17 LIKE BSEG-DMBTR,
LV_HSL00 LIKE FAGLFLEXT-HSL01.
DATA:LV_DMBTR_9 LIKE BSEG-DMBTR,
LV_DMBTR_20 LIKE BSEG-DMBTR.
DATA:LV_HSL00_1 LIKE BSEG-DMBTR,
LV_HSL00_2 LIKE BSEG-DMBTR.
RANGES:R_HKONT FOR BSEG-HKONT.
RANGES:R_HKONT1 FOR BSEG-HKONT.

*&项目数据 科目为1001*和1002*的才需要处理.
*& +1022*(银行清算科目)
CLEAR:R_HKONT,R_HKONT[].
R_HKONT(3) =
'ICP'.
R_HKONT-LOW =
'001001*'.
APPEND R_HKONT.
R_HKONT(3) =
'ICP'.
R_HKONT-LOW =
'001002*'.
APPEND R_HKONT.
*&->start add by ABAP30 on 20160126 REQ BY fi_wxq (项目列添加银行清算科目: 1022*)
R_HKONT(3) =
'ICP'.
R_HKONT-LOW =
'001022*'.
APPEND R_HKONT.
*&->end add.

*&S1.BKPF 凭证抬头表取出 年度+期间内的数据
SELECT BUKRS
BELNR
GJAHR
BLART
INTO TABLE LT_BKPF
FROM BKPF
WHERE BUKRS EQ P_BUKRS
AND GJAHR EQ P_GJAHR
AND MONAT IN S_MONAT
AND BSTAT NE
'S'.
*&--->不能加
* AND STBLG =
''"冲销凭证号
* AND BLART NOT IN (
'WA','WE','WL').
*&---<
*& WA 发货/ WE 收货/ WI 库存凭证

IF SY-SUBRC NE 0.
MESSAGE S007 DISPLAY LIKE
'E'.
* STOP.
ELSE.
SORT LT_BKPF BY BUKRS BELNR GJAHR.
DELETE ADJACENT DUPLICATES FROM LT_BKPF COMPARING BUKRS BELNR GJAHR.
*&add_lxq on 20151109 排除凭证状态为S的会计凭证
* DELETE LT_BKPF WHERE BSTAT EQ
'S'."S注释项目
*& bseg 四个主键
*BUKRS
*BELNR
*BUZEI
*GJAHR
*&S2.取BSEG 凭证金额
SELECT BUKRS
BELNR
BUZEI
GJAHR
RSTGR
HKONT
SHKZG
DMBTR
EBELN

KOART
LIFNR
INTO TABLE LT_BSEG
* INTO CORRESPONDING FIELDS OF TABLE LT_BSEG
FROM BSEG
FOR ALL ENTRIES IN LT_BKPF
WHERE BUKRS EQ LT_BKPF-BUKRS
AND BELNR EQ LT_BKPF-BELNR
AND GJAHR EQ LT_BKPF-GJAHR.
* AND ( HKONT LIKE
'001001%' OR HKONT LIKE '001002%' ).
ENDIF.

*&for test
CLEAR:R_HKONT1,R_HKONT1[].
R_HKONT1(3) =
'IBT'.
R_HKONT1-LOW =
'0014020101'. "'001402*'.
R_HKONT1-HIGH =
'0014129999'. "'001412*'.
APPEND R_HKONT1.

LT_BSEG_BF[] = LT_BSEG[].
DELETE LT_BSEG_BF WHERE HKONT NOT IN R_HKONT1.

*&S3.汇总本位币金额 BSEG-DMBTR(借方为S(+) ,贷方为H(-),)
LOOP AT LT_BSEG.
*"WHERE HKONT IN R_HKONT.

*&S3.1.项目列 通过原因代码汇总,+科目为1001*和1002*(已加001022*)的才需要处理.
IF LT_BSEG-HKONT IN R_HKONT.
GT_BSEG-RSTGR = LT_BSEG-RSTGR.
IF LT_BSEG-SHKZG EQ
'S'.
GT_BSEG-DMBTR = LT_BSEG-DMBTR.
ELSE.
GT_BSEG-DMBTR = -1 * LT_BSEG-DMBTR.
ENDIF.
COLLECT GT_BSEG.
CLEAR GT_BSEG.
ENDIF.

*&S3.2补充资料列 通过科目汇总,
*&001602*根据期间科目贷方(SHKZG = H)金额汇总 - 16020798、16020704两个科目
IF LT_BSEG-HKONT(6) EQ
'001602'.
LT_BSEG_BC-SHKZG = LT_BSEG-SHKZG.
ENDIF.

*&对于项目部分,为后续处理去除科目前导0.
CALL FUNCTION
'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LT_BSEG-HKONT
IMPORTING
OUTPUT = LT_BSEG_BC-HKONT.
* LT_BSEG_BC-HKONT = LT_BSEG-HKONT.

IF LT_BSEG-SHKZG EQ
'S'.
LT_BSEG_BC-DMBTR = LT_BSEG-DMBTR.
ELSE.
LT_BSEG_BC-DMBTR = -1 * LT_BSEG-DMBTR.
ENDIF.
COLLECT LT_BSEG_BC.
CLEAR LT_BSEG_BC.
ENDLOOP.
SORT GT_BSEG BY RSTGR.
SORT LT_BSEG_BC BY HKONT SHKZG.

" ADD BY ABAP20
MOVE LT_BKPF[] TO LT_BKPF_C[].

*&->add on 20160324 req by FI_LJJ 要把固定资产这块 从“140”转到“240”来
*&-就是从140里面取1601和1604数据转换成240,这步可以做到了是吧 by Lizhihua on 20160323.
* BREAK ABAP30.
*&S1.处理原因代码为 140 的条目
LOOP AT LT_BSEG INTO WA_BSEG WHERE RSTGR =
'140'.
READ TABLE LT_BSEG WITH KEY BUKRS = WA_BSEG-BUKRS
BELNR = WA_BSEG-BELNR
GJAHR = WA_BSEG-GJAHR
KOART =
'K'.
IF SY-SUBRC EQ 0.
WA_BSEG-LIFNR = LT_BSEG-LIFNR.
ENDIF.
*& 通过
'K'类型财务凭证找 REGUP付款凭证
CLEAR:LT_REGUP_ADD,LT_REGUP_ADD[].
CLEAR:LT_BSEG_ADD,LT_BSEG_ADD[].
CLEAR:LT_REGUP_ADD.
SELECT VBLNR
BUKRS
BELNR
GJAHR
BUZEI
DMBTR
INTO CORRESPONDING FIELDS OF TABLE LT_REGUP_ADD
FROM REGUP
WHERE ZBUKR = WA_BSEG-BUKRS
AND VBLNR = WA_BSEG-BELNR
AND LIFNR = WA_BSEG-LIFNR
AND GJAHR = WA_BSEG-GJAHR.
IF SY-SUBRC EQ 0.
*&通过付款凭证 找回 科目为 A 资产
*& 科目类型 =
'S'的 总分类账科目
SELECT BUKRS
BELNR
BUZEI
GJAHR
RSTGR
HKONT
SHKZG
DMBTR
EBELN

KOART
LIFNR
INTO CORRESPONDING FIELDS OF TABLE LT_BSEG_ADD
FROM BSEG
FOR ALL ENTRIES IN LT_REGUP_ADD
WHERE BUKRS EQ LT_REGUP_ADD-BUKRS
AND BELNR EQ LT_REGUP_ADD-BELNR
AND GJAHR EQ LT_REGUP_ADD-GJAHR
AND KOART EQ
'A'.

DATA:LV_140_240 LIKE BSEG-DMBTR.
IF SY-SUBRC EQ 0.
*&科目为
'1601*''1604*',则记为 原因代码 = '240'
LOOP AT LT_BSEG_ADD." WHERE HKONT
IF LT_BSEG_ADD-HKONT(6) =
'001601' OR LT_BSEG_ADD-HKONT(6) = '001604'.
* IF LT_BSEG-SHKZG EQ
'S'.
* GT_BSEG-DMBTR = LT_BSEG-DMBTR.
* ELSE.
* GT_BSEG-DMBTR = -1 * LT_BSEG-DMBTR.
* ENDIF.
READ TABLE LT_REGUP_ADD WITH KEY BUKRS = LT_BSEG_ADD-BUKRS
BELNR = LT_BSEG_ADD-BELNR
GJAHR = LT_BSEG_ADD-GJAHR.
IF SY-SUBRC EQ 0.
LV_140_240 = LV_140_240 + LT_REGUP_ADD-DMBTR.
EXIT.
ENDIF.

ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

ENDLOOP.
*&->end add.

*&->删除 凭证类型 <>
'ZP'---删除掉 付款过帐 的凭证.
DELETE LT_BKPF_C[] WHERE BLART NE
'ZP'.

IF LT_BKPF_C[] IS NOT INITIAL .

SELECT REGUP~VBLNR
REGUP~BUKRS
REGUP~BELNR
REGUP~GJAHR
REGUP~BUZEI
FROM REGUP "来自收付程序的处理项目
INTO CORRESPONDING FIELDS OF TABLE GT_REGUP
FOR ALL ENTRIES IN LT_BKPF_C
WHERE XVORL =
''
AND GJAHR = LT_BKPF_C-GJAHR
AND VBLNR = LT_BKPF_C-BELNR
AND BUKRS = LT_BKPF_C-BUKRS.
* BELNR = LT_BKPF-VBLNR AND
* GJAHR = LT_BKPF-GJAHR.

IF GT_REGUP[] IS NOT INITIAL.
*& 取会计凭证
SELECT BUKRS
BELNR
BUZEI
GJAHR
RSTGR
HKONT
SHKZG
DMBTR
EBELN
INTO TABLE LT_BSEG_C
* INTO CORRESPONDING FIELDS OF TABLE LT_BSEG
FROM BSEG
FOR ALL ENTRIES IN GT_REGUP
WHERE BUKRS EQ GT_REGUP-BUKRS
AND BELNR EQ GT_REGUP-BELNR
AND GJAHR EQ GT_REGUP-GJAHR.

*& 取付款凭证
SELECT BUKRS
BELNR
BUZEI
GJAHR
RSTGR
HKONT
SHKZG
DMBTR
EBELN
INTO TABLE LT_BSEG_P
* INTO CORRESPONDING FIELDS OF TABLE LT_BSEG
FROM BSEG
FOR ALL ENTRIES IN GT_REGUP
WHERE BUKRS EQ GT_REGUP-BUKRS
AND BELNR EQ GT_REGUP-VBLNR
AND GJAHR EQ GT_REGUP-GJAHR.
ENDIF.

*BREAK ABAP30.
*&->来自收付程序的处理项目(付款数据处理)
*->use it
LOOP AT GT_REGUP.

AT END OF GJAHR.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS "汇总1601或16002的科目值
BELNR = GT_REGUP-BELNR HKONT(6) =
'001601' .
IF SY-SUBRC NE 0.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR
HKONT(6) =
'001604' .
IF SY-SUBRC = 0.
*& 加上科目
'2202*'
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR
HKONT(6) =
'002202' .
IF SY-SUBRC = 0.
LV_VAL16 = LT_BSEG_C-DMBTR + LV_VAL16.
ENDIF.
ENDIF.
ELSE.
*& 加上科目
'2202*'
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR HKONT(6) =
'002202' .
IF SY-SUBRC = 0.
LV_VAL16 = LT_BSEG_C-DMBTR + LV_VAL16.
ENDIF.
ENDIF.


READ TABLE LT_BSEG_P WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-VBLNR
HKONT(6) =
'001002' .
IF SY-SUBRC = 0 .
"排除0010021702/0010021901
READ TABLE LT_BSEG_P WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-VBLNR HKONT =
'0010021702' .
IF SY-SUBRC = 0.
CONTINUE.
ENDIF.
READ TABLE LT_BSEG_P WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-VBLNR HKONT =
'0010021901' .
IF SY-SUBRC = 0.
CONTINUE.
ENDIF.
"***************
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR EBELN(3) =
'412'."取zac3的采购订单凭证后取002202的金额汇总LV_VAL17
IF SY-SUBRC NE 0.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR EBELN(3) =
'422'."取zaf3的采购订单凭证后取002202的金额汇总LV_VAL17
IF SY-SUBRC = 0.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR HKONT(6) =
'002202' .
IF SY-SUBRC = 0.
LV_VAL17 = LT_BSEG_C-DMBTR + LV_VAL17.
ENDIF.
ENDIF.
ELSE.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR HKONT(6) =
'002202' .
IF SY-SUBRC = 0.
LV_VAL17 = LT_BSEG_C-DMBTR + LV_VAL17.
ENDIF.
ENDIF.
ELSE.
"处理001001开头的科目
READ TABLE LT_BSEG_P WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-VBLNR
HKONT(6) =
'001001' .
IF SY-SUBRC = 0 .
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR EBELN(3) =
'412'."取zac3的采购订单凭证后取002202的金额汇总LV_VAL17
IF SY-SUBRC NE 0.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR EBELN(3) =
'422'."取zaf3的采购订单凭证后取002202的金额汇总LV_VAL17
IF SY-SUBRC = 0.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR HKONT(6) =
'002202' .
IF SY-SUBRC = 0.
LV_VAL17 = LT_BSEG_C-DMBTR + LV_VAL17.
ENDIF.
ENDIF.
ELSE.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR HKONT(6) =
'002202' .
IF SY-SUBRC = 0.
LV_VAL17 = LT_BSEG_C-DMBTR + LV_VAL17.
ENDIF.
ENDIF.

*&->add by abap30 on 20160128 REQ BY FI_WXQ (添加 科目 =
'1022*' 银行清算类科目)
ELSE.
*& 处理001022 开头的科目
READ TABLE LT_BSEG_P WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-VBLNR
HKONT(6) =
'001022' .
IF SY-SUBRC = 0 .
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR EBELN(3) =
'412'."取zac3的采购订单凭证后取002202的金额汇总LV_VAL17
IF SY-SUBRC NE 0.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR EBELN(3) =
'422'."取zaf3的采购订单凭证后取002202的金额汇总LV_VAL17
IF SY-SUBRC = 0.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR HKONT(6) =
'002202' .
IF SY-SUBRC = 0.
LV_VAL17 = LT_BSEG_C-DMBTR + LV_VAL17.
ENDIF.
ENDIF.
ELSE.
READ TABLE LT_BSEG_C WITH KEY BUKRS = GT_REGUP-BUKRS
BELNR = GT_REGUP-BELNR HKONT(6) =
'002202' .
IF SY-SUBRC = 0.
LV_VAL17 = LT_BSEG_C-DMBTR + LV_VAL17.
ENDIF.
ENDIF.
*&->end add.
ENDIF.
ENDIF.
ENDIF.
*
ENDAT.
ENDLOOP.
* LOOP AT GT_REGUP.
* AT END OF GJAHR.

* ENDAT.
* ENDLOOP.
ENDIF.
"END ADD BY ABAP20
"END ADD BY BAIYUZHUANG
*&->行项目写入
*&1 一、经营活动产生的现金流量: ------- /1、将净利润调节为经营活动现金流量
CLEAR:LV_DMBTR,LV_HSL00.
**&test
* LV_DMBTR =
'1000'.
* LV_HSL00 =
'1000'.
PERFORM FRM_APPEND_DATA USING
'一、经营活动产生的现金流量:' '' LV_DMBTR '1、将净利润调节为经营活动现金流量' '' LV_HSL00.

* GT_DATA-TEXT_XM =
'一、经营活动产生的现金流量:'.
* GT_DATA-LINE_XM =
''.
* GT_DATA-DMBTR =
''.
* GT_DATA-TEXT_BC =
'1、将净利润调节为经营活动现金流量 '.
* GT_DATA-LINE_BC =
''.
* GT_DATA-HSL00 =
''.
* APPEND GT_DATA.

*&2 销售商品、提供劳务收到的现金 1 原因代码101汇总 /
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'101' BINARY SEARCH.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
PERFORM FRM_APPEND_DATA USING
'销售商品、提供劳务收到的现金' '1' LV_DMBTR '' '' LV_HSL00.

*&3 收到的税费返还 3 原因代码102汇总 /净利润 57 等于利润表总净利润 (?1) 净利润=6001*+6051*-6401*-6402*-6403*-6601*-6602*-6603*-6701*+6101*+6111*+6301*-6711*-6801*
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'102' BINARY SEARCH.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

* BREAK ABAP30.
*&->start change by ABAP30 on 20160401.
* 净利润
CLEAR:R_HKONT,R_HKONT[].
R_HKONT(3) =
'ICP'.
R_HKONT-LOW =
'006*'.
APPEND R_HKONT.

DATA:L_P_J LIKE P_MONAT,
L_PJ_C LIKE P_MONAT,
L_NAME_J TYPE CHAR13,
L_NAME2_J TYPE CHAR13,
L_NAME_QC_J TYPE CHAR13,
L_NAME2_QC_J TYPE CHAR13.
DATA:LT_FAGT LIKE TABLE OF GT_FAGT WITH HEADER LINE.
**&将这个值,改成抓FAGLFLEXT 里的值,006* 科目的,当期的总额,HSL*(月份对应):
*& 净利润栏位取值改为从T表取数据
*& FAGLFLEXT表中取现金的余额汇总 (期余额和期初余额)
*&->start add by ABAP30 on 20160405 req by FI_LJJ
CLEAR:GT_FAGT,GT_FAGT[],
L_P_J ,
L_NAME_J ,
L_NAME2_J ,
L_NAME_QC_J ,
L_NAME2_QC_J.
CLEAR:LV_HSL00.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_FAGT
FROM FAGLFLEXT
WHERE RBUKRS EQ P_BUKRS
AND RACCT IN R_HKONT
AND RYEAR = P_GJAHR
AND RRCTY =
'0'.

IF SY-SUBRC EQ 0.
*&Way 1.
*&1.按月汇总
LOOP AT GT_FAGT.
LT_FAGT = GT_FAGT.
CLEAR:LT_FAGT-RACCT,LT_FAGT-DRCRK.
COLLECT LT_FAGT.
ENDLOOP.
CLEAR:GT_FAGT[].
GT_FAGT[] = LT_FAGT[].

CONCATENATE
'GT_FAGT-HSL' S_MONAT-HIGH INTO L_NAME_J.
CONCATENATE
'GT_FAGT-HSL' S_MONAT-LOW INTO L_NAME_QC_J.
L_PJ_C = S_MONAT-HIGH.
LOOP AT GT_FAGT.
*&确定月数
L_P_J = S_MONAT-HIGH - S_MONAT-LOW.

IF S_MONAT-HIGH = S_MONAT-LOW.
CONCATENATE
'GT_FAGT-HSL' S_MONAT-HIGH INTO L_NAME2_QC_J.
ASSIGN (L_NAME2_QC_J) TO <FN1_QC>.
LV_HSL00 = LV_HSL00 + <FN1_QC>.
ELSE.
*&得到当月余额
ASSIGN (L_NAME_J) TO <FN2_QC>.
DO L_P_J TIMES.
IF L_P_J EQ 1.
CONCATENATE
'GT_FAGT-HSL' L_P_J INTO L_NAME2_QC_J.
ASSIGN (L_NAME2_QC_J) TO <FN1_QC>.
<FN2_QC> = <FN2_QC> + <FN1_QC>.
ELSEIF L_P_J GT 1.
*&按月份往前推
L_PJ_C = L_PJ_C - 1.
CONCATENATE
'GT_FAGT-HSL' L_PJ_C INTO L_NAME2_QC_J.
ASSIGN (L_NAME2_QC_J) TO <FN1_QC>.
<FN2_QC> = <FN2_QC> + <FN1_QC>.
ENDIF.
ENDDO.
*&净利润计算:
LV_HSL00 = LV_HSL00 + <FN2_QC>.
ENDIF.
CLEAR:GT_FAGT.
IF <FN1_QC> IS NOT INITIAL.
CLEAR <FN1_QC>.
ENDIF.
IF <FN2_QC> IS NOT INITIAL.
CLEAR <FN2_QC>.
ENDIF.

ENDLOOP.

**&Way 2.
* CONCATENATE
'GT_FAGT-HSL' S_MONAT-HIGH INTO L_NAME_J.
* CONCATENATE
'GT_FAGT-HSL' S_MONAT-LOW INTO L_NAME_QC_J.
** CLEAR:LV_QC_J,LV_QM_J.
* LOOP AT GT_FAGT.
**&确定月数
* L_P_J = S_MONAT-HIGH - S_MONAT-LOW.
**&L1.只查询一个月
* IF S_MONAT-HIGH = S_MONAT-LOW.
* CONCATENATE
'GT_FAGT-HSL' S_MONAT-HIGH INTO L_NAME2_QC_J.
* ASSIGN (L_NAME2_QC_J) TO <FN1_QC>.
* LV_HSL00 = LV_HSL00 + <FN1_QC>.
* ELSE.
**&L2.查询多月:
**&得到当月余额
* ASSIGN (L_NAME_J) TO <FN2_QC>.
* DO L_P_J TIMES.
* IF L_P_J EQ 1.
* CONCATENATE
'GT_FAGT-HSL' L_P_J INTO L_NAME2_QC_J.
* ASSIGN (L_NAME2_QC_J) TO <FN1_QC>.
* <FN2_QC> = <FN2_QC> + <FN1_QC>.
* ELSEIF L_P_J GT 1.
**&按月份往前推
* L_P_J = L_P_J - 1.
* CONCATENATE
'GT_FAGT-HSL' L_P_J INTO L_NAME2_QC_J.
* ASSIGN (L_NAME2_QC_J) TO <FN1_QC>.
* <FN2_QC> = <FN2_QC> + <FN1_QC>.
* ENDIF.
* ENDDO.
**&净利润计算:
* LV_HSL00 = LV_HSL00 + <FN2_QC>.
* ENDIF.
* CLEAR:GT_FAGT.
* IF <FN1_QC> IS NOT INITIAL.
* CLEAR <FN1_QC>.
* ENDIF.
* IF <FN2_QC> IS NOT INITIAL.
* CLEAR <FN2_QC>.
* ENDIF.
* ENDLOOP.
ENDIF.
*&->end add.

* LOOP AT GT_FAGT INTO WA_FAGT WHERE RACCT IN R_HKONT.
* LV_HSL00 = LV_HSL00 + WA_FAGT-DMBTR.
* ENDLOOP.
* LV_HSL00 = LV_HSL00 * -1.

*&->change on 20151110.以6*科目的余额汇总
LOOP AT LT_BSEG_BC WHERE HKONT IN R_HKONT.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00 = LV_HSL00 * -1.

* LOOP AT LT_BSEG_BC.
* IF LT_BSEG_BC-HKONT(4) =
'6001'.
* LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
** PERFORM FRM_GET_HSLOO USING LT_BSEG_BC-DMBTR LV_HSL00.
* ENDIF.
**&收入的发生是在贷方,费用的产生是在借方
**&收入类的科目需要* -1.
* LV_HSL00 = LV_HSL00 * -1.
* IF LT_BSEG_BC-HKONT(4) =
'6051'.
* LT_BSEG_BC-DMBTR = LT_BSEG_BC-DMBTR * -1.
* LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6401'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6402'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6403'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6601'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6602'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6603'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6701'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6101'.
* LT_BSEG_BC-DMBTR = LT_BSEG_BC-DMBTR * -1.
* LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6111'.
* LT_BSEG_BC-DMBTR = LT_BSEG_BC-DMBTR * -1.
* LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6301'.
* LT_BSEG_BC-DMBTR = LT_BSEG_BC-DMBTR * -1.
* LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6711'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* IF LT_BSEG_BC-HKONT(4) =
'6801'.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* ENDLOOP.

PERFORM FRM_APPEND_DATA USING
'收到的税费返还' '3' LV_DMBTR '净利润' '57' LV_HSL00.

*4 收到的其他与经营活动有关的现金 8 原因代码103汇总 /加: 资产减值准备 58 001603*根据期间科目余额加总
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'103' BINARY SEARCH.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'1603'.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
* READ TABLE LT_BSEG_BC WITH KEY HKONT(4) =
'1603' BINARY SEARCH.
* IF SY-SUBRC EQ 0.
* LV_HSL00 = LT_BSEG_BC-DMBTR.
* ENDIF.

PERFORM FRM_APPEND_DATA USING
'收到的其他与经营活动有关的现金' '8' LV_DMBTR '加: 资产减值准备' '58' LV_HSL00.

*5 现金流入小计 9 101~103金额加总 /固定资产折旧、油气资产折耗、生产性生物资产折旧 59 001602*根据期间科目贷方(SHKZG = H)金额加总排除16020798、16020704两个科目
CLEAR:LV_DMBTR,LV_HSL00.
*&取101~103金额加总.
LOOP AT GT_DATA INTO WA_DATA.
AT LAST.
SUM.
LV_DMBTR = WA_DATA-DMBTR.
ENDAT.
ENDLOOP.

*BC->001602*根据期间科目贷方(SHKZG = H)金额加总
LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'1602' AND SHKZG = 'H'.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
READ TABLE LT_BSEG_BC WITH KEY HKONT =
'16020798' BINARY SEARCH.
IF SY-SUBRC EQ 0.
LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
ENDIF.
READ TABLE LT_BSEG_BC WITH KEY HKONT =
'16020704' BINARY SEARCH.
IF SY-SUBRC EQ 0.
LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
ENDIF.
*&累积折旧需要显示正数
LV_HSL00 = LV_HSL00 * -1.
*LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
' 现金流入小计' '9' LV_DMBTR '固定资产折旧、油气资产折耗、生产性生物资产折旧 ' '59' LV_HSL00.

*6 购买商品、接受劳务支付的现金 10 原因代码140汇总 /无形资产摊销 60 001702*根据期间科目余额加总
* BREAK ABAP30.
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'140'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
LV_DMBTR = LV_DMBTR * -1.

*&->注释 on 20160324
* LV_DMBTR = LV_DMBTR - LV_VAL16 - LV_VAL17."add by abap20
*BREAK ABAP30.
*&->add by ABAP30 on 20160324. -LV_140_240 (- 固定资产)
IF LV_140_240 NE 0.
LV_DMBTR = LV_DMBTR - LV_140_240.
ENDIF.
*&->end add.

*BC->001702*根据期间科目余额加总
*&->C3.change by rainy on 20151108 改成:无形资产摊销=16020798+16020704
* LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'1702'.
* LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
* ENDLOOP.
READ TABLE LT_BSEG_BC WITH KEY HKONT =
'16020798'.
IF SY-SUBRC EQ 0.
LV_HSL00 = LT_BSEG_BC-DMBTR.
ENDIF.
READ TABLE LT_BSEG_BC WITH KEY HKONT =
'16020704'.
IF SY-SUBRC EQ 0.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDIF.
LV_HSL00 = LV_HSL00 * -1.
*LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'购买商品、接受劳务支付的现金 ' '10' LV_DMBTR '无形资产摊销 ' '60' LV_HSL00.

*7 支付给职工以及为职工支付的现金 12 原因代码141汇总 /长期待摊费用摊销 61 001801*根据期间科目余额加总
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'141'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
LV_DMBTR = LV_DMBTR * -1.

*BREAK ABAP30.
LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'1801'.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
* LV_HSL00 =
'3'.
*&C4.余额的贷方应该为整数
LV_HSL00 = LV_HSL00 * -1.
*&->start add on 20160323 by ABAP30. req by fi_ljj
*& 61 这一项增加科目:2503*
LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'2503'.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
*&->end add.

PERFORM FRM_APPEND_DATA USING
'支付给职工以及为职工支付的现金 ' '12' LV_DMBTR '长期待摊费用摊销 ' '61' LV_HSL00.

*8 支付的各项税费 13 原因代码142汇总 /处置固定资产、无形资产和其他长期资产的损失(收益以“-”号填列)64 64050303 按照期间余额加总
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'142'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
LV_DMBTR = LV_DMBTR * -1.

READ TABLE LT_BSEG_BC WITH KEY HKONT =
'64050303' BINARY SEARCH.
IF SY-SUBRC EQ 0.
LV_HSL00 = LT_BSEG_BC-DMBTR.
ENDIF.
*LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'支付的各项税费 ' '13' LV_DMBTR '处置固定资产、无形资产和其他长期资产的损失(收益以“-”号填列) ' '64' LV_HSL00.

* BREAK ABAP30.
BREAK TEST_13.
*9 支付的其他与经营活动有关的现金 18 原因代码143汇总 /固定资产报废损失(收益以“-”号填列) 65 64050301 按照期间余额加总
*BREAK ABAP30.

*&->add by ABAP30 on 20160415.
*(原因代码143汇总*-1 + )
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'143'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
LV_DMBTR = LV_DMBTR * -1.
*&->change by ABAP30 on 20160419 (数据不对要调对)
* LV_DMBTR = LV_DMBTR + LV_VAL17."ADD BY ABAP20 (被FI_LZH 反映这个处理有问题 on 20160415)
READ TABLE LT_BSEG_BC WITH KEY HKONT =
'64050301' BINARY SEARCH.
IF SY-SUBRC EQ 0.
LV_HSL00 = LT_BSEG_BC-DMBTR.
ENDIF.
*LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'支付的其他与经营活动有关的现金' '18' LV_DMBTR '固定资产报废损失(收益以“-”号填列) ' '65' LV_HSL00.

RANGES:R_RSTGR FOR BSEG-RSTGR.
*10 现金流出小计 20 140~143金额加总 /公允价值变动损失(收益以“-”号填列) 66
CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:R_RSTGR,R_RSTGR[].

*BREAK ABAP30.
*&->start change by ABAP30 on 20160325.
*& 现金流出小计 = line 10 + 12 + 13 + 18.
READ TABLE GT_DATA WITH KEY LINE_XM =
'10'.
IF SY-SUBRC EQ 0.
LV_DMBTR = LV_DMBTR + GT_DATA-DMBTR.
ENDIF.

READ TABLE GT_DATA WITH KEY LINE_XM =
'12'.
IF SY-SUBRC EQ 0.
LV_DMBTR = LV_DMBTR + GT_DATA-DMBTR.
ENDIF.

READ TABLE GT_DATA WITH KEY LINE_XM =
'13'.
IF SY-SUBRC EQ 0.
LV_DMBTR = LV_DMBTR + GT_DATA-DMBTR.
ENDIF.

READ TABLE GT_DATA WITH KEY LINE_XM =
'18'.
IF SY-SUBRC EQ 0.
LV_DMBTR = LV_DMBTR + GT_DATA-DMBTR.
ENDIF.
*&->end change.

**&add_lxq 140~143 加总
* R_RSTGR(3) =
'IBT'.
* R_RSTGR-LOW =
'140'.
* R_RSTGR-HIGH =
'143'.
* APPEND R_RSTGR.
**&取140~143金额加总
* LOOP AT GT_BSEG WHERE RSTGR IN R_RSTGR.
* LV_DMBTR = GT_BSEG-DMBTR + LV_DMBTR.
* ENDLOOP.
** LV_DMBTR = LV_DMBTR * -1.
* LV_DMBTR = LV_DMBTR * -1.
* LV_DMBTR = LV_DMBTR - LV_VAL16."add by abap20
PERFORM FRM_APPEND_DATA USING
' 现金流出小计' '20' LV_DMBTR '公允价值变动损失(收益以“-”号填列)' '66' LV_HSL00.

*11 经营活动产生的现金流量净额 21 现金流入-现金流出 /
CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:LV_DMBTR_9,LV_DMBTR_20.
*&计算 现金流入-现金流出
*&现金流入小计
READ TABLE GT_DATA WITH KEY LINE_XM =
'9'.
LV_DMBTR = GT_DATA-DMBTR.
*&现金流出小计
READ TABLE GT_DATA WITH KEY LINE_XM =
'20'.
LV_DMBTR = LV_DMBTR - GT_DATA-DMBTR.

PERFORM FRM_APPEND_DATA USING
'经营活动产生的现金流量净额 ' '21' LV_DMBTR ' ' '' LV_HSL00.

*12 二、投资活动产生的现金流量 /财务费用(收益以“-”号填列) 67 66031501 按照期间余额加总
CLEAR:LV_DMBTR,LV_HSL00.

READ TABLE LT_BSEG_BC WITH KEY HKONT =
'66031501' BINARY SEARCH.
IF SY-SUBRC EQ 0.
LV_HSL00 = LT_BSEG_BC-DMBTR.
ENDIF.
*LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'二、投资活动产生的现金流量' '' LV_DMBTR '财务费用(收益以“-”号填列) ' '67' LV_HSL00.

*13 收回投资所收到的现金 22 原因代码201汇总 -/投资损失(收益以“-”号填列) 68 (?2)
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'201'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
* LV_DMBTR = LV_DMBTR * -1."MOD BY ABAP20 CHANGE BY wxq_20151130 201不需要乘-1

PERFORM FRM_APPEND_DATA USING
'收回投资所收到的现金' '22' LV_DMBTR '投资损失(收益以“-”号填列) ' '68' LV_HSL00.

*14 取得投资收益所收到的现金 23 原因代码202汇总 -/递延所得税资产减少(增加以“-”号填列) 69 1811*(期初数-期末数->0-DMBTR
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'202'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'1811'.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00 = 0 - LV_HSL00.
* LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'取得投资收益所收到的现金' '23' LV_DMBTR '递延所得税资产减少(增加以“-”号填列) ' '69' LV_HSL00.

*15 处置固定资产、无形资产和其他长期资产所收回的现金净额 25 原因代码203汇总 /递延所得税负债增加(减少以“-”号填列) 70 2901*(期末数-期初数->DMBTR - 0
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'203'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'2901'.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
*&贷方为 正
LV_HSL00 = LV_HSL00 * -1.
* LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'处置固定资产、无形资产和其他长期资产所收回的现金净额' '25' LV_DMBTR '递延所得税负债增加(减少以“-”号填列) ' '70 ' LV_HSL00.

*16 收到的其他与投资活动有关的现金 28 原因代码204汇总 /存货的减少(增加以“-”号填列) 71 1402*~1412*(期初数-期末数)
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'204'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

CLEAR:R_HKONT,R_HKONT[].
R_HKONT(3) =
'IBT'.
R_HKONT-LOW =
'1402*'.
R_HKONT-HIGH =
'1412*'.
APPEND R_HKONT.
LOOP AT LT_BSEG_BC WHERE HKONT IN R_HKONT.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00 = 0 - LV_HSL00.

*&add on 20151108 by wxq增加1471*
CLEAR:LV_HSL00_1.
LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'1471'.
LV_HSL00_1 = LV_HSL00_1 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00_1 = 0 - LV_HSL00_1.

LV_HSL00 = LV_HSL00 + LV_HSL00_1.

*LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'收到的其他与投资活动有关的现金' '28' LV_DMBTR '存货的减少(增加以“-”号填列) ' '71' LV_HSL00.

*17 现金流入小计 29 201~204金额加总 /经营性应收项目的减少(增加以“-”号填列)72 (1122*+1121*+1123*+1221*+1801*)-1231*期末余额 (期初数-期末数)add on 20151108 by wxq 需要删除1801*
*BREAK ABAP30.

CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:R_RSTGR,R_RSTGR[].

R_RSTGR(3) =
'IBT'.
R_RSTGR-LOW =
'201'.
R_RSTGR-HIGH =
'204'.
APPEND R_RSTGR.
CLEAR:R_RSTGR.

LOOP AT GT_BSEG WHERE RSTGR IN R_RSTGR.
LV_DMBTR = LV_DMBTR + GT_BSEG-DMBTR.
ENDLOOP.

CLEAR:R_HKONT,R_HKONT[].
DEFINE MCR_RANGE .
R_HKONT(3) =
'ICP'.
R_HKONT-LOW = &1.
* R_HKONT-HIGH = &2.
APPEND R_HKONT.
END-OF-DEFINITION.

MCR_RANGE:
'1122*'.
MCR_RANGE:
'1121*'.
MCR_RANGE:
'1123*'.
MCR_RANGE:
'1221*'.
MCR_RANGE:
'1801*'.
*A
CLEAR:LV_HSL00_1, LV_HSL00_2.

LOOP AT LT_BSEG_BC WHERE HKONT IN R_HKONT.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00 = 0 - LV_HSL00.

LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'1231'.
LV_HSL00_1 = LV_HSL00_1 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00 = LV_HSL00 - LV_HSL00_1.

*&C8-需要删除1801*
LOOP AT LT_BSEG_BC WHERE HKONT(4) =
'1801'.
LV_HSL00_2 = LV_HSL00_2 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00 = LV_HSL00 - LV_HSL00_2.

*&->start add on 20160323 by ABAP30. req by fi_ljj

*&->end add.

* LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
' 现金流入小计' '29' LV_DMBTR '经营性应收项目的减少(增加以“-”号填列) ' '72' LV_HSL00.

*18 购建固定资产、无形资产和其他长期资产所支付的现金 30 原因代码240汇总 /经营性应付项目的增加(减少以“-”号填列)73 经营活动产生的现金流量净额-以上项目加总金额
*&->add by rainy on 20151125 req by fi_wxq
*经营性应付项目的增加(减少以“-”号填列)73 (2202*+2203*+2201*+2211*+2221*+2241*)余额加总乘以-1
*&->end add.

CLEAR:LV_DMBTR,LV_HSL00,
LV_HSL00_1.
READ TABLE GT_BSEG WITH KEY RSTGR =
'240'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
LV_DMBTR = LV_DMBTR * -1.
" ADD BY ABAP20
* MOVE LT_BKPF[] TO LT_BKPF_C[].
* DELETE LT_BKPF_C[] WHERE BLART ne
'ZP'.
* IF LT_BKPF_C[] IS NOT INITIAL .
*
* SELECT REGUP~VBLNR
* REGUP~BUKRS
* REGUP~BELNR
* REGUP~GJAHR
* REGUP~BUZEI FROM REGUP
* INTO CORRESPONDING FIELDS OF TABLE GT_REGUP FOR ALL ENTRIES IN LT_BKPF_C
* WHERE XVORL =
'' AND GJAHR = LT_BKPF_C-GJAHR AND VBLNR = LT_BKPF_C-BELNR
* AND BUKRS = LT_BKPF_C-BUKRS.
** BELNR = LT_BKPF-VBLNR AND
** GJAHR = LT_BKPF-GJAHR.
* .
* SELECT BUKRS
* BELNR
* BUZEI
* GJAHR
* RSTGR
* HKONT
* SHKZG
* DMBTR
* INTO TABLE LT_BSEG_C
** INTO CORRESPONDING FIELDS OF TABLE LT_BSEG
* FROM BSEG
* FOR ALL ENTRIES IN GT_REGUP
* WHERE BUKRS EQ GT_REGUP-BUKRS
* AND BELNR EQ GT_REGUP-BELNR
* AND GJAHR EQ GT_REGUP-GJAHR.


IF P_3000 EQ
'X'.
CLEAR:R_HKONT,R_HKONT[].
DEFINE MCR_RANGE .
R_HKONT(3) =
'ICP'.
R_HKONT-LOW = &1.
* R_HKONT-HIGH = &2.
APPEND R_HKONT.
END-OF-DEFINITION.
MCR_RANGE:
'2202*'.
MCR_RANGE:
'2203*'.
MCR_RANGE:
'2201*'.
MCR_RANGE:
'2211*'.
MCR_RANGE:
'2221*'.
MCR_RANGE:
'2241*'.
LOOP AT LT_BSEG_BC WHERE HKONT IN R_HKONT.
LV_HSL00 = LV_HSL00 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00 = 0 - LV_HSL00.
ELSE.
*&BC->经营活动产生的现金流量净额-以上项目加总金额
READ TABLE GT_DATA WITH KEY LINE_XM =
'21'.
LV_HSL00 = GT_DATA-DMBTR.

LOOP AT GT_DATA.
AT LAST.
SUM.
LV_HSL00_1 = GT_DATA-HSL00.
ENDAT.
ENDLOOP.
LV_HSL00 = LV_HSL00 - LV_HSL00_1.
ENDIF.
* LV_HSL00 =
'3'.

**&->注释 on 20160324.
* IF LV_VAL16 NE 0.
* LV_DMBTR = LV_DMBTR + LV_VAL16.
* ENDIF.
*BREAK ABAP30.
*&->add by ABAP30 on 20160324. +LV_140_240
IF LV_140_240 NE 0.
LV_DMBTR = LV_DMBTR + LV_140_240.
ENDIF.
*&->end add.
PERFORM FRM_APPEND_DATA USING
'购建固定资产、无形资产和其他长期资产所支付的现金' '30' LV_DMBTR '经营性应付项目的增加(减少以“-”号填列)' '73' LV_HSL00.

*19 投资所支付的现金 31 原因代码241汇总 - / 其他 74
*&->add by rainy on 20151125 req by fi_wxq.
*&其他 74 经营活动产生的现金流量净额-以上项目加总金额
*&->end add.
*BREAK ABAP30.

CLEAR:LV_DMBTR,LV_HSL00,LV_HSL00_1.
READ TABLE GT_BSEG WITH KEY RSTGR =
'241'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
*&add * -1.
LV_DMBTR = LV_DMBTR * -1.

IF P_3000 EQ
'X'.
*&BC->经营活动产生的现金流量净额-以上项目加总金额
READ TABLE GT_DATA WITH KEY LINE_XM =
'21'.
LV_HSL00 = GT_DATA-DMBTR.

LOOP AT GT_DATA.
AT LAST.
SUM.
LV_HSL00_1 = GT_DATA-HSL00.
ENDAT.
ENDLOOP.
LV_HSL00 = LV_HSL00 - LV_HSL00_1.

ENDIF.
* LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'投资所支付的现金' '31' LV_DMBTR '其他 ' '74' LV_HSL00.

*20 支付的其他与投资活动有关的现金 35 原因代码242汇总 /
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'242'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
* LV_DMBTR = LV_DMBTR + LV_VAL17." ADD 采购订单的值
LV_DMBTR = LV_DMBTR * -1.

* LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'支付的其他与投资活动有关的现金' '35' LV_DMBTR '' '' LV_HSL00.

*21 现金流出小计 36 240~242金额加总 /
CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:R_RSTGR,R_RSTGR[].

*&->start change by ABAP30 on 20160325.
*&现金流出小计 = line 30+31+35
READ TABLE GT_DATA WITH KEY LINE_XM =
'30'.
IF SY-SUBRC = 0.
LV_DMBTR = LV_DMBTR + GT_DATA-DMBTR.
ENDIF.

READ TABLE GT_DATA WITH KEY LINE_XM =
'31'.
IF SY-SUBRC = 0.
LV_DMBTR = LV_DMBTR + GT_DATA-DMBTR.
ENDIF.

READ TABLE GT_DATA WITH KEY LINE_XM =
'35'.
IF SY-SUBRC = 0.
LV_DMBTR = LV_DMBTR + GT_DATA-DMBTR.
ENDIF.
*&->end change

*& 240~242、
R_RSTGR(3) =
'IBT'.
R_RSTGR-LOW =
'240'.
R_RSTGR-HIGH =
'242'.
APPEND R_RSTGR.
CLEAR R_RSTGR.
**&计算240~242金额加总
* LOOP AT GT_BSEG WHERE RSTGR IN R_RSTGR.
* LV_DMBTR = GT_BSEG-DMBTR + LV_DMBTR.
* ENDLOOP.
* LV_DMBTR = LV_DMBTR * -1.
* IF LV_VAL16 NE 0.
* LV_DMBTR = LV_DMBTR + LV_VAL16.
* ENDIF.
*LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
' 现金流出小计' '36' LV_DMBTR '' '' LV_HSL00.

*22 投资活动产生的现金流量净额 37 现金流入-现金流出 /经营活动产生的现金流量净额 75 以上项目汇总
DATA:LV_DMBTR_29 LIKE BSEG-DMBTR,
LV_DMBTR_36 LIKE BSEG-DMBTR.

CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:LV_DMBTR_29,LV_DMBTR_36.
*&金额 = 现金流入-现金流出
*&现金流入
READ TABLE GT_DATA WITH KEY LINE_XM =
'29'.
LV_DMBTR_29 = GT_DATA-DMBTR.
*&现金流出
READ TABLE GT_DATA WITH KEY LINE_XM =
'36'.
LV_DMBTR_36 = GT_DATA-DMBTR.

LV_DMBTR = LV_DMBTR_29 - LV_DMBTR_36.

*BC->sum
LOOP AT GT_DATA.
AT LAST.
SUM.
LV_HSL00 = GT_DATA-HSL00.
ENDAT.
ENDLOOP.
* LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'投资活动产生的现金流量净额' '37' LV_DMBTR '经营活动产生的现金流量净额' '75' LV_HSL00.

*23 三、 筹资活动产生的现金流量 /2、 不涉及现金收支的投资和筹资活动
CLEAR:LV_DMBTR,LV_HSL00.

LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'三、筹资活动产生的现金流量' '' LV_DMBTR '2、 不涉及现金收支的投资和筹资活动' '' ''.

*24 吸收投资所收到的现金 38 原因代码301汇总 9,336,182.00 /债务转为资本 76
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'301'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'吸收投资所收到的现金' '38' LV_DMBTR '债务转为资本' '76' ''.

*25 借款所收到的现金 40 原因代码302汇总 - /一年内到期的可转换公司债券 77
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'302'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'借款所收到的现金' '40' LV_DMBTR '一年内到期的可转换公司债券' '77' ''.

*26 收到的其他与筹资活动有关的现金 43 原因代码303汇总 /融资租入固定资产 78
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'303'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
'收到的其他与筹资活动有关的现金' '43' LV_DMBTR '融资租入固定资产' '78' ''.

*27 现金流入小计 44 301~303金额汇总 /
CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:R_RSTGR,R_RSTGR[].

R_RSTGR(3) =
'IBT'.
R_RSTGR-LOW =
'301'.
R_RSTGR-HIGH =
'303'.
APPEND R_RSTGR.
CLEAR R_RSTGR.

LOOP AT GT_BSEG WHERE RSTGR IN R_RSTGR.
LV_DMBTR = GT_BSEG-DMBTR + LV_DMBTR.
ENDLOOP.
*&delete.
*LV_DMBTR = LV_DMBTR * -1.


LV_HSL00 =
'3'.

PERFORM FRM_APPEND_DATA USING
' 现金流入小计' '44' LV_DMBTR '' '' ''.

*28 偿还债务所支付的现金 45 原因代码340汇总 - /
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'340'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
*&add_lxq * -1
LV_DMBTR = LV_DMBTR * -1.

LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'偿还债务所支付的现金' '45' LV_DMBTR '' '' ''.

*29 分配股利、利润或偿付利息所支付的现金 46 原因代码341汇总 -/3、 现金及现金等价物净增加情况
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'341'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
LV_DMBTR = LV_DMBTR * -1.

* LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'分配股利、利润或偿付利息所支付的现金' '46' LV_DMBTR '3、 现金及现金等价物净增加情况' '' ''.

*30 支付的其他与筹资活动有关的现金 52 原因代码342汇总 /现金的期末余额 79 现金的期末余额=资产负债表“货币资金”期末余额(N?)
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'342'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.
LV_DMBTR = LV_DMBTR * -1.



*&BC-30 1001*+1002*期末余额
CLEAR:R_HKONT,R_HKONT[].
R_HKONT(3) =
'ICP'.
R_HKONT-LOW =
'001001*'.
APPEND R_HKONT.
R_HKONT(3) =
'ICP'.
R_HKONT-LOW =
'001002*'.
APPEND R_HKONT.
*&->start add by ABAP30 on 20160420 REQ BY fi_LJJ (期末余额/期末余额 添加银行清算科目: 1022*)
R_HKONT(3) =
'ICP'.
R_HKONT-LOW =
'001022*'.
APPEND R_HKONT.
*&->end add.

DATA: L_NAME TYPE CHAR13,
L_NAME2 TYPE CHAR13,
L_NAME_QC TYPE CHAR13,
L_NAME2_QC TYPE CHAR13.

*BREAK ABAP30.
DATA:LV_QC LIKE FAGLFLEXT-HSL01,
LV_QM LIKE FAGLFLEXT-HSL01.
DATA:LT_FAGT_QC LIKE TABLE OF GT_FAGT WITH HEADER LINE,
LT_FAGT_QM LIKE TABLE OF GT_FAGT WITH HEADER LINE.
* DATA:LT_10021702 LIKE TABLE OF GT_FAGT WITH HEADER LINE,
* LT_10021901 LIKE TABLE OF GT_FAGT WITH HEADER LINE.
DATA:L_1_QC LIKE P_MONAT,
L_1 LIKE P_MONAT.

CLEAR:GT_FAGT[],LT_FAGT_QC[],LT_FAGT_QM[].
*&add_lxq FAGLFLEXT表中取现金的期末余额和期初余额
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_FAGT
FROM FAGLFLEXT
WHERE RBUKRS EQ P_BUKRS
AND RACCT IN R_HKONT
AND RYEAR = P_GJAHR
AND RRCTY =
'0'.

IF SY-SUBRC EQ 0.

DELETE GT_FAGT WHERE RACCT EQ
'0010021702'.
DELETE GT_FAGT WHERE RACCT EQ
'0010021901'.

CLEAR:L_NAME,L_NAME_QC.
L_1_QC = S_MONAT-LOW - 1.
CONCATENATE
'GT_FAGT-HSL' S_MONAT-HIGH INTO L_NAME.

* IF L_1_QC =
'00'.
* L_NAME_QC =
'GT_FAGT-HSLVT'.
* ELSE.
CONCATENATE
'GT_FAGT-HSL' L_1_QC INTO L_NAME_QC.
* ENDIF.

* BREAK ABAP30.
BREAK TEST_13.
*&减:现金的期初余额
*& bug-fix by ABAP30 on 20160419 (期初余额取数错误【指针问题】)
CLEAR:LV_QC,LV_QM.
LOOP AT GT_FAGT.
L_1_QC = S_MONAT-LOW - 1.
*&期初取选择的最小值
ASSIGN (L_NAME_QC) TO <FN2_QC>.
IF SY-SUBRC EQ 0.
DO L_1_QC TIMES.
IF L_1_QC GT 1.
*&->change by ABAP30 on 20160422 (期初余额 (当年的第一月期间到选择的前一个期间的金额合计))
*& 按月往前推(取期初不用推)-【需要按月汇总】
L_1_QC = L_1_QC - 1.
CONCATENATE
'GT_FAGT-HSL' L_1_QC INTO L_NAME2_QC.
ASSIGN (L_NAME2_QC) TO <FN1_QC>.
<FN2_QC> = <FN2_QC> + <FN1_QC>.
ENDIF.
ENDDO.
LT_FAGT_QC-HSLVT = <FN2_QC> + GT_FAGT-HSLVT.
ELSE.
LT_FAGT_QC-HSLVT = GT_FAGT-HSLVT.
ENDIF.
APPEND LT_FAGT_QC.
CLEAR:LT_FAGT_QC,GT_FAGT.
ENDLOOP.

LOOP AT GT_FAGT.
*&期末取选择的最大值
L_1 = S_MONAT-HIGH.
ASSIGN (L_NAME) TO <FN2>.
DO S_MONAT-HIGH TIMES.
IF L_1 GT 1.
L_1 = L_1 - 1.
CONCATENATE
'GT_FAGT-HSL' L_1 INTO L_NAME2.
ASSIGN (L_NAME2) TO <FN1>.
<FN2> = <FN2> + <FN1>.
ENDIF.
ENDDO.
*&期末 = 余额结转 + 到当月
LT_FAGT_QM-HSLVT = <FN2> + GT_FAGT-HSLVT.
APPEND LT_FAGT_QM.
CLEAR:LT_FAGT_QM,GT_FAGT.

ENDLOOP.

ENDIF.

CLEAR:LV_QM,LV_QC.
*&20151110-期末余额
LOOP AT LT_FAGT_QM.
AT LAST.
SUM.
LV_QM = LT_FAGT_QM-HSLVT.
ENDAT.
ENDLOOP.
*&20151110-期初余额
LOOP AT LT_FAGT_QC.
AT LAST.
SUM.
LV_QC = LT_FAGT_QC-HSLVT.
ENDAT.
ENDLOOP.

LV_HSL00 = LV_QM.
**& add on 20151108 排除 10021702&10021901
* CLEAR:LV_HSL00_1,LV_HSL00_2.
* READ TABLE LT_BSEG_BC WITH KEY HKONT =
'10021702'.
* IF SY-SUBRC EQ 0.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.
* READ TABLE LT_BSEG_BC WITH KEY HKONT =
'10021901'.
* IF SY-SUBRC EQ 0.
* LV_HSL00 = LV_HSL00 - LT_BSEG_BC-DMBTR.
* ENDIF.

* LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'支付的其他与筹资活动有关的现金' '52' LV_DMBTR '现金的期末余额' '79' LV_HSL00.

*31 现金流出小计 53 301~303金额汇总 - /减:现金的期初余额 80 现金的期初余额=资产负债表“货币资金”期初余额(N?)
CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:R_RSTGR,R_RSTGR[].

*&add_lxq 340~342 的汇总
R_RSTGR(3) =
'IBT'.
R_RSTGR-LOW =
'340'.
R_RSTGR-HIGH =
'342'.
APPEND R_RSTGR.

LOOP AT GT_BSEG WHERE RSTGR IN R_RSTGR.
LV_DMBTR = GT_BSEG-DMBTR + LV_DMBTR.
ENDLOOP.
LV_DMBTR = LV_DMBTR * -1.

LV_HSL00 = LV_QC.
**&BC-31 1001*+1002*期初余额
* CLEAR:R_HKONT,R_HKONT[].
* R_HKONT(3) =
'ICP'.
* R_HKONT-LOW =
'1001*'.
* APPEND R_HKONT.
* R_HKONT(3) =
'ICP'.
* R_HKONT-LOW =
'1002*'.
* APPEND R_HKONT.
* LOOP AT LT_BSEG_BC WHERE HKONT IN R_HKONT.
* LV_HSL00 = LT_BSEG_BC-DMBTR + LV_HSL00.
* ENDLOOP.
* LV_HSL00 = 0 - LV_HSL00.
*&-> add on 20151108 期初的也不好取。
*LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
' 现金流出小计' '53' LV_DMBTR '减:现金的期初余额' '80' LV_HSL00.

*32 筹资活动产生的现金流量净额 54 现金流入-现金流出 /加:现金等价物的期末余额 81
DATA:LV_DMBTR_44 LIKE BSEG-DMBTR,
LV_DMBTR_53 LIKE BSEG-DMBTR.

CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:LV_DMBTR_44,LV_DMBTR_53.

*&金额 = 现金流入-现金流出 (44-53)
READ TABLE GT_DATA WITH KEY LINE_XM =
'44'.
IF SY-SUBRC EQ 0.
LV_DMBTR_44 = GT_DATA-DMBTR.
ENDIF.
READ TABLE GT_DATA WITH KEY LINE_XM =
'53'.
IF SY-SUBRC EQ 0.
LV_DMBTR_53 = GT_DATA-DMBTR.
ENDIF.
*&->20151125加:现金等价物的期末余额 = 现金流入 - 现金流出.
LV_DMBTR = LV_DMBTR_44 - LV_DMBTR_53.
* LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'筹资活动产生的现金流量净额' '54' LV_DMBTR '加:现金等价物的期末余额' '81' ''.

*33 四、 汇率变动对现金流量的影响 55 原因代码400汇总 /减:现金等价物的期初余额 82
CLEAR:LV_DMBTR,LV_HSL00.
READ TABLE GT_BSEG WITH KEY RSTGR =
'400'.
IF SY-SUBRC EQ 0.
LV_DMBTR = GT_BSEG-DMBTR.
ENDIF.

LV_HSL00 =
'3'.
PERFORM FRM_APPEND_DATA USING
'四、 汇率变动对现金流量的影响' '55' LV_DMBTR '减:现金等价物的期初余额' '82' ''.

*34 五、 现金及现金等价物净增加额 56 净额类加总 /现金及现金等价物净增加额 83 现金的期末余额-现金的期初余额
DATA:LV_DMBTR_21 LIKE BSEG-DMBTR,
LV_DMBTR_37 LIKE BSEG-DMBTR,
LV_DMBTR_54 LIKE BSEG-DMBTR,
LV_DMBTR_55 LIKE BSEG-DMBTR.

CLEAR:LV_DMBTR,LV_HSL00.
CLEAR:LV_DMBTR_21,LV_DMBTR_37,LV_DMBTR_54,LV_DMBTR_55.

READ TABLE GT_DATA WITH KEY LINE_XM =
'21'.
LV_DMBTR_21 = GT_DATA-DMBTR.

READ TABLE GT_DATA WITH KEY LINE_XM =
'37'.
LV_DMBTR_37 = GT_DATA-DMBTR.

READ TABLE GT_DATA WITH KEY LINE_XM =
'54'.
LV_DMBTR_54 = GT_DATA-DMBTR.

READ TABLE GT_DATA WITH KEY LINE_XM =
'55'.
LV_DMBTR_55 = GT_DATA-DMBTR.
LV_DMBTR = LV_DMBTR_21 + LV_DMBTR_37 + LV_DMBTR_54 + LV_DMBTR_55.

* CLEAR:LV_HSL00_1,LV_HSL00_2.
* READ TABLE GT_DATA WITH KEY LINE_BC = 79.
* LV_HSL00 = GT_DATA-HSL00.
* READ TABLE GT_DATA WITH KEY LINE_BC = 80.
* LV_HSL00 = LV_HSL00 - GT_DATA-HSL00.
LV_HSL00 = LV_QM - LV_QC.

PERFORM FRM_APPEND_DATA USING
'五、 现金及现金等价物净增加额 ' '56' LV_DMBTR '现金及现金等价物净增加额' '83' LV_HSL00.

*&add备注:其他=经营性应付项目的增加-(2202*+2203*+2201*+2211*+2221*+2241*)(期末数-期间数)
CLEAR:GV_BZ_HSL00.
READ TABLE GT_DATA WITH KEY LINE_BC =
'73'.
GV_BZ_HSL00 = GT_DATA-HSL00.

CLEAR:R_HKONT,R_HKONT[],
LV_HSL00_1.
DEFINE MCR_RANGE .
R_HKONT(3) =
'ICP'.
R_HKONT-LOW = &1.
* R_HKONT-HIGH = &2.
APPEND R_HKONT.
END-OF-DEFINITION.

MCR_RANGE:
'2202*'.
MCR_RANGE:
'2203*'.
MCR_RANGE:
'2201*'.
MCR_RANGE:
'2211*'.
MCR_RANGE:
'2221*'.
MCR_RANGE:
'2241*'.

LOOP AT LT_BSEG_BC WHERE HKONT IN R_HKONT.
LV_HSL00_1 = LV_HSL00_1 + LT_BSEG_BC-DMBTR.
ENDLOOP.
LV_HSL00_1 = LV_HSL00_1 * -1.
GV_BZ_HSL00 = GV_BZ_HSL00 - LV_HSL00_1.

*&条目数
G_LEN = LINES( GT_DATA ).
IF G_LEN EQ 0.
MESSAGE I003 WITH
'没有找到符合条件的数据!'.
STOP.
ELSE.
MESSAGE S003 WITH
'找到数据条目数:' G_LEN.
ENDIF.

ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_ALV_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_OUTPUT .
DATA:LV_COL TYPE I.
DATA:LV_LINES TYPE I.
DATA:LV_GRID_TITLE TYPE LVC_TITLE.
DATA:LW_DATA LIKE GT_DATA.

DEFINE MAR_ADD_FIELDCAT0.
CLEAR WA_FIELDCAT.
LV_COL = LV_COL + 1.
WA_FIELDCAT-FIELDNAME = &1.
WA_FIELDCAT-SELTEXT_L = &2.
WA_FIELDCAT-COL_POS = LV_COL.
WA_FIELDCAT-KEY = &3.
WA_FIELDCAT-JUST = &4.
WA_FIELDCAT-OUTPUTLEN = &5.
WA_FIELDCAT-NO_OUT = &6.
WA_FIELDCAT-EDIT = &7.
WA_FIELDCAT-NO_ZERO = &8.
WA_FIELDCAT-EMPHASIZE = &9.
* WA_FIELDCAT-EDIT_MASK = &9.
*WA_FIELDCAT-DO_SUM = &8.
*WA_FIELDCAT-NO_ZERO = &9.
*WA_FIELDCAT-EDIT_MASK = &10.
*WA_FIELDCAT-EMPHASIZE = &10.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION.

*BREAK ABAP30.
*&->start add by ABAP30 on 20160414 现金流量表 项目栏与补充资料最后一个项目不等时报错-B315
LOOP AT GT_DATA WHERE LINE_XM =
'56'.
READ TABLE GT_DATA INTO LW_DATA WITH KEY LINE_BC =
'83'.
IF GT_DATA-DMBTR NE LW_DATA-HSL00.
MESSAGE I003 WITH
'报表不平!'.
* CONTINUE.
ENDIF.
ENDLOOP.
*&->end add.

*&设定输出格式:
CLEAR GS_LAYOUT.
MOVE:
'X' TO GS_LAYOUT-ZEBRA,
'X' TO GS_LAYOUT-COLWIDTH_OPTIMIZE,
'X' TO GS_LAYOUT-DETAIL_POPUP.
GS_LAYOUT-BOX_FIELDNAME =
'SEL'.
GS_LAYOUT-INFO_FIELDNAME =
'ROWCOLOR'.
*GS_LAYOUT-LIGHTS_FIELDNAME =
'ICON'.

CLEAR:WA_FIELDCAT,GT_FIELDCAT[].

MAR_ADD_FIELDCAT0 :"
'LIN' '序号' '' '' '' '' '' '' 'C110' ,

'TEXT_XM' '项目' '' '' '' '' '' '' '' ,
'LINE_XM' '行次' '' '' '' '' '' '' '' ,
'DMBTR' '金额' '' '' '' '' '' '' '',
'TEXT_BC' '补充资料' '' '' '' '' '' '' '' ,
'LINE_BC' '行次' '' '' '' '' '' '' '' ,
'HSL00' '金额' '' '' '' '' '' '' '' .

CALL FUNCTION
'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_PF_STATUS_SET =
'SET_PF_STATUS' "设定菜单栏
I_CALLBACK_USER_COMMAND =
'USER_COMMAND' "设定对应菜单项及相应事件功能:如双击、保存等
I_SAVE =
'A'
IS_LAYOUT = GS_LAYOUT "输出布局设置
IT_FIELDCAT = GT_FIELDCAT "输出字段列信息内表
I_CALLBACK_HTML_TOP_OF_PAGE =
'HTML_TOP_OF_PAGE'
* I_CALLBACK_HTML_END_OF_LIST =
'HTML_END_OF_PAGE'
I_HTML_HEIGHT_TOP = 26
I_HTML_HEIGHT_END = 8
TABLES
T_OUTTAB = GT_DATA. "需显示的数据内表

* IF P_3000 NE
'X'.
* CALL FUNCTION
'REUSE_ALV_LIST_DISPLAY'
* EXPORTING
* I_CALLBACK_PROGRAM = SY-CPROG" SY-REPID
* I_CALLBACK_PF_STATUS_SET =
'SET_PF_STATUS'
* I_CALLBACK_USER_COMMAND =
'USER_COMMAND'
* I_SAVE =
'A'
* IS_LAYOUT = GS_LAYOUT "输出布局设置
* IT_FIELDCAT = GT_FIELDCAT "输出字段列信息内表
** I_SCREEN_START_COLUMN =
'Report'
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_START_LINE = 0
** I_SCREEN_END_LINE =
'10000'
** IR_SALV_LIST_ADAPTER =
'TEST'
** I_CALLBACK_HTML_TOP_OF_PAGE =
'ALV_TOP_OF_PAGE' "list ->没有这个参数
** I_HTML_HEIGHT_TOP = 20
* TABLES
* T_OUTTAB = GT_DATA. "需显示的数据内表
* ELSE.
* ENDIF.

ENDFORM. " FRM_ALV_OUTPUT
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD .
DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID,
MYINDEX TYPE SY-TABIX.
* CALL FUNCTION
'GET_GLOBALS_FROM_SLVC_FULLSCR'
* IMPORTING
* E_GRID = LR_GRID.
* CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
* RS_SELFIELD-REFRESH =
'X'.

CASE R_UCOMM.
WHEN
'&PRSO'.
PERFORM PRINTDATA.
ENDCASE.
CLEAR R_UCOMM.


ENDFORM. "alv_user_command
*&---------------------------------------------------------------------*
*& Form SET_PF_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->EXTAB text
*----------------------------------------------------------------------*
FORM SET_PF_STATUS USING EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS
'Z_F103_01'.
ENDFORM. "SET_PF
*&---------------------------------------------------------------------*
*& Form html_top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->DOCUMENT text
*----------------------------------------------------------------------*
FORM HTML_TOP_OF_PAGE USING DOCUMENT TYPE REF TO CL_DD_DOCUMENT.
DATA: TEXT TYPE SDYDO_TEXT_ELEMENT.
DATA: S_CONTENTS TYPE STRING.
DATA: POSITION TYPE I.
DATA: C_MONTH TYPE CHAR3.

SEARCH DOCUMENT->HTML_TABLE FOR DOCUMENT->CURSOR.
IF SY-SUBRC EQ 0.
POSITION = SY-TABIX.
*&H1.东莞添威电子制品有限公司
TEXT =
'东莞添威电子制品有限公司'.
CONCATENATE
'<span align="center" style=" font-weight:bold;"><H3>' TEXT '</H3></span> </DIV>' INTO S_CONTENTS.
CALL METHOD DOCUMENT->HTML_INSERT
EXPORTING
CONTENTS
= '<div class=MsoNormal align=center style="text-align:center"> '
CHANGING
POSITION = POSITION.
CALL METHOD DOCUMENT->HTML_INSERT
EXPORTING
CONTENTS
= S_CONTENTS
CHANGING
POSITION = POSITION.
ENDIF.

CALL METHOD DOCUMENT->NEW_LINE.

*&H2.现金流量表
TEXT = '现金流量表 会企03表'.
CONCATENATE '<span align="center" style=" font-weight:bold;"><H4>' TEXT '</H4></span> </DIV>' INTO S_CONTENTS.
CALL METHOD DOCUMENT->HTML_INSERT
EXPORTING
CONTENTS
= '<div class=MsoNormal align=center style="text-align:center"> '
CHANGING
POSITION = POSITION.
CALL METHOD DOCUMENT->HTML_INSERT
EXPORTING
CONTENTS
= S_CONTENTS
CHANGING
POSITION = POSITION.

*&H3.P_GJAHR年度
CONCATENATE P_GJAHR '年度' S_MONAT-LOW '月-' S_MONAT-HIGH '月 单位:元' INTO TEXT.
CONCATENATE '<span align="center" style=" font-weight:bold;"><H5>' TEXT '</H5></span> </DIV>' INTO S_CONTENTS.
CALL METHOD DOCUMENT->HTML_INSERT
EXPORTING
CONTENTS
= '<div class=MsoNormal align=center style="text-align:center"> '
CHANGING
POSITION = POSITION.
CALL METHOD DOCUMENT->HTML_INSERT
EXPORTING
CONTENTS
= S_CONTENTS
CHANGING
POSITION = POSITION.

**&H3.年度
*
CALL METHOD DOCUMENT->ADD_GAP
*
EXPORTING
*
WIDTH = 30.
*
CONCATENATE P_GJAHR '年度' INTO TEXT.
*
CALL METHOD DOCUMENT->ADD_TEXT
*
EXPORTING
*
TEXT = TEXT
*
SAP_EMPHASIS = 'Strong'.
*
*
CALL METHOD DOCUMENT->ADD_GAP
*
EXPORTING
*
WIDTH = 30.
*
TEXT = '单位:元'.
*
CALL METHOD DOCUMENT->ADD_TEXT
*
EXPORTING
*
TEXT = TEXT
*
SAP_EMPHASIS = 'Strong'.

* CONCATENATE P_GJAHR '年' C_MONTH '月' INTO TEXT.
*
CALL METHOD DOCUMENT->ADD_TEXT
*
EXPORTING
*
TEXT = TEXT
*
SAP_EMPHASIS = 'Strong'.
*
*
CALL METHOD DOCUMENT->ADD_GAP
*
EXPORTING
*
WIDTH = 13.
*
*
TEXT = '单位:元'.
*
CALL METHOD DOCUMENT->ADD_TEXT
*
EXPORTING
*
TEXT = TEXT
*
SAP_EMPHASIS = ''.
*
*
CALL METHOD DOCUMENT->UNDERLINE. "Draw an underLine
ENDFORM. "HTML_TOP_OF_PAGE
*
&---------------------------------------------------------------------*
*
& Form html_top_of_page
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
-->DOCUMENT text
*
----------------------------------------------------------------------*
FORM HTML_END_OF_PAGE USING DOCUMENT TYPE REF TO CL_DD_DOCUMENT.
DATA: TEXT TYPE SDYDO_TEXT_ELEMENT,
TEXT_1
TYPE SDYDO_TEXT_ELEMENT.
DATA: S_CONTENTS TYPE STRING.
DATA: POSITION TYPE I.
DATA: LV_BZ_HSL00 LIKE FAGLFLEXT-HSL01.
DATA: LV_JINE TYPE STRING.

*BREAK ABAP30.
CLEAR:LV_JINE.
LV_JINE
= GV_BZ_HSL00.
IF LV_JINE IS NOT INITIAL.
TEXT_1
= LV_JINE.
ELSE.
TEXT_1
= '0.00'.
ENDIF.

IF TEXT_1 CS '-'.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
VALUE
= TEXT_1
EXCEPTIONS
OTHERS
= 1.
ENDIF.

CONCATENATE '备注:其他 = ' TEXT INTO TEXT SEPARATED BY SPACE.
* TEXT = '备注:其他=经营性应付项目的增加-(2202*+2203*+2201*+2211*+2221*+2241*)(期末数-期间数)'.
CALL METHOD DOCUMENT->ADD_TEXT
EXPORTING
TEXT = TEXT
SAP_EMPHASIS
= ''.

CALL METHOD DOCUMENT->ADD_TEXT
EXPORTING
TEXT = TEXT_1
SAP_EMPHASIS
= ''.

ENDFORM. "HTML_END_OF_PAGE

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


ENDFORM. " FRM_INIT_DATA
*
&---------------------------------------------------------------------*
*
& Form FRM_APPEND_DATA
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
-->P_0399 text
*
-->P_0400 text
*
-->P_0401 text
*
-->P_0402 text
*
-->P_0403 text
*
-->P_0404 text
*
GT_DATA-TEXT_XM = '一、经营活动产生的现金流量:'.
*
GT_DATA-LINE_XM = ''.
*
GT_DATA-DMBTR = ''.
*
GT_DATA-TEXT_BC = '1、将净利润调节为经营活动现金流量 '.
*
GT_DATA-LINE_BC = ''.
*
GT_DATA-HSL00 = ''.
*
----------------------------------------------------------------------*
FORM FRM_APPEND_DATA USING VALUE(TEXT_XM)
VALUE(LINE_XM)
VALUE(DMBTR)
VALUE(TEXT_BC)
VALUE(LINE_BC)
VALUE(HSL00).

GT_DATA
-TEXT_XM = TEXT_XM.
GT_DATA
-LINE_XM = LINE_XM.
GT_DATA
-DMBTR = DMBTR.
GT_DATA
-TEXT_BC = TEXT_BC.
GT_DATA
-LINE_BC = LINE_BC.
GT_DATA
-HSL00 = HSL00.
APPEND GT_DATA.
CLEAR:GT_DATA.

ENDFORM. " FRM_APPEND_DATA
*
&---------------------------------------------------------------------*
*
& Form FRM_GET_1000
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM FRM_GET_1000 .
*&取1000公司代码数据 FAGLFLEXT
DATA: L_NAME TYPE CHAR13,
L_NAME2
TYPE CHAR13,
L_YEAR
TYPE CHAR13,
L_YEAR2
TYPE CHAR13,
L_1
LIKE P_MONAT,
L_2
LIKE P_MONAT.
DATA: LT_ZFI030 LIKE ZFI030 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF LT_ITAC OCCURS 0,
ZZSUM
LIKE ZFI030-ZZSUM,
ZZNUMB
LIKE ZFI030-ZZNUMB,
DMBTR
LIKE FAGLFLEXT-HSLVT,
END OF LT_ITAC.
DATA: LT_TAB1 LIKE LT_ITAC OCCURS 0 WITH HEADER LINE,
LT_TAB2
LIKE LT_ITAC OCCURS 0 WITH HEADER LINE,
LT_TAB3
LIKE LT_ITAC OCCURS 0 WITH HEADER LINE,
LT_TAB4
LIKE LT_ITAC OCCURS 0 WITH HEADER LINE.
DATA: L_DMBTR1 LIKE FAGLFLEXT-HSLVT,
L_DMBTR2
LIKE FAGLFLEXT-HSLVT,
L_DMBTR3
LIKE FAGLFLEXT-HSLVT.
DATA: L_WRBTR LIKE FAGLFLEXT-HSLVT.
DATA: L_DMBTR(15) TYPE P DECIMALS 5.
DATA: FLD_NAME TYPE CHAR20.
FIELD-SYMBOLS: <FLD_VALUE> TYPE ANY.
FIELD-SYMBOLS: <FLD_VALUE_S> TYPE ANY.
FIELD-SYMBOLS: <FLD_VALUE_H> TYPE ANY.
DATA:LT_C1_002 LIKE TABLE OF GT_TAB WITH HEADER LINE,
LT_C5_002
LIKE TABLE OF GT_TAB WITH HEADER LINE,
LT_C5_003
LIKE TABLE OF GT_TAB WITH HEADER LINE.

DATA:LT_ZFIT103 LIKE TABLE OF ZFIT103 WITH HEADER LINE.
DATA:BEGIN OF LT_BSIS OCCURS 0,
BUKRS
LIKE BSIS-BUKRS,
BELNR
LIKE BSIS-BELNR,
GJAHR
LIKE BSIS-GJAHR,
BUZEI
LIKE BSIS-BUZEI,
HKONT
LIKE BSIS-HKONT,
MONAT
LIKE BSIS-MONAT,
SHKZG
LIKE BSIS-SHKZG,"借贷方(S(+) H(-))
DMBTR LIKE BSIS-DMBTR,"项目金额-BSEG
END OF LT_BSIS.
DATA:BEGIN OF LT_BSIS_S OCCURS 0,
MONAT
LIKE BSIS-MONAT,
SHKZG
LIKE BSIS-SHKZG,"借贷方(S(+) H(-))
DMBTR LIKE BSIS-DMBTR,"项目金额-BSEG
END OF LT_BSIS_S.
DATA:LT_BSIS_L LIKE TABLE OF LT_BSIS_S WITH HEADER LINE.
DATA:BEGIN OF LT_BSEG OCCURS 0,
BUKRS
LIKE BSEG-BUKRS,
BELNR
LIKE BSEG-BELNR,
BUZEI
LIKE BSEG-BUZEI,
GJAHR
LIKE BSEG-GJAHR,"会计年度
RSTGR LIKE BSEG-RSTGR,"原因代码
HKONT LIKE BSEG-HKONT,"科目
SHKZG LIKE BSEG-SHKZG,"借贷方(S(+) H(-))
DMBTR LIKE BSEG-DMBTR,"项目金额-BSEG
END OF LT_BSEG.
RANGES:R_KUNNR FOR KNA1-KUNNR.
RANGES:R_LIFNR FOR LFA1-LIFNR.
RANGES:R_HKONT1 FOR BSEG-HKONT,
R_HKONT2
FOR BSEG-HKONT,
R_HKONT3
FOR BSEG-HKONT,
R_HKONT4
FOR BSEG-HKONT.

CLEAR:R_HKONT1,R_HKONT1[].
R_HKONT1(
3) = 'IBT'.
R_HKONT1
-LOW = '0060000000'.
R_HKONT1
-HIGH = '0069999999'.
APPEND R_HKONT1.

CLEAR:R_HKONT2,R_HKONT2[].
R_HKONT2(
3) = 'IBT'.
R_HKONT2
-LOW = '0068010000'.
R_HKONT2
-HIGH = '0068019999'.
APPEND R_HKONT2.

*BREAK ABAP30.
*
&S1.取1000版本数据 GT_1000
SELECT ZZNUMB ZZTEXT ZZSUM ZZTXPE
FROM ZFI030_TEXT
INTO TABLE GT_1000
WHERE ZZTYPE = 'C'.
SORT GT_1000 BY ZZNUMB.

*&S2.取现金流量表对应科目(ZFI030)
SELECT *
FROM ZFI030
INTO CORRESPONDING FIELDS OF TABLE LT_ZFI030
WHERE ZZTYPE = 'C'.

*&B1.不可删除重复
*
SORT LT_ZFI030 BY HKONT.
*
DELETE ADJACENT DUPLICATES FROM LT_ZFI030 COMPARING HKONT.
IF LT_ZFI030[] IS NOT INITIAL.
*&取T表所有数据
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_FAGT
FROM FAGLFLEXT
WHERE RBUKRS = P_BUKRS
AND RYEAR = P_GJAHR
AND RRCTY = '0'.
SORT GT_FAGT BY RACCT.
ENDIF.

DATA:LT_C7_001 LIKE TABLE OF GT_TAB WITH HEADER LINE,
LT_C7_001_SUM
LIKE TABLE OF GT_TAB WITH HEADER LINE.
DATA:LV_GJAHR LIKE P_GJAHR.
*&A13.C7-001 期初余额,本年累计的期初余额为上年期末余额
*
& 取HSL01 为上年12月的值
LV_GJAHR = P_GJAHR."change by baiyuzhuang
CLEAR:LT_C7_001, LT_C7_001[].
SELECT *
INTO CORRESPONDING FIELDS OF TABLE LT_C7_001
FROM FAGLFLEXT AS A
JOIN ZFI030 AS B
ON A~RACCT EQ B~HKONT
WHERE RBUKRS = P_BUKRS
AND RYEAR = LV_GJAHR
AND RRCTY = '0'
AND ZZNUMB = 'C7-001'."add by baiyuzhuang
IF SY-SUBRC EQ 0.
LOOP AT LT_C7_001.
MOVE-CORRESPONDING LT_C7_001 TO LT_C7_001_SUM.
LT_C7_001_SUM
-ZZNUMB = 'C7-001'.
CLEAR : LT_C7_001_SUM-HKONT.
COLLECT LT_C7_001_SUM.
CLEAR LT_C7_001_SUM.
ENDLOOP.
ENDIF.
LV_GJAHR
= P_GJAHR - 1.

*&S4.得到 1-12期间的余额,
LOOP AT GT_FAGT.
*&A1.C1-002【Profit before income tax expense】取数逻辑:(60000000到69999999加总)-(68010000到68019999的加总)
*
& 计算 C1-002 栏位的值,
IF GT_FAGT-RACCT IN R_HKONT1.
IF GT_FAGT-RACCT IN R_HKONT2.
*&排除科目(68010000到68019999的加总)
ELSE.
MOVE-CORRESPONDING GT_FAGT TO LT_C1_002.
LT_C1_002
-HSL01_Y = LT_C1_002-HSL01 + LT_C1_002-HSL02 + LT_C1_002-HSL03 + LT_C1_002-HSL04
+ LT_C1_002-HSL05 + LT_C1_002-HSL06 + LT_C1_002-HSL07 + LT_C1_002-HSL08
+ LT_C1_002-HSL09 + LT_C1_002-HSL10 + LT_C1_002-HSL11 + LT_C1_002-HSL12.
CLEAR:LT_C1_002-ZZSUM,LT_C1_002-ZZNUMB,LT_C1_002-HKONT.
LT_C1_002
-ZZNUMB = 'C1-002'.
COLLECT LT_C1_002.
CLEAR LT_C1_002.
ENDIF.
ENDIF.

*&E7.C5-002 增加借款(贷方金额)2501* ‘H’条目汇总
*
& 20151117‘H’贷方金额且贷方金额为正,要(*-1)
IF GT_FAGT-RACCT(6) = '002501' AND GT_FAGT-DRCRK = 'H'.
MOVE-CORRESPONDING GT_FAGT TO LT_C5_002.
LT_C5_002
-ZZNUMB = 'C5-002'.
LT_C5_002
-HSL01_Y = GT_FAGT-HSL01 + GT_FAGT-HSL02 + GT_FAGT-HSL03 + GT_FAGT-HSL04
+ GT_FAGT-HSL05 + GT_FAGT-HSL06 + GT_FAGT-HSL07 + GT_FAGT-HSL08
+ GT_FAGT-HSL09 + GT_FAGT-HSL10 + GT_FAGT-HSL11 + GT_FAGT-HSL12.
COLLECT LT_C5_002.
CLEAR LT_C5_002.
ENDIF.
*&>E8.C5-003 -还款金额(借方金额)2501* ‘S’条目汇总
IF GT_FAGT-RACCT(6) = '002501' AND GT_FAGT-DRCRK = 'S'.
MOVE-CORRESPONDING GT_FAGT TO LT_C5_003.
LT_C5_003
-ZZNUMB = 'C5-003'.
LT_C5_003
-HSL01_Y = GT_FAGT-HSL01 + GT_FAGT-HSL02 + GT_FAGT-HSL03 + GT_FAGT-HSL04
+ GT_FAGT-HSL05 + GT_FAGT-HSL06 + GT_FAGT-HSL07 + GT_FAGT-HSL08
+ GT_FAGT-HSL09 + GT_FAGT-HSL10 + GT_FAGT-HSL11 + GT_FAGT-HSL12.
COLLECT LT_C5_003.
CLEAR LT_C5_003.
ENDIF.

*&S4.1读取科目对应的余额,/期初结转/当年累积/分月余额,
LOOP AT LT_ZFI030 WHERE HKONT = GT_FAGT-RACCT AND ZZNUMB NE 'C5-003'.
*READ TABLE LT_ZFI030 WITH KEY HKONT = GT_FAGT-RACCT.
*
IF SY-SUBRC EQ 0.
GT_TAB-ZZSUM = LT_ZFI030-ZZSUM. "汇总栏位
GT_TAB-ZZNUMB = LT_ZFI030-ZZNUMB."栏位编号
GT_TAB-HKONT = GT_FAGT-RACCT. "总账科目
*
&S4.2本年累计
GT_TAB-HSL01_Y = GT_FAGT-HSL01 + GT_FAGT-HSL02 + GT_FAGT-HSL03 + GT_FAGT-HSL04
+ GT_FAGT-HSL05 + GT_FAGT-HSL06 + GT_FAGT-HSL07 + GT_FAGT-HSL08
+ GT_FAGT-HSL09 + GT_FAGT-HSL10 + GT_FAGT-HSL11 + GT_FAGT-HSL12.
*&S4.3用本币计算的结转余额
GT_TAB-HSLVT = GT_FAGT-HSLVT.
GT_TAB
-HSL01 = GT_FAGT-HSL01.
GT_TAB
-HSL02 = GT_FAGT-HSL02.
GT_TAB
-HSL03 = GT_FAGT-HSL03.
GT_TAB
-HSL04 = GT_FAGT-HSL04.
GT_TAB
-HSL05 = GT_FAGT-HSL05.
GT_TAB
-HSL06 = GT_FAGT-HSL06.
GT_TAB
-HSL07 = GT_FAGT-HSL07.
GT_TAB
-HSL08 = GT_FAGT-HSL08.
GT_TAB
-HSL09 = GT_FAGT-HSL09.
GT_TAB
-HSL10 = GT_FAGT-HSL10.
GT_TAB
-HSL11 = GT_FAGT-HSL11.
GT_TAB
-HSL12 = GT_FAGT-HSL12.
* ELSE.
*
MOVE-CORRESPONDING GT_FAGT TO GT_TAB.
*
GT_TAB-HKONT = GT_FAGT-RACCT. "总账科目
*
GT_TAB-HSL01_Y = GT_FAGT-HSL01 + GT_FAGT-HSL02 + GT_FAGT-HSL03 + GT_FAGT-HSL04
*
+ GT_FAGT-HSL05 + GT_FAGT-HSL06 + GT_FAGT-HSL07 + GT_FAGT-HSL08
*
+ GT_FAGT-HSL09 + GT_FAGT-HSL10 + GT_FAGT-HSL11 + GT_FAGT-HSL12.
COLLECT GT_TAB.
CLEAR:GT_TAB,LT_ZFI030.
* ENDIF
.
ENDLOOP.
CLEAR:GT_FAGT.
ENDLOOP.
SORT GT_TAB BY ZZSUM ZZNUMB.

CLEAR:GT_SUM_C,GT_SUM_C[],
GT_SUM_S,GT_SUM_S[].
*&change on 2015119 更改汇总方式
*
&S5.根据栏位编码汇总金额
LOOP AT GT_TAB.

MOVE-CORRESPONDING GT_TAB TO GT_SUM_C.
"add by abap20 20151120

CLEAR:GT_SUM_C-ZZSUM, GT_SUM_C-HKONT.
COLLECT GT_SUM_C.
CLEAR GT_SUM_C.

MOVE-CORRESPONDING GT_TAB TO GT_SUM_S.
"add by abap20 20151120
IF GT_SUM_S-ZZNUMB = 'C1-006'OR GT_SUM_S-ZZNUMB = 'C1-007'OR GT_SUM_S-ZZNUMB = 'C4-004'
OR GT_SUM_S-ZZNUMB = 'C2-001' OR GT_SUM_S-ZZNUMB = 'C2-003' OR GT_SUM_S-ZZNUMB = 'C2-006'
OR GT_SUM_S-ZZNUMB = 'C3-001' OR GT_SUM_S-ZZNUMB = 'C3-002'
OR GT_SUM_S-ZZNUMB = 'C4-002'
OR GT_SUM_S-ZZNUMB = 'C5-005'
.
GT_SUM_S
-HSL01_Y = GT_SUM_S-HSL01_Y * -1.
GT_SUM_S
-HSLVT = GT_SUM_S-HSLVT * -1.
GT_SUM_S
-HSL01 = GT_SUM_S-HSL01 * -1.
GT_SUM_S
-HSL02 = GT_SUM_S-HSL02 * -1.
GT_SUM_S
-HSL03 = GT_SUM_S-HSL03 * -1.
GT_SUM_S
-HSL04 = GT_SUM_S-HSL04 * -1.
GT_SUM_S
-HSL05 = GT_SUM_S-HSL05 * -1.
GT_SUM_S
-HSL06 = GT_SUM_S-HSL06 * -1.
GT_SUM_S
-HSL07 = GT_SUM_S-HSL07 * -1.
GT_SUM_S
-HSL08 = GT_SUM_S-HSL08 * -1.
GT_SUM_S
-HSL09 = GT_SUM_S-HSL09 * -1.
GT_SUM_S
-HSL10 = GT_SUM_S-HSL10 * -1.
GT_SUM_S
-HSL11 = GT_SUM_S-HSL11 * -1.
GT_SUM_S
-HSL12 = GT_SUM_S-HSL12 * -1.
ENDIF.
"end add
CLEAR:GT_SUM_S-ZZNUMB, GT_SUM_S-HKONT.
COLLECT GT_SUM_S.
CLEAR GT_SUM_S.

**&A1.C1-002【Profit before income tax expense】取数逻辑:(60000000到69999999加总)-(68010000到68019999的加总)
*
*& 计算 C1-002 栏位的值,
*
IF GT_TAB-HKONT IN R_HKONT1.
*
IF GT_TAB-HKONT IN R_HKONT2.
*
*&排除科目(68010000到68019999的加总)
*
ELSE.
*
MOVE-CORRESPONDING GT_TAB TO LT_C1_002.
*
CLEAR:LT_C1_002-ZZSUM,LT_C1_002-ZZNUMB,LT_C1_002-HKONT.
*
LT_C1_002-ZZNUMB = 'C1-002'.
*
COLLECT LT_C1_002.
*
CLEAR LT_C1_002.
*
ENDIF.
*
ENDIF.
ENDLOOP.

*BREAK ABAP30.
*
*&A.C2-004 1122*(针对部分客户)* (-1)
*
*&计算C2-004 栏位值
CLEAR:LT_ZFIT103,LT_ZFIT103[].
SELECT *
INTO TABLE LT_ZFIT103
FROM ZFIT103.

IF SY-SUBRC EQ 0.
LOOP AT LT_ZFIT103 WHERE ZZNUMB EQ 'C2-004'.
R_KUNNR(
3) = 'IEQ'.
R_KUNNR
-LOW = LT_ZFIT103-KUNNR.
APPEND R_KUNNR.
CLEAR R_KUNNR.
ENDLOOP.
**&通过BSIS 索引找BSEG
*
CLEAR:LT_BSIS,LT_BSIS[].
*
SELECT BUKRS BELNR
*
GJAHR BUZEI
*
HKONT MONAT
*
SHKZG DMBTR
*
INTO TABLE LT_BSIS
*
FROM BSIS
*
* FOR ALL ENTRIES IN LT_ZFIT103
*
WHERE BUKRS EQ P_BUKRS
*
AND HKONT LIKE '001122%'
*
AND GJAHR EQ P_GJAHR.
*
"ADD BY ABAP20 20151120 已请未清都取
*
SELECT BUKRS BELNR
*
GJAHR BUZEI
*
HKONT MONAT
*
SHKZG DMBTR
*
APPENDING TABLE LT_BSIS
*
FROM BSAD
*
* FOR ALL ENTRIES IN LT_ZFIT103
*
WHERE BUKRS EQ P_BUKRS
*
AND HKONT LIKE '001122%'
*
AND GJAHR EQ P_GJAHR.
*
"ADD BY ABAP20 20151120
*
SORT LT_BSIS BY BUKRS BELNR GJAHR.
*
DELETE ADJACENT DUPLICATES FROM LT_BSIS COMPARING BUKRS BELNR GJAHR.
*
*
IF SY-SUBRC EQ 0.
*
CLEAR:LT_BSEG,LT_BSEG[].
*
SELECT BUKRS BELNR
*
BUZEI GJAHR
*
RSTGR HKONT
*
SHKZG DMBTR
*
INTO TABLE LT_BSEG
*
FROM BSEG
*
FOR ALL ENTRIES IN LT_BSIS
*
WHERE BUKRS = LT_BSIS-BUKRS
*
AND BELNR = LT_BSIS-BELNR
*
AND GJAHR = LT_BSIS-GJAHR
*
AND KUNNR IN R_KUNNR.
*
SORT LT_BSEG BY BUKRS GJAHR BELNR.
*
*
LOOP AT LT_BSIS.
*
READ TABLE LT_BSEG WITH KEY BUKRS = LT_BSIS-BUKRS
*
GJAHR = LT_BSIS-GJAHR
*
BELNR = LT_BSIS-BELNR BINARY SEARCH.
*
IF SY-SUBRC <> 0.
*
DELETE LT_BSIS.
*
CONTINUE.
*
ENDIF.
*
ENDLOOP.
*
ENDIF.
*
ENDIF.
*
*& 按期间汇总 BSIS 金额
*
CLEAR:LT_BSIS_S,LT_BSIS_S[].
*
LOOP AT LT_BSIS.
*
LT_BSIS_S-MONAT = LT_BSIS-MONAT.
*
IF LT_BSIS-SHKZG = 'H'.
*
LT_BSIS_S-DMBTR = LT_BSIS-DMBTR * -1.
*
ELSE.
*
LT_BSIS_S-DMBTR = LT_BSIS-DMBTR.
*
ENDIF.
*
COLLECT LT_BSIS_S.
*
CLEAR LT_BSIS_S.
*
ENDLOOP.
"ADD BY ABAP20
DATA :LT_KNC1 TYPE TABLE OF KNC1 WITH HEADER LINE.
DATA :LT_KNC1_S TYPE TABLE OF KNC1 WITH HEADER LINE.
SELECT * FROM KNC1 INTO TABLE LT_KNC1 WHERE KUNNR IN R_KUNNR AND GJAHR EQ P_GJAHR AND BUKRS = P_BUKRS.
LOOP AT LT_KNC1.
MOVE LT_KNC1 TO LT_KNC1_S.
LT_KNC1_S
-KUNNR = ''.
LT_KNC1_S
-ERDAT = ''.
LT_KNC1_S
-USNAM = ''.
COLLECT LT_KNC1_S.
CLEAR LT_KNC1_S.
ENDLOOP.
ENDIF.
"END ADD BY ABAP20
*
& A6.C2-007 加 2202* (针对部分供应商)【(Decrease)/increase in amounts due to related companies on trade accounts】
*
& 计算C2-007 栏位值
DATA:LT_USE LIKE TABLE OF LT_BSIS WITH HEADER LINE.
DATA:L_LAST TYPE C,
L_COUNT
TYPE I,
L_NMAX
TYPE I.

LOOP AT LT_ZFIT103 WHERE ZZNUMB EQ 'C2-007'.
R_LIFNR(
3) = 'IEQ'.
R_LIFNR
-LOW = LT_ZFIT103-LIFNR.
APPEND R_LIFNR.
CLEAR R_LIFNR.
ENDLOOP.
LOOP AT LT_ZFI030 WHERE ZZNUMB EQ 'C2-007'.
R_HKONT3(
3) = 'IEQ'.
R_HKONT3
-LOW = LT_ZFI030-HKONT.
APPEND R_HKONT3.
CLEAR R_HKONT3.
ENDLOOP.
LOOP AT LT_ZFI030 WHERE ZZNUMB EQ 'C2-002'.
R_HKONT4(
3) = 'IEQ'.
R_HKONT4
-LOW = LT_ZFI030-HKONT.
APPEND R_HKONT4.
CLEAR R_HKONT4.
ENDLOOP.
"ADD BY ABAP20
DATA :LT_LFC1 TYPE TABLE OF LFC1 WITH HEADER LINE.
DATA :LT_LFC1_S TYPE TABLE OF LFC1 WITH HEADER LINE.
SELECT * FROM LFC1 INTO TABLE LT_LFC1 WHERE LIFNR IN R_LIFNR AND GJAHR EQ P_GJAHR AND BUKRS = P_BUKRS.
LOOP AT LT_LFC1.
MOVE LT_LFC1 TO LT_LFC1_S.
LT_LFC1_S
-LIFNR = ''.
LT_LFC1_S
-ERDAT = ''.
LT_LFC1_S
-USNAM = ''.
COLLECT LT_LFC1_S.
CLEAR LT_LFC1_S.
ENDLOOP.

*
*
CLEAR:LT_BSIS,LT_BSIS[].
*
SELECT BUKRS BELNR
*
GJAHR BUZEI
*
HKONT MONAT
*
SHKZG DMBTR
*
INTO TABLE LT_BSIS
*
FROM BSIS
*
WHERE BUKRS EQ P_BUKRS
*
AND HKONT LIKE '002202%'
*
AND GJAHR EQ P_GJAHR.
*
" ADD BY ABAP20 20151120
*
SELECT BUKRS BELNR
*
GJAHR BUZEI
*
HKONT MONAT
*
SHKZG DMBTR
*
INTO TABLE LT_BSIS
*
FROM BSAD
*
WHERE BUKRS EQ P_BUKRS
*
AND HKONT LIKE '002202%'
*
AND GJAHR EQ P_GJAHR.
*
" ADD BY ABAP20 20151120
*
SORT LT_BSIS BY BUKRS BELNR GJAHR.
*
DELETE ADJACENT DUPLICATES FROM LT_BSIS COMPARING BUKRS BELNR GJAHR.
*
*
CLEAR:LT_USE[],LT_USE.
*
CLEAR:LT_BSEG,LT_BSEG[].
*
* LT_USE[] = LT_BSIS[].
*
LOOP AT LT_BSIS.
*
CLEAR L_LAST.
*
AT LAST.
*
L_LAST = 'X'.
*
ENDAT.
*
*
APPEND LT_BSIS TO LT_USE.
*
ADD 1 TO L_COUNT.
*
*&for all entries 后条目数限制,5000(10000也可以取)
*
IF L_COUNT = 5000 OR L_LAST = 'X'.
*
SELECT BUKRS BELNR
*
BUZEI GJAHR
*
RSTGR HKONT
*
SHKZG DMBTR
*
APPENDING TABLE LT_BSEG
*
FROM BSEG
*
FOR ALL ENTRIES IN LT_BSIS
*
WHERE BUKRS EQ LT_BSIS-BUKRS
*
AND BELNR EQ LT_BSIS-BELNR
*
AND GJAHR EQ LT_BSIS-GJAHR
*
AND LIFNR IN R_LIFNR.
*
REFRESH LT_USE.
*
CLEAR L_COUNT.
*
ENDIF.
*
ENDLOOP.
*
SORT LT_BSEG BY BUKRS GJAHR BELNR.
*
*
LOOP AT LT_BSIS.
*
READ TABLE LT_BSEG WITH KEY BUKRS = LT_BSIS-BUKRS
*
GJAHR = LT_BSIS-GJAHR
*
BELNR = LT_BSIS-BELNR BINARY SEARCH.
*
IF SY-SUBRC <> 0.
*
DELETE LT_BSIS.
*
CONTINUE.
*
ENDIF.
*
ENDLOOP.
*
*
*& 按期间汇总供应商条件下的科目
*
CLEAR:LT_BSIS_L,LT_BSIS_L[].
*
LOOP AT LT_BSIS.
*
LT_BSIS_L-MONAT = LT_BSIS-MONAT.
*
IF LT_BSIS-SHKZG = 'H'.
*
LT_BSIS_L-DMBTR = LT_BSIS-DMBTR * -1.
*
ELSE.
*
LT_BSIS_L-DMBTR = LT_BSIS-DMBTR.
*
ENDIF.
*
COLLECT LT_BSIS_L.
*
CLEAR LT_BSIS_L.
*
ENDLOOP.

*BREAK ABAP30.
*
&S6.读取对应栏位汇总值到显示内表
LOOP AT GT_1000.
GT_1000
-LIN = SY-TABIX.
*&读取编号栏位金额
IF GT_1000-ZZNUMB IS NOT INITIAL AND GT_1000-ZZSUM NE 'C2-002'.
READ TABLE GT_SUM_C WITH KEY ZZNUMB = GT_1000-ZZNUMB.
IF SY-SUBRC EQ 0.
MOVE-CORRESPONDING GT_SUM_C TO GT_1000.
ENDIF.
ENDIF.
*&读取汇总栏位金额
IF GT_1000-ZZSUM IS NOT INITIAL .
READ TABLE GT_SUM_S WITH KEY ZZSUM = GT_1000-ZZSUM.
IF SY-SUBRC EQ 0.

* MOVE-CORRESPONDING GT_SUM_S TO GT_1000.
GT_1000-HSL01_Y = GT_SUM_S-HSL01_Y .
GT_1000
-HSLVT = GT_SUM_S-HSLVT.
GT_1000
-HSL01 = GT_SUM_S-HSL01.
GT_1000
-HSL02 = GT_SUM_S-HSL02.
GT_1000
-HSL03 = GT_SUM_S-HSL03.
GT_1000
-HSL04 = GT_SUM_S-HSL04.
GT_1000
-HSL05 = GT_SUM_S-HSL05.
GT_1000
-HSL06 = GT_SUM_S-HSL06.
GT_1000
-HSL07 = GT_SUM_S-HSL07.
GT_1000
-HSL08 = GT_SUM_S-HSL08.
GT_1000
-HSL09 = GT_SUM_S-HSL09.
GT_1000
-HSL10 = GT_SUM_S-HSL10.
GT_1000
-HSL11 = GT_SUM_S-HSL11.
GT_1000
-HSL12 = GT_SUM_S-HSL12.
IF GT_1000-ZZSUM = 'C2'.


READ TABLE GT_SUM_C WITH KEY ZZNUMB = 'C2-002'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y - GT_SUM_C-HSL01_Y .
GT_1000
-HSLVT = GT_1000-HSLVT - GT_SUM_C-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 - GT_SUM_C-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 - GT_SUM_C-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 - GT_SUM_C-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 - GT_SUM_C-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 - GT_SUM_C-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 - GT_SUM_C-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 - GT_SUM_C-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 - GT_SUM_C-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 - GT_SUM_C-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 - GT_SUM_C-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 - GT_SUM_C-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 - GT_SUM_C-HSL12.
* MOVE-CORRESPONDING GT_SUM_C TO GT_1000.
ENDIF.
READ TABLE GT_SUM_C WITH KEY ZZNUMB = 'C2-005'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y - GT_SUM_C-HSL01_Y .
GT_1000
-HSLVT = GT_1000-HSLVT - GT_SUM_C-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 - GT_SUM_C-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 - GT_SUM_C-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 - GT_SUM_C-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 - GT_SUM_C-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 - GT_SUM_C-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 - GT_SUM_C-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 - GT_SUM_C-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 - GT_SUM_C-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 - GT_SUM_C-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 - GT_SUM_C-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 - GT_SUM_C-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 - GT_SUM_C-HSL12.
* MOVE-CORRESPONDING GT_SUM_C TO GT_1000.
ENDIF.
* READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C2-002'.
*
IF SY-SUBRC EQ 0.
*
GT_1000-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y .
*
GT_1000-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
*
GT_1000-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
*
GT_1000-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
*
GT_1000-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
*
GT_1000-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
*
GT_1000-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
*
GT_1000-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
*
GT_1000-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
*
GT_1000-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
*
GT_1000-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
*
GT_1000-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
*
GT_1000-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
*
GT_1000-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
*
ENDIF.
READ TABLE GT_SUM_C WITH KEY ZZNUMB = 'C2-004'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y - GT_SUM_C-HSL01_Y .
GT_1000
-HSLVT = GT_1000-HSLVT - GT_SUM_C-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 - GT_SUM_C-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 - GT_SUM_C-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 - GT_SUM_C-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 - GT_SUM_C-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 - GT_SUM_C-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 - GT_SUM_C-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 - GT_SUM_C-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 - GT_SUM_C-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 - GT_SUM_C-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 - GT_SUM_C-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 - GT_SUM_C-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 - GT_SUM_C-HSL12.
* MOVE-CORRESPONDING GT_SUM_C TO GT_1000.
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C2-004'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y .
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
ENDIF.
READ TABLE GT_SUM_C WITH KEY ZZNUMB = 'C2-007'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y - GT_SUM_C-HSL01_Y .
GT_1000
-HSLVT = GT_1000-HSLVT - GT_SUM_C-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 - GT_SUM_C-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 - GT_SUM_C-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 - GT_SUM_C-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 - GT_SUM_C-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 - GT_SUM_C-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 - GT_SUM_C-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 - GT_SUM_C-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 - GT_SUM_C-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 - GT_SUM_C-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 - GT_SUM_C-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 - GT_SUM_C-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 - GT_SUM_C-HSL12.
* MOVE-CORRESPONDING GT_SUM_C TO GT_1000.
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C2-007'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y .
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*&>A1.C1-002 (006*加总-6801*)*-1 【Profit before income tax expense】
CASE GT_1000-ZZNUMB.
WHEN
'C1-002'.
READ TABLE LT_C1_002 WITH KEY ZZNUMB = 'C1-002'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = LT_C1_002-HSL01_Y * -1.
GT_1000
-HSLVT = LT_C1_002-HSLVT * -1.
GT_1000
-HSL01 = LT_C1_002-HSL01 * -1.
GT_1000
-HSL02 = LT_C1_002-HSL02 * -1.
GT_1000
-HSL03 = LT_C1_002-HSL03 * -1.
GT_1000
-HSL04 = LT_C1_002-HSL04 * -1.
GT_1000
-HSL05 = LT_C1_002-HSL05 * -1.
GT_1000
-HSL06 = LT_C1_002-HSL06 * -1.
GT_1000
-HSL07 = LT_C1_002-HSL07 * -1.
GT_1000
-HSL08 = LT_C1_002-HSL08 * -1.
GT_1000
-HSL09 = LT_C1_002-HSL09 * -1.
GT_1000
-HSL10 = LT_C1_002-HSL10 * -1.
GT_1000
-HSL11 = LT_C1_002-HSL11 * -1.
GT_1000
-HSL12 = LT_C1_002-HSL12 * -1.

CLEAR LT_C1_002.
ENDIF.

*&>A3.C2-002 科目汇总结果*(-1)-C2-004【 Decrease/(increase) in trade receivables】
*
& 需要后面单独处理
WHEN 'C2-002'.
* GT_1000-HSL01_Y = GT_1000-HSL01_Y * -1.
*
GT_1000-HSLVT = GT_1000-HSLVT * -1.
*
GT_1000-HSL01 = GT_1000-HSL01 * -1.
*
GT_1000-HSL02 = GT_1000-HSL02 * -1.
*
GT_1000-HSL03 = GT_1000-HSL03 * -1.
*
GT_1000-HSL04 = GT_1000-HSL04 * -1.
*
GT_1000-HSL05 = GT_1000-HSL05 * -1.
*
GT_1000-HSL06 = GT_1000-HSL06 * -1.
*
GT_1000-HSL07 = GT_1000-HSL07 * -1.
*
GT_1000-HSL08 = GT_1000-HSL08 * -1.
*
GT_1000-HSL09 = GT_1000-HSL09 * -1.
*
GT_1000-HSL10 = GT_1000-HSL10 * -1.
*
GT_1000-HSL11 = GT_1000-HSL11 * -1.
*
GT_1000-HSL12 = GT_1000-HSL12 * -1.
GT_1000-HSL01_Y = 0.
GT_1000
-HSLVT = 0.
GT_1000
-HSL01 = 0.
GT_1000
-HSL02 = 0.
GT_1000
-HSL03 = 0.
GT_1000
-HSL04 = 0.
GT_1000
-HSL05 = 0.
GT_1000
-HSL06 = 0.
GT_1000
-HSL07 = 0.
GT_1000
-HSL08 = 0.
GT_1000
-HSL09 = 0.
GT_1000
-HSL10 = 0.
GT_1000
-HSL11 = 0.
GT_1000
-HSL12 = 0.
* GT_1000-HSLVT = 0.
*
GT_1000-HSL01_Y = 0 .
LOOP AT GT_FAGT WHERE RACCT IN R_HKONT4.
LT_BSIS_S
-MONAT = 0.
GT_1000
-HSLVT = GT_FAGT-HSLVT + GT_1000-HSLVT.
DO 12 TIMES.
LT_BSIS_S
-MONAT = LT_BSIS_S-MONAT + 1.
CONCATENATE 'HSL' LT_BSIS_S-MONAT INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE GT_FAGT TO <FLD_VALUE_S>.
* CONCATENATE 'UM' LT_BSIS_S-MONAT 'H' INTO FLD_NAME.
*
ASSIGN COMPONENT FLD_NAME OF STRUCTURE LT_LFC1_S TO <FLD_VALUE_H>.
CONCATENATE 'HSL' LT_BSIS_S-MONAT INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE GT_1000 TO <FLD_VALUE>.
IF SY-SUBRC = 0.
<FLD_VALUE> = <FLD_VALUE> + <FLD_VALUE_S> .
ELSE.
STOP.
ENDIF.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + <FLD_VALUE_S>.
ENDDO.
* GT_1000-HSL01 = GT_1000-HSL01 + GT_FAGT-HSL01.
ENDLOOP.
* BREAK ABAP20.
*
&>A4.C2-004 1122*(针对部分客户)* (-1)【Decrease/(increase) in amounts due from related companies on trade accounts】
*
& 针对部分客户,如何处理?
WHEN 'C2-004'.

"MOD BY BAIYUZHUANG
*
LOOP AT LT_BSIS_S.
*
&<FS> 赋值
*
CONCATENATE 'HSL' LT_BSIS_S-MONAT INTO FLD_NAME.
*
ASSIGN COMPONENT FLD_NAME OF STRUCTURE GT_1000 TO <FLD_VALUE>.
*
IF SY-SUBRC = 0.
*
<FLD_VALUE> = LT_BSIS_S-DMBTR.
*
ENDIF.
*
GT_1000-HSL01_Y = GT_1000-HSL01_Y + LT_BSIS_S-DMBTR.
*
CLEAR LT_BSIS_S.
READ TABLE LT_KNC1_S INDEX 1.
IF SY-SUBRC = 0 .
LT_BSIS_S
-MONAT = 0.
DO 12 TIMES.

LT_BSIS_S
-MONAT = LT_BSIS_S-MONAT + 1.
CONCATENATE 'UM' LT_BSIS_S-MONAT 'S' INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE LT_KNC1_S TO <FLD_VALUE_S>.
CONCATENATE 'UM' LT_BSIS_S-MONAT 'H' INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE LT_KNC1_S TO <FLD_VALUE_H>.
CONCATENATE 'HSL' LT_BSIS_S-MONAT INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE GT_1000 TO <FLD_VALUE>.
IF SY-SUBRC = 0.
<FLD_VALUE> = <FLD_VALUE_H> - <FLD_VALUE_S> .
ENDIF.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + <FLD_VALUE>.
* CLEAR LT_BSIS_S.
ENDDO.
ENDIF.

"END BY BAIYUZHUANG
*
ENDLOOP.

*&>A6.C2-007 加 2202* (针对部分供应商)【(Decrease)/increase in amounts due to related companies on trade accounts】
WHEN 'C2-007'.
"BEGIN MOD BY ABAP20
*
LOOP AT LT_BSIS_L.
*
*&<FS> 赋值
*
CONCATENATE 'HSL' LT_BSIS_L-MONAT INTO FLD_NAME.
*
ASSIGN COMPONENT FLD_NAME OF STRUCTURE GT_1000 TO <FLD_VALUE>.
*
IF SY-SUBRC = 0.
*
<FLD_VALUE> = LT_BSIS_L-DMBTR.
*
ENDIF.
*
GT_1000-HSL01_Y = GT_1000-HSL01_Y + LT_BSIS_L-DMBTR.
*
CLEAR LT_BSIS_S.
*
ENDLOOP.

READ TABLE LT_LFC1_S INDEX 1.
IF SY-SUBRC = 0 .
LT_BSIS_S
-MONAT = 0.
DO 12 TIMES.

LT_BSIS_S
-MONAT = LT_BSIS_S-MONAT + 1.
CONCATENATE 'UM' LT_BSIS_S-MONAT 'S' INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE LT_LFC1_S TO <FLD_VALUE_S>.
CONCATENATE 'UM' LT_BSIS_S-MONAT 'H' INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE LT_LFC1_S TO <FLD_VALUE_H>.
CONCATENATE 'HSL' LT_BSIS_S-MONAT INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE GT_1000 TO <FLD_VALUE>.
IF SY-SUBRC = 0.
<FLD_VALUE> = <FLD_VALUE_H> - <FLD_VALUE_S> .
ENDIF.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + <FLD_VALUE>.
* CLEAR LT_BSIS_S.
ENDDO.
ENDIF.
* READ TABLE GT_FAGT WITH KEY
LOOP AT GT_FAGT WHERE RACCT IN R_HKONT3.
LT_BSIS_S
-MONAT = 0.
DO 12 TIMES.
LT_BSIS_S
-MONAT = LT_BSIS_S-MONAT + 1.
CONCATENATE 'HSL' LT_BSIS_S-MONAT INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE GT_FAGT TO <FLD_VALUE_S>.
* CONCATENATE 'UM' LT_BSIS_S-MONAT 'H' INTO FLD_NAME.
*
ASSIGN COMPONENT FLD_NAME OF STRUCTURE LT_LFC1_S TO <FLD_VALUE_H>.
CONCATENATE 'HSL' LT_BSIS_S-MONAT INTO FLD_NAME.
ASSIGN COMPONENT FLD_NAME OF STRUCTURE GT_1000 TO <FLD_VALUE>.
IF SY-SUBRC = 0.
<FLD_VALUE> = <FLD_VALUE> + <FLD_VALUE_S> .
ENDIF.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + <FLD_VALUE_S>.
ENDDO.
ENDLOOP.
*& C2-007本年累计
CLEAR:GT_1000-HSL01_Y.
GT_1000
-HSL01_Y = GT_1000-HSL01 + GT_1000-HSL02 + GT_1000-HSL03 + GT_1000-HSL04
+ GT_1000-HSL05 + GT_1000-HSL06 + GT_1000-HSL07 + GT_1000-HSL08
+ GT_1000-HSL09 + GT_1000-HSL10 + GT_1000-HSL11 + GT_1000-HSL12.
"END BY BAIYUZHUANG
*
&>9.C5-002 增加借款(贷方金额)2501* FAG*A 表 借贷为‘H’
WHEN 'C5-002'.
READ TABLE LT_C5_002 WITH KEY ZZNUMB = 'C5-002'.
IF SY-SUBRC EQ 0.
MOVE-CORRESPONDING LT_C5_002 TO GT_1000.
CLEAR LT_C5_002.
ENDIF.
*&>10.C5-003 -还款金额(借方金额)2501* FAG*A 表 借贷为‘S’
WHEN 'C5-003'.
READ TABLE LT_C5_003 WITH KEY ZZNUMB = 'C5-003'.
IF SY-SUBRC EQ 0.
MOVE-CORRESPONDING LT_C5_003 TO GT_1000.
CLEAR LT_C5_003.
ENDIF.

*&A13.C7-001 期初余额,本年累计的期初余额为上年期末余额
*
&HSL01 为上年12月的值-期末结转值
WHEN 'C7-001'.
READ TABLE GT_SUM_C WITH KEY ZZNUMB = GT_1000-ZZNUMB.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_SUM_C-HSLVT.
READ TABLE LT_C7_001_SUM WITH KEY ZZNUMB = GT_1000-ZZNUMB.
IF SY-SUBRC EQ 0.
* GT_1000-HSL01 = LT_C7_001_SUM-HSL12.
GT_1000-HSL01 = LT_C7_001_SUM-HSLVT.
ENDIF.
GT_1000
-HSL02 = GT_SUM_C-HSL01 + GT_1000-HSL01.
GT_1000
-HSL03 = GT_SUM_C-HSL02 + GT_1000-HSL02.
GT_1000
-HSL04 = GT_SUM_C-HSL03 + GT_1000-HSL03.
GT_1000
-HSL05 = GT_SUM_C-HSL04 + GT_1000-HSL04.
GT_1000
-HSL06 = GT_SUM_C-HSL05 + GT_1000-HSL05.
GT_1000
-HSL07 = GT_SUM_C-HSL06 + GT_1000-HSL06.
GT_1000
-HSL08 = GT_SUM_C-HSL07 + GT_1000-HSL07.
GT_1000
-HSL09 = GT_SUM_C-HSL08 + GT_1000-HSL08.
GT_1000
-HSL10 = GT_SUM_C-HSL09 + GT_1000-HSL09.
GT_1000
-HSL11 = GT_SUM_C-HSL10 + GT_1000-HSL10.
GT_1000
-HSL12 = GT_SUM_C-HSL11 + GT_1000-HSL11.
GT_1000
-HSL01_Y = GT_SUM_C-HSLVT.
CLEAR GT_SUM_C.
ENDIF.
*&C7-001本年累计
*
CLEAR:GT_1000-HSL01_Y.
*
GT_1000-HSL01_Y = GT_1000-HSL01 + GT_1000-HSL02 + GT_1000-HSL03 + GT_1000-HSL04
*
+ GT_1000-HSL05 + GT_1000-HSL06 + GT_1000-HSL07 + GT_1000-HSL08
*
+ GT_1000-HSL09 + GT_1000-HSL10 + GT_1000-HSL11 + GT_1000-HSL12.

*&栏位相加 汇总项……………………………………
*
&>11.C5-007 C5系列加总


WHEN OTHERS.
ENDCASE.

**& * -1 处理
*
*&>A2.C1-004 *(-1)
*
IF GT_1000-ZZNUMB = 'C1-004' OR GT_1000-ZZNUMB = 'C1-006' OR GT_1000-ZZNUMB = 'C1-007'.
"MOD BY BAIYUZHUANG
IF GT_1000-ZZNUMB = 'C1-006'OR GT_1000-ZZNUMB = 'C1-007'"OR GT_1000-ZZNUMB = 'C1-004'
OR GT_1000-ZZNUMB = 'C2-001' OR GT_1000-ZZNUMB = 'C2-003' OR GT_1000-ZZNUMB = 'C2-006'
OR GT_1000-ZZNUMB = 'C3-001' OR GT_1000-ZZNUMB = 'C3-002'
OR GT_1000-ZZNUMB = 'C4-002'
OR GT_1000-ZZNUMB = 'C5-005'.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y * -1.
GT_1000
-HSLVT = GT_1000-HSLVT * -1.
GT_1000
-HSL01 = GT_1000-HSL01 * -1.
GT_1000
-HSL02 = GT_1000-HSL02 * -1.
GT_1000
-HSL03 = GT_1000-HSL03 * -1.
GT_1000
-HSL04 = GT_1000-HSL04 * -1.
GT_1000
-HSL05 = GT_1000-HSL05 * -1.
GT_1000
-HSL06 = GT_1000-HSL06 * -1.
GT_1000
-HSL07 = GT_1000-HSL07 * -1.
GT_1000
-HSL08 = GT_1000-HSL08 * -1.
GT_1000
-HSL09 = GT_1000-HSL09 * -1.
GT_1000
-HSL10 = GT_1000-HSL10 * -1.
GT_1000
-HSL11 = GT_1000-HSL11 * -1.
GT_1000
-HSL12 = GT_1000-HSL12 * -1.
ENDIF.

MODIFY GT_1000.
CLEAR GT_1000.
ENDLOOP.

*BREAK ABAP30.
*
&>add on 20151116
*
&*&S7.特殊栏位处理-需要相加项目的处理:
LOOP AT GT_1000.
*&>A3.C2-002 科目汇总结果*-1-C2-004【 Decrease/(increase) in trade receivables】
CASE GT_1000-ZZNUMB.

*&营运资金变动前的经验利润 C1-011 = 原始汇总 + C1-002.
WHEN 'C1-011'.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C1-002'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.

*&-C2-004 (相减操作) 【科目汇总结果*-1-C2-004】
WHEN 'C2-002'.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C2-004'.
IF SY-SUBRC EQ 0.
* GT_1000-HSL01_Y = GT_1000-HSL01_Y - WA_1000-HSL01_Y.
GT_1000-HSLVT = GT_1000-HSLVT * -1 - WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 * -1 - WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 * -1 - WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 * -1 - WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 * -1 - WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 * -1 - WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 * -1 - WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 * -1 - WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 * -1 - WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 * -1 - WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 * -1 - WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 * -1 - WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 * -1 - WA_1000-HSL12.
CLEAR:GT_1000-HSL01_Y.
GT_1000
-HSL01_Y = GT_1000-HSL01 + GT_1000-HSL02 + GT_1000-HSL03 + GT_1000-HSL04
+ GT_1000-HSL05 + GT_1000-HSL06 + GT_1000-HSL07 + GT_1000-HSL08
+ GT_1000-HSL09 + GT_1000-HSL10 + GT_1000-HSL11 + GT_1000-HSL12.

CLEAR WA_1000.
ENDIF.


*&>A5.C2-005 科目汇总结果*-1-C2-007 【(Decrease)/increase in trade payables】
WHEN 'C2-005'.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C2-007'.
IF SY-SUBRC EQ 0.
* GT_1000-HSL01_Y = GT_1000-HSL01_Y * -1 - WA_1000-HSL01_Y.
GT_1000-HSLVT = GT_1000-HSLVT * -1 - WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 * -1 - WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 * -1 - WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 * -1 - WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 * -1 - WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 * -1 - WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 * -1 - WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 * -1 - WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 * -1 - WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 * -1 - WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 * -1 - WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 * -1 - WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 * -1 - WA_1000-HSL12.
CLEAR:GT_1000-HSL01_Y.
GT_1000
-HSL01_Y = GT_1000-HSL01 + GT_1000-HSL02 + GT_1000-HSL03 + GT_1000-HSL04
+ GT_1000-HSL05 + GT_1000-HSL06 + GT_1000-HSL07 + GT_1000-HSL08
+ GT_1000-HSL09 + GT_1000-HSL10 + GT_1000-HSL11 + GT_1000-HSL12.
CLEAR WA_1000.
ENDIF.

*&>A7.C2-009 原汇总基础上 + 第15项目(C1-011) 【Cash generated from operations】
WHEN 'C2-009'.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C2-002'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C2-005'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C1-011'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
CLEAR:GT_1000-HSL01_Y.
GT_1000
-HSL01_Y = GT_1000-HSL01 + GT_1000-HSL02 + GT_1000-HSL03 + GT_1000-HSL04
+ GT_1000-HSL05 + GT_1000-HSL06 + GT_1000-HSL07 + GT_1000-HSL08
+ GT_1000-HSL09 + GT_1000-HSL10 + GT_1000-HSL11 + GT_1000-HSL12.

*&A 20151119 - C3-001 = C1-005 * -1.
WHEN 'C3-001'.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C1-005'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = WA_1000-HSL01_Y * -1.
GT_1000
-HSLVT = WA_1000-HSLVT * -1.
GT_1000
-HSL01 = WA_1000-HSL01 * -1.
GT_1000
-HSL02 = WA_1000-HSL02 * -1.
GT_1000
-HSL03 = WA_1000-HSL03 * -1.
GT_1000
-HSL04 = WA_1000-HSL04 * -1.
GT_1000
-HSL05 = WA_1000-HSL05 * -1.
GT_1000
-HSL06 = WA_1000-HSL06 * -1.
GT_1000
-HSL07 = WA_1000-HSL07 * -1.
GT_1000
-HSL08 = WA_1000-HSL08 * -1.
GT_1000
-HSL09 = WA_1000-HSL09 * -1.
GT_1000
-HSL10 = WA_1000-HSL10 * -1.
GT_1000
-HSL11 = WA_1000-HSL11 * -1.
GT_1000
-HSL12 = WA_1000-HSL12 * -1.
CLEAR WA_1000.
ENDIF.

*&A 20151119 - C4-001 = C1-004 * -1.
WHEN 'C4-004'.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C1-004'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = WA_1000-HSL01_Y * -1.
GT_1000
-HSLVT = WA_1000-HSLVT * -1.
GT_1000
-HSL01 = WA_1000-HSL01 * -1.
GT_1000
-HSL02 = WA_1000-HSL02 * -1.
GT_1000
-HSL03 = WA_1000-HSL03 * -1.
GT_1000
-HSL04 = WA_1000-HSL04 * -1.
GT_1000
-HSL05 = WA_1000-HSL05 * -1.
GT_1000
-HSL06 = WA_1000-HSL06 * -1.
GT_1000
-HSL07 = WA_1000-HSL07 * -1.
GT_1000
-HSL08 = WA_1000-HSL08 * -1.
GT_1000
-HSL09 = WA_1000-HSL09 * -1.
GT_1000
-HSL10 = WA_1000-HSL10 * -1.
GT_1000
-HSL11 = WA_1000-HSL11 * -1.
GT_1000
-HSL12 = WA_1000-HSL12 * -1.
CLEAR WA_1000.
ENDIF.
*&A 20151119 - C4-007 = C4-004 * c4-007.
WHEN 'C4-007'.
* READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C4-004'.
*
IF SY-SUBRC EQ 0.
*
GT_1000-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
*
GT_1000-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
*
GT_1000-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
*
GT_1000-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
*
GT_1000-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
*
GT_1000-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
*
GT_1000-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
*
GT_1000-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
*
GT_1000-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
*
GT_1000-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
*
GT_1000-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
*
GT_1000-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
*
GT_1000-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
*
GT_1000-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
*
CLEAR WA_1000.
*
ENDIF.
*
&>A8.C3-004 原汇总基础上+第24行(C2-009) 【Net cash flows from/(used in) operating activities】
WHEN 'C3-004'.
"ADD BY ABAP20 没有汇总C3-001
*
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C3-001'.
*
IF SY-SUBRC EQ 0.
*
GT_1000-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
*
GT_1000-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
*
GT_1000-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
*
GT_1000-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
*
GT_1000-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
*
GT_1000-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
*
GT_1000-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
*
GT_1000-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
*
GT_1000-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
*
GT_1000-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
*
GT_1000-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
*
GT_1000-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
*
GT_1000-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
*
GT_1000-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
*
CLEAR WA_1000.
*
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C2-009'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
*&C3004本年累计
CLEAR:GT_1000-HSL01_Y.
GT_1000
-HSL01_Y = GT_1000-HSL01 + GT_1000-HSL02 + GT_1000-HSL03 + GT_1000-HSL04
+ GT_1000-HSL05 + GT_1000-HSL06 + GT_1000-HSL07 + GT_1000-HSL08
+ GT_1000-HSL09 + GT_1000-HSL10 + GT_1000-HSL11 + GT_1000-HSL12.

*&>12.C6-001 28+36+44 (C3-004+C4-007+C5-007)
WHEN 'C6-001'.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C3-004'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C4-007'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C5-007'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
*&C6-001本年累计
CLEAR:GT_1000-HSL01_Y.
GT_1000
-HSL01_Y = GT_1000-HSL01 + GT_1000-HSL02 + GT_1000-HSL03 + GT_1000-HSL04
+ GT_1000-HSL05 + GT_1000-HSL06 + GT_1000-HSL07 + GT_1000-HSL08
+ GT_1000-HSL09 + GT_1000-HSL10 + GT_1000-HSL11 + GT_1000-HSL12.

*&>14.C9-001 46+48+50 (C6-001+C7-001+C8-001)
WHEN 'C9-001'.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C6-001'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C7-001'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
READ TABLE GT_1000 INTO WA_1000 WITH KEY ZZNUMB = 'C8-001'.
IF SY-SUBRC EQ 0.
GT_1000
-HSL01_Y = GT_1000-HSL01_Y + WA_1000-HSL01_Y.
GT_1000
-HSLVT = GT_1000-HSLVT + WA_1000-HSLVT.
GT_1000
-HSL01 = GT_1000-HSL01 + WA_1000-HSL01.
GT_1000
-HSL02 = GT_1000-HSL02 + WA_1000-HSL02.
GT_1000
-HSL03 = GT_1000-HSL03 + WA_1000-HSL03.
GT_1000
-HSL04 = GT_1000-HSL04 + WA_1000-HSL04.
GT_1000
-HSL05 = GT_1000-HSL05 + WA_1000-HSL05.
GT_1000
-HSL06 = GT_1000-HSL06 + WA_1000-HSL06.
GT_1000
-HSL07 = GT_1000-HSL07 + WA_1000-HSL07.
GT_1000
-HSL08 = GT_1000-HSL08 + WA_1000-HSL08.
GT_1000
-HSL09 = GT_1000-HSL09 + WA_1000-HSL09.
GT_1000
-HSL10 = GT_1000-HSL10 + WA_1000-HSL10.
GT_1000
-HSL11 = GT_1000-HSL11 + WA_1000-HSL11.
GT_1000
-HSL12 = GT_1000-HSL12 + WA_1000-HSL12.
CLEAR WA_1000.
ENDIF.
*&C9-001本年累计
*
CLEAR:GT_1000-HSL01_Y.
*
GT_1000-HSL01_Y = GT_1000-HSL01 + GT_1000-HSL02 + GT_1000-HSL03 + GT_1000-HSL04
*
+ GT_1000-HSL05 + GT_1000-HSL06 + GT_1000-HSL07 + GT_1000-HSL08
*
+ GT_1000-HSL09 + GT_1000-HSL10 + GT_1000-HSL11 + GT_1000-HSL12.

WHEN OTHERS.
ENDCASE.

MODIFY GT_1000.
CLEAR GT_1000.
ENDLOOP.

*&条目数
G_LEN = LINES( GT_1000[] ).
IF G_LEN EQ 0.
MESSAGE I003 WITH '没有找到符合条件的数据!'.
STOP.
ELSE.
MESSAGE S003 WITH '找到数据条目数:' G_LEN.
ENDIF.

ENDFORM. " FRM_GET_1000
*
&---------------------------------------------------------------------*
*
& Form FRM_WRITE_OUT
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM FRM_WRITE_OUT.
*DATA:

LOOP AT GT_1000.
*&1.文本
IF GT_1000-ZZTXPE EQ 'X'.
PERFORM FRM_WRITE_TEXT.
ENDIF.
*&2.科目栏位
IF GT_1000-ZZSUM EQ '' AND GT_1000-ZZTXPE EQ ''.
PERFORM FRM_WRITE_ITEM.
ENDIF.

IF GT_1000-ZZSUM CS 'C' AND GT_1000-ZZTXPE IS INITIAL.
* IF GT_1000-ZZSUM EQ 'C1' OR GT_1000-ZZSUM EQ 'C2' OR GT_1000-ZZSUM EQ 'C3'
*
OR GT_1000-ZZSUM EQ 'C4' OR GT_1000-ZZSUM EQ 'C5'.
PERFORM FRM_WRITE_SUM.
ENDIF.

ENDLOOP.

ENDFORM. " FRM_WRITE_OUT
*
&---------------------------------------------------------------------*
*
& Form FRM_WRITE_TEXT
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM FRM_WRITE_TEXT.

WRITE AT:/(80) GT_1000-ZZTEXT LEFT-JUSTIFIED.

ENDFORM. " FRM_WRITE_TEXT
*
&---------------------------------------------------------------------*
*
& Form FRM_WRITE_ITEM
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM FRM_WRITE_ITEM.

WRITE AT:/3(80) GT_1000-ZZTEXT LEFT-JUSTIFIED,
(
3) '',
(
15) GT_1000-HSL01 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL02 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL03 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL04 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL05 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL06 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL07 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL08 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL09 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL10 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL11 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL12 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL01_Y RIGHT-JUSTIFIED.

ENDFORM. " FRM_WRITE_ITEM
*
&---------------------------------------------------------------------*
*
& Form FRM_WRITE_SUM
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM FRM_WRITE_SUM .

WRITE AT:/87(192) SY-ULINE,(15) SY-ULINE. "(15)SY-ULINE, (15)SY-ULINE, (10) SY-ULINE.
WRITE AT:/3(80) GT_1000-ZZTEXT LEFT-JUSTIFIED,
(
3) '',
(
15) GT_1000-HSL01 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL02 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL03 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL04 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL05 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL06 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL07 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL08 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL09 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL10 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL11 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL12 RIGHT-JUSTIFIED,
(
15) GT_1000-HSL01_Y RIGHT-JUSTIFIED.
WRITE AT:/87(192) SY-ULINE,(15) SY-ULINE. "(15)SY-ULINE, (15)SY-ULINE, (10) SY-ULINE.


ENDFORM. " FRM_WRITE_SUM
*
&---------------------------------------------------------------------*
*
& Form FRM_WRITE_TOTAL
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM FRM_WRITE_TOTAL .
* WRITE AT:/3(30) GT_1000-ZZTEXT LEFT-JUSTIFIED,
*
(3) '',
*
(17) GT_1000-HSL01_Y RIGHT-JUSTIFIED,
*
(17) GT_1000-HSL01_N RIGHT-JUSTIFIED.
*
* (17) ITAB-DMBTR1 RIGHT-JUSTIFIED,
*
* (17) ITAB-DMBTR2 RIGHT-JUSTIFIED,
*
* (17) ITAB-DMBTR3 RIGHT-JUSTIFIED,
*
* (10) ITAB-DMBTR4 RIGHT-JUSTIFIED.
*
WRITE AT:/37(17) '=================',
*
(17) '=================',
*
(17) '=================',
*
(10) '================='.
ENDFORM. " FRM_WRITE_TOTAL
*
&---------------------------------------------------------------------*
*
& Form FRM_WRITE_OTHER
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM FRM_WRITE_OTHER .
* WRITE AT:/37(17) SY-ULINE, (17) SY-ULINE, (17) SY-ULINE, (10) SY-ULINE.
*
WRITE AT:/3(30) GT_1000-ZZTEXT LEFT-JUSTIFIED,
*
(3) '',
*
(17) GT_1000-HSL01_Y RIGHT-JUSTIFIED,
*
(17) GT_1000-HSL01_N RIGHT-JUSTIFIED.
*
* (17) ITAB-DMBTR1 RIGHT-JUSTIFIED,
*
* (17) ITAB-DMBTR2 RIGHT-JUSTIFIED,
*
* (17) ITAB-DMBTR3 RIGHT-JUSTIFIED,
*
* (10) ITAB-DMBTR4 RIGHT-JUSTIFIED.
*
WRITE AT:/37(17) '=================',
*
(17) '=================',
*
(17) '=================',
*
(10) '================='.
ENDFORM. " FRM_WRITE_OTHER
*
&---------------------------------------------------------------------*
*
& Form DISPLAY_HEADER
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM DISPLAY_HEADER .
DATA:LV_TEXT TYPE STRING.
DATA: L_TEXT TYPE CHAR80.
DATA: L_YEAR01 TYPE CHAR7,
L_YEAR02
TYPE CHAR7,
L_YEAR03
TYPE CHAR7,
L_YEAR04
TYPE CHAR7,
L_YEAR05
TYPE CHAR7,
L_YEAR06
TYPE CHAR7,
L_YEAR07
TYPE CHAR7,
L_YEAR08
TYPE CHAR7,
L_YEAR09
TYPE CHAR7,
L_YEAR10
TYPE CHAR7,
L_YEAR11
TYPE CHAR7,
L_YEAR12
TYPE CHAR7.

CONCATENATE P_GJAHR '/' '01' INTO L_YEAR01.
CONCATENATE P_GJAHR '/' '02' INTO L_YEAR02.
CONCATENATE P_GJAHR '/' '03' INTO L_YEAR03.
CONCATENATE P_GJAHR '/' '04' INTO L_YEAR04.
CONCATENATE P_GJAHR '/' '05' INTO L_YEAR05.
CONCATENATE P_GJAHR '/' '06' INTO L_YEAR06.
CONCATENATE P_GJAHR '/' '07' INTO L_YEAR07.
CONCATENATE P_GJAHR '/' '08' INTO L_YEAR08.
CONCATENATE P_GJAHR '/' '09' INTO L_YEAR09.
CONCATENATE P_GJAHR '/' '10' INTO L_YEAR10.
CONCATENATE P_GJAHR '/' '11' INTO L_YEAR11.
CONCATENATE P_GJAHR '/' '12' INTO L_YEAR12.


SELECT SINGLE * FROM T001 WHERE BUKRS = P_BUKRS.

CONCATENATE 'From 1st Jan' P_GJAHR 'to Current Month' INTO LV_TEXT.
WRITE AT:/1(20) 'TEAMWISE LIMITED',
/1(16) 'Cash flows -', (20)T001-BUTXT LEFT-JUSTIFIED,
/1(80) LV_TEXT.

CLEAR L_TEXT.
* CONCATENATE 'Y-T-D' P_GJAHR INTO L_TEXT SEPARATED BY SPACE.
L_TEXT = 'Y-T-D'&& P_GJAHR .
WRITE AT:/80(3) T001-WAERS,
(
15) L_YEAR01 RIGHT-JUSTIFIED,
(
15) L_YEAR02 RIGHT-JUSTIFIED,
(
15) L_YEAR03 RIGHT-JUSTIFIED,
(
15) L_YEAR04 RIGHT-JUSTIFIED,
(
15) L_YEAR05 RIGHT-JUSTIFIED,
(
15) L_YEAR06 RIGHT-JUSTIFIED,
(
15) L_YEAR07 RIGHT-JUSTIFIED,
(
15) L_YEAR08 RIGHT-JUSTIFIED,
(
15) L_YEAR09 RIGHT-JUSTIFIED,
(
15) L_YEAR10 RIGHT-JUSTIFIED,
(
15) L_YEAR11 RIGHT-JUSTIFIED,
(
15) L_YEAR12 RIGHT-JUSTIFIED,
(
15) L_TEXT RIGHT-JUSTIFIED.
* (15) 'Last Year' right-justified,
*
(15) 'Diff' right-justified,
*
(10) '%' right-justified.
WRITE AT:/1(297) SY-ULINE.

ENDFORM. " DISPLAY_HEADER
*
&---------------------------------------------------------------------*
*
& Form PRINTDATA
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
FORM PRINTDATA .
DATA: F_INDEX LIKE SY-TABIX.
DATA: LINES_LEN TYPE I.
DATA: LS_CONTROL_PARAMETERS TYPE SSFCTRLOP.
DATA: LS_OUTPUT_OPTIONS TYPE SSFCOMPOP.
DATA: L_SMF_NAME TYPE RS38L_FNAM.
DATA GT_OUT TYPE TABLE OF ZST_F103_3000 WITH HEADER LINE.
DATA GT_PRINT TYPE TABLE OF ZST_F103_3000.
*MOVE-CORRESPONDING GT_DATA[] TO GT_OUT[].
LOOP AT GT_DATA.
MOVE-CORRESPONDING GT_DATA TO GT_OUT.
APPEND GT_OUT TO GT_PRINT.
ENDLOOP.
LS_CONTROL_PARAMETERS
-NO_CLOSE = ''.
LS_CONTROL_PARAMETERS
-NO_DIALOG = ''.
LS_CONTROL_PARAMETERS
-PREVIEW = 'X'.
LS_OUTPUT_OPTIONS
-TDDEST = 'LP01'.
LS_OUTPUT_OPTIONS
-TDIMMED = 'X'.
LS_OUTPUT_OPTIONS
-TDDELETE = 'X'.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' "这个函数主要用来取你要调用的FUNCTION MODULE
EXPORTING
FORMNAME
= 'ZFI103_1000_3000' "将SMARTFORM赋值给FORMNAME
IMPORTING
FM_NAME
= L_SMF_NAME.


LS_CONTROL_PARAMETERS
-NO_CLOSE = SPACE.
CALL FUNCTION L_SMF_NAME "调用SMARTFORM,这里是以FUNCTION的方式和SMARTFORM交互
EXPORTING
CONTROL_PARAMETERS
= LS_CONTROL_PARAMETERS
OUTPUT_OPTIONS
= LS_OUTPUT_OPTIONS
USER_SETTINGS
= 'X'
FLAG
= 'X'
P_GJAHR
= P_GJAHR
MONATL
= S_MONAT-LOW
MONATH
= S_MONAT-HIGH
TABLES
GT_DATA
= GT_PRINT

EXCEPTIONS
FORMATTING_ERROR
= 1
INTERNAL_ERROR
= 2
SEND_ERROR
= 3
USER_CANCELED
= 4
OTHERS
= 5.


IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " PRINTDATA
*
&---------------------------------------------------------------------*
*
& Form FRM_PRINT_DATA
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM FRM_PRINT_DATA .
DATA: F_INDEX LIKE SY-TABIX.
DATA: LINES_LEN TYPE I.
DATA: LS_CONTROL_PARAMETERS TYPE SSFCTRLOP.
DATA: LS_OUTPUT_OPTIONS TYPE SSFCOMPOP.
DATA: L_SMF_NAME TYPE RS38L_FNAM.
DATA GT_OUT TYPE TABLE OF ZST_1000 WITH HEADER LINE.
DATA GT_PRINT TYPE TABLE OF ZST_1000.
*MOVE-CORRESPONDING GT_DATA[] TO GT_OUT[].
LOOP AT GT_1000.

MOVE-CORRESPONDING GT_1000 TO GT_OUT.
* IF GT_1000-ZZNUMB = 'C1-011'.

APPEND GT_OUT TO GT_PRINT.
CLEAR GT_OUT.
IF GT_1000-ZZNUMB = 'C1-011' OR GT_1000-ZZNUMB = 'C2-009' .

* GT_OUT-ZZTEXT = 'X'.
APPEND GT_OUT TO GT_PRINT.
ENDIF.
ENDLOOP.
LS_CONTROL_PARAMETERS
-NO_CLOSE = ''.
LS_CONTROL_PARAMETERS
-NO_DIALOG = ''.
LS_CONTROL_PARAMETERS
-PREVIEW = 'X'.
LS_OUTPUT_OPTIONS
-TDDEST = 'LP01'.
LS_OUTPUT_OPTIONS
-TDIMMED = 'X'.
LS_OUTPUT_OPTIONS
-TDDELETE = 'X'.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' "这个函数主要用来取你要调用的FUNCTION MODULE
EXPORTING
FORMNAME
= 'ZFI103_TH' "将SMARTFORM赋值给FORMNAME
IMPORTING
FM_NAME
= L_SMF_NAME.


LS_CONTROL_PARAMETERS
-NO_CLOSE = SPACE.
CALL FUNCTION L_SMF_NAME "调用SMARTFORM,这里是以FUNCTION的方式和SMARTFORM交互
EXPORTING
CONTROL_PARAMETERS
= LS_CONTROL_PARAMETERS
OUTPUT_OPTIONS
= LS_OUTPUT_OPTIONS
USER_SETTINGS
= 'X'
* FLAG = P_3000
P_GJAHR = P_GJAHR
TABLES
GT_DATA
= GT_PRINT

EXCEPTIONS
FORMATTING_ERROR
= 1
INTERNAL_ERROR
= 2
SEND_ERROR
= 3
USER_CANCELED
= 4
OTHERS
= 5.


IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " FRM_PRINT_DATA
*
&---------------------------------------------------------------------*
*
& Form FRM_EXCEL_OUT
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
FORM FRM_EXCEL_OUT .

INCLUDE OLE2INCL.
*定义OLE变量
DATA:EXCEL TYPE OLE2_OBJECT,
SHEET
TYPE OLE2_OBJECT,
CELL
TYPE OLE2_OBJECT,
WORKBOOK
TYPE OLE2_OBJECT.
FIELD-SYMBOLS :<FS_01> TYPE ANY .
DATA:VAL1(20) TYPE C.
DATA:VAL2(80) TYPE C.
DATA: R1 TYPE I,
R2
TYPE I.
DATA P_MONTH TYPE T54C6-SMONT .
*输入文件名参数
*

*启动excel
CREATE OBJECT EXCEL 'EXCEL.APPLICATION'.

IF SY-SUBRC NE 0 .
WRITE: / ''.
STOP.
ENDIF.

CALL METHOD OF
EXCEL
'WORKBOOKS' = WORKBOOK.
*使excel 可视
SET PROPERTY OF EXCEL 'VISIBLE' = 1.

*建立worksheet
SET PROPERTY OF EXCEL 'SHEETSINNEWWORKBOOK' = 1. "如果是读取excel文件中的内容 则是直接打开工作簿第一页
CALL METHOD OF WORKBOOK 'ADD'. " 例如:CALL METHOD OF EXCEL 'WORKSHEETS' = SHEET EXPORTING #1 = 1.
*
写前1行1列
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#
1 = 1
#
2 = 1.
SET PROPERTY OF CELL 'VALUE' = SY-DATUM.
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#
1 = 2
#
2 = 1.
SET PROPERTY OF CELL 'VALUE' = 'TEAMWISE LIMITED'.
VAL2
= 'Cash flows -' && T001-BUTXT.
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#
1 = 3
#
2 = 1.
SET PROPERTY OF CELL 'VALUE' = VAL2.
VAL2
= 'From 1st Jan'&& P_GJAHR &&'to Current Month'.
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#
1 = 4
#
2 = 1.
SET PROPERTY OF CELL 'VALUE' = VAL2.
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#
1 = 5
#
2 = 1.
SET PROPERTY OF CELL 'VALUE' = 'HKD'.
DO 14 TIMES.
R1
= SY-INDEX.
IF R1 = 1.
VAL1
= 'HKD'.
ELSEIF R1 = 14.
VAL1
= 'Y-T-D' && P_GJAHR.
ELSE.
P_MONTH
= R1 - 1.
VAL1
= P_GJAHR && '/' && P_MONTH.
ENDIF.
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#
1 = 5
#
2 = R1.
SET PROPERTY OF CELL 'VALUE' = VAL1.
ENDDO.
CLEAR : R1,R2.
LOOP AT GT_1000.
R1
= SY-TABIX + 6.
DO 14 TIMES.
R2
= SY-INDEX.
IF GT_1000-ZZTEXT IS NOT INITIAL.
CASE R2.
WHEN
1.
VAL2
= GT_1000-ZZTEXT.
WHEN
2.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL01 CHANGING VAL1 .
* VAL1 = GT_1000-HSL01.
WHEN 3.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL02 CHANGING VAL1 .
* VAL1 = GT_1000-HSL02.
WHEN 4.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL03 CHANGING VAL1 .
* VAL1 = GT_1000-HSL03.
WHEN 5.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL04 CHANGING VAL1 .
* VAL1 = GT_1000-HSL04.
WHEN 6.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL05 CHANGING VAL1 .
* VAL1 = GT_1000-HSL05.
WHEN 7.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL06 CHANGING VAL1 .
* VAL1 = GT_1000-HSL06.
WHEN 8.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL07 CHANGING VAL1 .
* VAL1 = GT_1000-HSL07.
WHEN 9.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL08 CHANGING VAL1 .
* VAL1 = GT_1000-HSL08.
WHEN 10.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL09 CHANGING VAL1 .
* VAL1 = GT_1000-HSL09.
WHEN 11.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL10 CHANGING VAL1 .
* VAL1 = GT_1000-HSL10.
WHEN 12.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL11 CHANGING VAL1 .
* VAL1 = GT_1000-HSL11.
WHEN 13.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL12 CHANGING VAL1 .
* VAL1 = GT_1000-HSL12.
WHEN 14.
PERFORM FRM_CHANGE_DATA USING GT_1000-HSL01_Y CHANGING VAL1 .
* VAL1 = GT_1000-HSL01_Y .
WHEN OTHERS.
ENDCASE.
ELSE.
VAL1
= ''.
VAL2
= ''.
ENDIF.

*指定单元格,并写入值
IF R2 = 1.
CONDENSE VAL2.
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#
1 = R1
#
2 = R2.
SET PROPERTY OF CELL 'VALUE' = VAL2.
ELSE.
CONDENSE VAL1.
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#
1 = R1
#
2 = R2.
SET PROPERTY OF CELL 'VALUE' = VAL1.
ENDIF.

ENDDO.
ENDLOOP.





*存入文件
GET PROPERTY OF EXCEL 'ACTIVESHEET' = SHEET. "激活工作簿
GET PROPERTY OF EXCEL 'ACTIVEWORKBOOK' = WORKBOOK. "激活工作区
CALL METHOD OF
WORKBOOK
'SAVEAS'

EXPORTING
#
1 = FN1
#
2 = 1. "将excel文件保存为 FN1 路径
CALL METHOD OF WORKBOOK 'CLOSE'. "关闭工作区
CALL METHOD OF EXCEL 'QUIT'. " 退出excel
WRITE 'DONE'. "退出成功,输出done

FREE OBJECT SHEET. "释放操作
FREE OBJECT WORKBOOK.
FREE OBJECT EXCEL.
ENDFORM. " FRM_EXCEL_OUT
*
&---------------------------------------------------------------------*
*
& Form GET_PC_FILENAME
*
&---------------------------------------------------------------------*
*
text
*
----------------------------------------------------------------------*
*
--> p1 text
*
<-- p2 text
*
----------------------------------------------------------------------*
FORM GET_PC_FILENAME .
IF P_EXCEL = 'X'.
* CALL FUNCTION 'F4_FILENAME' "取得文件路徑
*
EXPORTING
*
FIELD_NAME = 'FN1'
*
IMPORTING
*
FILE_NAME = FN1.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME
= '*.*'
DEF_PATH
= 'C:\'
MASK =
',*.*.'
MODE =
'O'
TITLE =
'Choose File'(002)
IMPORTING
FILENAME = FN1
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
ENDIF.
ENDFORM. " GET_PC_FILENAME
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PV_DATA text
* -->LV_CHAR text
*----------------------------------------------------------------------*
FORM FRM_CHANGE_DATA USING PV_DATA TYPE HSLVT12 CHANGING LV_CHAR TYPE CHAR20.

DATA :
L_AMT(17),
L_INT(10),
L_CHAR(17),
L_FAC(2),
L_LEN TYPE I,
L_COUNT TYPE I,
L_POS TYPE I,
L_REST TYPE I,
L_TIME TYPE I.
DATA L_NUM TYPE DMBTR.
DATA L_RESULT TYPE CHAR30.
L_NUM = PV_DATA.

CONSTANTS: C_TAB VALUE
',',
C_POT VALUE
'.'.

CLEAR L_AMT.
IF L_NUM > 0.
L_AMT = ABS( L_NUM ).
CONDENSE L_AMT.
SPLIT L_AMT AT C_POT INTO L_INT L_FAC.
L_LEN = STRLEN( L_INT ).
L_COUNT = L_LEN.
L_REST = L_LEN MOD 3.
IF L_REST = 0.
L_TIME = L_LEN DIV 3.
ELSE.
L_TIME = L_LEN DIV 3 + 1.
ENDIF.
DO L_TIME TIMES.
L_COUNT = L_COUNT - 3.
IF L_COUNT > 0.
CONCATENATE C_TAB L_INT+L_COUNT(3) L_CHAR INTO L_CHAR.
ELSEIF L_COUNT <= 0.
L_COUNT = L_COUNT + 3.
CONCATENATE L_INT+0(L_COUNT) L_CHAR INTO L_CHAR.
EXIT.
ENDIF.
ENDDO.
CLEAR L_LEN.
L_LEN = STRLEN( L_FAC ).
IF L_FAC IS INITIAL.
CONCATENATE L_CHAR
'.00' INTO L_RESULT.
ELSEIF L_LEN = 1.
CONCATENATE L_CHAR
'.' L_FAC '0' INTO L_RESULT.
ELSEIF L_LEN = 2.
CONCATENATE L_CHAR
'.' L_FAC INTO L_RESULT.
ENDIF.
CONDENSE L_RESULT.
ELSEIF L_NUM < 0.

L_AMT = ABS( L_NUM ).
CONDENSE L_AMT.
SPLIT L_AMT AT C_POT INTO L_INT L_FAC.
L_LEN = STRLEN( L_INT ).
L_COUNT = L_LEN.
L_REST = L_LEN MOD 3.
IF L_REST = 0.
L_TIME = L_LEN DIV 3.
ELSE.
L_TIME = L_LEN DIV 3 + 1.
ENDIF.
DO L_TIME TIMES.
L_COUNT = L_COUNT - 3.
IF L_COUNT > 0.
CONCATENATE C_TAB L_INT+L_COUNT(3) L_CHAR INTO L_CHAR.
ELSEIF L_COUNT <= 0.
L_COUNT = L_COUNT + 3.
CONCATENATE L_INT+0(L_COUNT) L_CHAR INTO L_CHAR.
EXIT.
ENDIF.
ENDDO.
CLEAR L_LEN.
L_LEN = STRLEN( L_FAC ).
IF L_FAC IS INITIAL.
CONCATENATE
'-' L_CHAR '.00' INTO L_RESULT.
ELSEIF L_LEN = 1.
CONCATENATE
'-' L_CHAR '.' L_FAC '0' INTO L_RESULT.
ELSEIF L_LEN = 2.
CONCATENATE
'-' L_CHAR '.' L_FAC INTO L_RESULT.
ENDIF.
CONDENSE L_RESULT.
ELSE.
L_RESULT =
'0.00'.
ENDIF.
LV_CHAR = L_RESULT.
* ENDIF.
*LV_CHAR = LS_DATA-DMBTR.
*CONDENSE LV_CHAR.
*data lv_num type i.
*lv_num = STRLEN( LV_CHAR ).
*lv_num = lv_num - 1.
*IF LV_CHAR+lv_num(1) =
'-'.
*LV_CHAR+lv_num(1) =
''.
*LV_CHAR =
'-' && LV_CHAR.
*ENDIF.
*CONDENSE LV_CHAR.
*CONDENSE LV_CHAR.
ENDFORM. "FRM_CHANGE_DATA