SAP FICO应付账款账龄分析表
一、报表逻辑





二、报表界面
.
三、报表逻辑
*&---------------------------------------------------------------------*
*& 程序名: ZRPFI_0002
*& 创建者(公司)/日期:*
*& 程序描述:
*&
*&---------------------------------------------------------------------*
*& 版本/修改者(公司)/日期//修改描述
*&
*&---------------------------------------------------------------------*
REPORT zrpfi_0002.
INCLUDE zrpfi_0002_top."变量定义
INCLUDE zrpfi_0002_f01."核心业务代码
INCLUDE zrpfi_0002_f02."响应事件的代码
INCLUDE zrpfi_0002_c01."Class Definition
INCLUDE zrpfi_0002_s01."ALV显示与控制
START-OF-SELECTION.
READ TABLE s_zdued INDEX 1.
IF s_zdued-high IS INITIAL.
MESSAGE '请输入日期上限' TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
* if p_ue = 'X'.
* IF s_bldat-high IS INITIAL.
* MESSAGE '请输入期初凭证日期上限' TYPE 'S' DISPLAY LIKE 'E'.
* STOP.
* ENDIF.
* endif.
PERFORM frm_check_authorization.
PERFORM frm_get_data.
PERFORM frm_process_data.
* if p_ue = 'X'.
PERFORM frm_get_data_ue.
PERFORM frm_process_data_ue.
* endif.
PERFORM frm_show_alv USING gt_alv.
*&---------------------------------------------------------------------*
*& 包含 ZRPFI_0002_TOP
*&---------------------------------------------------------------------*
TABLES:acdoca,lfb1.
* Switch for list display yes / no
DATA:gv_list_display TYPE sap_bool.
* Reference for container control
DATA:gr_cont TYPE REF TO cl_gui_custom_container.
* Reference for ALV instance
DATA:gr_alv TYPE REF TO cl_salv_table.
* Reference for error situations
DATA:gr_error TYPE REF TO cx_salv_error.
DATA:gt_alv TYPE TABLE OF zsfi_alv_003.
DATA:gt_alv_temp TYPE TABLE OF zsfi_alv_003.
DATA:gt_alv_sum TYPE TABLE OF zsfi_alv_003.
DATA: gs_alv LIKE LINE OF gt_alv.
RANGES: r_racct FOR acdoca-racct.
DATA: BEGIN OF it_acdoca_info_temp OCCURS 0,
rbukrs LIKE acdoca-rbukrs,
lifnr LIKE acdoca-lifnr,
rhcur LIKE acdoca-rhcur,
rwcur LIKE acdoca-rwcur,
drcrk LIKE acdoca-drcrk,
prctr LIKE acdoca-prctr,
hsl LIKE acdoca-hsl,
wsl LIKE acdoca-wsl,
sgtxt LIKE acdoca-sgtxt,
period TYPE i,
gjahr(4),
poper(3),
umskz LIKE acdoca-umskz,
racct LIKE acdoca-racct,
belnr LIKE acdoca-belnr,
docln LIKE acdoca-docln,
rebzj LIKE acdoca-rebzj,
rebzg LIKE acdoca-rebzg,
rebzz LIKE acdoca-rebzz,
blart LIKE acdoca-blart,
budat TYPE acdoca-budat,
END OF it_acdoca_info_temp.
SELECTION-SCREEN BEGIN OF BLOCK b_01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
s_bukrs FOR lfb1-bukrs OBLIGATORY,
s_lifnr FOR acdoca-lifnr,
s_umskz FOR acdoca-umskz NO-DISPLAY,
s_zdued FOR acdoca-budat NO-EXTENSION OBLIGATORY DEFAULT sy-datum.
* parameters: p_ue as checkbox default 'X'.
*
* SELECT-OPTIONS: s_bldat for acdoca-bldat.
* PARAMETERS:
** p_poper TYPE acdoca-poper DEFAULT sy-datum+4(2),
* p_zdued TYPE budat DEFAULT sy-datum.
SELECTION-SCREEN END OF BLOCK b_01.
*SELECTION-SCREEN BEGIN OF BLOCK b_02 WITH FRAME TITLE TEXT-002.
* PARAMETERS:p_layout TYPE slis_vari.
*SELECTION-SCREEN END OF BLOCK b_02.
*&---------------------------------------------------------------------*
*& 包含 ZRPFI_0002_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_check_authorization
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_authorization .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
* IF p_zdued IS INITIAL.
* p_zdued = sy-datum.
* ENDIF.
IF s_umskz[] IS INITIAL .
INSERT VALUE #( sign = 'I' option = 'EQ' low = '' ) INTO TABLE s_umskz.
ENDIF.
SELECT
rbukrs,
acdoca~lifnr,
name1,
umskz,
rhcur,
rwcur,
prctr,
racct,
SUM( CASE drcrk WHEN 'S' THEN hsl ELSE 0 END ) AS zdp,
SUM( CASE drcrk WHEN 'H' THEN hsl ELSE 0 END ) AS zcp,
SUM( CASE drcrk WHEN 'S' THEN wsl ELSE 0 END ) AS zdp_wsl,
SUM( CASE drcrk WHEN 'H' THEN wsl ELSE 0 END ) AS zcp_wsl
FROM acdoca
INNER JOIN lfa1 ON lfa1~lifnr = acdoca~lifnr
INTO CORRESPONDING FIELDS OF TABLE @gt_alv
WHERE rbukrs IN @s_bukrs
AND acdoca~lifnr IN @s_lifnr
AND budat IN @s_zdued
AND koart EQ 'K'
AND racct IN ('2202010001','2202020001')
AND umskz IN @s_umskz
AND ( augbl EQ '' OR ( augbl NE '' AND augdt >= @s_zdued-low ) )
AND awtyp NE 'MKPF'
AND blart NE 'UE'
* AND xreversing = ''
* AND xreversed = ''
GROUP BY rbukrs,acdoca~lifnr,name1,rhcur,rwcur,prctr,umskz,racct.
CLEAR: gt_alv_temp[].
SELECT
rbukrs,
acdoca~lifnr,
name1,
umskz,
rhcur,
rwcur,
prctr,
racct,
0 AS zdp,
0 AS zcp,
0 AS zdp_wsl,
0 AS zcp_wsl
FROM acdoca
INNER JOIN lfa1 ON lfa1~lifnr = acdoca~lifnr
INTO CORRESPONDING FIELDS OF TABLE @gt_alv_temp
WHERE rbukrs IN @s_bukrs
AND acdoca~lifnr IN @s_lifnr
AND budat < @s_zdued-low
AND koart EQ 'K'
AND racct IN ('2202010001','2202020001')
AND umskz IN @s_umskz
AND ( augbl EQ '' OR ( augbl NE '' AND augdt >= @s_zdued-low ) )
AND awtyp NE 'MKPF'
AND blart NE 'UE'
GROUP BY rbukrs,acdoca~lifnr,name1,rhcur,rwcur,prctr,umskz,racct.
LOOP AT gt_alv_temp INTO gs_alv.
COLLECT gs_alv INTO gt_alv.
ENDLOOP.
CLEAR: gt_alv_temp[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data .
* IF p_poper IS INITIAL.
* p_poper = sy-datum+4(2).
* ENDIF.
*
* DATA(lv_poper) = p_poper - 1.
DATA: lv_num TYPE acdoca-hsl.
DATA: lv_date TYPE acdoca-budat,
ls_rate TYPE bapi1093_0.
READ TABLE s_zdued INDEX 1.
"获取最大范围日期当月的最后一天
lv_date = s_zdued-high.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = lv_date
IMPORTING
last_day_of_month = lv_date
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
SELECT
rbukrs,
lifnr,
rhcur,
rwcur,
prctr,
umskz,
racct,
SUM( CASE drcrk WHEN 'S' THEN hsl ELSE 0 END ) AS zdp,
SUM( CASE drcrk WHEN 'H' THEN hsl ELSE 0 END ) AS zcp,
SUM( CASE drcrk WHEN 'S' THEN wsl ELSE 0 END ) AS zdp_wsl,
SUM( CASE drcrk WHEN 'H' THEN wsl ELSE 0 END ) AS zcp_wsl
FROM acdoca INTO TABLE @DATA(lt_acdoca_per)
WHERE rbukrs IN @s_bukrs
AND lifnr IN @s_lifnr
AND budat < @s_zdued-low
AND koart EQ 'K'
AND racct IN ('2202010001','2202020001')
AND umskz IN @s_umskz
AND ( augbl EQ '' OR ( augbl NE '' AND augdt >= @s_zdued-low ) )
AND awtyp NE 'MKPF'
AND blart NE 'UE'
* and XREVERSED = 'X'
GROUP BY rbukrs,lifnr,rhcur,rwcur,prctr,umskz,racct.
* CLEAR lv_poper.
SELECT
rbukrs,
lifnr,
rhcur,
rwcur,
drcrk,
prctr,
hsl,
wsl,
sgtxt,
0 AS period,
left( budat,4 ) AS gjahr,
substring( budat,5,2 ) AS poper,
umskz,
racct,
belnr,
docln,
rebzj,
rebzg,
rebzz,
blart,
budat
FROM acdoca
WHERE rbukrs IN @s_bukrs
AND lifnr IN @s_lifnr
AND budat <= @s_zdued-high
AND koart EQ 'K'
AND racct IN ('2202010001','2202020001')
AND umskz IN @s_umskz
* AND ( augbl EQ '' or ( augbl ne '' and augdt >= @s_zdued-low ) )
AND ( augbl EQ '' OR ( augbl NE '' AND augdt > @s_zdued-high ) )
* AND augbl EQ ''
AND awtyp NE 'MKPF'
AND blart NE 'UE'
INTO CORRESPONDING FIELDS OF TABLE @it_acdoca_info_temp
.
* SELECT
* rbukrs,
* lifnr,
* rhcur,
* rwcur,
* drcrk,
* prctr,
* hsl,
* wsl,
* sgtxt,
* 0 AS period,
* left( budat,4 ) AS gjahr,
* substring( budat,5,2 ) AS poper,
* umskz,
* racct
* FROM acdoca
* WHERE rbukrs IN @s_bukrs
* AND lifnr IN @s_lifnr
*

