*&---------------------------------------------------------------------*
*& Report ZFI_VENDOR_AGEING *
*&---------------------------------------------------------------------*
*& Title - Vendor Ageing report to calculate the outstanding days *
REPORT zfi_vendor_ageing.
TABLES : bsik, BAPIFVDEXP_VZZBEPP.
DATA : t_bsik LIKE bsik OCCURS 0 WITH HEADER LINE,
t_bsak LIKE bsak OCCURS 0 WITH HEADER LINE,
days like BAPIFVDEXP_VZZBEPP-NUM4.
DATA : BEGIN OF t_lfa1 OCCURS 0,
lifnr LIKE lfa1-lifnr,
name1 LIKE lfa1-name1,
adrnr LIKE lfa1-adrnr,
END OF t_lfa1.
DATA : BEGIN OF t_adrc OCCURS 0,
adrnr LIKE lfa1-adrnr,
street LIKE adrc-street,
city1 LIKE adrc-city1,
END OF t_adrc.
DATA : BEGIN OF t_BSEG OCCURS 0,
zfbdt LIKE BSEG-zfbdt,
KOART LIKE BSEG-KOART,
KOSTL LIKE BSEG-KOSTL,
PROJK LIKE BSEG-PROJK,
END OF t_BSEG.
DATA : BEGIN OF t_prps OCCURS 0,
POSID like prps-posid,
OBJNR like prps-objnr,
END OF t_prps.
DATA : T_KOSTL LIKE BSEG-KOSTL,
T_PROJK LIKE BSEG-PROJK,
TEXT(15).
DATA : BEGIN OF t_output OCCURS 0,
lifnr LIKE lfa1-lifnr,
name1 LIKE lfa1-name1,
street LIKE adrc-street,
city1 LIKE adrc-city1,
OBJNR LIKE prps-OBJNR,
posid LIKE prps-posid,
KOSTL LIKE BSIK-KOSTL, " COST CENTER
UMSKZ like bsik-UMSKZ,
belnr like bsik-belnr,
bukrs like bsik-bukrs,
gjahr like bsik-gjahr,
wrbtr like bsik-wrbtr,
hkont like bsik-hkont,
dif1 like bsik-wrbtr,
dif2 like bsik-wrbtr,
dif3 like bsik-wrbtr,
dif4 like bsik-wrbtr,
dif5 like bsik-wrbtr,
days like BAPIFVDEXP_VZZBEPP-NUM4,
END OF t_output.
* Alv data declaration
TYPE-POOLS : slis.
DATA :alv_fieldcat TYPE slis_t_fieldcat_alv,
alv_fieldcat_line LIKE LINE OF alv_fieldcat,
alv_sort TYPE slis_t_sortinfo_alv,
alv_sort_line LIKE LINE OF alv_sort,
alv_layout TYPE slis_layout_alv,
g_repid LIKE sy-repid VALUE sy-repid,
alv_status_set TYPE slis_formname VALUE 'ALV_STATUS_SET',
alv_user_comm TYPE slis_formname VALUE 'ALV_USER_COMM',
grid_title TYPE lvc_title,
alv_fieldcat_acty TYPE slis_t_fieldcat_alv,
g_save,
gs_variant LIKE disvariant,
g_exit_caused_by_caller TYPE c,
gs_exit_caused_by_user TYPE slis_exit_by_user.
DATA: alv_fieldcat_line_acty LIKE LINE OF alv_fieldcat_acty,
alv_layout_acty TYPE slis_layout_alv,
gt_list_top_of_page TYPE slis_t_listheader,
gt_events TYPE slis_t_event,
message TYPE string,
r_ucomm LIKE sy-ucomm,
rs_selfield TYPE slis_selfield.
CONSTANTS:
gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_bukrs FOR bsik-bukrs,
s_gjahr FOR bsik-gjahr,
s_lifnr FOR bsik-lifnr,
s_umskz FOR bsik-umskz.
parameters : p_augdt like bsik-augdt OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS : s_date1 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
DEFAULT 1 TO 30,
s_date2 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
DEFAULT 30 TO 60,
s_date3 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
DEFAULT 60 TO 90,
s_date4 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
DEFAULT 90 TO 120,
s_date5 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
DEFAULT 120 TO 150.
SELECTION-SCREEN END OF BLOCK b2.
INITIALIZATION.
START-OF-SELECTION.
PERFORM fetch_data.
PERFORM display.
*&---------------------------------------------------------------------*
*& Form fetch_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fetch_data .
SELECT *
INTO TABLE t_bsik
FROM bsik
WHERE bukrs IN s_bukrs
AND gjahr IN s_gjahr
AND lifnr IN s_lifnr
AND umskz IN s_umskz
AND umskz NOT IN ('F','P','L','G').
* AND zfbdt <= P_augdt.
if sy-subrc = 0.
SELECT *
INTO TABLE t_bsak
FROM bsak
WHERE bukrs IN s_bukrs
AND gjahr IN s_gjahr
AND lifnr IN s_lifnr
AND umskz IN s_umskz
AND umskz NOT IN ('F','P','L','G')
AND AUGDT > P_augdt.
loop at t_bsak.
move-corresponding t_bsak to t_bsik.
append t_bsik.
endloop.
loop at t_bsik.
if t_bsik-zfbdt is initial.
t_bsik-zfbdt = t_bsik-bldat.
modify t_bsik transporting zfbdt.
endif.
if t_bsik-zfbdt > P_augdt.
delete t_bsik.
endif.
* if t_bsik-umskz > P_augdt.
endloop.
select lifnr
name1
adrnr
into table t_lfa1
from lfa1
for all entries in t_bsik
where lifnr = t_bsik-lifnr.
if sy-subrc = 0.
select ADDRNUMBER as adrnr
street
city1
into table t_adrc
from adrc
for all entries in t_lfa1
where ADDRNUMBER = t_lfa1-adrnr.
endif.
endif.
LOOP AT t_bsik.
if t_bsik-shkzg = 'S'.
t_bsik-WRBTR = t_bsik-WRBTR * -1.
endif.
REFRESH T_BSEG.
CLEAR : T_KOSTL, T_PROJK, t_output.
IF t_bsik-rebzg IS NOT INITIAL.
SELECT zfbdt
KOART
KOSTL
PROJK
INTO TABLE T_BSEG "t_bsik-ZFBDT
FROM bseg
WHERE bukrs = t_bsik-bukrs
AND belnr = t_bsik-rebzg
AND gjahr = t_bsik-rebzj
and KOART IN ('K','S').
LOOP AT T_BSEG.
IF T_BSEG-KOART = 'K' AND T_BSEG-zfbdt IS NOT INITIAL.
t_bsik-ZFBDT = T_BSEG-ZFBDT.
MODIFY t_bsik TRANSPORTING ZFBDT.
ELSEIF T_BSEG-KOART = 'S'.
T_KOSTL = T_BSEG-KOSTL.
T_PROJK = T_BSEG-PROJK.
ENDIF.
ENDLOOP.
ELSE.
SELECT SINGLE KOSTL PROJK
INTO (T_KOSTL, T_PROJK)
FROM bseg
WHERE bukrs = t_bsik-bukrs
AND belnr = t_bsik-BELNR
AND gjahr = t_bsik-GJAHR
and KOART = 'S'.
ENDIF.
MOVE-CORRESPONDING t_bsik TO t_output.
t_output-KOSTL = T_KOSTL.
CONCATENATE 'PR' T_PROJK INTO T_OUTPUT-OBJNR.
days = P_augdt - t_bsik-ZFBDT.
READ TABLE t_lfa1 WITH KEY lifnr = t_output-LIFNR.
IF SY-SUBRC = 0.
t_output-NAME1 = t_lfa1-NAME1.
READ TABLE t_adrc WITH KEY ADRNR = t_lfa1-ADRNR.
IF SY-SUBRC = 0.
t_output-street = t_adrc-STREET.
t_output-city1 = t_adrc-CITY1.
ENDIF.
ENDIF.
t_output-days = days.
if days >= s_date1-low and days < s_date1-high.
t_output-dif1 = t_bsik-wrbtr. " days.
elseif days >= s_date2-low and days < s_date2-high.
t_output-dif2 = t_bsik-wrbtr. "days.
elseif days >= s_date3-low and days < s_date3-high.
t_output-dif3 = t_bsik-wrbtr. "days.
elseif days >= s_date4-low and days < s_date4-high.
t_output-dif4 = t_bsik-wrbtr. "days.
elseif days >= s_date5-low and days < s_date5-high.
t_output-dif5 = t_bsik-wrbtr. "days.
endif.
append t_output.
ENDLOOP.
if T_OUTPUT[] is not initial.
SELECT POSID
OBJNR
INTO TABLE T_PRPS
FROM PRPS
FOR ALL ENTRIES IN T_OUTPUT
WHERE OBJNR = T_OUTPUT-OBJNR.
endif.
LOOP AT T_OUTPUT.
read table T_PRPS with key objnr = T_OUTPUT-objnr.
if sy-subrc = 0.
T_OUTPUT-POSID = T_PRPS-POSID.
MODIFY t_output TRANSPORTING POSID.
endif.
ENDLOOP.
ENDFORM. " fetch_data
*&---------------------------------------------------------------------*
*& Form display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display .
PERFORM build_alv_layout.
PERFORM s_sort_build USING alv_sort[].
PERFORM build_field_catalogs.
PERFORM eventtab_build CHANGING gt_events.
* SORT t_output BY .
g_save = 'A'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_callback_pf_status_set = alv_status_set
i_callback_user_command = alv_user_comm
i_grid_title = grid_title
i_save = g_save
is_variant = gs_variant
is_layout = alv_layout
it_fieldcat = alv_fieldcat[]
it_events = gt_events[]
it_sort = alv_sort[]
IMPORTING
e_exit_caused_by_caller = g_exit_caused_by_caller
es_exit_caused_by_user = gs_exit_caused_by_user
TABLES
t_outtab = t_output.
PERFORM alv_user_comm USING r_ucomm
rs_selfield.
IF sy-subrc = 0.
IF g_exit_caused_by_caller = 'X'.
ELSE.
IF gs_exit_caused_by_user-back = 'X'. " F3
ELSE.
IF gs_exit_caused_by_user-exit = 'X'. " F15
ELSE.
IF gs_exit_caused_by_user-cancel = 'X'. " F12
ELSE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
*" Fatal error calling ALV
ENDIF.
ENDFORM. " display
*&---------------------------------------------------------------------*
*& Form build_alv_layout
*&---------------------------------------------------------------------*
FORM build_alv_layout.
CLEAR alv_layout.
alv_layout-colwidth_optimize = 'X'. "always display full columns
* alv_layout-box_fieldname = 'CHK'.
* alv_layout-box_tabname = 'T_OUTPUT'.
alv_layout-info_fieldname = 'COLOR'. "color a line
alv_layout-detail_popup = 'X'.
alv_layout-zebra = 'X'. "Zebra output
ENDFORM. " build_alv_layout
*---------------------------------------------------------------------*
* FORM s_sort_build *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> LT_SORT *
*---------------------------------------------------------------------*
FORM s_sort_build USING lt_sort TYPE slis_t_sortinfo_alv.
DATA: ls_sort TYPE slis_sortinfo_alv.
CLEAR ls_sort.
ls_sort-spos = 1.
ls_sort-fieldname = 'LIFNR'.
ls_sort-up = 'X'.
ls_sort-group = 'UL'.
ls_sort-subtot = 'X'.
APPEND ls_sort TO lt_sort.
CLEAR ls_sort.
ls_sort-spos = 2.
ls_sort-fieldname = 'BELNR'.
ls_sort-up = 'X'.
ls_sort-subtot = 'X'.
ls_sort-group = 'UL'.
APPEND ls_sort TO lt_sort.
CLEAR ls_sort.
ENDFORM. "s_sort_build
*&---------------------------------------------------------------------*
*& Form eventtab_build
*&---------------------------------------------------------------------*
FORM eventtab_build CHANGING lt_events TYPE slis_t_event.
FIELD-SYMBOLS: <lt_events> LIKE LINE OF lt_events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = lt_events
EXCEPTIONS
list_type_wrong = 1
OTHERS = 2.
* Define TOP_OF_PAGE event
READ TABLE lt_events WITH KEY name = slis_ev_top_of_page
ASSIGNING <lt_events>.
IF sy-subrc EQ 0.
MOVE gc_formname_top_of_page TO <lt_events>-form.
ENDIF.
ENDFORM. " eventtab_build
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM top_of_page.
REFRESH gt_list_top_of_page.
CLEAR gt_list_top_of_page.
PERFORM comment_build USING gt_list_top_of_page.
* Output GSPC logo on report header
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = gt_list_top_of_page
i_logo = 'GSPC_LOGO'.
ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form COMMENT_BUILD
*&---------------------------------------------------------------------*
* Build comments at top of page
*----------------------------------------------------------------------*
FORM comment_build CHANGING gt_top_of_page TYPE slis_t_listheader.
DATA: gs_line TYPE slis_listheader.
CLEAR gs_line.
gs_line-typ = 'H'.
gs_line-info = 'Vendor Ageing'.
APPEND gs_line TO gt_top_of_page.
CLEAR gs_line.
gs_line-typ = 'S'.
gs_line-key = 'Report ID:'.
gs_line-info = sy-repid.
APPEND gs_line TO gt_top_of_page.
CLEAR gs_line.
gs_line-typ = 'S'.
gs_line-key = 'User:'.
gs_line-info = sy-uname.
APPEND gs_line TO gt_top_of_page.
CLEAR gs_line.
gs_line-typ = 'S'.
gs_line-key = 'Date:'.
WRITE sy-datum TO gs_line-info MM/DD/YYYY.
APPEND gs_line TO gt_top_of_page.
CLEAR gs_line.
gs_line-typ = 'S'.
gs_line-key = 'Time:'.
WRITE sy-uzeit TO gs_line-info USING EDIT MASK '__:__:__'.
APPEND gs_line TO gt_top_of_page.
CLEAR gs_line.
gs_line-typ = 'S'.
gs_line-key = ''.
WRITE ' '.
APPEND gs_line TO gt_top_of_page.
* Output data from selection screen
ENDFORM. "comment_build
*----------------------------------------------------------------------*
*Build ALV Summary field catalog
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form build_field_catalogs
*&---------------------------------------------------------------------*
FORM build_field_catalogs.
CLEAR: alv_fieldcat.
REFRESH: alv_fieldcat.
* Vendor Number
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'Vendor Number'.
* alv_fieldcat_line-hotspot = 'X'.
alv_fieldcat_line-fieldname = 'LIFNR'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* Vendor Name
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'Vendor Name'.
alv_fieldcat_line-fieldname = 'NAME1'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* Vendor Address
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'Vendor Address'.
alv_fieldcat_line-fieldname = 'STREET'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* City
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'City'.
alv_fieldcat_line-fieldname = 'CITY1'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* Object number #
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'object #'.
alv_fieldcat_line-fieldname = 'OBJNR'.
alv_fieldcat_line-no_out = 'X'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* WBS Element
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'WBS Element'.
alv_fieldcat_line-fieldname = 'POSID'.
APPEND alv_fieldcat_line TO alv_fieldcat.
* Cost Center
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'Cost Center'.
alv_fieldcat_line-fieldname = 'KOSTL'.
APPEND alv_fieldcat_line TO alv_fieldcat.
* GL Indicator
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'GL Indicator'.
alv_fieldcat_line-fieldname = 'UMSKZ'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* General Ledger Account
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'General Ledger Account'.
alv_fieldcat_line-fieldname = 'HKONT'.
APPEND alv_fieldcat_line TO alv_fieldcat.
* Document No.
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-hotspot = 'X'.
alv_fieldcat_line-seltext_l = 'Document No.'.
alv_fieldcat_line-fieldname = 'BELNR'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* Amount
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'Amount'.
alv_fieldcat_line-fieldname = 'WRBTR'.
alv_fieldcat_line-no_out = 'X'.
APPEND alv_fieldcat_line TO alv_fieldcat.
* dif1
CLEAR TEXT.
READ TABLE s_date1 INDEX 1.
CONCATENATE 'DAYS ' s_date1-LOW '-' s_date1-HIGH INTO TEXT.
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = TEXT.
alv_fieldcat_line-fieldname = 'DIF1'.
alv_fieldcat_line-do_sum = 'X'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* dif2
CLEAR TEXT.
READ TABLE s_date2 INDEX 1.
CONCATENATE 'DAYS ' s_date2-LOW '-' s_date2-HIGH INTO TEXT.
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = TEXT.
* alv_fieldcat_line-no_out = 'X'.
alv_fieldcat_line-fieldname = 'DIF2'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* dif3
CLEAR TEXT.
READ TABLE s_date3 INDEX 1.
CONCATENATE 'DAYS ' s_date3-LOW '-' s_date3-HIGH INTO TEXT.
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = TEXT.
alv_fieldcat_line-fieldname = 'DIF3'.
APPEND alv_fieldcat_line TO alv_fieldcat.
CLEAR alv_fieldcat_line.
* dif4
CLEAR TEXT.
READ TABLE s_date4 INDEX 1.
CONCATENATE 'DAYS ' s_date4-LOW '-' s_date4-HIGH INTO TEXT.
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = TEXT.
alv_fieldcat_line-fieldname = 'DIF4'.
APPEND alv_fieldcat_line TO alv_fieldcat.
* dif5
CLEAR TEXT.
READ TABLE s_date5 INDEX 1.
CONCATENATE 'DAYS ' s_date5-LOW '-' s_date5-HIGH INTO TEXT.
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = TEXT.
alv_fieldcat_line-fieldname = 'DIF5'.
APPEND alv_fieldcat_line TO alv_fieldcat.
* Days
alv_fieldcat_line-tabname = 'T_OUTPUT'.
alv_fieldcat_line-seltext_l = 'Days'.
alv_fieldcat_line-fieldname = 'DAYS'.
* alv_fieldcat_line-no_out = 'X'.
APPEND alv_fieldcat_line TO alv_fieldcat.
ENDFORM. " build_field_catalogs
*&---------------------------------------------------------------------*
*& Form ALV_USER_COMM
*&---------------------------------------------------------------------*
* Process User Status
*----------------------------------------------------------------------*
FORM alv_user_comm USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
*Determine the main component beign viewed
READ TABLE T_OUTPUT INDEX rs_selfield-tabindex.
CASE r_ucomm.
WHEN '&IC1'. " single / double click
CASE rs_selfield-fieldname.
* Display FI document
WHEN 'BELNR'.
SET PARAMETER ID 'BLN' FIELD T_OUTPUT-BELNR.
SET PARAMETER ID 'BUK' FIELD T_OUTPUT-BUKRS.
SET PARAMETER ID 'GJR' FIELD T_OUTPUT-GJAHR.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ALV_STATUS_SET
*&---------------------------------------------------------------------*
* Set the status for the ALV screen
*----------------------------------------------------------------------*
FORM alv_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD' EXCLUDING rt_extab.
ENDFORM.
Input Parameter:
Output:
No comments:
Post a Comment