Professional Documents
Culture Documents
Rpfieu Saft Ext Sdproc
Rpfieu Saft Ext Sdproc
****32_F begin
LOOP AT it_tax_data INTO ls_tax_data.
FIND '.' IN ls_tax_data-taxpercentage.
IF sy-subrc = 4.
"replace ',' by '.' if exists
REPLACE ALL OCCURRENCES OF ',' IN ls_tax_data-taxpercentage WITH '.'.
IF sy-subrc = 4.
IF ls_tax_data-taxpercentage IS INITIAL.
ls_tax_data-taxpercentage = '0.00'.
ELSE.
"force .00 in tax percentage
CONCATENATE ls_tax_data-taxpercentage '.00'
INTO ls_tax_data-taxpercentage.
ENDIF.
ENDIF.
ENDIF.
"negative lookahead that ensure the next character is not a digit
"if positive it'll insert an additional zero
REPLACE REGEX '(\d+\.\d{1}(?!\d))'
IN ls_tax_data-taxpercentage
WITH '$1$2\0$3'.
**note 2393681
DATA: lt_vbrk_add_fields TYPE TABLE OF ty_vbrk_add_fields,
ls_vbrk_add_fields TYPE ty_vbrk_add_fields.
gv_land_exit = gv_bukrs_land.
TRY.
GET BADI gv_usr_exit_badi
FILTERS
land1 = gv_land_exit.
CATCH cx_badi_not_implemented.
ENDTRY.
**35_F begin
TRY.
GET BADI gv_badi_generic
FILTERS
land = gv_land_exit.
CATCH cx_badi_multiply_implemented.
CATCH cx_badi_not_implemented.
ENDTRY.
**35_F end
CLEAR gv_usr_exit_impl.
IF gv_usr_exit_badi IS NOT INITIAL.
TRY.
CALL METHOD cl_badi_query=>number_of_implementations
EXPORTING
badi = gv_usr_exit_badi
RECEIVING
num = gv_usr_exit_impl.
CATCH cx_badi_not_implemented.
ENDTRY.
ENDIF.
**note 2393681
TRY.
GET BADI lv_badi_special_docs
FILTERS
land = gv_land_exit.
CATCH cx_badi_multiply_implemented.
CATCH cx_badi_not_implemented.
ENDTRY.
**note 2393681
**41_F begin
IF gv_badi_generic IS BOUND.
CALL BADI gv_badi_generic->get_special_docs_config
EXPORTING
iv_bukrs = p_bukrs
IMPORTING
et_fiptc_doc_exc = gt_fiptc_doc_exc.
ENDIF.
**41_F end
"on HOLD added as cursor was getting closed automatically after 2 iterations -
20_F
* --> Begin of 62_F
CALL METHOD clfieu_generic_saft=>get_inv_header_info
EXPORTING
iv_bukrs = p_bukrs
iv_first_date = gv_first_date
iv_end_date = gv_end_date
IMPORTING
ev_cursor = cur_vbrk.
* <-- End of 62_F
DO .
FETCH NEXT CURSOR cur_vbrk
INTO CORRESPONDING FIELDS OF TABLE it_inv_vbrk
PACKAGE SIZE 300.
IF sy-subrc <> 0.
CLOSE CURSOR cur_vbrk. "56_F
EXIT.
ELSE.
lv_index = sy-index. "29_F Deadlock deleting SD
ENDLOOP.
ENDIF.
******35_F begin
IF it_inv_vbrk[] IS NOT INITIAL.
IF gv_badi_generic IS BOUND.
CALL BADI gv_badi_generic->exclude_documents_sd
EXPORTING
iv_bukrs = p_bukrs
iv_gjahr = p_gjahr
it_fiptc_doc_exc = gt_fiptc_doc_exc "41_F
CHANGING
cv_inv_vbrk = it_inv_vbrk.
ENDIF.
ENDIF.
******35_F end
CLEAR :lv_count_inv.
******note 2285540
LOOP AT it_inv_vbrk INTO wa_inv_vbrk.
IF wa_inv_vbrk-vbtyp = 'U'.
gv_invoice_no_wd = gv_invoice_no_wd + 1.
ELSE.
gv_invoice_no = gv_invoice_no + 1.
ENDIF.
ENDLOOP.
CLEAR : wa_inv_vbrk.
******note 2285540
SORT it_inv_vbrk .
IF it_inv_vbrk[] IS NOT INITIAL.
"Added in scope of 29_F Deadlock deleting SD- begin
"Now we are sure to have records, in first iteration
" the extraction control line can be created.
IF sy-index EQ 1.
PERFORM create_summary_ctrl.
ENDIF.
"Added in scope of 29_F Deadlock deleting SD - end
********34_F begin
IF gv_bukrs_land EQ 'PT'.
PERFORM prepare_inv_list_status.
ENDIF.
********34_F end
********note 2393681
IF gv_bukrs_land = 'PT'.
CLEAR lt_vbrk_add_fields.
LOOP AT it_inv_vbrk INTO ls_inv_vbrk.
MOVE-CORRESPONDING ls_inv_vbrk TO ls_vbrk_add_fields.
APPEND ls_vbrk_add_fields TO lt_vbrk_add_fields.
ENDLOOP.
********30_F
*User exit to update additional fields
PERFORM call_user_badi.
********30_F
PERFORM update_summary_run.
**33_F begin
IF lv_stop_pt_extraction IS NOT INITIAL
AND gv_mess_type EQ 'E'. "36_F
PERFORM delete_data_extract.
ENDIF.
**33_F end
* Total number of invoices selected for SAF-T File creation
DESCRIBE TABLE it_inv_vbrk LINES lv_inv_cnt .
CLEAR : it_inv_cond_rec[].
OPEN CURSOR cur_konv
FOR SELECT knumv
kposn
mwsk1
* FROM (lv_tabname) "55_F "89_F
FROM (gv_tabname) "89_F
FOR ALL ENTRIES IN it_inv_vbrk
WHERE knumv = it_inv_vbrk-knumv
AND kappl = 'V'
AND koaid = 'D'. " tax information
DO .
FETCH NEXT CURSOR cur_konv
APPENDING CORRESPONDING FIELDS OF TABLE it_inv_cond_rec
PACKAGE SIZE 1000.
IF sy-subrc <> 0.
CLOSE CURSOR cur_konv. "56_F
EXIT.
ENDIF.
ENDDO.
* find the condition record information that is not residing in the database.
PERFORM map_inv_condn_exists.
PERFORM initiate_arch_read_vbak.
CLEAR gt_ais_read_result[].
gt_ais_read_result[] = gt_ais_read_result_vbak[].
IF gt_ais_read_result[] IS NOT INITIAL.
gv_arch_obj = 'SD_VBAK'.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " GET_CONDITION_REC_INFO
*&---------------------------------------------------------------------*
*& Form GET_DISCOUNT_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_discount_info .
* --> Begin of 89_F
* -- Commented (replaced by form GET_TABLE_SD_CONDITION)
* DATA: lv_tabname type tabname.
*
* lv_tabname = clfieu_generic_saft=>get_table_sd_condition( ). "55_F
* <-- End of 89_F
ENDDO.
TRY. "43_F
lv_bkpf_filter = cl_abap_dyn_prg=>check_whitelist_str(
val = lv_bkpf_filter
whitelist = clfieu_generic_saft=>gc_whitelist_sql
).
CATCH cx_abap_not_in_whitelist.
ENDTRY.
gv_idx_vbrk = sy-tabix.
lv_awkey_vbeln = wa_inv_vbrk-vbeln.
gv_awkey = lv_awkey_vbeln.
CLEAR :ls_acc_doc.
CLEAR : lv_belnr ."17_f
CLEAR :lv_gjahr. "17_f
READ TABLE lt_acc_doc INTO ls_acc_doc WITH KEY awtyp = 'BKPF'
STATUS = 'C'. "52_F
if sy-subrc ne 0.
READ TABLE lt_acc_doc INTO ls_acc_doc WITH KEY awtyp = 'BKPF'.
endif.
IF sy-subrc = 0.
MOVE ls_acc_doc-docnr+0(10) TO lv_belnr.
MOVE ls_acc_doc-ac_gjahr TO lv_gjahr .
ENDIF.
* check if the reading from archive is simultaneously selected .
IF lv_belnr IS NOT INITIAL."19_F
PERFORM set_selivno_foracc_fiarch.
ENDIF."19_f
*23092014--------------------------------------------------*
PERFORM map_fi_header_archival.
* PERFORM map_signature_data .
*23092014--------------------------------------------------*
DELETE it_inv_vbrk
WHERE vbeln EQ wa_inv_vbrk-vbeln.
ENDIF.
"48_F end
ENDIF.
CLEAR : wa_inv_vbrk. "17_f
ENDLOOP.
ENDFORM. " GET_ACC_DOC_INFO
*&---------------------------------------------------------------------*
*& Form GET_LINE_ITEM_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_line_item_info .
DATA : lv_tax_payable TYPE vbrp-mwsbp .
DATA : lv_count_lninv TYPE i.
DATA : lv_augru TYPE vbak-augru.
DATA : lv_record_deleted TYPE char1."24_F
DATA : lv_invlist_temp TYPE char20.
DATA : lv_condrec_inv TYPE vbrk-knumv.
DATA : lv_afs_field_string TYPE string,
lo_struct TYPE REF TO cl_abap_structdescr,
lt_ddfields TYPE ddfields.
DATA : lv_invflg TYPE c.
FIELD-SYMBOLS :<lv_disc_total> TYPE FIEU_DISCAMT.
DATA : lv_no_vbrl TYPE xfeld.
data : lv_posnr type posnr.
SORT it_inv_vbrk.
CATCH cx_badi_multiply_implemented.
CATCH cx_badi_not_implemented.
ENDTRY.
**37_F end
******note 2299395
PERFORM get_sd_history using 'X' it_vbrp_all[]. "Get data histoty if
applicable 40_F
******note 2299395
*****note 29_F
"all fields all need (small table)
SELECT * FROM tvaut
INTO TABLE lt_tvaut
FOR ALL ENTRIES IN it_vbrp_all
WHERE augru = it_vbrp_all-augru_auft
AND spras IN (gv_langs,'EN',sy-langu).
*****note 29_F
*** load downpayment
cl_generic_obj->load_downpayment_sd( ). "55_F
********34_F begin
IF lt_inv_list IS NOT INITIAL.
APPEND LINES OF lt_inv_list
TO gt_inv_list_child.
IF sy-subrc <> 0.
DELETE it_vbrp WHERE vbeln = wa_vbrp-vbeln.
IF sy-subrc = 0.
DELETE it_inv_vbrk WHERE vbeln = wa_vbrp-vbeln.
IF sy-subrc = 0.
IF wa_inv_vbrk-vbtyp = 'U'. "note 2285540
gv_invoice_no_wd = gv_invoice_no_wd - 1. "note 2285540
ELSE.
gv_invoice_no = gv_invoice_no - 1.
ENDIF.
lv_record_deleted = 'X'." 24_F
ENDIF.
ENDIF.
CLEAR : wa_vbrp.
CLEAR : wa_sales_offices.
ELSE.
wa_inv_vbrk-vkbur = wa_vbrp-vkbur.
MODIFY it_inv_vbrk FROM wa_inv_vbrk TRANSPORTING vkbur WHERE vbeln =
wa_vbrp-vbeln.
CLEAR : wa_inv_vbrk-vkbur.
ENDIF.
ENDIF.
ENDLOOP.
SORT it_so_data .
DELETE ADJACENT DUPLICATES FROM it_so_data COMPARING ALL FIELDS.
IF it_so_data[] IS NOT INITIAL.
PERFORM identify_sales_order_info.
ENDIF.
* 29_F
* Tax point Date
MOVE wa_inv_vbrk-fkdat TO wa_inv_lnes-taxpointdate.
* 29_F
* IF wa_inv_lnes-quantity IS INITIAL OR
* wa_inv_lnes-quantity = '0.00'.
* wa_inv_lnes-quantity = '1.00'.
* gv_appln_msg-msgty = 'W'. " Mandatory field missing
* gv_appln_msg-msgid = gc_message_class .
* gv_appln_msg-msgno = '057'.
* gv_appln_msg-msgv3 = wa_vbrp-posnr.
* gv_appln_msg-msgv2 = wa_vbrp-vbeln.
* gv_appln_msg-msgv1 = wa_vbrp-matnr.
* gv_appln_msg-probclass = '3'.
*
* CALL METHOD cl_generic_obj->gen_appl_log
* EXPORTING
* iv_appl_msg = gv_appln_msg
* iv_land = gv_bukrs_land
* iv_display = '-'
* iv_handle = gv_appln_handle.
*
* CLEAR : gv_appln_msg.
* ENDIF.
CLEAR : gv_appln_msg.
ENDIF.
* Plant information
MOVE wa_vbrp-werks TO wa_inv_lnes-plant.
* perform get_plant_address.
IF gv_usr_exit_impl GT 0.
CALL BADI gv_usr_exit_badi->identify_discount_amt
EXPORTING
iv_invoice_num = wa_inv_vbrk-vbeln
iv_posnr = wa_vbrp-posnr
iv_inv_date = wa_inv_vbrk-fkdat
iv_bukrs = wa_inv_vbrk-bukrs
iv_fkart = wa_inv_vbrk-fkart
iv_customer = wa_inv_vbrk-kunag
iv_vkorg = wa_inv_vbrk-vkorg
iv_knumv = wa_inv_vbrk-knumv
CHANGING
cv_kschl = wa_inv_lnes-kschl
cv_discount_amt = wa_inv_lnes-discount_amt.
ENDIF.
* *Tax information
PERFORM get_tax_info.
* Debit/Credit amounts and exchange rate information for invoices posted other
than EUR
PERFORM fill_inv_lne_amounts.
IF wa_vbrp-fareg BETWEEN '4' AND '5'. "55_F begin bill payment
wa_inv_lnes-posnr+0(1) = '9'.
* --> Begin of 76_F
IF wa_inv_vbrk-vbtyp_or = 'N' OR wa_inv_vbrk-vbtyp_or = 'O'. "Credit
Memo or Cancelation
wa_inv_lnes-curr_credit_amt = wa_inv_lnes-currr_debit_amt.
CLEAR wa_inv_lnes-currr_debit_amt.
wa_inv_lnes-credit_amt_ext = wa_inv_lnes-debit_amt_ext.
"totals already calculated, require update.
* --> Begin of 91_F
* (except Cancelled Invoices)
IF wa_inv_hd-inv_status <> 'A' AND
wa_inv_hd-inv_status <> 'F'.
* <-- End of 91_F
gv_total_credit_sd = gv_total_credit_sd + wa_inv_lnes-
credit_amt_ext.
gv_total_debit_sd = gv_total_debit_sd - wa_inv_lnes-
credit_amt_ext.
ENDIF. "91_F
CLEAR wa_inv_lnes-debit_amt_ext.
ELSE.
* <-- End of 76_F
wa_inv_lnes-currr_debit_amt = wa_inv_lnes-curr_credit_amt.
clear wa_inv_lnes-curr_credit_amt.
wa_inv_lnes-debit_amt_ext = wa_inv_lnes-credit_amt_ext.
"totals already calculated, require update.
* --> Begin of 91_F
* (except Cancelled Invoices)
IF wa_inv_hd-inv_status <> 'A' AND
wa_inv_hd-inv_status <> 'F'.
* <-- End of 91_F
gv_total_debit_sd = gv_total_debit_sd + wa_inv_lnes-debit_amt_ext.
gv_total_credit_sd = gv_total_credit_sd - wa_inv_lnes-
debit_amt_ext.
ENDIF. "91_F
CLEAR wa_inv_lnes-credit_amt_ext.
ENDIF. "76_F
ENDIF. "55_F end bill payment
* Get Settlement/Discount related info
PERFORM get_settlement_info.
MOVE gv_uuid TO wa_inv_lnes-ext_uuid.
* ******note 29_F
IF wa_vbrp-augru_auft IS NOT INITIAL.
UNASSIGN <fs_ls_tvaut>.
READ TABLE lt_tvaut
ASSIGNING <fs_ls_tvaut>
WITH TABLE KEY spras = gv_langs
augru = wa_vbrp-augru_auft.
IF sy-subrc <> 0.
READ TABLE lt_tvaut
ASSIGNING <fs_ls_tvaut>
WITH TABLE KEY spras = 'EN'
augru = wa_vbrp-augru_auft.
IF sy-subrc <> 0.
READ TABLE lt_tvaut
ASSIGNING <fs_ls_tvaut>
WITH TABLE KEY spras = sy-langu
augru = wa_vbrp-augru_auft.
ENDIF.
ENDIF.
IF <fs_ls_tvaut> IS ASSIGNED.
READ TABLE lt_canc_sd_docs
INTO ls_canc_sd_docs
WITH KEY vbeln = wa_inv_lnes-invoice_no.
IF sy-subrc = 0.
wa_inv_lnes-cred_note_ref = ls_canc_sd_docs-vbelv.
ENDIF.
wa_inv_lnes-cred_note_rea = <fs_ls_tvaut>-bezei.
ENDIF.
ENDIF.
*********39_F begin
CONCATENATE wa_vbrp-vgbel wa_vbrp-vgpos
INTO wa_inv_lnes-productserialnumber
SEPARATED BY '/'.
*********39_F begin
wa_inv_lnes-posnr = lv_posnr.
APPEND wa_inv_lnes TO it_inv_lnes.
ENDLOOP.
* * INVOICE NUMBER LINKED TO THE INVOICE LIST
IF lt_inv_list[] IS NOT INITIAL .
CLEAR : lv_disc_tax_in. "23_F- invoice List tax payable
ENDIF.
ENDLOOP.
ENDIF.
CLEAR wa_inv_lnes.
CLEAR wa_vbrp.
IF ls_bcv-tax_line_mat_ind = 'X'.
wa_vbrp-knumv = wa_inv_vbrk-knumv.
PERFORM tax_like_material using wa_vbrp
abap_false
'00000'. "46_F
ENDIF.
CLEAR it_vbrp[].
CLEAR it_so_data[].
CLEAR wa_so_data.
ELSE.
DELETE it_inv_vbrk WHERE vbeln = wa_inv_vbrk-vbeln.
IF wa_inv_vbrk-vbtyp = 'U'. "note 2285540
gv_invoice_no_wd = gv_invoice_no_wd - 1. "note 2285540
ELSE.
gv_invoice_no = gv_invoice_no - 1.
ENDIF.
lv_record_deleted = 'X'." 24_F
* CLEAR : wa_inv_lnes.
ENDIF.
**note 2299395
UNASSIGN <fs_sdinv_matnr>.
READ TABLE gt_sdinv_matnr ASSIGNING <fs_sdinv_matnr>
WITH KEY invoice_no = wa_vbrp-vbeln
productcode = wa_vbrp-matnr.
IF <fs_sdinv_matnr> IS ASSIGNED.
wa_inv_lnes-productcode = <fs_sdinv_matnr>-productcode.
wa_inv_lnes-productid = <fs_sdinv_matnr>-productid.
wa_inv_lnes-productdesc = <fs_sdinv_matnr>-productdesc.
ELSE.
CLEAR : gv_appln_msg.
ENDIF.
else. "49_f end
*Product Code
MOVE wa_vbrp-matnr TO wa_inv_lnes-productcode.
* Product Description
READ TABLE it_material INTO wa_material
WITH KEY matnr = wa_vbrp-matnr
BINARY SEARCH.
IF sy-subrc = 0.
MOVE wa_material-maktx TO wa_inv_lnes-productdesc.
ELSE.
lv_sylangu = sy-langu.
* --> Begin of 68_F
* CLEAR : it_material_tmp[].
* CLEAR : wa_material_tmp.
* SELECT matnr
* maktx
* spras
* FROM makt
* INTO CORRESPONDING FIELDS OF TABLE it_material_tmp
* WHERE matnr = wa_vbrp-matnr
* AND spras IN ('EN','DE', gv_langs, lv_sylangu).
*
* SORT it_material_tmp BY matnr spras ASCENDING.
* Pref 1: Fill with description in extraction language , if available
* IF sy-subrc = 0.
IF NOT it_material_tmp[] IS INITIAL.
* <-- End of 68_F
READ TABLE it_material_tmp INTO wa_material_tmp
WITH KEY matnr = wa_vbrp-matnr
spras = gv_langs
BINARY SEARCH.
IF sy-subrc = 0.
MOVE wa_material_tmp-maktx TO wa_inv_lnes-productdesc.
MOVE wa_material_tmp-maktx TO wa_material-maktx .
APPEND wa_material TO it_material.
CLEAR wa_material.
CLEAR it_material[].
ELSE.
CLEAR : gv_appln_msg.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
endif.
ENDIF.
**note 2299395
ENDFORM. " GET_MATERIAL_INFO
*&---------------------------------------------------------------------*
*& Form GET_TAX_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_tax_info .
DATA : lv_land TYPE string.
DATA : lv_badi_updt_sd_inv TYPE REF TO fieusaft_update_sdinvoices.
* DATA : lt_konv TYPE TABLE OF konv. "75_F
DATA : lt_konv TYPE TABLE OF gty_cond. "75_F
DATA : lt_konv_temp LIKE lt_konv.
FIELD-SYMBOLS <fs_konv> LIKE LINE OF lt_konv.
DATA : lv_lines_konv TYPE i.
DATA : lv_lines_konv_temp TYPE i.
DATA: lt_konv_sum TYPE TABLE OF gty_cond. "83_F
DATA: ls_konv_sum TYPE gty_cond. "83_F
lv_land = gv_bukrs_land.
CLEAR wa_tax_data.
CLEAR wa_inv_cond_rec.
READ TABLE it_inv_vbrk INTO wa_inv_vbrk WITH KEY vbeln = wa_vbrp-vbeln.
CHECK sy-subrc = 0.
REFRESH lt_konv.
SORT lt_konv_sum DESCENDING BY mwsk1.
APPEND LINES OF lt_konv_sum TO lt_konv.
* <-- End of 83_F
CLEAR : gv_appln_msg.
CLEAR : wa_inv_vbrk-kursf.
MOVE wa_inv_vbrk-kurrf TO wa_inv_vbrk-kursf.
PERFORM set_invoice_status."6_f
CLEAR: wa_inv_lnes-curr_credit_amt, wa_inv_lnes-currr_debit_amt,
wa_inv_lnes-debit_amt_ext,wa_inv_lnes-credit_amt_ext.
"42_F - Begin
IF gv_bukrs_land = 'PT'.
lv_tax_code = wa_inv_lnes-taxcode.
IF gv_usr_exit_badi IS NOT INITIAL.
CALL BADI gv_usr_exit_badi->get_non_reveune_based_tax_code
EXPORTING
iv_vbeln = wa_vbrp-vbeln
iv_posnr = wa_vbrp-posnr
CHANGING
cv_tax_code = lv_tax_code.
ENDIF.
lv_no_summary_update =
clfieu_generic_saft=>eval_tax_base_non_revenue( lv_tax_code ).
ENDIF.
"42_F - End
* --> Begin of 91_F
* CASE wa_inv_vbrk-vbtyp_or. "49_f wa_inv_vbrk-vbtyp.
IF sy-subrc EQ 0 AND
ls_inv_vbrk_list-vbtyp IS NOT INITIAL.
lv_vbtyp_or = ls_inv_vbrk_list-vbtyp.
ELSE.
lv_vbtyp_or = wa_inv_vbrk-vbtyp_or.
ENDIF.
ELSE.
lv_vbtyp_or = wa_inv_vbrk-vbtyp_or.
ENDIF.
CASE lv_vbtyp_or.
* <-- End of 91_F
WHEN 'N' OR 'O' OR 'L' OR 'T' OR 'H' OR '6' OR '4'. "69_F Added Credit Memo
List
IF wa_inv_vbrk-waerk = gv_t001_waers."4_F
IF wa_vbrp-netwr LT 0.
MOVE wa_vbrp-netwr TO wa_inv_lnes-credit_amt_ext. "21_F
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-debit_amt_ext. "21_F
ENDIF.
MOVE wa_inv_vbrk-waerk TO wa_inv_lnes-currency.
MOVE wa_inv_vbrk-waerk TO wa_inv_lnes-document_waers.
"21_F
CLEAR lv_inv_line_amt.
lv_inv_line_amt = wa_vbrp-netwr.
ELSE.
CLEAR lv_inv_line_amt.
IF wa_vbrp-netwr GE 0.
lv_inv_line_amt = wa_vbrp-netwr.
MOVE wa_vbrp-netwr TO wa_inv_lnes-currr_debit_amt.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = wa_inv_vbrk-fkdat
foreign_amount = lv_inv_line_amt "21_F
foreign_currency = wa_inv_vbrk-waerk
local_currency = gv_t001_waers
rate = wa_inv_vbrk-kursf
type_of_rate = 'M'
read_tcurr = ' '
IMPORTING
local_amount = wa_inv_lnes-debit_amt_ext. "21_F
ELSE.
lv_inv_line_amt = wa_vbrp-netwr.
MOVE wa_vbrp-netwr TO wa_inv_lnes-curr_credit_amt.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = wa_inv_vbrk-fkdat
foreign_amount = lv_inv_line_amt "21_F
foreign_currency = wa_inv_vbrk-waerk
local_currency = gv_t001_waers
rate = wa_inv_vbrk-kursf
type_of_rate = 'M'
read_tcurr = ' '
IMPORTING
local_amount = wa_inv_lnes-credit_amt_ext. "21_F
ENDIF.
wa_inv_lnes-exchangerate = wa_inv_vbrk-kursf.
wa_inv_lnes-currency = wa_inv_vbrk-waerk.
wa_inv_lnes-document_waers = gv_t001_waers.
CLEAR : lv_inv_line_amt.
MOVE wa_inv_lnes-debit_amt_ext TO lv_inv_line_amt. "21_F
ENDIF.
"21_F
IF wa_vbrp-fkimg GT 0.
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL.
lv_unitprice = wa_inv_lnes-credit_amt_ext / wa_vbrp-fkimg .
ELSE.
lv_unitprice = wa_inv_lnes-debit_amt_ext / wa_vbrp-fkimg .
ENDIF.
lv_unitprice = ABS( lv_unitprice ).
MOVE lv_unitprice TO wa_inv_lnes-unitprice_ext.
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-unitprice_ext.
wa_inv_lnes-unitprice_ext = ABS( wa_inv_lnes-unitprice_ext ).
ENDIF.
IF gv_usr_exit_impl GT 0.
wa_inv_lnes-exchangerate = wa_inv_vbrk-kursf.
wa_inv_lnes-currency = wa_inv_vbrk-waerk.
wa_inv_lnes-document_waers = gv_t001_waers.
CLEAR lv_inv_line_amt.
MOVE wa_inv_lnes-debit_amt_ext TO lv_inv_line_amt.
ENDIF.
"21_F
IF wa_vbrp-fkimg GT 0.
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL.
lv_unitprice = wa_inv_lnes-credit_amt_ext / wa_vbrp-fkimg .
ELSE.
lv_unitprice = wa_inv_lnes-debit_amt_ext / wa_vbrp-fkimg .
ENDIF.
lv_unitprice = ABS( lv_unitprice ).
MOVE lv_unitprice TO wa_inv_lnes-unitprice_ext.
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-unitprice_ext.
wa_inv_lnes-unitprice_ext = ABS( wa_inv_lnes-unitprice_ext ).
ENDIF.
IF gv_usr_exit_impl GT 0.
CALL BADI gv_usr_exit_badi->set_amounts_credit_debit
EXPORTING
iv_invoice_num = wa_inv_vbrk-vbeln
iv_inv_date = wa_inv_vbrk-fkdat
iv_inv_pos = wa_vbrp-posnr
iv_inv_amt = lv_inv_line_amt "21_F
iv_inv_currency = wa_inv_vbrk-waerk
iv_inv_status = wa_inv_hd-inv_status
CHANGING "21_F
cv_inv_debit_amt = wa_inv_lnes-debit_amt_ext
cv_inv_credit_amt = wa_inv_lnes-credit_amt_ext
cv_curr_debti_amt = wa_inv_lnes-currr_debit_amt
cv_curr_credit_amt = wa_inv_lnes-curr_credit_amt
cv_unit_price = wa_inv_lnes-unitprice_ext.
ENDIF.
*User exit invocation ends
IF wa_vbrp-netwr LT 0.
MOVE wa_vbrp-netwr TO wa_inv_lnes-currr_debit_amt.
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-curr_credit_amt.
ENDIF.
CLEAR lv_inv_line_amt.
lv_inv_line_amt = wa_vbrp-netwr.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = wa_inv_vbrk-fkdat
foreign_amount = lv_inv_line_amt
foreign_currency = wa_inv_vbrk-waerk
local_currency = gv_t001_waers
rate = wa_inv_vbrk-kursf
type_of_rate = 'M'
read_tcurr = ' '
IMPORTING
local_amount = lv_inv_line_amt.
wa_inv_lnes-exchangerate = wa_inv_vbrk-kursf.
wa_inv_lnes-currency = wa_inv_vbrk-waerk.
wa_inv_lnes-document_waers = gv_t001_waers.
* map amounts as per the requirement
IF lv_inv_line_amt LT 0. "21_F
MOVE lv_inv_line_amt TO wa_inv_lnes-debit_amt_ext. "21_F
ELSE.
MOVE lv_inv_line_amt TO wa_inv_lnes-credit_amt_ext. "21_F
ENDIF.
ELSE.
MOVE wa_inv_vbrk-waerk TO wa_inv_lnes-currency.
MOVE wa_inv_vbrk-waerk TO wa_inv_lnes-document_waers.
IF wa_vbrp-netwr LT 0.
MOVE wa_vbrp-netwr TO wa_inv_lnes-debit_amt_ext. "21_F
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-credit_amt_ext. "21_F
ENDIF.
ENDIF.
CALL METHOD clfieu_generic_saft=>convert_7to2_decimals
EXPORTING
iv_land = gv_bukrs_land
CHANGING
cv_amount = wa_inv_lnes-debit_amt_ext.
CALL METHOD clfieu_generic_saft=>convert_7to2_decimals
EXPORTING
iv_land = gv_bukrs_land
CHANGING
cv_amount = wa_inv_lnes-credit_amt_ext.
"21_F
IF wa_vbrp-fkimg GT 0.
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL.
lv_unitprice = wa_inv_lnes-credit_amt_ext / wa_vbrp-fkimg .
ELSE.
lv_unitprice = wa_inv_lnes-debit_amt_ext / wa_vbrp-fkimg .
ENDIF.
lv_unitprice = ABS( lv_unitprice ).
MOVE lv_unitprice TO wa_inv_lnes-unitprice_ext.
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-unitprice_ext.
wa_inv_lnes-unitprice_ext = ABS( wa_inv_lnes-unitprice_ext ).
ENDIF.
IF gv_usr_exit_impl GT 0.
CLEAR : lv_inv_line_amt.
MOVE wa_inv_lnes-debit_amt_ext TO lv_inv_line_amt.
"21_F
IF wa_inv_hd-inv_status <> 'A'.
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL OR wa_inv_lnes-credit_amt_ext
<> '0.00'.
wa_inv_lnes-credit_amt_ext = ABS( wa_inv_lnes-credit_amt_ext ).
gv_total_credit_wd = gv_total_credit_wd + wa_inv_lnes-credit_amt_ext.
ELSEIF wa_inv_lnes-debit_amt_ext IS NOT INITIAL OR wa_inv_lnes-
debit_amt_ext <> '0.00'.
wa_inv_lnes-debit_amt_ext = ABS( wa_inv_lnes-debit_amt_ext ).
gv_total_debit_wd = gv_total_debit_wd + wa_inv_lnes-debit_amt_ext.
ENDIF.
ENDIF.
"42_F - Begin
IF lv_no_summary_update = abap_true.
gv_total_credit_sd = gv_total_credit_sd - wa_inv_lnes-credit_amt_ext.
gv_total_debit_sd = gv_total_debit_sd - wa_inv_lnes-debit_amt_ext.
ENDIF.
"42_F - End
WHEN OTHERS.
IF wa_vbrp-netwr LT 0.
MOVE wa_vbrp-netwr TO wa_inv_lnes-currr_debit_amt.
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-curr_credit_amt.
ENDIF.
CLEAR lv_inv_line_amt.
lv_inv_line_amt = wa_vbrp-netwr.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = wa_inv_vbrk-fkdat
foreign_amount = lv_inv_line_amt
foreign_currency = wa_inv_vbrk-waerk
local_currency = gv_t001_waers
rate = wa_inv_vbrk-kursf
type_of_rate = 'M'
read_tcurr = ' '
IMPORTING
local_amount = lv_inv_line_amt.
wa_inv_lnes-exchangerate = wa_inv_vbrk-kursf.
wa_inv_lnes-currency = wa_inv_vbrk-waerk.
wa_inv_lnes-document_waers = gv_t001_waers.
* map amounts as per the requirement
IF lv_inv_line_amt LT 0. "21_F
MOVE lv_inv_line_amt TO wa_inv_lnes-debit_amt_ext. "21_F
ELSE.
MOVE lv_inv_line_amt TO wa_inv_lnes-credit_amt_ext. "21_F
ENDIF.
ELSE.
IF wa_vbrp-netwr LT 0.
MOVE wa_vbrp-netwr TO wa_inv_lnes-debit_amt_ext. "21_F
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-credit_amt_ext. "21_F
ENDIF.
MOVE wa_inv_vbrk-waerk TO wa_inv_lnes-currency.
MOVE wa_inv_vbrk-waerk TO wa_inv_lnes-document_waers.
ENDIF.
"21_F
IF wa_vbrp-fkimg GT 0.
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL.
lv_unitprice = wa_inv_lnes-credit_amt_ext / wa_vbrp-fkimg .
ELSE.
lv_unitprice = wa_inv_lnes-debit_amt_ext / wa_vbrp-fkimg .
ENDIF.
lv_unitprice = ABS( lv_unitprice ).
MOVE lv_unitprice TO wa_inv_lnes-unitprice_ext.
ELSE.
MOVE wa_vbrp-netwr TO wa_inv_lnes-unitprice_ext.
wa_inv_lnes-unitprice_ext = ABS( wa_inv_lnes-unitprice_ext ).
ENDIF.
IF gv_usr_exit_impl GT 0.
CLEAR : lv_inv_line_amt.
MOVE wa_inv_lnes-debit_amt_ext TO lv_inv_line_amt.
"21_F
IF wa_inv_hd-inv_status <> 'A' AND wa_inv_hd-inv_status <> 'F'
AND gv_bukrs_land NE 'LU'. "44_F
CASE wa_inv_vbrk-vbtyp. "51_F
WHEN 'U'. "51_F
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL OR wa_inv_lnes-
credit_amt_ext <> '0.00'.
wa_inv_lnes-credit_amt_ext = ABS( wa_inv_lnes-credit_amt_ext ).
gv_total_credit_wd = gv_total_credit_wd + wa_inv_lnes-credit_amt_ext.
ELSEIF wa_inv_lnes-debit_amt_ext IS NOT INITIAL OR wa_inv_lnes-
debit_amt_ext <> '0.00'.
wa_inv_lnes-debit_amt_ext = ABS( wa_inv_lnes-debit_amt_ext ).
gv_total_debit_wd = gv_total_debit_wd + wa_inv_lnes-debit_amt_ext.
ENDIF.
"42_F - Begin
IF lv_no_summary_update = abap_true.
gv_total_credit_wd = gv_total_credit_wd - wa_inv_lnes-credit_amt_ext.
gv_total_debit_wd = gv_total_debit_wd - wa_inv_lnes-debit_amt_ext.
ENDIF.
"42_F - End
WHEN OTHERS.
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL OR wa_inv_lnes-
credit_amt_ext <> '0.00'.
wa_inv_lnes-credit_amt_ext = ABS( wa_inv_lnes-credit_amt_ext ).
gv_total_credit_sd = gv_total_credit_sd + wa_inv_lnes-credit_amt_ext.
ELSEIF wa_inv_lnes-debit_amt_ext IS NOT INITIAL OR wa_inv_lnes-
debit_amt_ext <> '0.00'.
wa_inv_lnes-debit_amt_ext = ABS( wa_inv_lnes-debit_amt_ext ).
gv_total_debit_sd = gv_total_debit_sd + wa_inv_lnes-debit_amt_ext.
ENDIF.
"42_F - Begin
IF lv_no_summary_update = abap_true.
gv_total_credit_sd = gv_total_credit_sd - wa_inv_lnes-credit_amt_ext.
gv_total_debit_sd = gv_total_debit_sd - wa_inv_lnes-debit_amt_ext.
ENDIF.
"42_F - End
ENDCASE.
********30_F begin
ELSEIF gv_bukrs_land = 'LU'.
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL OR wa_inv_lnes-credit_amt_ext
<> '0.00'.
wa_inv_lnes-credit_amt_ext = ABS( wa_inv_lnes-credit_amt_ext ).
gv_total_credit_sd = gv_total_credit_sd + wa_inv_lnes-credit_amt_ext.
ELSEIF wa_inv_lnes-debit_amt_ext IS NOT INITIAL OR wa_inv_lnes-
debit_amt_ext <> '0.00'.
wa_inv_lnes-debit_amt_ext = ABS( wa_inv_lnes-debit_amt_ext ).
gv_total_debit_sd = gv_total_debit_sd + wa_inv_lnes-debit_amt_ext.
ENDIF.
********30_F end
ENDIF.
ENDCASE.
ENDFORM. " FILL_INV_LNE_AMOUNTS
*&---------------------------------------------------------------------*
*& Form GET_SETTLEMENT_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_settlement_info .
DATA : lt_top_text TYPE TABLE OF vtopis.
DATA : wa_top_text LIKE LINE OF lt_top_text .
CLEAR : wa_inv_pay_mech.
DATA : ls_vbkd LIKE LINE OF gt_vbkd.
**29_F
FIELD-SYMBOLS: <fs_inv_lnes> TYPE fieud_sdinv_i.
**29_F
**37_F begin
MOVE gv_bukrs_land TO gv_land_exit.
TRY .
GET BADI gv_badi_usr_ext_hdl
FILTERS
land1 = gv_land_exit.
CATCH cx_badi_not_implemented .
ENDTRY.
**37_F end
lv_eaccode = clfieu_generic_saft=>get_parameter_t001z( "54_F
iv_bukrs = p_bukrs
iv_party = 'PTMACD' ).
CLEAR: lv_vbeln.
LOOP AT it_inv_vbrk INTO wa_inv_vbrk.
****33_F begin
"lt_exception_docs_fi will only be filled for PT
"This change avoids processing of documents already
"with digital signature errors.
"can be qualified as a performance check
UNASSIGN <fs_exception_docs_sd>.
READ TABLE lt_exception_docs_sd
ASSIGNING <fs_exception_docs_sd>
WITH KEY fkart = wa_inv_vbrk-fkart.
IF <fs_exception_docs_sd> IS NOT ASSIGNED
OR gv_mess_type NE 'E'. "36_F
****33_F end
CLEAR gv_ext_sys_ind_sd. " 20_F " correction of variables not cleared
CLEAR wa_inv_hd. " 20_F " correction of variables not cleared
IF p_archvl = 'X'.
MOVE 'X' TO wa_inv_hd-inv_archive.
ENDIF.
MOVE sy-mandt TO wa_inv_hd-mandt.
MOVE wa_inv_vbrk-bukrs TO wa_inv_hd-bukrs.
MOVE wa_inv_vbrk-fkdat TO wa_inv_hd-inv_date .
MOVE wa_inv_vbrk-vbeln TO wa_inv_hd-invoice_no.
MOVE wa_inv_vbrk-vkbur TO wa_inv_hd-sales_office. "20_f
MOVE wa_inv_vbrk-transid TO wa_inv_hd-transactionid." SEPARATED BY ''.
*******note 2393681
* CLEAR gv_ext_sys_ind_sd.
* IF ls_bcv-ext_sd_ind EQ 'X'.
* CALL BADI gv_usr_exit_badi->identify_ext_invoices_sd
* EXPORTING
* iv_invoice_num = wa_inv_vbrk-vbeln
* iv_inv_date = wa_inv_vbrk-fkdat
* iv_bukrs = wa_inv_vbrk-bukrs
* iv_fkart = wa_inv_vbrk-fkart
* iv_customer = wa_inv_vbrk-kunag
* iv_vkorg = wa_inv_vbrk-vkorg
* CHANGING
* ev_ext_ind = gv_ext_sys_ind_sd.
* ENDIF.
* "Set Source Billing Value as I for External System.
* IF NOT gv_ext_sys_ind_sd IS INITIAL .
* wa_inv_hd-sourcebilling = 'I'.
* ENDIF.
*******note 2393681
* 25_F - begin
TRY.
lv_glflex_active =
clfieu_generic_saft=>check_new_gl(
iv_bukrs = wa_inv_vbrk-bukrs ).
CATCH cx_fieu_saft_check_new_gl
INTO lcl_message.
MESSAGE lcl_message TYPE 'E'.
ENDTRY.
* 25_F - end
IF wa_inv_hd-inv_period IS INITIAL.
* 35_F - begin
IF wa_inv_vbrk-monat IS INITIAL.
CLEAR lv_poper.
CALL FUNCTION 'FAGL_GET_INFO_FROM_LEDGER'
EXPORTING
i_budat = wa_inv_vbrk-fkdat
i_bukrs = wa_inv_vbrk-bukrs
IMPORTING
e_poper = lv_poper
EXCEPTIONS
no_info_found = 1
error_in_setup = 2
OTHERS = 3.
IF sy-subrc <> 0 OR lv_poper IS INITIAL.
wa_inv_hd-inv_period = wa_inv_vbrk-fkdat+4(2).
ELSE.
wa_inv_hd-inv_period = lv_poper.
ENDIF.
ELSE.
wa_inv_hd-inv_period = wa_inv_vbrk-monat.
ENDIF.
* 35_F - end
* MOVE wa_inv_vbrk-monat TO wa_inv_hd-inv_period. "35_F
wa_inv_hd-inv_stat_user = wa_inv_vbrk-ernam.
wa_inv_hd-source_id = wa_inv_vbrk-ernam.
****note 32_F
MOVE wa_inv_vbrk-waerk TO wa_inv_hd-currency.
MOVE wa_inv_vbrk-netwr TO wa_inv_hd-doc_total_gross.
MOVE wa_inv_vbrk-kurrf TO wa_inv_hd-exchange_rate.
IF wa_inv_vbrk-waerk = gv_t001_waers AND wa_inv_vbrk-sfakn IS INITIAL ."and
wa_inv_vbrk-fksto IS INITIAL4_F
gv_debit_amount = gv_debit_amount + wa_inv_vbrk-netwr.
ELSEIF
wa_inv_vbrk-waerk = gv_t001_waers AND wa_inv_vbrk-sfakn IS NOT INITIAL ."4_F
gv_credit_amount = gv_credit_amount + wa_inv_vbrk-netwr.
ENDIF.
PERFORM set_invoice_status.
CLEAR : lv_xcpdk,lv_stceg,lv_stcd1.
MOVE wa_inv_vbrk-fkart TO wa_inv_hd-inv_doctype.
****note 2299395
UNASSIGN <fs_sdinv_kunnr>.
READ TABLE gt_sdinv_kunnr ASSIGNING <fs_sdinv_kunnr>
WITH KEY invoice_no = wa_inv_vbrk-vbeln
customer = wa_inv_vbrk-kunrg.
IF <fs_sdinv_kunnr> IS ASSIGNED.
wa_inv_hd-customerid = <fs_sdinv_kunnr>-customerid.
wa_inv_hd-customer = <fs_sdinv_kunnr>-customer.
"Fills customer address from historic
wa_inv_hd-st_address = <fs_sdinv_kunnr>-st_address.
wa_inv_hd-st_city = <fs_sdinv_kunnr>-st_city.
wa_inv_hd-st_postal = <fs_sdinv_kunnr>-st_postal.
wa_inv_hd-st_country = <fs_sdinv_kunnr>-st_country.
ELSE.
wa_inv_hd-customerid = wa_inv_vbrk-kunrg.
wa_inv_hd-customer = wa_inv_vbrk-kunrg.
ENDIF.
****note 2299395
MOVE wa_inv_vbrk-stceg TO lv_stceg.
IF sy-dbcnt > 0.
**********34_F begin
IF gv_extn_ext_badi IS BOUND.
"set land for invoice list OTC
CALL BADI gv_extn_ext_badi->set_otc_land
EXPORTING
is_inv_vbrk = wa_inv_vbrk
it_inv_vbrk = it_inv_vbrk
CHANGING
ct_inv_list_child = gt_inv_list_child
cv_land = wa_inv_vbrk-land1.
ENDIF.
**********34_F end
IF wa_inv_vbrk-stceg_l IS INITIAL.
if wa_inv_vbrk-land1 is INITIAL.
" Begin of 69_F
IF wa_inv_hd-st_country IS INITIAL.
CONCATENATE wa_inv_hd-customerid '/' gv_bukrs_land INTO
wa_inv_hd-customerid.
ELSE.
CONCATENATE wa_inv_hd-customerid '/' wa_inv_hd-st_country INTO
wa_inv_hd-customerid.
ENDIF.
" End of 59_F
else.
CONCATENATE wa_inv_hd-customerid '/' wa_inv_vbrk-land1 INTO
wa_inv_hd-customerid.
endif.
ELSE.
CONCATENATE wa_inv_hd-customerid '/' wa_inv_vbrk-stceg_l INTO
wa_inv_hd-customerid.
ENDIF.
endIF. "45_F
ENDIF.
ENDIF.
****32_F begin
"Process only once per doc
IF lv_vbeln <> wa_inv_vbrk-vbeln.
***********************************************
*the reversed document (VBELV)
*has a reversal document (VBELN) in VBFA
*The VBELN conditions should be fetch from VBRK
*and the VBELV should have been previously selected
*in VBRK fetch (it_inv_vbrk)
**********************************************
FREE lt_vbfa.
CLEAR ls_inv.
"61_F - beg
ls_inv-vbeln = wa_inv_vbrk-vbeln.
UNASSIGN <fs_vbfa>.
CASE wa_inv_vbrk-vbtyp.
******when is a credit/debit memo, invoice cancelation
WHEN 'O' OR 'P' OR 'N'.
******fills credit/debit note reference
UNASSIGN <fs_vbfa>.
IF sy-subrc = 0.
PERFORM change_doc_status USING <fs_vbfa>-vbeln
<fs_vbfa>-erdat
<fs_vbfa>-erzet.
ENDIF.
******when is an invoice
WHEN 'M'.
IF wa_inv_vbrk-fksto IS NOT INITIAL.
**********looks for cancelation invoices, credit/debit memo
UNASSIGN <fs_vbfa>.
LOOP AT lt_vbfa
ASSIGNING <fs_vbfa>
WHERE vbtyp_n CA 'NOP'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
PERFORM change_doc_status USING <fs_vbfa>-vbeln
<fs_vbfa>-erdat
<fs_vbfa>-erzet.
ENDIF.
ENDIF.
ENDCASE.
****32_F end
"37_F
IF lv_vbeln_likp IS NOT INITIAL OR
( <fs_vbfa> IS ASSIGNED
AND <fs_vbfa>-vbelv IS NOT INITIAL )."33_F
****32_F end
CLEAR :lv_likp_erdat.
"29_F: del_date when there is a delivery doc should come from lfdat
SELECT SINGLE lfdat erdat lfdat lfuhr wadat_ist wauhr
INTO (wa_inv_vbrk-del_date,
lv_likp_erdat,
lv_del_mvesdate,
lv_del_mvestme,
lv_del_mveedate,
lv_del_mvedtime)
* FROM likp WHERE vbeln = <fs_vbfa>-vbelv. "32_F
FROM likp WHERE vbeln = lv_vbeln_likp. "37_F
IF sy-subrc = 0.
********37_F begin
"Define delivery date for insurance companies
"scenario only available in PT
IF ls_bcv-bus_sector EQ 'I'
AND gv_badi_usr_ext_hdl IS BOUND.
ENDIF.
*Country specific enhancements for Delivery document - 19_f
* ENDIF.
IF wa_inv_hd-st_deliveryid IS INITIAL.
gv_appln_msg-msgty = 'W'. " Mandatory field missing
gv_appln_msg-msgid = gc_message_class .
gv_appln_msg-msgno = '047'.
gv_appln_msg-msgv1 = wa_inv_hd-invoice_no.
CONDENSE gv_appln_msg-msgv1 NO-GAPS. "46_F
CLEAR : gv_appln_msg.
ENDIF.
****41_F begin
"Assing internal <WorkType> if applicable
IF gv_badi_generic IS BOUND.
CALL BADI gv_badi_generic->set_wrk_type_internal
EXPORTING
it_fiptc_doc_exc = gt_fiptc_doc_exc
iv_bukrs = wa_inv_hd-bukrs
iv_vbeln = wa_inv_vbrk-vbeln
iv_fkart = wa_inv_vbrk-fkart
CHANGING
cv_inv_type = wa_inv_hd-inv_type.
ENDIF.
****41_F end
IF gv_usr_exit_impl GT 0.
CALL BADI gv_usr_exit_badi->set_invoice_type
EXPORTING
iv_bukrs = wa_inv_hd-bukrs
iv_land = gv_bukrs_land
iv_vbeln = wa_inv_vbrk-vbeln
iv_vbtyp = wa_inv_vbrk-vbtyp
iv_fkart = wa_inv_vbrk-fkart
CHANGING
cv_inv_type = wa_inv_hd-inv_type.
ENDIF.
gv_entries_count = gv_entries_count + 1.
IF wa_inv_vbrk-zterm IS NOT INITIAL. "IF A ZTERM EXISTS FOR THE DOC NUMBER
EXECUTES THE CODE BELOW
lv_doc_date = wa_inv_vbrk-fkdat.
"FIRST DISCOUNT
* IF wa_zterm_selection-zprz1 IS NOT INITIAL. 31_F
"AJUST DATE
CALL FUNCTION 'FIEU_SAFT_SETTL_CHANGE_DATE'
EXPORTING
iv_original_date = lv_doc_date
iv_months = wa_zterm_selection-zmona
iv_fixed_day = wa_zterm_selection-zfael
IMPORTING
ev_changed_date = lv_doc_date.
"CHANGE TEXT LANG TO COUNTRY SPECIFIC
lv_sy_lang = sy-langu.
*********31_F begin
* LOOP AT lt_zterm_texts INTO lv_ttext. "REMOVE TEXTS WHICH ARENT USEFUL FOR
SAFT
* IF lv_ttext NA '%'.
* DELETE lt_zterm_texts INDEX sy-tabix.
* ENDIF.
* ENDLOOP.
*********31_F end
* CLEAR ls_bill_inv_settl-settle_date.
* CLEAR ls_bill_inv_settl-tot_settle_amount.
* CLEAR ls_bill_inv_settl-paym_terms.
IF wa_zterm_selection-ztag1 IS NOT INITIAL.
wa_inv_hd-settle_date1 = lv_doc_date + wa_zterm_selection-ztag1.
ELSEIF wa_zterm_selection-zstg1 IS NOT INITIAL.
CALL FUNCTION 'FIEU_SAFT_SETTL_CHANGE_DATE'
EXPORTING
iv_original_date = lv_doc_date
iv_months = wa_zterm_selection-zsmn1
iv_fixed_day = wa_zterm_selection-zstg1
IMPORTING
ev_changed_date = wa_inv_hd-settle_date1.
ENDIF.
"Begin of 60_F
IF NOT gv_t001_xskfn IS INITIAL.
wa_inv_hd-settle_amount_1 = ( wa_inv_hd-doc_total_net *
wa_zterm_selection-zprz1 ) / 100.
ELSE.
"End of 60_F
wa_inv_hd-settle_amount_1 = ( wa_inv_hd-doc_total_gross *
wa_zterm_selection-zprz1 ) / 100.
ENDIF. "60_F
"SECOND DISCOUNT
IF wa_zterm_selection-zprz2 IS NOT INITIAL.
* CLEAR ls_bill_inv_settl-settle_date.
* CLEAR ls_bill_inv_settl-tot_settle_amount.
* CLEAR ls_bill_inv_settl-paym_terms.
IF wa_zterm_selection-ztag2 IS NOT INITIAL.
wa_inv_hd-settle_date_2 = lv_doc_date + wa_zterm_selection-ztag2.
"Begin of 60_F
IF NOT gv_t001_xskfn IS INITIAL.
wa_inv_hd-settle_amount_2 = ( wa_inv_hd-doc_total_net *
wa_zterm_selection-zprz2 ) / 100.
ELSE.
"End of 60_F
wa_inv_hd-settle_amount_2 = ( wa_inv_hd-doc_total_gross *
wa_zterm_selection-zprz2 ) / 100.
ENDIF. "60_F
READ TABLE lt_zterm_texts INTO wa_inv_hd-paym_terms_2 INDEX 2.
* APPEND ls_bill_inv_settl TO lt_bill_inv_settl.
ENDIF.
* ENDIF. 31_F
ENDIF.
* perform get_customer_address.
*set source id
CLEAR: wa_inv_hd-source_id, wa_inv_hd-onetime_ind, wa_inv_hd-st_deliveryid,
wa_inv_hd-st_deliverydate, wa_inv_hd-move_etime, wa_inv_hd-move_stime.
CLEAR wa_inv_vbrk_cancel .
CLEAR wa_inv_hd-sourcebilling.
CLEAR : wa_inv_hd-inv_archive.
CLEAR ls_cancel_source_id .
CLEAR wa_inv_hd. " 20_F " Cleaning variables between iterations
ENDIF. "33_F
ENDLOOP.
LOOP AT it_inv_lnes ASSIGNING <line1>."89_F - beg
IF <line1>-taxcode EQ 'NS' AND <line1>-taxpercent EQ '0.00'.
MOVE '0.00' TO <line1>-taxamount.
ENDIF.
ENDLOOP."89_F - end
*----------------------22092014--------------------------------------*
* read delivery document date from archive when delivery document is archived;
* but VBFA is still not archived fully
IF it_likp_vbeln[] IS NOT INITIAL AND p_sysarc IS NOT INITIAL.
gv_arc_tbl_read = 'LIKP'. " 21_F TO SET THE TABLE FROM WHERE THE DATA NEED TO
BE READ
PERFORM read_rv_likp_archive.
PERFORM map_archived_likp.
ENDIF.
*----------------------22092014--------------------------------------*
SORT it_inv_hd.
ENDIF.
CLEAR : ls_inv_vbrk.
IF wa_inv_vbrk-sfakn IS NOT INITIAL
OR wa_inv_vbrk-fksto IS NOT INITIAL
OR wa_inv_vbrk-rfbsk = 'E'. "note 2285540
"calculates invoice status for invoice list and their childs 20_F
IF gv_extn_ext_badi IS BOUND.
CALL BADI gv_extn_ext_badi->get_invoice_status
EXPORTING
iv_land1 = gv_bukrs_land
iv_bukrs = wa_inv_vbrk-bukrs
iv_vbeln = wa_inv_vbrk-vbeln
iv_fkdat = wa_inv_vbrk-fkdat
it_inv_hd = gt_vbrk_inv_list
CHANGING
cv_inv_status = wa_inv_hd-inv_status
ct_inv_data = wa_inv_vbrk.
ENDIF.
** 51_F
SORT it_inv_hd .
DELETE ADJACENT DUPLICATES FROM it_inv_hd COMPARING ALL FIELDS .
PERFORM fill_summary_key
CHANGING wa_summary_run.
CLEAR : gv_appln_msg.
* --> Begin of 77_F
ELSEIF gv_invoice_no EQ 0.
wa_summary_run-total_no_docs = gv_invoice_no.
CLEAR : gv_appln_msg.
* --> Begin of 77_F
ELSEIF gv_invoice_no_wd EQ 0.
IF p_archvl IS INITIAL.
MOVE 'WD' TO wa_summary_run-inv_category.
ELSE.
MOVE 'WA' TO wa_summary_run-inv_category.
ENDIF.
wa_summary_run-total_no_docs = gv_invoice_no_wd.
*----------------------------------------------------------------------*
FORM set_ship_from .
*Case 1
ENDIF.
ELSE.
MOVE wa_plant_address-werks TO wa_inv_hd-sf_werks .
MOVE wa_plant_address-stras TO wa_inv_hd-sf_address .
MOVE wa_plant_address-pstlz TO wa_inv_hd-sf_postal.
MOVE wa_plant_address-ort01 TO wa_inv_hd-sf_city.
MOVE wa_plant_address-land1 TO wa_inv_hd-sf_country.
ENDIF.
ENDIF.
IF wa_inv_hd-sf_address IS INITIAL OR
wa_inv_hd-sf_postal IS INITIAL OR
wa_inv_hd-sf_city IS INITIAL
.
CLEAR : gv_appln_msg.
ENDIF.
ENDIF.
ENDFORM. " SET_SHIP_FROM
*&---------------------------------------------------------------------*
*& Form MAP_DISCOUNT_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM map_discount_info .
CLEAR wa_inv_discounts.
CLEAR: wa_inv_lnes-kschl, wa_inv_lnes-discount_amt. "46_F
"27_F
IF it_inv_discounts IS NOT INITIAL. "Adjusted in scope of Perf_adjusts_29_F
READ TABLE it_inv_discounts
ASSIGNING <fs_wa_inv_discounts> "Adjusted in scope of Perf_adjusts_29_F
WITH KEY knumv = wa_inv_lnes-knumv
kschl = 'SKTO'
kposn = wa_inv_lnes-posnr BINARY SEARCH. "Adjusted in scope of
Perf_adjusts_29_F
IF sy-subrc = 0.
*****28_F
wa_inv_lnes-kschl = <fs_wa_inv_discounts>-kschl. "Adjusted in
scope of Perf_adjusts_29_F
wa_inv_lnes-discount_amt = abs( <fs_wa_inv_discounts>-kwert ). "Adjusted in
scope of Perf_adjusts_29_F
* MOVE wa_inv_discounts-kschl TO wa_inv_lnes-kschl.
* MOVE wa_inv_discounts-kwert TO wa_inv_lnes-discount_amt.
*****28_F
ENDIF.
ENDIF.
"27_F
ENDFORM. " MAP_DISCOUNT_INFO
*&---------------------------------------------------------------------*
*& Form GET_DOC_TOTALS_SD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_doc_totals_sd .
CLEAR: wa_inv_hd-doc_total_gross,
wa_inv_hd-doc_total_net,
wa_inv_hd-doc_total_tax.
**34_F begin
DATA lv_inv_discount TYPE fieu_dec_amount.
<line>-posnr+0(1) = '0'.
ENDLOOP.
* ** end of 55_F downpayment
ENDIF. "77_F
perform adjust_total_tax_like_material using wa_inv_hd-doc_total_net "38_F
wa_inv_hd-doc_total_tax. "38_F
IF gv_usr_exit_impl GT 0.
CALL BADI gv_usr_exit_badi->set_net_tax
EXPORTING
iv_invoice_num = wa_inv_vbrk-vbeln
iv_inv_date = wa_inv_vbrk-fkdat
iv_inv_currency = wa_inv_vbrk-waerk
CHANGING
cv_inv_net_amt = wa_inv_hd-doc_total_net
cv_inv_tax_amt = wa_inv_hd-doc_total_tax.
ENDIF.
* if invoice list- net amount = line item total - discount oninvoice list
IF wa_inv_vbrk-vbtyp = '3' or wa_inv_vbrk-vbtyp = '4'.
if <ls_vbrl>-kwert_rl <= 0.
"Compute setlement/discount amount
lv_inv_discount = lv_inv_discount + abs( <ls_vbrl>-kwert_rl ).
else.
"compute surcharges
else.
clear : gv_appln_msg.
else.
"add surcharge to the surcharges table (by product code, tax code )
).
loop at it_inv_lnes assigning <ls_inv_lnes> from lv_idx_lnes
where invoice_no = wa_inv_vbrk-vbeln
and discount_amt < 0. "surcharges is identified as discount
amount < 0
lv_idx_lnes = sy-tabix + 1.
endif.
endif.
endif.
endloop.
endif.
if lv_inv_discount > 0.
"pro rata discount amounts by lines
call method cl_pro_rata->rate_discounts_sd
exporting
iv_disc_lcl = lv_inv_discount
iv_vbeln = wa_inv_vbrk-vbeln
changing
ct_inv_lnes = it_inv_lnes.
endif.
"add discount of individual invoice in list invoice
IF gt_disc_ind[] IS NOT INITIAL. "46_f
LOOP AT it_inv_lnes ASSIGNING <ls_inv_lnes> WHERE bukrs = wa_inv_vbrk-
bukrs
AND invoice_no = wa_inv_vbrk-
vbeln.
READ TABLE gt_disc_ind INTO wa_disc_ind WITH KEY
bukrs = <ls_inv_lnes>-bukrs
invoice_no = <ls_inv_lnes>-invoice_no
inv_year = <ls_inv_lnes>-inv_year
posnr = <ls_inv_lnes>-posnr.
IF sy-subrc EQ 0.
ADD wa_disc_ind-kwert TO <ls_inv_lnes>-discount_amt.
ENDIF.
ENDLOOP.
ENDIF.
"Add additional lines for surchagres, if any
if lv_total_surcharge > 0.
"Get the last line of the invoice to identify where to insert the new lines
loop at it_inv_lnes assigning <ls_inv_lnes> where invoice_no = wa_inv_vbrk-
vbeln.
lv_new_row_idx = sy-tabix.
if <ls_inv_lnes>-discount_amt < 0.
clear <ls_inv_lnes>-discount_amt.
endif.
endloop.
if sy-subrc is initial.
clear ls_new_inv_lne.
"Fill new values for surcharge line
ls_new_inv_lne-bukrs = <ls_inv_lnes>-bukrs.
ls_new_inv_lne-posnr = <ls_inv_lnes>-posnr.
ls_new_inv_lne-invoice_no = <ls_inv_lnes>-invoice_no.
ls_new_inv_lne-inv_year = <ls_inv_lnes>-inv_year.
ls_new_inv_lne-inv_date = <ls_inv_lnes>-inv_date.
ls_new_inv_lne-ext_uuid = <ls_inv_lnes>-ext_uuid.
ls_new_inv_lne-document_waers = <ls_inv_lnes>-document_waers.
ls_new_inv_lne-currency = <ls_inv_lnes>-currency.
ls_new_inv_lne-taxpointdate = <ls_inv_lnes>-taxpointdate.
ls_new_inv_lne-quantity = 1.
ls_new_inv_lne-unitofmeasure = 'UN'.
endif.
endif.
ENDIF.
PERFORM read_salesorder_from_archives.
MOVE 'X' TO gv_read_so_arch.
ENDIF.
" 44_F
ENDIF.
IF ( wa_inv_lnes-taxamount = '0.00' OR wa_inv_lnes-taxamount IS INITIAL ).
ENDIF.
ENDIF.
CLEAR gv_tax_mat.
case iv_list. "46_F
when abap_true.
lv_vbeln_disc = is_vbrp-vbeln.
lv_vbeln = is_vbrp-vbeln_vf .
lv_posnr_disc = gv_tax_mat = iv_idx.
lv_posnr = is_vbrp-posnr_vf.
**29_F
MOVE gv_bukrs_land TO gv_land_exit.
TRY.
GET BADI gv_usr_exit_badi
FILTERS
land1 = gv_land_exit.
CATCH cx_badi_not_implemented .
ENDTRY.
CLEAR : gv_usr_exit_impl.
IF gv_usr_exit_badi IS NOT INITIAL.
TRY .
CATCH cx_badi_not_implemented.
ENDTRY.
ENDIF.
"42_F - Begin
IF gv_bukrs_land = 'PT'.
lv_tax_code = <wa_inv_lnes_aux>-taxcode.
IF gv_usr_exit_badi IS NOT INITIAL.
CALL BADI gv_usr_exit_badi->get_non_reveune_based_tax_code
EXPORTING
iv_vbeln = lv_vbeln "46_F ls_vbrp-vbeln
iv_posnr = <wa_inv_lnes_aux>-posnr
CHANGING
cv_tax_code = lv_tax_code.
ENDIF.
lv_no_summary_update =
clfieu_generic_saft=>eval_tax_base_non_revenue( lv_tax_code ).
ENDIF.
"42_F - End
wa_inv_lnes-bukrs = p_bukrs.
wa_inv_lnes-invoice_no = wa_inv_vbrk-vbeln.
wa_inv_lnes-inv_year = p_gjahr.
wa_inv_lnes-inv_date = wa_inv_vbrk-fkdat.
wa_inv_lnes-productcode = wa_inv_discounts-kschl.
wa_inv_lnes-taxlike_mat_ind = 'X'.
wa_inv_lnes-taxpointdate = wa_inv_vbrk-fkdat.
"46_F
READ TABLE it_vbrp_all INTO wa_vbrp WITH KEY vbeln = lv_vbeln "wa_inv_vbrk-
vbeln
posnr = wa_inv_discounts-kposn
"Adjusted in scope of Perf_adjusts_29_F
BINARY SEARCH.
"Adjusted in scope of Perf_adjusts_29_F
IF sy-subrc = 0.
wa_inv_lnes-quantity = wa_vbrp-fkimg.
"29_F
if wa_vbrp-fkimg <> 0. "42_F
wa_inv_lnes-unitprice_ext = abs( wa_inv_discounts-kwert / wa_vbrp-fkimg
).
else.
wa_inv_lnes-unitprice_ext = abs( wa_inv_discounts-kwert ).
endif.
"29_F
ENDIF.
wa_inv_lnes-unitofmeasure = 'UN'.
IF gv_usr_exit_impl GT 0.
CALL BADI gv_usr_exit_badi->set_amounts_credit_debit
EXPORTING
iv_invoice_num = wa_inv_vbrk-vbeln
iv_inv_date = wa_inv_vbrk-fkdat
iv_inv_pos = wa_inv_discounts-kposn "42_F
iv_inv_currency = wa_inv_vbrk-waerk
iv_inv_status = wa_inv_hd-inv_status
CHANGING
cv_inv_debit_amt = wa_inv_lnes-debit_amt_ext
cv_inv_credit_amt = wa_inv_lnes-credit_amt_ext
cv_unit_price = wa_inv_lnes-unitprice_ext.
ENDIF.
wa_inv_lnes-productdesc = wa_inv_lnes-description_line.
if wa_tax_material-VAT_RELEVANT = '2'. "37_F
clear wa_inv_lnes-taxcode . "37_F
else. "37_F
* wa_inv_lnes-taxcode = wa_inv_discounts-mwsk1.
wa_inv_lnes-taxcode = <WA_INV_LNES_AUX>-TAXCODE. "38F
endif. "37_F
MOVE gv_uuid TO wa_inv_lnes-ext_uuid.
wa_inv_lnes-knumv = wa_inv_discounts-knumv.
wa_inv_lnes-kposn = wa_inv_discounts-kposn.
wa_inv_lnes-kschl = wa_inv_discounts-kschl.
wa_inv_lnes-kappl = 'V'.
wa_inv_lnes-mandt = sy-mandt.
* wa_inv_discounts-kwert.
* BEGIN 23_F
if wa_inv_discounts-KOAID = 'A'.
IF wa_inv_lnes-debit_amt_ext IS NOT INITIAL
AND <wa_inv_lnes_aux>-debit_amt_ext IS NOT INITIAL.
<wa_inv_lnes_aux>-debit_amt_ext =
<wa_inv_lnes_aux>-debit_amt_ext - wa_inv_lnes-debit_amt_ext. "46_F
<wa_inv_lnes_aux>-credit_amt_ext =
<wa_inv_lnes_aux>-credit_amt_ext - wa_inv_lnes-credit_amt_ext.
<wa_inv_lnes_aux>-credit_amt_ext =
<wa_inv_lnes_aux>-credit_amt_ext - wa_inv_lnes-debit_amt_ext. "46_F
<wa_inv_lnes_aux>-debit_amt_ext =
<wa_inv_lnes_aux>-debit_amt_ext - wa_inv_lnes-credit_amt_ext.
ENDIF.
"29_F
<wa_inv_lnes_aux>-unitprice_ext =
<wa_inv_lnes_aux>-unitprice_ext - wa_inv_lnes-unitprice_ext.
IF <wa_inv_lnes_aux>-unitprice_ext LT 0. "45_F
<wa_inv_lnes_aux>-unitprice_ext = 0. "45_F
ENDIF. "45_F
* END 23_F
endif. "38_F
iv_idx = gv_tax_mat = gv_tax_mat + 1.
wa_inv_lnes-posnr = gv_tax_mat.
APPEND wa_inv_lnes TO it_inv_lnes.
ENDIF."29_F
CLEAR wa_inv_lnes.
ENDIF.
ENDLOOP.
SORT it_sales_offices.
IF sy-subrc = 0 .
gv_appln_msg-msgty = 'I'. " Mandatory field missing
gv_appln_msg-msgid = gc_message_class .
gv_appln_msg-msgno = '094'. "12_F
gv_appln_msg-msgv1 = p_bukrs.
CONDENSE gv_appln_msg-msgv1 NO-GAPS. "46_F
gv_so_cust_exists_flg = 'X'.
gv_appln_msg-msgty = 'I'. " Mandatory field missing
gv_appln_msg-msgid = gc_message_class .
gv_appln_msg-msgno = '095'.
gv_appln_msg-msgv1 = lv_count_so.
CONDENSE gv_appln_msg-msgv1 NO-GAPS. "46_F
CALL METHOD cl_generic_obj->gen_appl_log
EXPORTING
iv_appl_msg = gv_appln_msg
iv_land = gv_bukrs_land
iv_display = '-'
iv_handle = gv_appln_handle.
ENDIF.
CHECK sy-subrc EQ 0.
ls_order-name = 'STGRD'.
append ls_order to lt_order.
ls_order-name = 'SPRAS'.
append ls_order to lt_order.
*
PERFORM fill_summary_key
CHANGING ls_summary_run.
****30_F
lo_struct ?= cl_abap_typedescr=>describe_by_name( 'VBRP' ).
lt_ddfields = lo_struct->get_ddic_field_list( ).
ENDFORM. "update_user_taxpointdate
*&---------------------------------------------------------------------*
*& Form get_sd_history note 2299395
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_sd_history using p_first p_tab. "40_F
lv_land = gv_bukrs_land.
**note 2393681
TRY.
GET BADI lv_badi_cust_prod
FILTERS
land = lv_land.
CATCH cx_badi_multiply_implemented.
CATCH cx_badi_not_implemented.
ENDTRY.
**note 2393681
CLEAR wa_vbrp.
CLEAR wa_inv_vbrk.
IF lv_badi_cust_prod IS BOUND.
****Prepare tables
IF sy-subrc = 0.
ls_sd_info_h-vbeln = wa_inv_vbrk-vbeln.
ls_sd_info_h-kunnr = wa_inv_vbrk-kunrg.
INSERT ls_sd_info_h INTO TABLE gt_sd_info_h.
CLEAR ls_sd_info_h.
ELSE.
"40_F
SELECT single vbeln kunrg into (ls_sd_info_h-vbeln, ls_sd_info_h-kunnr )
FROM VBRK "40_F
WHERE VBELN = wa_inv_vbrk-vbeln.
"40_F
IF sy-subrc eq 0.
"40_F
INSERT ls_sd_info_h INTO TABLE gt_sd_info_h.
"40_F
CLEAR ls_sd_info_h.
"40_F
ENDIF.
"40_F
ENDIF.
ENDAT.
ls_sd_info_i-vbeln = wa_vbrp-vbeln.
ls_sd_info_i-matnr = wa_vbrp-matnr.
IF NOT ls_sd_info_i-matnr IS INITIAL. " 66_F
INSERT ls_sd_info_i INTO TABLE gt_sd_info_i.
ENDIF. "66_F
CLEAR ls_sd_info_i.
ENDLOOP.
FREE gt_sd_info_h.
FREE gt_sd_info_i.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form change_doc_status 32_F
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM change_doc_status USING lv_vbeln TYPE vbeln
lv_erdat TYPE erdat
lv_erzet TYPE erzet.
IF sy-subrc <> 0.
SELECT SINGLE ernam "erzet erdat
FROM vbrk
INTO lv_ernam
WHERE vbeln = lv_vbeln.
ELSE.
lv_ernam = ls_aux_vbrk-ernam.
ENDIF.
CONCATENATE lv_erdat+0(4)
'-'
lv_erdat+4(2)
'-'
lv_erdat+6(2)
'T'
lv_erzet+0(2)
':'
lv_erzet+2(2)
':'
lv_erzet+4(2)
INTO wa_inv_hd-inv_status_date.
wa_inv_hd-inv_stat_user = lv_ernam.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form prepare_inv_list_status 34_F
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM prepare_inv_list_status.
TYPES:
BEGIN OF st_inv_list_canc,
vbtyp TYPE vbrk-vbtyp,
sfakn TYPE vbrk-sfakn,
END OF st_inv_list_canc.
FREE lt_vbrk_aux.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form adjust_total_tax_like_material 38_F
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM adjust_total_tax_like_material using p_netwr TYPE WERTV9
p_tax type WERTV9.
ENDFORM. "discount_info_item
*&---------------------------------------------------------------------*
*& Form build_inv_status_date
*&---------------------------------------------------------------------*
*& text 54_F
*&---------------------------------------------------------------------*
*& --> WA_INV_VBRK
*& <-- WA_INV_HD_INV_STATUS_DATE
*&---------------------------------------------------------------------*
FORM build_inv_status_date USING p_vbrk type st_inv_hd
CHANGING p_inv_status_date type FIPT_STATDATE.
DATA ls_comwa type VBCO6.
DATA: lv_tabname TYPE tabname.
STATICS: NEW_TABLE TYPE REF TO DATA,
NEW_LINE TYPE REF TO DATA.
FIELD-SYMBOLS: <L_TABLE> TYPE TABLE,
<LINE> TYPE ANY.
FIELD-SYMBOLS: <erdat> type erdat,
<ERZET> type ERZET.
lv_tabname = clfieu_generic_saft=>get_table_flow_cond( ).
if NEW_TABLE is INITIAL.
CREATE DATA NEW_TABLE TYPE TABLE OF (lv_tabname).
ASSIGN NEW_TABLE->* TO <L_TABLE>.
CREATE DATA NEW_LINE LIKE LINE OF <L_TABLE>.
ENDIF.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
sort <L_TABLE> by ('ERDAT') DESCENDING ('ERZET') DESCENDING.
read TABLE <L_TABLE> into <line> INDEX 1.
if sy-subrc eq 0.
ELSE.
CONCATENATE p_vbrk-erdat+0(4)
'-'
p_vbrk-erdat+4(2)
'-'
p_vbrk-erdat+6(2)
'T'
p_vbrk-erzet+0(2)
':'
p_vbrk-erzet+2(2)
':'
p_vbrk-erzet+4(2)
INTO p_inv_status_date.
ENDIF.
if <L_TABLE> is ASSIGNED.
Clear: <L_TABLE>, <LINE>.
endif.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form read_condition
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_KONV
*& --> WA_INV_VBRK_KNUMV
*& --> WA_VBRP_POSNR
*&---------------------------------------------------------------------*
FORM read_condition "TABLES pt_konv STRUCTURE konv "75_F
USING p_knumv
p_posnr.
* --> Begin of 89_F
* -- Commented (replaced by form GET_TABLE_SD_CONDITION)
* DATA: lv_tabname type string.
*
* lv_tabname = clfieu_generic_saft=>get_table_sd_condition( ). "55_F
* <-- End of 89_F
ENDFORM.
*&---------------------------------------------------------------------*
*& Form downpayment
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> WA_VBRP
*&---------------------------------------------------------------------*
FORM downpayment USING p_knumv
p_vbrp LIKE LINE OF it_vbrp
p_line LIKE LINE OF it_inv_lnes
p_biling_plan.
IF p_biling_plan IS INITIAL.
CHECK cl_generic_obj->gt_kschl IS NOT INITIAL.
ENDIF.
CASE p_biling_plan.
WHEN 'X'.
WHEN OTHERS.
PERFORM create_down_payment_line TABLES lt_komv
USING p_vbrp-posnr.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form check_downpayment_biling_plan
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> WA_INV_VBRK_VBELN
*& <-- LV_BILING_PLAN
*&---------------------------------------------------------------------*
FORM check_downpayment_biling_plan USING p_vbeln
CHANGING p_biling_plan.
* --> Begin of 68_F
* DATA : lt_vbrp_bill TYPE TABLE OF st_inv_line_items. "55_F
* DATA : ls_vbrp LIKE LINE OF lt_vbrp_bill.
*
* CLEAR: p_biling_plan.
*
* SELECT vbeln
* posnr
* matnr
* fkimg
* vrkme
* mwskz
* werks
* netwr
* mwsbp
* arktx
* erdat
* aubel
* vkbur
* vgbel "37_F
* vgpos "37_F
* augru_auft "note 29_F
* AUPOS "55_F
* fareg "55_F
* FROM vbrp INTO CORRESPONDING FIELDS OF TABLE lt_vbrp_bill
* WHERE vbeln = p_vbeln
* AND fareg BETWEEN '4' AND '5'.
*
* IF sy-subrc EQ 0.
* loop at lt_vbrp_bill into ls_vbrp.
* append ls_vbrp to it_vbrp .
* endloop.
* sort it_vbrp.
* p_biling_plan = 'X'.
* ENDIF.
CLEAR: p_biling_plan.
IF sy-subrc EQ 0.
SORT it_vbrp.
p_biling_plan = 'X'.
ENDIF.
* <-- End of 68_F
ENDFORM.
*&---------------------------------------------------------------------*
*& Form create_down_payment_line
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_KOMV
*& --> P_VBRP_POSNR
*&---------------------------------------------------------------------*
FORM create_down_payment_line TABLES pt_komv STRUCTURE komv
USING p_posnr.
DATA: ls_komv TYPE komv,
ls_komv_vat TYPE komv.
DATA : lv_posnr TYPE posnr.
DATA: ls_taxable TYPE saft_pt_tax_data.
* --> Begin of 71_F
DATA lv_credit TYPE abap_bool.
* -- Identify Debit/Credit
IF wa_inv_lnes-credit_amt_ext IS NOT INITIAL.
lv_credit = abap_true.
ELSE.
lv_credit = abap_false.
ENDIF.
* <-- End of 71_F
lv_posnr = p_posnr.
lv_posnr+0(1) = '9'.
wa_inv_lnes-quantity = 1.
wa_inv_lnes-taxcode = ls_taxable-taxcode.
wa_inv_lnes-taxpercent = ls_taxable-taxpercentage.
* wa_inv_lnes-taxamount = ls_komv-kwert * ls_taxable-taxpercentage /
100."71_F
wa_inv_lnes-taxamount = ls_komv-kbetr * ls_taxable-taxpercentage / 100.
"71_F
* wa_inv_lnes-unitprice_ext = ls_komv-kwert. "71_F
wa_inv_lnes-unitprice_ext = ls_komv-kbetr. "71_F
ENDIF.
ENDIF.
APPEND wa_inv_lnes TO it_inv_lnes.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_reasoncode
*&---------------------------------------------------------------------*
*& text "56_F
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_reasoncode . "56_F
DATA: lv_rc type sy-subrc.
FIELD-SYMBOLS: <f1> TYPE any.
CLEAR ls_reasoncode_sd.
IF sy-subrc <> 0.
READ TABLE lt_reasoncode_sd
INTO ls_reasoncode_sd
WITH KEY stgrd = <f1>
spras = 'EN'.
IF sy-subrc <> 0.
READ TABLE lt_reasoncode_sd
INTO ls_reasoncode_sd
WITH KEY stgrd = <f1>
spras = sy-langu.
ENDIF.
ENDIF.
"only needs a reason if canceled
wa_inv_hd-inv_stat_reason = ls_reasoncode_sd-txt40.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHECK_FILTER_PLANTS_ABROAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--C_VBRP text
*----------------------------------------------------------------------*
FORM check_filter_plants_abroad CHANGING ct_vbrp ct_vbrk.
DATA: lo_class TYPE REF TO cl_oo_class,
lt_interfaces TYPE seo_relkeys,
ls_interfaces TYPE seorelkey,
lo_object TYPE REF TO object,
lv_method TYPE string,
lv_classname TYPE seoclsname.
IF <ft_vbrp> is ASSIGNED.
<ft_vbrp> = ct_vbrp.
lt_vbrp[] = <ft_vbrp>.
ENDIF.
IF <ft_vbrk> is ASSIGNED.
<ft_vbrk> = ct_vbrk.
lt_vbrk[] = <ft_vbrk>.
ENDIF.
ptab_line-name = 'IV_BUKRS'.
ptab_line-kind = cl_abap_objectdescr=>exporting.
GET REFERENCE OF p_bukrs INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.
ptab_line-name = 'ET_WERKS_R'.
ptab_line-kind = cl_abap_objectdescr=>importing.
GET REFERENCE OF lr_werks INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.
* --> Check the class for existence
TRY.
CREATE OBJECT lo_class
EXPORTING
clsname = lv_classname
with_inherited_components = seox_true
with_interface_components = seox_true.
CATCH cx_class_not_existent INTO exc_ref_2.
ENDTRY.
lv_method = 'GET_PLANTS_PT'.
TRY.
CALL METHOD lo_object->(lv_method)
PARAMETER-TABLE
ptab.
CATCH cx_sy_dyn_call_error INTO exc_ref.
ENDTRY.
IF sy-subrc EQ 0.
lv_update = abap_true. "71_F
ENDIF.
ENDIF.
IF sy-subrc EQ 0.
* -- Update the counting of docs
IF ls_vbrk-vbtyp = 'U'.
gv_invoice_no_wd = gv_invoice_no_wd - 1.
ELSE.
gv_invoice_no = gv_invoice_no - 1.
ENDIF.
ENDIF.
ENDIF.
CLEAR ls_vbrk-vbeln.
ENDLOOP.
* -- Header
<ft_vbrk> = lt_vbrk[].
ct_vbrk = <ft_vbrk>.
* -- Items
<ft_vbrp> = lt_vbrp[].
ct_vbrp = <ft_vbrp>.
ENDIF.
CLEAR lv_method.
ENDIF.
ENDIF.
SELECT vbeln
posnr
matnr
fkimg
vrkme
mwskz
werks
netwr
mwsbp
arktx
erdat
aubel
vkbur
vgbel
vgpos
augru_auft
aupos
fareg
FROM vbrp INTO CORRESPONDING FIELDS OF TABLE gt_vbrp_bill
FOR ALL ENTRIES IN it_inv_vbrk
WHERE vbeln = it_inv_vbrk-vbeln
AND fareg BETWEEN '4' AND '5'.
ENDIF.
CLEAR: it_material_tmp[].
lv_sylangu = sy-langu.
ENDIF.
lv_sylangu = sy-langu.
ENDIF.
TRY.
p_tabname = cl_abap_dyn_prg=>check_whitelist_str(
val = p_tabname
whitelist = clfieu_generic_saft=>gc_whitelist_sql
).
CATCH cx_abap_not_in_whitelist.
ENDTRY.
ENDFORM.