GL Clearing For (F-03) Using BAPI
Input
*&---------------------------------------------------------------------*
*& Report ZFI_GL_CLEARING
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfi_gl_clearing.
INCLUDE zfi_gl_clearing_top.
INCLUDE zfi_gl_clearing_sec.
INCLUDE zfi_gl_clearing_cls.
START-OF-SELECTION.
*call METHOD
DATA(lo_main) = NEW lcl_main( ).
lo_main->get_data( ).
lo_main->fill_data( ).
lo_main->display_clearing_result( ).
*&---------------------------------------------------------------------*
*& Include ZFI_GL_CLEARING_TOP
*&---------------------------------------------------------------------*
TABLES: sscrfields.
TYPES: BEGIN OF gty_final,
sno TYPE char4,
gl_account TYPE bseg-hkont,
clearing_date TYPE bseg-augcp,
currency TYPE waers,
doc_from TYPE bseg-belnr,
doc_to TYPE bseg-belnr,
year TYPE bseg-gjahr,
END OF gty_final.
TYPES :BEGIN OF gty_result,
type TYPE char10,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
hkont TYPE hkont,
zuonr TYPE dzuonr,
id TYPE symsgid,
number TYPE symsgno,
message TYPE bapi_msg,
END OF gty_result.
data: gt_result TYPE TABLE OF gty_result.
DATA: gt_final TYPE TABLE OF gty_final,
gs_final TYPE gty_final,
h_excel TYPE ole2_object, " Excel object
h_mapl TYPE ole2_object, " list of workbooks
h_map TYPE ole2_object, " workbook
h_zl TYPE ole2_object, " cell
h_f TYPE ole2_object, " font
t_raw TYPE truxs_t_text_data.
DATA: lt_doc TYPE RANGE OF mara-matnr,
ls_doc LIKE LINE OF lt_doc.
DATA:
lt_acchd TYPE acchd_t,
lt_accit TYPE accit_t,
lt_acccr TYPE acccr_t,
lv_posnr TYPE posnr_acc,
lv_cr_amount TYPE wrbtr,
lt_open_tab TYPE postab_tab,
lv_difference TYPE dmbtr,
lv_post_clr TYPE char1.
DATA:
md_tender_type TYPE ztender_type,
md_tender_gl TYPE hkont,
md_key_date TYPE allgstid,
md_bank_gl TYPE hkont,
md_charges_gl TYPE hkont,
md_difference_gl TYPE hkont,
md_diff_amount TYPE dmbtr,
md_diff_ind TYPE flag,
md_total_inv_amount TYPE dmbtr,
md_cr_amount TYPE dmbtr,
md_doc_type TYPE blart VALUE 'ZA',
md_posting_date TYPE budat,
md_filefullpath TYPE string,
ms_data TYPE zfi_tender_post_struc,
* mt_result TYPE tt_result,
* mt_clearing_result TYPE tt_cleating_result,
mt_gl_data TYPE REF TO data,
gl_tablestructure TYPE REF TO cl_abap_structdescr,
tabletype TYPE REF TO cl_abap_tabledescr.
*&---------------------------------------------------------------------*
*& Include ZFI_GL_CLEARING_SEC
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_file TYPE ibipparms-path.
SELECTION-SCREEN END OF BLOCK b1 .
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002 .
SELECTION-SCREEN: PUSHBUTTON 40(70) cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file .
*** File Upload.
PERFORM file_upload.
INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = icon_xxl
text = 'Generate Template'
info = 'Generate Excel File Template'
IMPORTING
result = cmdgen
EXCEPTIONS
OTHERS = 0.
AT SELECTION-SCREEN.
CASE sscrfields.
WHEN 'A_GEN'.
PERFORM generate_template.
ENDCASE.
*& FORM generate_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM generate_template .
* start Excel
CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
SET PROPERTY OF h_excel 'Visible' = 1.
* get list of workbooks, initially empty
CALL METHOD OF
h_excel
'Workbooks' = h_mapl.
*** Error handle File
PERFORM err_hdl.
* add a new workbook
CALL METHOD OF
h_mapl
'Add' = h_map.
*** Error handle File
PERFORM err_hdl.
PERFORM fill_cell USING: 1 1 0 'Sno',
1 2 0 'Gl Account',
1 3 0 'Clearing Date',
1 4 0 'Currency',
1 5 0 'Doc From',
1 6 0 'Doc To',
1 7 0 'Year'.
ENDFORM.
FORM err_hdl .
IF sy-subrc <> 0.
CALL METHOD OF
h_excel
'QUIT'.
FREE OBJECT h_excel.
h_excel-handle = -1.
MESSAGE: 'Failed to generate template.' TYPE 'E'.
ENDIF.
ENDFORM.
FORM fill_cell USING i j bold val.
CALL METHOD OF
h_excel
'Cells' = h_zl
EXPORTING
#1 = i
#2 = j.
PERFORM err_hdl.
SET PROPERTY OF h_zl 'Value' = val .
PERFORM err_hdl.
GET PROPERTY OF h_zl 'Font' = h_f.
PERFORM err_hdl.
SET PROPERTY OF h_f 'Bold' = bold .
PERFORM err_hdl.
ENDFORM.
FORM file_upload .
****FIle Upload Data
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Include ZFI_GL_CLEARING_CLS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
TYPES:
tt_open_items TYPE STANDARD TABLE OF bsis_view WITH DEFAULT KEY.
METHODS:
get_data,
fill_data,
display_clearing_result,
get_open_items IMPORTING
VALUE(im_bukrs) TYPE bukrs
VALUE(im_gl) TYPE hkont
VALUE(im_doc_form) TYPE bseg-belnr
VALUE(im_doc_to) TYPE bseg-belnr
RETURNING
VALUE(rt_open_items) TYPE tt_open_items,
fill_rfpos_data IMPORTING
VALUE(is_open_items) TYPE bsis_view
RETURNING
VALUE(rs_rfpos) TYPE rfops,
fill_accounting_data IMPORTING
VALUE(im_payments) TYPE flag
VALUE(im_invoices) TYPE flag
VALUE(im_posnr) TYPE posnr_acc
VALUE(is_open_items) TYPE rfops
CHANGING
VALUE(cv_cr_amount) TYPE wrbtr
VALUE(ct_acchd) TYPE acchd_t
VALUE(ct_accit) TYPE accit_tab
VALUE(ct_acccr) TYPE acccr_tab,
post_clearing IMPORTING
VALUE(it_open_items) TYPE postab_tab
VALUE(it_acchd) TYPE acchd_t
VALUE(it_accit) TYPE accit_t
VALUE(it_acccr) TYPE acccr_t
VALUE(im_gl) TYPE hkont
VALUE(im_diff) TYPE flag
EXPORTING
VALUE(e_belnr) TYPE belnr_d
VALUE(e_bukrs) TYPE bukrs
VALUE(e_gjahr) TYPE gjahr,
fill_difference_line IMPORTING
VALUE(im_posnr) TYPE posnr_acc
VALUE(is_open_items) TYPE rfops
VALUE(im_amount) TYPE dmbtr
CHANGING
VALUE(ct_acchd) TYPE acchd_t
VALUE(ct_accit) TYPE accit_tab
VALUE(ct_acccr) TYPE acccr_tab,
on_link_click FOR EVENT link_click OF cl_salv_events_table IMPORTING row column.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD get_data .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = t_raw
i_filename = p_file
TABLES
i_tab_converted_data = gt_final.
IF gt_final IS INITIAL.
MESSAGE 'No data uploaded' TYPE 'E'.
ENDIF.
ENDMETHOD.
METHOD fill_data.
LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<fs_final>).
<fs_final>-gl_account = |{ <fs_final>-gl_account ALPHA = IN }|.
<fs_final>-doc_from = |{ <fs_final>-doc_from ALPHA = IN }|.
<fs_final>-doc_to = |{ <fs_final>-doc_to ALPHA = IN }|.
md_posting_date = <fs_final>-clearing_date.
CALL METHOD get_open_items
EXPORTING
im_bukrs = '****'
im_gl = <fs_final>-gl_account
im_doc_form = <fs_final>-doc_from
im_doc_to = <fs_final>-doc_to
RECEIVING
rt_open_items = DATA(gt_gl_open_items).
DATA(gt_credit) = gt_gl_open_items.
DATA(gt_debit) = gt_gl_open_items.
SORT: gt_credit BY bukrs zuonr prctr,
gt_debit BY bukrs zuonr prctr.
DELETE gt_credit WHERE shkzg = 'H'.
DELETE gt_debit WHERE shkzg = 'S'.
DELETE ADJACENT DUPLICATES FROM gt_gl_open_items COMPARING belnr bukrs .
LOOP AT gt_gl_open_items ASSIGNING FIELD-SYMBOL(<fs_gl_open>).
LOOP AT gt_credit ASSIGNING FIELD-SYMBOL(<fs_credit>) WHERE belnr = <fs_gl_open>-belnr
AND bukrs = <fs_gl_open>-bukrs
AND gjahr = <fs_gl_open>-gjahr.
lv_posnr = lv_posnr + 1.
"Fill RFPOS(Open Items for Clearing Transactions)
APPEND INITIAL LINE TO lt_open_tab ASSIGNING FIELD-SYMBOL(<ls_open_post>).
<ls_open_post> = fill_rfpos_data( <fs_credit> ).
lv_cr_amount = md_cr_amount = lv_cr_amount + <fs_credit>-wrbtr.
"Fill Accounting Information
CALL METHOD fill_accounting_data
EXPORTING
im_payments = abap_true
im_invoices = abap_false
im_posnr = lv_posnr
is_open_items = <ls_open_post>
CHANGING
cv_cr_amount = lv_cr_amount
ct_acchd = lt_acchd
ct_accit = lt_accit
ct_acccr = lt_acccr.
ENDLOOP.
LOOP AT gt_debit ASSIGNING FIELD-SYMBOL(<fs_debit>) WHERE belnr = <fs_gl_open>-belnr
AND bukrs = <fs_gl_open>-bukrs
AND gjahr = <fs_gl_open>-gjahr.
lv_posnr = lv_posnr + 1.
"Fill RFPOS(Open Items for Clearing Transactions)
UNASSIGN <ls_open_post>.
APPEND INITIAL LINE TO lt_open_tab ASSIGNING <ls_open_post>.
<ls_open_post> = fill_rfpos_data( <fs_debit> ).
"Fill Accounting Information
CALL METHOD fill_accounting_data
EXPORTING
im_payments = abap_false
im_invoices = abap_true
im_posnr = lv_posnr
is_open_items = <ls_open_post>
CHANGING
cv_cr_amount = lv_cr_amount
ct_acchd = lt_acchd
ct_accit = lt_accit
ct_acccr = lt_acccr.
ENDLOOP.
"Fill Difference Amount Line
IF ( md_total_inv_amount - md_cr_amount ) NE 0 AND
md_total_inv_amount NE 0 AND md_cr_amount NE 0.
lv_difference = md_total_inv_amount - md_cr_amount.
IF lv_difference LT 0.
MULTIPLY lv_difference BY -1.
ENDIF.
IF lv_difference LE md_diff_amount.
lv_posnr = lv_posnr + 1.
REFRESH: lt_accit,lt_acccr.
md_diff_ind = abap_true.
CALL METHOD fill_difference_line
EXPORTING
im_posnr = lv_posnr
is_open_items = <ls_open_post>
im_amount = ( md_cr_amount - md_total_inv_amount )
CHANGING
ct_acchd = lt_acchd
ct_accit = lt_accit
ct_acccr = lt_acccr.
ENDIF.
ENDIF.
ENDLOOP.
AT END OF sno.
CALL METHOD post_clearing
EXPORTING
it_open_items = lt_open_tab
it_acchd = lt_acchd
it_accit = lt_accit
it_acccr = lt_acccr
im_gl = <fs_final>-gl_account
im_diff = md_diff_ind
IMPORTING
e_belnr = DATA(lv_belnr)
e_gjahr = DATA(lv_gjahr).
CLEAR:
lv_posnr,
lv_post_clr,
lv_cr_amount,
md_total_inv_amount,
md_cr_amount,
lt_open_tab,
lt_acccr,
lt_accit,
lt_acchd.
ENDAT.
ENDLOOP.
ENDMETHOD.
METHOD get_open_items.
ls_doc-sign = 'I'.
IF im_doc_to IS NOT INITIAL .
ls_doc-option = 'BT'.
ELSE.
ls_doc-option = 'EQ'.
ENDIF.
ls_doc-low = im_doc_form.
ls_doc-high = im_doc_to.
APPEND ls_doc TO lt_doc.
CLEAR: rt_open_items.
SELECT *
FROM bsis_view
INTO TABLE @DATA(lt_open_items)
WHERE belnr IN @lt_doc AND
bukrs EQ @im_bukrs
AND hkont EQ @im_gl.
SELECT *
FROM bsas_view
APPENDING TABLE @lt_open_items
WHERE belnr IN @lt_doc AND
bukrs EQ @im_bukrs
AND hkont EQ @im_gl.
SORT lt_open_items BY bukrs belnr gjahr buzei.
DELETE lt_open_items WHERE augbl IS NOT INITIAL. " Delete record if it has Clearing document
rt_open_items = lt_open_items.
CLEAR : lt_doc.
ENDMETHOD.
METHOD fill_rfpos_data.
rs_rfpos = CORRESPONDING #( is_open_items ).
rs_rfpos-koart = 'S'.
rs_rfpos-xaktp = 'X'.
rs_rfpos-konko = is_open_items-hkont.
ENDMETHOD.
METHOD fill_accounting_data.
IF ct_acchd IS INITIAL.
"Fill Accounting Header Information
APPEND INITIAL LINE TO ct_acchd ASSIGNING FIELD-SYMBOL(<ls_acchd>).
<ls_acchd>-bktxt = 'Clearing Document'.
ENDIF.
"Fill Payments Accounting Information
IF im_payments IS NOT INITIAL.
"Fill Accounting Item Information
APPEND INITIAL LINE TO ct_accit ASSIGNING FIELD-SYMBOL(<ls_accit>).
<ls_accit> = CORRESPONDING #( is_open_items MAPPING hkont = konko
EXCEPT belnr blart shkzg pswbt mwskz ) .
<ls_accit>-awtyp = ''.
<ls_accit>-posnr = im_posnr.
<ls_accit>-blart = 'AB'.
<ls_accit>-bldat = md_posting_date.
<ls_accit>-budat = md_posting_date.
<ls_accit>-shkzg = 'H'.
<ls_accit>-bschl = 50.
<ls_accit>-xmwst = 'X'.
"Fill Accounting Currency Information
APPEND INITIAL LINE TO ct_acccr ASSIGNING FIELD-SYMBOL(<ls_acccr>).
<ls_acccr>-awtyp = ''.
<ls_acccr>-posnr = im_posnr.
<ls_acccr>-curtp = '00'.
<ls_acccr>-waers = is_open_items-waers.
<ls_acccr>-wrbtr = is_open_items-wrbtr * -1.
"Fill Invoice Accounting Information
ELSEIF im_invoices IS NOT INITIAL.
APPEND INITIAL LINE TO ct_accit ASSIGNING <ls_accit>.
<ls_accit> = CORRESPONDING #( is_open_items MAPPING hkont = konko
EXCEPT belnr blart shkzg pswbt mwskz ).
<ls_accit>-awtyp = ''.
<ls_accit>-posnr = im_posnr.
<ls_accit>-blart = 'AB'.
<ls_accit>-bldat = md_posting_date.
<ls_accit>-budat = md_posting_date.
<ls_accit>-shkzg = 'S'.
<ls_accit>-bschl = 40.
APPEND INITIAL LINE TO ct_acccr ASSIGNING <ls_acccr>.
<ls_acccr>-awtyp = ''.
<ls_acccr>-posnr = im_posnr.
<ls_acccr>-curtp = '00'.
<ls_acccr>-waers = is_open_items-waers.
<ls_acccr>-wrbtr = is_open_items-wrbtr.
cv_cr_amount = cv_cr_amount - is_open_items-wrbtr.
"Fill Accounting Currency Information
" If Credit amount is greater than debit amount
md_total_inv_amount = md_total_inv_amount + is_open_items-wrbtr.
ENDIF.
ENDMETHOD.
METHOD fill_difference_line.
"Fill Difference GL
APPEND INITIAL LINE TO ct_accit ASSIGNING FIELD-SYMBOL(<ls_accit>).
<ls_accit> = CORRESPONDING #( is_open_items EXCEPT hkont belnr blart shkzg pswbt mwskz ).
<ls_accit>-posnr = im_posnr.
<ls_accit>-blart = 'AB'.
<ls_accit>-bldat = md_posting_date.
<ls_accit>-budat = md_posting_date.
<ls_accit>-budat = md_posting_date.
<ls_accit>-hkont = md_difference_gl.
APPEND INITIAL LINE TO ct_acccr ASSIGNING FIELD-SYMBOL(<ls_acccr>).
<ls_acccr>-posnr = im_posnr.
<ls_acccr>-curtp = '00'.
<ls_acccr>-waers = is_open_items-waers.
<ls_acccr>-wrbtr = im_amount.
IF <ls_acccr>-wrbtr LT 0.
<ls_accit>-bschl = 50.
<ls_accit>-shkzg = 'H'.
ELSE.
<ls_accit>-bschl = 40.
<ls_accit>-shkzg = 'S'.
ENDIF.
ENDMETHOD.
METHOD post_clearing.
DATA:
lv_message TYPE itex132.
READ TABLE it_accit INTO DATA(ls_accit) INDEX 1.
LOOP AT it_accit ASSIGNING FIELD-SYMBOL(<accit>).
IF <accit>-gjahr = 2023.
CLEAR <accit>-gjahr.
ENDIF.
ENDLOOP.
CALL FUNCTION 'ZFI_AUTO_CLEARING_CREATE'
EXPORTING
i_clr_trans = 'UMBUCHNG' "c_clr_trans
it_open_item_tab = it_open_items
im_gl = im_gl
im_diff = im_diff
* i_simulation = space
IMPORTING
e_belnr = e_belnr
e_bukrs = e_bukrs
e_gjahr = e_gjahr
CHANGING
ct_acchd = it_acchd
ct_accit = it_accit " Accounting Interface: Item Information
ct_acccr = it_acccr " Accounting Interface: Currency Information
EXCEPTIONS
error_message = 1
OTHERS = 2.
IF sy-subrc <> 0.
* ev_return_code = sy-subrc.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = sy-msgid
lang = '-D'
no = sy-msgno
v1 = sy-msgv1
v2 = sy-msgv2
v3 = sy-msgv3
v4 = sy-msgv4
IMPORTING
msg = lv_message
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
"mplement suitable error handling here
ENDIF.
APPEND INITIAL LINE TO gt_result ASSIGNING FIELD-SYMBOL(<fs_result>).
<fs_result>-type = icon_led_red.
<fs_result>-bukrs = '****'.
<fs_result>-id = sy-msgid.
<fs_result>-number = sy-msgno.
<fs_result>-message = lv_message.
ELSE.
APPEND INITIAL LINE TO gt_result ASSIGNING <fs_result>.
<fs_result>-type = icon_led_green.
<fs_result>-bukrs = e_bukrs.
<fs_result>-belnr = e_belnr.
<fs_result>-gjahr = e_gjahr.
<fs_result>-hkont = im_gl.
<fs_result>-message = 'Clearing Document Posted Successfully'(007).
ENDIF.
ENDMETHOD.
METHOD display_clearing_result.
DATA:
lo_column TYPE REF TO cl_salv_column_table.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = DATA(lo_salv) " Basis Class Simple ALV Tables
CHANGING
t_table = gt_result.
DATA(lo_functions) = lo_salv->get_functions( ).
lo_functions->set_all( ).
DATA(lo_columns) = lo_salv->get_columns( ).
lo_columns->set_optimize( ).
lo_column ?= lo_columns->get_column( 'TYPE' ).
lo_column->set_icon( if_salv_c_bool_sap=>true ).
lo_column->set_long_text( 'Status' ).
lo_column->set_alignment( if_salv_c_alignment=>centered ).
lo_column->set_output_length( 20 ).
lo_column ?= lo_columns->get_column( 'BELNR' ).
lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
DATA(lo_events) = lo_salv->get_event( ).
SET HANDLER on_link_click FOR lo_events.
lo_salv->display( ).
CATCH cx_salv_msg INTO DATA(lx_salv_msg). " ALV: General Error Class with Message
CATCH cx_salv_data_error INTO DATA(lx_salv_data_error). " ALV: General Error Class (Checked in Syntax Check)
CATCH cx_salv_not_found INTO DATA(lx_salv_not_found). " ALV: General Error Class (Checked in Syntax Check)
CATCH cx_salv_existing INTO DATA(lx_salv_existing). " ALV: General Error Class (Checked in Syntax Check)
ENDTRY.
ENDMETHOD.
METHOD on_link_click.
IF column = 'BELNR'.
READ TABLE gt_result INTO DATA(ls_result) INDEX row.
IF sy-subrc = 0.
SET PARAMETER ID 'BLN' FIELD ls_result-belnr.
SET PARAMETER ID 'BUK' FIELD ls_result-bukrs.
SET PARAMETER ID 'GJR' FIELD ls_result-gjahr.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS.
Note : ZFI_AUTO_CLEARING_CREATE ( find the below Code )
FUNCTION zfi_auto_clearing_create.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_CLR_TRANS) TYPE CHAR8
*" REFERENCE(IT_OPEN_ITEM_TAB) TYPE POSTAB_TAB
*" REFERENCE(I_DIFF_TC) TYPE DIFFW OPTIONAL
*" REFERENCE(I_SIMULATION) TYPE XFELD DEFAULT SPACE
*" VALUE(IM_GL) TYPE HKONT OPTIONAL
*" VALUE(IM_DIFF) TYPE FLAG OPTIONAL
*" EXPORTING
*" REFERENCE(E_BELNR) TYPE BELNR_D
*" REFERENCE(E_BUKRS) TYPE BUKRS
*" REFERENCE(E_GJAHR) TYPE GJAHR
*" CHANGING
*" REFERENCE(CT_ACCHD) TYPE ACCHD_T
*" REFERENCE(CT_ACCIT) TYPE ACCIT_TAB
*" REFERENCE(CT_ACCCR) TYPE ACCCR_TAB
*" REFERENCE(CT_ACCFI) TYPE ACCFI_T OPTIONAL
*" REFERENCE(CT_ACCIT_EXT) TYPE FAGL_T_ACCIT_EXTENSION OPTIONAL
*" EXCEPTIONS
*" ERROR_MESSAGE
*"----------------------------------------------------------------------
DATA: ls_acchd TYPE acchd,
ls_accit TYPE accit,
ls_acccr TYPE acccr,
ls_accfi TYPE accfi,
ls_accit_ext TYPE accit_extension,
lt_ausz1 TYPE ausz1_tab,
lt_ausz2 TYPE ausz2_tab,
lt_ausz3 TYPE ausz_clr_tab,
lt_acctx TYPE TABLE OF accbset.
READ TABLE ct_acchd INDEX 1 INTO ls_acchd.
READ TABLE ct_accit INDEX 1 INTO ls_accit.
READ TABLE ct_acccr INDEX 1 INTO ls_acccr.
IF ct_accfi IS SUPPLIED.
READ TABLE ct_accfi INDEX 1 INTO ls_accfi.
ENDIF.
IF ct_accit_ext IS SUPPLIED.
READ TABLE ct_accit_ext INDEX 1 INTO ls_accit_ext.
ENDIF.
IF ls_acchd-awtyp IS INITIAL AND ls_acchd-glvor IS INITIAL.
ls_acchd-awtyp = 'BKPFF'.
ls_acchd-glvor = 'RFBU'.
MODIFY ct_acchd FROM ls_acchd TRANSPORTING awtyp glvor
WHERE awtyp <> ls_acchd-awtyp OR
glvor <> ls_acchd-glvor.
ls_accit-awtyp = ls_acchd-awtyp.
MODIFY ct_accit FROM ls_accit TRANSPORTING awtyp
WHERE awtyp <> ls_acchd-awtyp.
ls_acccr-awtyp = ls_acchd-awtyp.
MODIFY ct_acccr FROM ls_acccr TRANSPORTING awtyp
WHERE awtyp <> ls_acchd-awtyp.
IF ct_accfi IS SUPPLIED.
ls_accfi-awtyp = ls_acchd-awtyp.
MODIFY ct_accfi FROM ls_accfi TRANSPORTING awtyp
WHERE awtyp <> ls_acchd-awtyp.
ENDIF.
IF ct_accit_ext IS SUPPLIED.
ls_accit_ext-awtyp = ls_acchd-awtyp.
MODIFY ct_accit_ext FROM ls_accit_ext
TRANSPORTING awtyp
WHERE awtyp <> ls_acchd-awtyp.
ENDIF. "
ENDIF.
* VAT calculation for manual line items is not supported (yet)
LOOP AT ct_accit INTO ls_accit WHERE mwskz NE space.
MESSAGE e899 WITH 'No VAT calculation on manual line items (yet).'.
ENDLOOP.
* classic/old withholding tax is not supported (yet)
LOOP AT ct_accit INTO ls_accit WHERE qsskz NE space
AND koart CA 'DVK'.
CALL FUNCTION 'FI_CHECK_EXTENDED_WT'
EXPORTING
i_bukrs = ls_accit-bukrs
EXCEPTIONS
component_not_active = 1
not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE e448(f5a).
ENDIF.
ENDLOOP.
* create/execute the clearing on the basis of the provided open items -
CALL FUNCTION 'FI_CLEARING_CREATE'
EXPORTING
i_clr_trans = i_clr_trans
it_open_item_tab = it_open_item_tab
i_diff_tc = i_diff_tc
IMPORTING
et_ausz1 = lt_ausz1
et_ausz2 = lt_ausz2
et_ausz3 = lt_ausz3
CHANGING
ct_acchd = ct_acchd
ct_accit = ct_accit
ct_acccr = ct_acccr
ct_accfi = ct_accfi
ct_acctx = lt_acctx
ct_accit_ext = ct_accit_ext.
IF im_diff IS INITIAL.
IF im_gl IS NOT INITIAL.
DELETE ct_accit WHERE hkont = im_gl AND augbl IS INITIAL.
LOOP AT ct_acccr INTO ls_acccr.
READ TABLE ct_accit TRANSPORTING NO FIELDS WITH KEY posnr = ls_acccr-posnr.
IF sy-subrc NE 0.
DELETE ct_acccr.
ENDIF.
ENDLOOP.
ENDIF.
ELSE.
IF im_gl IS NOT INITIAL.
DELETE ct_accit WHERE hkont = im_gl AND augbl IS INITIAL AND posnr = ls_accit-posnr.
LOOP AT ct_acccr INTO ls_acccr.
READ TABLE ct_accit TRANSPORTING NO FIELDS WITH KEY posnr = ls_acccr-posnr.
IF sy-subrc NE 0.
DELETE ct_acccr.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
READ TABLE it_open_item_tab INTO DATA(ls_open_items) INDEX 1.
IF sy-subrc = 0.
MODIFY ct_accit FROM ls_accit TRANSPORTING zuonr
WHERE zuonr <> ls_open_items-zuonr.
ENDIF.
CLEAR:ls_acccr.
READ TABLE ct_acchd INDEX 1 INTO ls_acchd.
READ TABLE ct_accit INDEX 1 INTO ls_accit.
* ------ call the general interface to accounting / RWIN --------------
CALL FUNCTION 'AC_DOCUMENT_CREATE'
EXPORTING
i_free_table = ' '
TABLES
t_acchd = ct_acchd
t_accit = ct_accit
t_acccr = ct_acccr
t_accfi = ct_accfi
t_acctx = lt_acctx
t_accit_ext = ct_accit_ext
t_ausz2 = lt_ausz2
t_ausz3 = lt_ausz3.
IF i_simulation IS INITIAL.
IF ls_acchd-awtyp EQ 'BKPFF' AND ls_acchd-awref IS INITIAL.
PERFORM belegnummer_vergeben USING ls_accit-bukrs
ls_accit-gjahr
ls_accit-blart
g_group_ledger
CHANGING ls_acchd-awref.
ls_acchd-aworg(4) = ls_accit-bukrs.
ls_acchd-aworg+4(4) = ls_accit-gjahr.
ENDIF.
MODIFY ct_acchd FROM ls_acchd TRANSPORTING awref aworg
WHERE awref <> ls_acchd-awref
OR aworg <> ls_acchd-aworg.
CALL FUNCTION 'AC_DOCUMENT_POST'
EXPORTING
i_awtyp = ls_acchd-awtyp
i_awref = ls_acchd-awref
i_aworg = ls_acchd-aworg.
COMMIT WORK AND WAIT.
e_belnr = ls_acchd-awref.
e_bukrs = ls_accit-bukrs.
e_gjahr = ls_accit-gjahr.
ENDIF.
ENDFUNCTION.
Comments
Post a Comment