0% found this document useful (0 votes)
15 views4 pages

Auto customer payment allocation

The document outlines an ABAP report for customer payment allocation, defining data structures and selection parameters for invoices and payments. It processes invoice and payment data to determine allocation status, including matched, partially matched, and overpayment scenarios. The report also includes functionality for displaying results in an ALV grid and exporting data to Excel.

Uploaded by

Charanya Nam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views4 pages

Auto customer payment allocation

The document outlines an ABAP report for customer payment allocation, defining data structures and selection parameters for invoices and payments. It processes invoice and payment data to determine allocation status, including matched, partially matched, and overpayment scenarios. The report also includes functionality for displaying results in an ALV grid and exporting data to Excel.

Uploaded by

Charanya Nam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

*&---------------------------------------------------------------------*

*& Report ZVS_COUSTOMER_PAYMENT_ALLOC


*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zvs_coustomer_payment_alloc.

TYPES: BEGIN OF ty_final,


belnr TYPE bsid_view-belnr,
kunnr TYPE bsid_view-kunnr,
wrbtr TYPE bsid_view-wrbtr,
belnr1 TYPE bsik_view-belnr,
wrbtr1 TYPE bsik_view-wrbtr,
zalloc_amt TYPE bsid_view-wrbtr,
zunalloc_amt TYPE bsid_view-wrbtr,
zstatus TYPE char10,
END OF ty_final.

DATA: it_fact TYPE slis_t_fieldcat_alv.

DATA: wa_doc_header TYPE bapiache09,


it_accountgl TYPE TABLE OF bapiacgl09,
wa_accountgl TYPE bapiacgl09,
it_acc_rece TYPE TABLE OF bapiacar09,
wa_acc_rece TYPE bapiacar09,
it_curr_amu TYPE TABLE OF bapiaccr09,
wa_curr_amu TYPE bapiaccr09,
it_return TYPE TABLE OF bapiret2,
wa_return TYPE bapiret2.

DATA:lv_filename TYPE string,


lv_path TYPE string,
lv_fullpath TYPE string,
lv_result TYPE i,
lv_default TYPE string,
lv_fname TYPE string.

DATA: it_final TYPE TABLE OF ty_final,


wa_final TYPE ty_final,
v_kunnr TYPE kunnr,
v_budat TYPE budat.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.


PARAMETERS: p_bukrs TYPE bukrs.
SELECT-OPTIONS: s_kunnr FOR v_kunnr.
SELECT-OPTIONS: s_budat FOR v_budat.
PARAMETERS: p_waers TYPE waers.
PARAMETERS: zaut_all TYPE c AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
SELECT belnr, bukrs, kunnr , budat, wrbtr , waers,hkont, zfbdt, umskz
FROM bsid_view
WHERE bukrs = @p_bukrs
AND kunnr IN @s_kunnr
AND budat IN @s_budat
AND waers = @p_waers
INTO TABLE @DATA(it_invoice).
IF it_invoice IS NOT INITIAL.
SORT it_invoice BY belnr bukrs zfbdt.

SELECT belnr, bukrs, lifnr , budat ,wrbtr, waers, umskz


FROM bsik_view
WHERE bukrs = @p_bukrs
AND budat IN @s_budat
AND waers = @p_waers
AND umskz IS NOT INITIAL
INTO TABLE @DATA(it_payments).
IF sy-subrc = 0.
SORT it_payments BY belnr bukrs budat.
ENDIF.
ENDIF.

LOOP AT it_invoice ASSIGNING FIELD-SYMBOL(<fs_invoice>).

READ TABLE it_payments INTO DATA(ls_payments) WITH KEY bukrs = <fs_invoice>-bukrs waers =
<fs_invoice>-waers.

IF zaut_all = ’X’.
IF sy-subrc = 0 AND ls_payments-wrbtr = <fs_invoice>-wrbtr. " EXACT MATCH
wa_final-zalloc_amt = <fs_invoice>-wrbtr.
wa_final-zstatus = ’MATCHED’ .

DELETE it_payments WHERE belnr = ls_payments-belnr. " Remove payment from the table

ELSEIF sy-subrc = 0 AND ls_payments-wrbtr < <fs_invoice>-wrbtr. " PARTIAL PAYMENT

wa_final-zalloc_amt = ls_payments-wrbtr.
wa_final-zstatus = ’PARTIALLY MATCHED’.
wa_final-zunalloc_amt = <fs_invoice>-wrbtr - ls_payments-wrbtr.
DELETE it_payments WHERE belnr = ls_payments-belnr.

ELSEIF sy-subrc = 0 AND ls_payments-wrbtr > <fs_invoice>-wrbtr.


" Overpayment
wa_final-zalloc_amt = <fs_invoice>-wrbtr.
wa_final-zstatus = ’MATCHED WITH OVERPAYMENT’.
DELETE it_payments WHERE belnr = ls_payments-belnr.
" Carry forward remaining amount
wa_final-wrbtr = ls_payments-wrbtr - <fs_invoice>-wrbtr.
MODIFY it_payments INDEX sy-index FROM ls_payments.
ENDIF.
wa_final-belnr = <fs_invoice>-belnr.
wa_final-kunnr = <fs_invoice>-kunnr.
wa_final-wrbtr = <fs_invoice>-wrbtr.
wa_final-belnr1 = ls_payments-belnr.
wa_final-wrbtr1 = ls_payments-wrbtr.

wa_doc_header-ac_doc_no = <fs_invoice>-belnr.
wa_doc_header-comp_code = <fs_invoice>-bukrs.
wa_doc_header-pstng_date = <fs_invoice>-budat.
wa_accountgl-ac_doc_no = <fs_invoice>-belnr.
wa_accountgl-comp_code = <fs_invoice>-bukrs.
wa_accountgl-customer = <fs_invoice>-kunnr.
wa_accountgl-pstng_date = <fs_invoice>-budat.

wa_acc_rece-customer = <fs_invoice>-kunnr.
wa_acc_rece-gl_account = <fs_invoice>-hkont.
wa_acc_rece-comp_code = <fs_invoice>-bukrs.

wa_curr_amu-currency = <fs_invoice>-waers.

APPEND: wa_final TO it_final,


wa_accountgl TO it_accountgl,
wa_acc_rece TO it_acc_rece,
wa_curr_amu TO it_curr_amu.
CLEAR: wa_accountgl,
wa_acc_rece,
wa_curr_amu,
wa_final.
ENDIF.
ENDLOOP.

CALL FUNCTION ’REUSE_ALV_GRID_DISPLAY’


EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = ’PF_STATUS’
i_callback_user_command = ’USER_COMMAND ’
i_structure_name = ’ZFINAL_STR’
it_fieldcat = it_fact
TABLES
t_outtab = it_final
EXCEPTIONS
program_error =1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

FORM pf_status USING rt_extab TYPE slis_t_extab.


SET PF-STATUS ’FUNC_BUTTON’.
ENDFORM.
FORM usercommand USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE sy-ucomm.
WHEN’AUTO_ALLOC’.
MESSAGE: s001(zmessage_cl).
WHEN ’MANUAL_ADK’.
MESSAGE: s002(zmessage_cl).
WHEN ’POST_ALLOC’.
CALL FUNCTION ’BAPI_ACC_DOCUMENT_POST’
EXPORTING
documentheader = wa_doc_header
TABLES
accountgl = it_accountgl
accountreceivable = it_acc_rece
currencyamount = it_curr_amu
return = it_return
.

LOOP AT it_return INTO DATA(wa_return).


IF wa_return = ’E’.
MESSAGE: e003(zmessage_cl).
ENDIF.
ENDLOOP.
WHEN ’EXPORT_EXL’.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = ’File Directory’
default_extension = ’XLS’
initial_directory = ’D:\’
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_result.
lv_fname = lv_fullpath.

CALL FUNCTION ’GUI_DOWNLOAD’


EXPORTING
bin_filesize = ’’
filename = lv_fname
filetype = ’DAT’
TABLES
data_tab = it_final
* fieldnames = t_final
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
WHEN ’SAVE’.
MESSAGE: s004(zmessage_cl).
WHEN ’BACK’.
LEAVE PROGRAM.
ENDCASE.

ENDFORM.

You might also like