0% found this document useful (0 votes)
201 views

Method ABAP

This document contains code for processing invoice data and posting it to SAP using BAPI functions. It defines data structures to hold invoice header, item, payment and tax information extracted from an IS_TRANSACTION structure. It calls BAPI functions to create a header, item and payment documents, passing customer, tax and currency information. It loops through invoice payments, assigning values to accounting documents which are appended to tables and passed to the BAPI functions for posting.

Uploaded by

Florin Zavate
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
201 views

Method ABAP

This document contains code for processing invoice data and posting it to SAP using BAPI functions. It defines data structures to hold invoice header, item, payment and tax information extracted from an IS_TRANSACTION structure. It calls BAPI functions to create a header, item and payment documents, passing customer, tax and currency information. It loops through invoice payments, assigning values to accounting documents which are appended to tables and passed to the BAPI functions for posting.

Uploaded by

Florin Zavate
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 10

METHOD INCASARE.

data:
g_obj_type TYPE BAPIACHE09-OBJ_TYPE,
g_obj_key TYPE BAPIACHE09-OBJ_KEY,
g_obj_sys TYPE BAPIACHE09-OBJ_SYS .
DATA:
lwa_header TYPE bapiache09,
lt_ar TYPE TABLE OF bapiacar09,
ls_return TYPE bapiret2,
lv_text TYPE string,
lwa_ar TYPE bapiacar09,
wa_zNRS_INV_HD TYPE zNRS_INV_HD,
wa_zNRS_INV_HD_2 TYPE zNRS_INV_HD, "CHECK
wa_zNRS_INV_error TYPE zNRS_INV_error,
toleranta_err TYPE char255,
wa_zNRS_INV_NR TYPE zNRS_INV_NR,
lt_return TYPE TABLE OF bapiret2,
lwa_return TYPE bapiret2,
lt_curr TYPE TABLE OF bapiaccr09,
LT_ACCOUNTTAX TYPE TABLE OF BAPIACTX09,
WA_ACCOUNTTAX TYPE BAPIACTX09,
LT_CRITERIA TYPE TABLE OF BAPIACKEC9,
WA_CRITERIA TYPE BAPIACKEC9,
lwa_curr TYPE bapiaccr09,
lwa_curr_tax TYPE bapiaccr09,
it_extension1 TYPE STANDARD TABLE OF bapiacextc,
wa_extension1 TYPE bapiacextc,
it_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX,
wa_EXTENSION2 type BAPIPAREX.
data: tipdoc(20),
wa_ZFB_XNEGP TYPE ZFB_XNEGP,
WA_ZFB_C_ACCFI TYPE ZFB_C_ACCFI,
it_accountgl TYPE STANDARD TABLE OF bapiacgl09 ,
CUSTOMERCPD TYPE BAPIACPA09,
lwa_accountgl TYPE bapiacgl09.

data: T_MWDAt TYPE TABLE OF RTAX1U15,


w_mwdat TYPE RTAX1U15.
DATA: lv_date TYPE sydatum,
lv_amount TYPE wrbtr,
lv_menge TYPE menge_d,
ls_client TYPE zvs_client,
ls_vat TYPE zvs_tva,
* ls_invoice TYPE zvs_factura,
ls_incasare TYPE zvs_incasare,
lv_count TYPE count_pi,
lv_count_tax TYPE count_pi,
ls_accrev TYPE zvs_ctvenit,
lv_matnr TYPE matnr,
lv_meins TYPE meins,
lv_spart TYPE spart,
lv_partner TYPE pernr_d,
lv_bzirk TYPE bzirk,
lv_land1 TYPE land1,
ls_promo TYPE zvs_promo,
ls_services TYPE zvs_servicii,
detail_vat TYPE ZINTF_s_INV_I_VAT,
detailvatshare(10).

DATA: lt_r_matnr TYPE RANGE OF matnr,


ls_r_matnr LIKE LINE OF lt_r_matnr,
lt_mara TYPE STANDARD TABLE OF mara,
ls_mara TYPE mara,
lv_length TYPE i,
lv_matnr_am TYPE matnr,
lv_mtext TYPE text255,
lv_ambalaj TYPE abap_bool,
lv_offset TYPE i.

data: serial TYPE char1.

DATA: gt_bapimatnr TYPE TABLE OF BAPIMATINR,


gv_bapireturn1 TYPE BAPIRETURN1,
gs_bapimatnr TYPE BAPIMATINR.

FIELD-SYMBOLS: <fs_post> TYPE ftpost,


<fs_item> TYPE ZINTF_s_INV_I,
<DETAILACQ> TYPE ZINTF_S_INV_I_ACQ,
<detail_vat> type ZINTF_s_INV_I_VAT,
<SUBSCRIPTION> TYPE ZINTF_S_INV_S,
<fs_promo> TYPE zintf_sales_promos_data_s.
DATA:
lt_blntab TYPE re_t_ex_blntab,
lt_ftpost TYPE re_t_ex_ftpost,
lt_fttax TYPE re_t_ex_fttax,
lv_msgid TYPE symsgid,
lv_msgno TYPE symsgno,
tot_value TYPE BSEG-WRBTR,
DISC_VALUE TYPE BSEG-WRBTR,
lv_msgty TYPE symsgty,
lv_msgv1 TYPE syst_msgv,
lv_msgv2 TYPE syst_msgv,
lv_msgv3 TYPE syst_msgv,
lv_msgv4 TYPE syst_msgv,
lv_subrc TYPE sysubrc,
xcpdk type kna1-xcpdk ,
ls_blntab TYPE blntab.
CLEAR: ev_bukrs, ev_belnr, ev_gjahr.

DATA:
lv_change TYPE wrbtr,
ls_payment TYPE zvs_incasare,
ls_mmp TYPE zvs_mmp,
ls_ZNRS_PLATA TYPE ZNRS_PLATA.

lv_mtext = text-025.
me->mo_log-
>add_custom_message_to_log( EXPORTING iv_state = zcl_interface_log=>mc_info_s
tate
iv_mtext = lv_mtext ).

FIELD-SYMBOLS:
<fs_payment> TYPE ZINTF_S_INV_p,
<fs_change> TYPE zintf_sales_change_s.

lv_count = 1.
CONCATENATE IS_TRANSACTION-HEADER-INVOICEDATE '/' IS_TRANSACTION-HEADER-
INVOICEPOS into mv_guid.
SELECT SINGLE * FROM zNRS_INV_HD INTO wa_zNRS_INV_HD_2 WHERE GUID = mv_guid
AND INVOICEID = IS_TRANSACTION-HEADER-INVOICEID.
IF wa_zNRS_INV_HD_2-ZIMPORT = 'X'. " DE VERIFICAT LA MAI MULTE ANTETE
EXIT.
ENDIF.

SELECT SINGLE * FROM ZNRS_INV_HD INTO wa_zNRS_INV_HD WHERE guid = MV_GUID A


ND INVOICEID = IS_TRANSACTION-header-INVOICEID.
"data
IF IS_TRANSACTION-HEADER-INVOICECANCELLEDID is not INITIAL.
select single * from zvs_incasare into ls_incasare where doc_type = 'R'
and bukrs = '1000' .
else.
select single * from zvs_incasare into ls_incasare where doc_type = 'N'
and bukrs = '1000' .
ENDIF.

CONCATENATE IS_TRANSACTION-HEADER-INVOICEDATE(4) IS_TRANSACTION-HEADER-


INVOICEDATE+5(2) IS_TRANSACTION-HEADER-INVOICEDATE+8(2) into lv_date.
"client
* BREAK FLORINZ.
tipdoc = IS_TRANSACTION-HEADER-INVOICETYPE .
IF IS_TRANSACTION-HEADER-INVOICETYPE = 'BON FISCAL' AND IS_TRANSACTION-
HEADER-INVOICESERIAL IS NOT INITIAL.
tipdoc = 'FACTURA'.
else.
* tipdoc = 'BON FISCAL'.
ENDIF.
SELECT SINGLE * FROM zvs_client INTO ls_client WHERE vs_trx_sbs = IS_TRAN
SACTION-HEADER-invoicepos and INVOICETYPE = TIPDOC . " IS_TRANSACTION-
HEADER-INVOICETYPE .
"tva
select single xcpdk from kna1 into xcpdk where kunnr = ls_client-kunnr.
IF xcpdk = 'X'. "client ocazazional BAPIACPA09

DATA: JUDET TYPE T005U-BLAND.


SELECT SINGLE BLAND FROM T005U INTO JUDET WHERE SPRAS = 4 AND LAND1 = '
RO' AND BEZEI = IS_TRANSACTION-header-invoiceClientCounty.
IF IS_TRANSACTION-HEADER-invoiceClientTypE = 0. "PERSOANA FIZICA
wa_extension2-structure = 'ZFB_C_ACCFI' .
wa_ZFB_C_ACCFI-posnr = lv_count.
wa_ZFB_C_ACCFI-STKZN = 'X'.
wa_extension2-valuepart1 = wa_ZFB_C_ACCFI.
append wa_extension2 to it_extension2.
ENDIF.
CUSTOMERCPD-name = IS_TRANSACTION-header-invoiceClientName.
CUSTOMERCPD-REGION = JUDET.
CUSTOMERCPD-city = IS_TRANSACTION-header-invoiceClientCity.
CUSTOMERCPD-COUNTRY = 'RO'.
CUSTOMERCPD-LANGU_ISO = 'RO'.
CUSTOMERCPD-STREET = IS_TRANSACTION-header-invoiceClientAddress.
CUSTOMERCPD-TAX_NO_2 = IS_TRANSACTION-HEADER-invoiceClientTypE .
IF IS_TRANSACTION-header-invoiceClientType = 0.
CUSTOMERCPD-TAX_NO_1 = IS_TRANSACTION-header-invoiceClientCNPCUI.
ELSEIF IS_TRANSACTION-header-invoiceClientType = 1.
IF IS_TRANSACTION-header-invoiceClientCNPCUI(2) <> 'RO'.
CUSTOMERCPD-TAX_NO_1 = IS_TRANSACTION-header-invoiceClientCNPCUI.
else.
lwa_ar-VAT_REG_NO = IS_TRANSACTION-header-invoiceClientCNPCUI.
CONDENSE lwa_ar-VAT_REG_NO.
lwa_ar-REP_COUNTRY_EU = 'RO'.
ENDIF.
ENDIF.
ENDIF.

CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'


IMPORTING
OWN_LOGICAL_SYSTEM = lwa_header-OBJ_SYS
EXCEPTIONS
OWN_LOGICAL_SYSTEM_NOT_DEFINED = 1
OTHERS = 2.

lwa_header-bus_act = 'RFBU'.
lwa_header-OBJ_TYPE = 'BKPFF' .
lwa_header-OBJ_KEY = '$'.
lwa_header-comp_code = '1000'.
lwa_header-USERNAME = sy-uname.
lwa_header-doc_date = lv_date.
lwa_header-pstng_date = lv_date.
lwa_header-trans_date = lv_date.
lwa_header-HEADER_TXT = is_transaction-header-invoiceID .
lwa_header-fisc_year = lv_date+0(4).
lwa_header-fis_period = lv_date+4(2).
lwa_header-doc_type = ls_incasare-blart.
lwa_header-ref_doc_no = is_transaction-header-invoiceSerial.

if TIPDOC = 'BON FISCAL'.


lwa_header-ref_doc_no = is_transaction-header-invoiceID.
ENDIF.
* customer position
lwa_ar-itemno_acc = lv_count.
lwa_ar-CUSTOMER = ls_client-kunnr.
lwa_ar-gl_account = ''. "verificat
lwa_ar-comp_code = '1000'.
APPEND lwa_ar TO lt_ar.

LOOP AT is_transaction-payment ASSIGNING <fs_payment>.


tot_value = tot_value + <fs_payment>-invoicePaymentValue.
ENDLOOP.
lwa_curr-itemno_acc = lv_count.
lwa_curr-curr_type = '00'.
lwa_curr-currency = 'RON'.
lwa_curr-amt_doccur = tot_value * -1.
lwa_curr-amt_BASE = lwa_curr-amt_doccur .
APPEND lwa_curr TO lt_curr.

wa_extension2-structure = 'ZFB_XNEGP' .
wa_ZFB_XNEGP-posnr = lv_count.
wa_ZFB_XNEGP-BSCHL = LS_INCASARE-BSCHL_CRD.
wa_ZFB_XNEGP-XNEGP = LS_INCASARE-XNEGP_CRD.
wa_extension2-valuepart1 = wa_ZFB_XNEGP.
append wa_extension2 to it_extension2.

LOOP AT is_transaction-payment ASSIGNING <fs_payment>.


ADD 1 TO lv_count.
lwa_accountgl-ITEMNO_ACC = lv_count.
TRANSLATE <fs_payment>-invoicePaymentType TO UPPER CASE.
CLEAR ls_mmp.
* BREAK florinz.
CASE <fs_payment>-invoicePaymentType.
* WHEN 'CASH'.
* SELECT SINGLE * FROM zvs_mmp INTO ls_mmp
* WHERE VS_PAYMENT_ID = <fs_payment>-invoicePaymentType AND
* VS_TRX_SBS = is_transaction-header-InvoicePOS .
* WHEN 'CARD DEBIT'.
* SELECT SINGLE * FROM zvs_mmp INTO ls_mmp
* WHERE VS_PAYMENT_ID = <fs_payment>-
invoicePaymentType and "'CARD DEBIT/CREDIT' AND
* VS_ID_POS = is_transaction-header-InvoicePOS .
WHEN 'CREDIT'.
IF IS_TRANSACTION-HEADER-INVOICECANCELLEDID is not INITIAL.
SELECT SINGLE * FROM ZNRS_PLATA INTO ls_ZNRS_PLATA WHERE doc_type = '
R' and bukrs = '1000'.
else.
SELECT SINGLE * FROM ZNRS_PLATA INTO ls_ZNRS_PLATA where doc_type = '
N' and bukrs = '1000' .
ENDIF.
WHEN OTHERS.
SELECT SINGLE * FROM zvs_mmp INTO ls_mmp
WHERE VS_PAYMENT_ID = <fs_payment>-invoicePaymentType AND
VS_TRX_SBS = is_transaction-header-InvoicePOS .
IF sy-subrc <> 0.
SELECT SINGLE * FROM zvs_mmp INTO ls_mmp
WHERE VS_PAYMENT_ID = <fs_payment>-
invoicePaymentType and "'CARD DEBIT/CREDIT' AND
VS_ID_POS = is_transaction-header-InvoicePOS .
ENDIF.
ENDCASE.

lwa_curr-itemno_acc = lv_count.
lwa_curr-curr_type = '00'.
lwa_curr-currency = 'RON'.
lwa_curr-amt_doccur = <fs_payment>-invoicePaymentValue.
lwa_curr-amt_BASE = <fs_payment>-invoicePaymentValue.
APPEND lwa_curr TO lt_curr.

IF <fs_payment>-invoicePaymentType <> 'CREDIT'.


lwa_accountgl-ALLOC_NMBR = <fs_payment>-invoicePaymentID.

wa_extension2-structure = 'ZFB_XNEGP' .
wa_ZFB_XNEGP-posnr = lv_count.

lwa_accountgl-gl_account = ls_mmp-SAKNR.
lwa_accountgl-comp_code = ls_mmp-BUKRS.

wa_ZFB_XNEGP-BSCHL = LS_INCASARE-BSCHL_DEB.
wa_ZFB_XNEGP-XNEGP = LS_INCASARE-XNEGP_DEB.
wa_extension2-valuepart1 = wa_ZFB_XNEGP.

LOOP AT IS_TRANSACTION-SUBSCRIPTION ASSIGNING <SUBSCRIPTION>.


lwa_accountgl-ALLOC_NMBR = <SUBSCRIPTION>-saletype.
lwa_accountgl-ITEM_TEXT = <SUBSCRIPTION>-SUBSCRIPTIONTYPE.
ENDLOOP.
APPEND lwa_accountgl TO it_accountgl.
else.

lwa_ar-itemno_acc = lv_count.
lwa_ar-SP_GL_IND = ls_ZNRS_PLATA-UMSKZ.
lwa_ar-CUSTOMER = ls_ZNRS_PLATA-kunnr.
lwa_ar-gl_account = ''. "verificat
lwa_ar-comp_code = ls_ZNRS_PLATA-BUKRS.
APPEND lwa_ar TO lt_ar.

* lwa_accountgl-gl_account = ls_ZNRS_PLATA-kunnr.
* lwa_accountgl-comp_code = ls_mmp-BUKRS.
wa_extension2-structure = 'ZFB_XNEGP' .
wa_ZFB_XNEGP-posnr = lv_count.
wa_ZFB_XNEGP-BSCHL = ls_ZNRS_PLATA-BSCHL.
wa_extension2-valuepart1 = wa_ZFB_XNEGP.
endif.

append wa_extension2 to it_extension2.

ENDLOOP.

IF lt_curr IS INITIAL.
lv_mtext = text-016.
me->mo_log-
>add_custom_message_to_log( EXPORTING iv_state = zcl_interface_log=>mc_info_s
tate
iv_mtext = lv_mtext ).
RETURN.
ENDIF.
*break florinz. " incasare
if wa_zNRS_INV_HD_2-BELNR_INCASARE is INITIAL.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
DOCUMENTHEADER = lwa_header
CUSTOMERCPD = CUSTOMERCPD
TABLES
ACCOUNTGL = it_accountgl
ACCOUNTRECEIVABLE = lt_ar
CURRENCYAMOUNT = lt_curr
EXTENSION1 = it_extension1
RETURN = lt_return .
*break florinz.

IF sy-subrc <> 0.
me->mo_log->add_system_message_to_log( ).
ENDIF.

clear: wa_ZFB_XNEGP, wa_extension2.


wa_extension2-structure = 'ZFB_XNEGP' .
wa_ZFB_XNEGP-posnr = 0 . "lv_count.
wa_ZFB_XNEGP-XREF2_HD = TIPDOC . "IS_TRANSACTION-HEADER-INVOICETYPE .
* wa_ZFB_XNEGP-BSCHL_DEB
wa_extension2-valuepart1 = wa_ZFB_XNEGP.
append wa_extension2 to it_extension2.

*BREAK-POINT.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = lwa_header
CUSTOMERCPD = CUSTOMERCPD
* CONTRACTHEADER =
IMPORTING
obj_type = g_obj_type
obj_key = g_obj_key
obj_sys = g_obj_sys
TABLES
ACCOUNTGL = it_accountgl
ACCOUNTRECEIVABLE = lt_ar
* ACCOUNTPAYABLE =
* ACCOUNTTAX = LT_ACCOUNTTAX
CURRENCYAMOUNT = lt_curr
* CRITERIA = LT_CRITERIA
* VALUEFIELD =
EXTENSION1 = it_extension1
RETURN = lt_return
* PAYMENTCARD =
* CONTRACTITEM =
EXTENSION2 = it_EXTENSION2
* :REALESTATE =
* ACCOUNTWT =
.
data error(1).
clear error.
else.
g_obj_key(10) = wa_zNRS_INV_HD_2-BELNR_INCASARE.
ENDIF.
*BREAK FLORINZ.
LOOP AT lt_return INTO lwa_return WHERE type = 'E' .
error = 'X'.
ev_bukrs = '1000'.
ev_belnr = g_obj_key(10).
ev_gjahr = lv_date+0(4)..
lv_mtext = text-026.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-ID.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-
NUMBER.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-
MESSAGE.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-
LOG_NO.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-
LOG_MSG_NO.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-
MESSAGE_V1.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-
MESSAGE_V2.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-
MESSAGE_V3.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH lwa_return-
MESSAGE_V4.

me->mo_log-
>add_custom_message_to_log( EXPORTING iv_state = zcl_interface_log=>mc_error_
state
iv_mtext = lv_mtext ).
clear wa_zNRS_INV_error.
wa_zNRS_INV_error-guid = mv_guid.
wa_zNRS_INV_error-step = 'INCASARE' .
wa_zNRS_INV_error-DATA = SY-DATUM.
wa_zNRS_INV_error-TIMLO = SY-TIMLO.
wa_zNRS_INV_error-INVOICEID = IS_TRANSACTION-header-INVOICEID.
wa_zNRS_INV_error-message = lv_mtext.
modify zNRS_INV_error FROM wa_zNRS_INV_error .

select single * from zNRS_INV_NR into wa_zNRS_INV_NR WHERE guid = wa_zNRS_


INV_HD-guid.
wa_zNRS_INV_NR-ZNR_INV_ERROR = wa_zNRS_INV_NR-ZNR_INV_ERROR + 1 .
wa_zNRS_INV_NR-ZINVOICE_OK = ''.
MODIFY zNRS_INV_NR FROM wa_zNRS_INV_NR.

COMMIT WORK AND WAIT.


ENDLOOP.
if error = ''.
wa_zNRS_INV_HD-BELNR_INCASARE = g_obj_key(10).
wa_zNRS_INV_HD-GJAHR_INCASARE = lv_date+0(4).
modify zNRS_INV_HD from wa_zNRS_INV_HD.
COMMIT WORK AND WAIT.
ev_bukrs = '1000'.
ev_belnr = g_obj_key(10).
ev_gjahr = lv_date+0(4)..
lv_mtext = text-007.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH ev_bukrs.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH ev_belnr.
REPLACE FIRST OCCURRENCE OF '&' IN lv_mtext WITH ev_gjahr.
me->mo_log-
>add_custom_message_to_log( EXPORTING iv_state = zcl_interface_log=>mc_succes
s_state
iv_mtext = lv_mtext ).
else. ENDIF.

IF sy-subrc = 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.
ENDIF.

ENDMETHOD.

You might also like