You are on page 1of 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