-
- 程序实现
- 建立配置表ZFIT_0003维护现金流量表行号
建立配置表ZFIT_0004维护行号对应的原因码
(2) 子程序FRM_PREPARE_DATA取得上述两个配置表的数据
SELECT *
INTO TABLE ZT03
FROM ZFIT_0003.
IF ZT03[] IS INITIAL.
MESSAGE S001(00) WITH '行项配置表没有维护' DISPLAY LIKE 'E'.
STOP.
ENDIF.
SELECT *
INTO TABLE ZT04
FROM ZFIT_0004.
IF ZT04[] IS INITIAL.
MESSAGE S001(00) WITH '原因码配置表没有维护' DISPLAY LIKE 'E'.
STOP.
ENDIF.
LOOP AT ZT04.
R_RSTGR-SIGN = 'I'.
R_RSTGR-OPTION = ZT04-OPTIO.
IF ZT04-OPTIO = 'EQ'.
R_RSTGR-LOW = ZT04-RSTGR.
ELSE.
CONCATENATE ZT04-RSTGR '*' INTO R_RSTGR-LOW.
R_RSTGR-OPTION = 'CP'.
ENDIF.
COLLECT R_RSTGR.
ENDLOOP.
取得上年同期的会计凭证数据,
科目限制为'001001%' '001002%' '001012%' 三个范围
原因码限制为配置表中取出的原因码
SELECT GJAHR BELNR BUKRS
INTO TABLE LT_BKPF1
FROM BKPF
WHERE BUKRS IN S_BUKRS
AND GJAHR = L_YEAR
AND MONAT <= P_MONAT.
IF LT_BKPF1[] IS NOT INITIAL.
SELECT BUKRS BELNR GJAHR BUZEI SHKZG RSTGR DMBTR
INTO CORRESPONDING FIELDS OF TABLE GT_BSEG1
FROM BSEG
FOR ALL ENTRIES IN LT_BKPF1
WHERE GJAHR = LT_BKPF1-GJAHR
AND BELNR = LT_BKPF1-BELNR
AND BUKRS = LT_BKPF1-BUKRS
AND ( HKONT LIKE '001001%' OR HKONT LIKE '001002%' OR HKONT LIKE '001012%' )
AND RSTGR IN R_RSTGR.
ENDIF.
取得本年累积(不含本期)的凭证数据
SELECT GJAHR BELNR BUKRS
INTO TABLE LT_BKPF2
FROM BKPF
WHERE BUKRS IN S_BUKRS
AND GJAHR = P_GJAHR
AND MONAT < P_MONAT.
IF LT_BKPF2[] IS NOT INITIAL.
SELECT BUKRS BELNR GJAHR BUZEI SHKZG DMBTR RSTGR
INTO CORRESPONDING FIELDS OF TABLE GT_BSEG2
FROM BSEG
FOR ALL ENTRIES IN LT_BKPF2
WHERE GJAHR = LT_BKPF2-GJAHR
AND BELNR = LT_BKPF2-BELNR
AND BUKRS = LT_BKPF2-BUKRS
AND ( HKONT LIKE '001001%' OR HKONT LIKE '001002%' OR HKONT LIKE '001012%' )
AND RSTGR IN R_RSTGR.
ENDIF.
取得本期的凭证数据
SELECT GJAHR BELNR BUKRS
INTO TABLE LT_BKPF3
FROM BKPF
WHERE BUKRS IN S_BUKRS
AND GJAHR = P_GJAHR
AND MONAT = P_MONAT.
IF LT_BKPF3[] IS NOT INITIAL.
SELECT BUKRS BELNR GJAHR BUZEI SHKZG DMBTR RSTGR
INTO CORRESPONDING FIELDS OF TABLE GT_BSEG3
FROM BSEG
FOR ALL ENTRIES IN LT_BKPF3
WHERE GJAHR = LT_BKPF3-GJAHR
AND BELNR = LT_BKPF3-BELNR
AND BUKRS = LT_BKPF3-BUKRS
AND ( HKONT LIKE '001001%' OR HKONT LIKE '001002%' OR HKONT LIKE '001012%' )
AND RSTGR IN R_RSTGR.
ENDIF.
取得上一年和本年总账表中的余额
**上年总账余额
SELECT *
INTO TABLE GT_FAGL1
FROM FAGLFLEXT
WHERE RYEAR = L_YEAR
AND RLDNR = '0L'
AND RBUKRS IN S_BUKRS
AND ( RACCT LIKE '1001%' OR RACCT LIKE '1002%' OR RACCT LIKE '1012%' ).
**本年总账余额
SELECT *
INTO TABLE GT_FAGL2
FROM FAGLFLEXT
WHERE RYEAR = P_GJAHR
AND RLDNR = '0L'
AND RBUKRS IN S_BUKRS
AND ( RACCT LIKE '1001%' OR RACCT LIKE '1002%' OR RACCT LIKE '1012%' ).
按照上年同期/本年累计/本期发生3个周期, 以原因码对应的行号归集到内表ITAB中
配置表中的CP表示该原因码是通配查询
**上年同期
LOOP AT GT_BSEG1 INTO WA.
LOOP AT ZT04.
IF ZT04-OPTIO = 'EQ' AND ZT04-RSTGR = WA-RSTGR.
ITAB-LINEN = ZT04-LINEN.
IF WA-SHKZG = 'H'.
ITAB-DMBT1 = 0 - WA-DMBTR.
ELSE.
ITAB-DMBT1 = WA-DMBTR.
ENDIF.
COLLECT ITAB.
CLEAR ITAB.
ENDIF.
IF ZT04-OPTIO = 'CP'.
L_LEN = STRLEN( ZT04-RSTGR ).
IF ZT04-RSTGR = WA-RSTGR(L_LEN).
ITAB-LINEN = ZT04-LINEN.
IF WA-SHKZG = 'H'.
ITAB-DMBT1 = 0 - WA-DMBTR.
ELSE.
ITAB-DMBT1 = WA-DMBTR.
ENDIF.
COLLECT ITAB.
CLEAR ITAB.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
现金流量表中的39行为总账余额, 作为特殊处理
取值科目排除以下三个科目范围:RACCT(6) NE '101205' AND RACCT(6) NE '101206' AND RACCT(6) NE '101207'