Invoice Validation Class Overview
Invoice Validation Class Overview
****************************************************************************
* Project : Uniport III *
* Related Application : Invoice *
* Developer : Vinay Sharma *
* Date : 28-03-2022 *
* Transport : U3DK900278 *
* Purpose : Invoice Global class *
****************************************************************************
* Revision History
* 29.03.2023 PP29032023 Uniport3 U3DK906088 Change of RFC Import
Parameters
****************************************************************************
* CR# |Identifier |Date | Transport| Developer | Purpose
*===========================================================================
*DF-1585 |U3DK909501 |
* Delegate for invoice owner becomes invoice owner if BU rejects invoice
*INC2083864|TS21052024 |21.05.2024|U3DK909794|Tajuddeen Shaik|Invoice posted
* is again came in AP queue and able to submit it again. Keeping
* an additional validation so that the posted invoice can not
* submitted again
*INC2088197|TS29052024 |29.05.2024|U3DK909906|Tajuddeen Shaik| The invoice
* creation not possible when the total amount before tax is set
* to zero. Only the tax amount needs to be paid. hence removing
* th validation on header amount before tax
*INC2086578|UC04062024 |04.06.2024|U3DK909944|Umesh Chandra|DE: Invoice
* Coding issue - 9002415472
*INC2086578|UC19062024 |19.06.2024|U3DK910144|Umesh Chandra|DE: Invoice
* Coding issue - 9002415472
*INC2094573|KC20062024 |20.06.2024|U3DK910161|Karthik Chimkod|
* GB: Error should be displayed only when Payment Block is B
*INC2101817|ST27062024 |27.06.2024|U3DK910228|Sachin Tiwari|NL-Supplier
* 340114 - blocked for payment in Uniport, not blocked in SAP
*INC2123216|MS23082024 |23.08.2024|U3DK910721|Mohit Sharma|Post processing Error
* Posting date cannot be a future date.
*INC2140013|GK04092024|04.09.2024|U3DK910836|Gopala Krishna kanugolu| Post
Processing Error
* | The tax amount must not be greater than the tax base.
*INC2142143|SS09092024|09.09.2024|U3DK910871|Sneha Singh|
* | Add duplicate validation for credit note at the time of submission
*INC2142143|SS12092024|12.09.2024|U3DK910918|Sneha Singh|
* | Add duplicate validation for credit note at the time of submission
*INC2124061|MS18092024|18.09.2024|U3DK911018|Mohit Sharma|
* |The invoice is not creating when we are two or more OSB project. Hence
* removing pspid from sort statement.
*INC2145346|SS19092024|12.09.2024|U3DK911025|Sneha Singh|
* | Remove validation Header tax amount must not be greater than Amount
before tax
*INC2149404|NP25092024|25.09.2024|U3DK910961|Nitin Pandey|
* | Post Processing Error Reoccurred - EXCEPTION COMMUNICATION_FAILURE
Error when opening an RFC
*INC2136468|MS25092024|25.09.2024|U3DK910961|Mohit Sharma|
* | Early Closure - email approval issue
*INC2136468|MS30092024|30.09.2024|U3DK911165|Mohit Sharma|
* | Early Closure - email approval issue
*INC2152768|UC02102024|02.10.2024|U3DK911186|Umesh Chandra|
* | Validation for -ve amount for PO line item
*INC2154396|MS08102024|08.10.2024|U3DK911247|Mohit Sharma|
* | In case of early closure,we are allowing to post invoice in current
date.
*INC2152768|UC09102024|09.10.2024|U3DK911257|Umesh Chandra|
* | Validation for -ve amount for PO line item_Credit note
*INC2164151|MS14112024|14.11.2024|U3DK911694|Mohit Sharma|
* | Added validation on the supplier invoice number on internal invoices
in post processing
*DF-2046 |SS18122024|18.12.2024|U3DK912015|Sneha Singh|
* | Added validation when PO owner is deactivated
****************************************************************************
CLASS zunp_cl_invoice DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-DATA : zi_u3invoice_ty TYPE TABLE OF zi_u3invoice.
CLASS-METHODS getdata_from_entity
IMPORTING
lt_header TYPE data
lt_items TYPE data OPTIONAL
lt_addr TYPE data OPTIONAL
lt_wht TYPE data OPTIONAL
EXPORTING ls_invhd TYPE zunp_invhd
lt_invit TYPE zunp_invit_tt
lt_invadd TYPE zunp_invadd_tt
lt_invwht TYPE zunp_invwht_tt
lt_messages TYPE z_t_message.
CLASS-METHODS check_early_closure
IMPORTING
iv_ekorg TYPE zunp_ekorg
EXPORTING
ex_live TYPE zunp_char1.
CLASS-METHODS invoice_amex_process
IMPORTING
is_invamex TYPE zunp_zamex_up OPTIONAL
iv_lifnr TYPE zunp_lifnr OPTIONAL
EXPORTING
ex_belnr TYPE zunp_re_belnr
et_messages TYPE z_t_message.
CLASS-METHODS eta_po_check
IMPORTING
eta_chk TYPE zunp_char1 OPTIONAL
iv_ebeln TYPE z_ebeln OPTIONAL
EXPORTING
et_messages TYPE z_t_message.
** ASL to AP
CLASS-METHODS asl_to_ap IMPORTING is_invhd TYPE zunp_invhd
it_invit TYPE zunp_invit_tt OPTIONAL
EXPORTING
ev_linflag TYPE zunp_char1
ev_accflg TYPE zunp_char1
ev_aslflg TYPE zunp_char1
ev_blgl_flg TYPE zunp_char1.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
METHOD asl_to_ap.
*DATA(lt_invi) = it_invit .
DATA(lv_line) = lines( it_invit ).
SELECT ar_flag FROM zunp_zekorg WHERE ekorg = @is_invhd-ekorg INTO
@DATA(ar_flag).
ENDSELECT.
IF ar_flag = 'X'.
IF lv_po IS INITIAL.
IF lv_line = 1.
ev_linflag = 'X'.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD check_early_closure.
** check early closure
SELECT SINGLE early_closure FROM zunp_zekorg WHERE ekorg = @iv_ekorg INTO
@DATA(lv_early_closure).
IF lv_early_closure IS NOT INITIAL .
ex_live = 'X'.
ENDIF.
ENDMETHOD.
METHOD eta_po_check.
** ETA PO check
IF eta_chk IS NOT INITIAL.
DATA ls_message TYPE symsg.
DATA lt_message TYPE zunp_bapiret2_t.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '250'.
ls_message-msgty = 'E'.
ENDMETHOD.
METHOD getdata_from_entity.
ENDLOOP.
UNASSIGN <lv_new_value>.
UNASSIGN <lv_old_value>.
METHOD invoice_amex_process.
TYPES:BEGIN OF ts_podata,
flag TYPE zunp_char1,
po_no TYPE zunp_ebeln,
po_itm TYPE zunp_ebelp,
itm_txt TYPE zunp_txz01,
total_amount TYPE zunp_bp_wert1,
amount TYPE zunp_bp_wert1,
curr TYPE zunp_waers,
bedat TYPE bldat,
deldate TYPE zunp_datbi,
lifnr TYPE zunp_lifnr,
vendor_name TYPE zunp_zlifnrnam,
project TYPE zunp_ps_pspid,
projname TYPE zunp_ps_post1,
wbs_id TYPE zunp_ps_posid,
wbs TYPE zunp_ps_post1,
kostl TYPE zunp_kostl,
ccname TYPE zunp_kltxt,
saknr TYPE zunp_saknr,
glacc TYPE zunp_txt50_skat,
prctr TYPE zunp_prctr,
segment TYPE zunp_fb_segment,
vbund TYPE zunp_rassc,
bewar TYPE zunp_rmvct,
cmc TYPE zunp_char1,
zzlabel TYPE zunp_zlabel,
recoupable TYPE zunp_zrecoupable,
powner TYPE zunp_zuid,
grnuser TYPE zunp_zfullname,
wfkey TYPE zunp_zwfkey,
ihrez TYPE zunp_ihrez,
bukrs TYPE zunp_bukrs,
netpr TYPE zunp_nebtr,
zdsaknr TYPE zunp_zdsaknr,
menge TYPE zunp_znetamnt,
onetamt TYPE zunp_znetamnt,
ekorg TYPE zunp_ekorg,
app_email TYPE zunp_zuid,
po_source TYPE zunp_char2,
po_status TYPE zunp_zumgdesc,
prctr_name TYPE zunp_ltext,
END OF ts_podata,
BEGIN OF ts_po_status,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
status TYPE zunp_zumgdesc,
END OF ts_po_status,
BEGIN OF ts_qtitm,
warers TYPE waers,
banfn TYPE zunp_banfn,
bnfpo TYPE zunp_bnfpo,
bukrs TYPE zunp_bukrs,
statu TYPE zunp_status,
deduct TYPE zunp_char1,
zwbs TYPE zunp_ps_posid,
kostl TYPE zunp_kostl,
waers TYPE waers,
menge TYPE zunp_bamng,
preis TYPE zunp_preis,
meins TYPE zunp_bamei,
peinh TYPE zunp_peinh,
lfdat TYPE zunp_eindt,
splititemno TYPE zunp_bnfpo,
itemtype TYPE zunp_zitype,
serbase TYPE zunp_zserbase,
gswrt TYPE zunp_gswrt,
item_textid TYPE zunp_tdobname,
txz01 TYPE zunp_txz01,
taxcd TYPE zunp_ztaxcd,
taxprg TYPE zunp_taxprg,
zvatamnt TYPE zunp_zvatamnt,
txjcd TYPE zunp_ad_txjcd,
hstprg TYPE zunp_hstprg,
gstprg TYPE zunp_gstprg,
pstprg TYPE zunp_pstprg,
qstprg TYPE zunp_qstprg,
hst TYPE zunp_zhst,
gst TYPE zunp_zgst,
pst TYPE zunp_zpst,
qst TYPE zunp_zqst,
znetamnt TYPE zunp_znetamnt,
org_taxamt TYPE zunp_zvatamnt,
saknr TYPE zunp_saknr,
dsaknr TYPE zunp_zdsaknr,
pernr TYPE zunp_persno,
deletion TYPE zunp_flag,
orgflg TYPE zunp_zorgflg,
maxno TYPE zunp_bnfpo,
payblckd TYPE zunp_zblckd,
coder TYPE zunp_zcid,
bednr TYPE zunp_bednr,
read_only TYPE zunp_char1,
swbs TYPE zunp_ps_posid,
prctr TYPE zunp_prctr,
obdgt TYPE zunp_bp_wert1,
exch_rate TYPE zunp_ukurs_curr,
lcl_rate TYPE zunp_tfact_curr,
frn_rate TYPE zunp_ffact_curr,
app_email TYPE zunp_zuid,
app_usr TYPE zunp_zuid,
app_flg TYPE zunp_zapproval,
bud_del TYPE zunp_flag,
asl_no TYPE zunp_kunnr,
bdate TYPE zunp_dzfbdt,
contno TYPE zunp_zcontno,
ebeln TYPE zunp_ebeln,
ebelp TYPE zunp_ebelp,
grnuser TYPE zunp_zuid,
nyag TYPE zunp_char4,
rsrv TYPE zunp_char1,
reserv TYPE zunp_zresrv,
util TYPE zunp_bp_wert1,
itno TYPE zunp_ebelp,
rsrv_read TYPE zunp_wdy_boolean,
ndeduct_amt TYPE zunp_znondeductamt,
trnst TYPE zunp_bewar,
tradp TYPE zunp_vbund,
read_split TYPE zunp_wdy_boolean,
pqsplit TYPE zunp_wdy_boolean,
bdelete TYPE zunp_flag,
rpreis TYPE zunp_preis,
rsutil TYPE zunp_bp_wert1,
ocoder TYPE zunp_zcid,
sflag TYPE zunp_char1,
suptaxcd TYPE zunp_zsuptaxcd,
staxdesc TYPE zunp_txz01,
staxamt TYPE zunp_gramt,
staxprg TYPE zunp_taxprg,
sall TYPE zunp_char1,
projno TYPE zunp_ps_psphi,
wbs2 TYPE zunp_ps_posid,
wfkey TYPE zunp_zwfkey,
zzwfind TYPE zunp_zwfspind,
acctext TYPE zunp_zacctext,
zuonr TYPE zunp_dzuonr,
zuonr_ref1 TYPE zunp_dzuonr,
zuonr_ref2 TYPE zunp_dzuonr,
zuonr_ref3 TYPE zunp_xref3,
fundag TYPE zunp_zfundagy,
j_1bmatuse TYPE zunp_j_1bmatuse,
j_1bmatorg TYPE zunp_j_1bmatorg,
j_1bnbm TYPE zunp_j_1bnbmco1,
j_1bindust TYPE zunp_j_1bindus3,
dp_invno TYPE zunp_re_belnr,
dp_rebzj TYPE zunp_rebzj,
END OF ts_qtitm,
BEGIN OF ts_qtadd,
itno TYPE zunp_bnfpo,
name TYPE zunp_ad_name1,
contact TYPE zunp_ad_remark1,
street TYPE zunp_ad_street,
housenum TYPE zunp_ad_hsnm1,
street2 TYPE zunp_ad_strspp1,
street3 TYPE zunp_ad_strspp2,
street4 TYPE zunp_ad_strspp3,
street5 TYPE zunp_ad_lctn,
city TYPE zunp_ort01,
region TYPE zunp_regio,
postcode TYPE zunp_ad_pstcd1,
country TYPE zunp_land1,
pobox TYPE zunp_ad_pobx,
po_postcode TYPE zunp_pstl2,
addnum TYPE zunp_adrnr,
landx TYPE zunp_landx50,
taxjurcode TYPE zunp_ad_txjcd,
lifnr TYPE zunp_lifnr,
txjcd_txt TYPE zunp_text60,
END OF ts_qtadd.
ls_ebeln-sign = 'I'.
ls_ebeln-option = 'EQ'.
ls_ebeln-low = is_invamex-ebeln.
APPEND ls_ebeln TO lt_ebeln.
************************************
ls_lifnr-sign = 'I'.
ls_lifnr-option = 'EQ'.
ls_lifnr-low = iv_lifnr.
APPEND ls_lifnr TO lt_lifnr.
************************************
ls_ekorg-sign = 'I'.
ls_ekorg-option = 'EQ'.
ls_ekorg-low = 'US00'.
APPEND ls_ekorg TO lt_ekorg.
********************************
DATA lv_rfc_obj TYPE REF TO if_rfc_dest.
DATA lv_rfc_dest TYPE rfcdest.
************Get PO details***********************************************
IF ls_ebeln-low IS NOT INITIAL.
zunp_utility_class=>get_rfcdest( IMPORTING ev_rfc_obj = lv_rfc_obj
ev_rfc_dest = lv_rfc_dest ).
TRY.
CALL FUNCTION 'ZUNP_GET_OPENPO_DETAILS' DESTINATION lv_rfc_dest
EXPORTING
ir_ekorg = lt_ekorg
ir_ebeln = lt_ebeln
ir_lifnr = lt_lifnr
IMPORTING
et_qtitm = et_qtitm
et_qtadd = lt_qtadd
et_openpodetails = lt_podata "PP29032023
et_po_status = lt_postatus
EXCEPTIONS
system_failure = 1 MESSAGE msg
communication_failure = 2 MESSAGE msg
OTHERS = 3.
CASE sy-subrc.
WHEN 1.
APPEND TEXT-001 && msg TO lt_text.
WHEN 2.
APPEND TEXT-002 && msg TO lt_text.
WHEN 3.
APPEND TEXT-003 TO lt_text.
ENDCASE.
CATCH cx_root INTO DATA(cx_root).
lv_text = cx_root->get_text( ).
APPEND lv_text TO lt_text.
ENDTRY.
zunp_utility_class=>close_rfcdest( io_rfc_dest = lv_rfc_obj ). " Close RFC
ENDIF.
ENDMETHOD.
METHOD invoice_history.
TYPES:
BEGIN OF ty_zunp_action .
INCLUDE TYPE zunp_invoice_action_hist_s.
INCLUDE TYPE if_chdo_object_tools_rel=>ty_icdind.
TYPES END OF ty_zunp_action .
TYPES:
tt_zunp_action TYPE STANDARD TABLE OF ty_zunp_action.
DATA lt_new_header TYPE STANDARD TABLE OF zunp_invhd.
DATA ls_new_header TYPE zunp_invhd.
DATA ls_old_header TYPE zunp_invhd.
DATA upd_txt_header TYPE if_chdo_object_tools_rel=>ty_cdchngindh.
DATA upd_header TYPE if_chdo_object_tools_rel=>ty_cdchngindh.
DATA changenumber TYPE if_chdo_object_tools_rel=>ty_cdchangenr.
DATA : objectid TYPE if_chdo_object_tools_rel=>ty_cdobjectv,
utime_hr TYPE if_chdo_object_tools_rel=>ty_cduzeit,
udate_hr TYPE if_chdo_object_tools_rel=>ty_cddatum,
username_hr TYPE if_chdo_object_tools_rel=>ty_cdusername,
cdoc_upd_object TYPE if_chdo_object_tools_rel=>ty_cdchngindh VALUE 'I'.
DATA : cdchangenumber TYPE if_chdo_object_tools_rel=>ty_cdchangenr.
DATA : lt_txt_header TYPE if_chdo_object_tools_rel=>ty_cdtxt_tab,
ls_txt_header LIKE LINE OF lt_txt_header.
DATA:lt_new_action TYPE tt_zunp_action,
lt_old_action TYPE tt_zunp_action.
DATA lv_btp_id TYPE c LENGTH 12.
DATA lv_obj TYPE zunp_zwi_obj.
ls_txt_header-teilobjid = objectid.
ls_txt_header-textart = 'CHAR'.
ls_txt_header-textspr = 'E'.
ls_txt_header-updkz = 'U'.
ELSE.
lv_obj = ls_new_header-belnr.
zunp_cl_zutility=>get_last_approver_id(
EXPORTING
iv_protyp = 'IV' "Process type
iv_obj = lv_obj "Document number
IMPORTING
ev_btpid = lv_btp_id " last action user
).
ENDIF.
IF lv_btp_id IS INITIAL.
lv_btp_id = ls_new_header-aenuser.
ENDIF.
username_hr = lv_btp_id.
ELSE.
username_hr = sy-uname.
ENDIF.
TRY.
** fill invoice history
IF iv_email_hist = abap_true.
zcl_zunp_invoice_chdo=>write(
EXPORTING
objectid = objectid
utime = utime_hr
udate = udate_hr
username = username_hr
object_change_indicator = cdoc_upd_object
planned_or_real_changes = 'R'
icdtxt_zunp_invoice = lt_txt_header
upd_icdtxt_zunp_invoice = upd_txt_header
upd_zunp_invhd = upd_header
xzunp_invoice_action_hist_s = lt_new_action
yzunp_invoice_action_hist_s = lt_old_action
upd_zunp_invoice_action_hist_s = upd_header
IMPORTING
changenumber = changenumber
).
ELSE.
zcl_zunp_invoice_chdo=>write(
EXPORTING
objectid = objectid
utime = utime_hr
udate = udate_hr
username = username_hr
object_change_indicator = cdoc_upd_object
planned_or_real_changes = 'R'
icdtxt_zunp_invoice = lt_txt_header
upd_icdtxt_zunp_invoice = upd_txt_header
o_zunp_invhd = ls_old_header
n_zunp_invhd = ls_new_header
upd_zunp_invhd = upd_header
xzunp_invoice_action_hist_s = lt_new_action
yzunp_invoice_action_hist_s = lt_old_action
upd_zunp_invoice_action_hist_s = upd_header
IMPORTING
changenumber = changenumber
).
ENDIF.
CATCH cx_chdo_write_error.
ENDTRY.
ENDMETHOD.
METHOD validate_invoice_header.
*** * validate header and item fields
TYPES: BEGIN OF ty_bukrs,
sign TYPE c LENGTH 1,
option TYPE c LENGTH 2,
low TYPE zunp_bukrs,
high TYPE zunp_bukrs,
END OF ty_bukrs.
ENDIF.
***check for non VAT supplier
* SELECT vatnum, eu_vatnum FROM zunp_zsupplr_int WHERE lifnr = @is_invhd-lifnr
AND purc_org = @is_invhd-ekorg
* ORDER BY PRIMARY KEY INTO
* ( @DATA(lv_vatnum), @DATA(lv_euvatnum) ) UP TO 1 ROWS.
*
* ENDSELECT.
***********************************************************************
DATA lv_nebtr TYPE z_nebtr.
DATA lv_vatamt TYPE zunp_zvatamnt.
DATA lv_grossamt TYPE z_rmwwr.
**** movement type
IF it_invit IS NOT INITIAL.
SELECT FROM zunp_zfi_acc_tty FIELDS * FOR ALL ENTRIES IN @it_invit
WHERE saknr = @it_invit-saknr INTO TABLE @DATA(lt_tty) . "#EC
CI_ALL_FIELDS_NEEDED
ENDIF.
SORT lt_tty BY saknr trtyp validfrom ASCENDING.
** get required header details
SELECT SINGLE barcde_orgnl, aenuser FROM zunp_invhd WHERE belnr = @is_invhd-
belnr
INTO ( @DATA(lv_barcde_org), @DATA(lv_aenuser) ).
TRY.
CALL FUNCTION 'ZUNP_CHK_INVOICE_POST_DATE' DESTINATION lv_rfc_dest
EXPORTING
iv_poflag = lv_poflag
iv_flag = lv_flag
iv_processid = lv_processid
is_header = ls_header
it_bukrs = lt_codedbukrs "lt_bukrs
IMPORTING
ev_budat = lv_budat
ev_msgtext = lv_resultmsg
ev_ppclsd = lv_ppclsd
EXCEPTIONS
system_failure = 1 MESSAGE msg
communication_failure = 2 MESSAGE msg
OTHERS = 3.
CASE sy-subrc.
*Start of INC2149404 #NP24092024
WHEN 0.
CLEAR lt_txt[].
EXIT.
*End of INC2149404 #NP24092024
WHEN 1.
APPEND |EXCEPTION SYSTEM_FAILURE | && msg TO lt_text.
WAIT UP TO 1 SECONDS.
WHEN 2.
APPEND |EXCEPTION COMMUNICATION_FAILURE | && msg TO lt_text.
WAIT UP TO 1 SECONDS.
WHEN 3.
APPEND |EXCEPTION OTHERS| TO lt_text.
WAIT UP TO 1 SECONDS.
ENDCASE.
ENDTRY.
ENDDO.
*** Close RFC
zunp_utility_class=>close_rfcdest( io_rfc_dest = lv_rfc_obj ).
IF lv_live = 'X' AND lv_budat IS NOT INITIAL AND is_invhd-budat < lv_budat
AND lv_emailflag = 'X'.
CLEAR lv_resultmsg.
ENDIF.
IF lv_live = 'X' AND lv_budat IS NOT INITIAL AND is_invhd-budat < lv_budat
AND is_FiPostUpd IS NOT INITIAL AND is_invhd-budat = lv_user_date.
CLEAR lv_resultmsg.
ENDIF.
* CLEAR: lv_user_date.
*** convert system date to user's date based on the user's time zone.
* lv_user_date = zunp_cl_zutility=>get_user_date( ).
**
** validation on invoice posting date
IF is_invhd-budat > lv_user_date AND lv_resultmsg IS INITIAL AND is_invhd-
budat <> lv_budat.
* IF is_invhd-budat > cl_abap_context_info=>get_system_date( ) AND lv_resultmsg
IS INITIAL AND is_invhd-budat <> lv_budat.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '093'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
IF sy-subrc EQ 0.
SORT lit_invh BY bldat DESCENDING.
READ TABLE lit_invh INTO DATA(lwa_invh) INDEX 1.
lv_daydiff = is_invhd-bldat - lwa_invh-bldat.
IF lv_daydiff LT 0.
lv_daydiff = lwa_invh-bldat - is_invhd-bldat.
ENDIF.
IF lv_daydiff LE 365.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
* Start of changes: INC2142143 SS12092024
IF is_invhd-type = 'IV' OR is_invhd-type = 'TX'.
ls_message-msgno = '001'.
ELSEIF is_invhd-type = 'CN'.
ls_message-msgno = '556'.
ENDIF.
* End of changes: INC2142143 SS12092024
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-xblnr.
ls_message-msgv2 = lwa_invh-belnr.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
ENDIF.
* End of changes: INC2142143 SS09092024
*** This condition should not be checked in postprocessing step / DF-1483 (added
is_FiPostUpd)
* IF is_invhd-xblnr IS NOT INITIAL AND is_invhd-lifnr IS NOT INITIAL AND
is_FiPostUpd IS INITIAL.
*** get document date and posting date from invoice header table
**check for already posted invoice with same supplier reference number hence
suppressed the below condition.
* SELECT belnr, xblnr, invno, bldat, budat FROM zunp_invhd
* WHERE belnr NE @is_invhd-belnr
* AND xblnr = @is_invhd-xblnr
* AND lifnr = @is_invhd-lifnr
* AND statu <> 'DEL' AND statu <> 'REVS' AND statu
<> 'POST' "++ Added POST for INC2086578
* AND buckst <> 'DELETE' AND buckst <> 'EX-DUP'
* INTO TABLE @DATA(lit_invh). "#EC CI_NOFIELD
*
* IF sy-subrc EQ 0.
* SORT lit_invh BY bldat DESCENDING.
* READ TABLE lit_invh INTO DATA(lwa_invh) INDEX 1.
* lv_daydiff = is_invhd-bldat - lwa_invh-bldat.
* IF lv_daydiff LT 0.
* lv_daydiff = lwa_invh-bldat - is_invhd-bldat.
* ENDIF.
* IF lv_daydiff LE 365.
* CLEAR ls_message.
* ls_message-msgid = 'ZUNP_ZMCIV'.
* ls_message-msgno = '001'.
* ls_message-msgty = 'E'.
* ls_message-msgv1 = is_invhd-xblnr.
* ls_message-msgv2 = lwa_invh-belnr.
* APPEND ls_message TO et_messages.
* ENDIF.
* ENDIF.
* ENDIF.
** display error if red light
**only traffic light need to check hence suppressed the below condition
READ TABLE it_invit INTO DATA(ls_item) WITH KEY lstatus = 'ICON_RED_LIGHT'.
"#EC CI_STDSEQ
IF sy-subrc EQ 0.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '097'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
**** India Localization Validations
IF is_invhd-ekorg = 'IN00'.
IF is_invhd-bupla IS NOT INITIAL AND is_invhd-secco IS NOT INITIAL AND
is_invhd-bukrs IS NOT INITIAL.
*** Business place & and Sec Code & entry are not valid for Company Code &.
SELECT COUNT(*) FROM zunp_seccode WHERE bukrs = @is_invhd-bukrs
AND seccode = @is_invhd-secco AND bplace = @is_invhd-bupla INTO
@DATA(lv_bupla_count) UP TO 1 ROWS.
IF sy-subrc <> 0 .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '455'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-bupla.
ls_message-msgv2 = is_invhd-secco.
ls_message-msgv2 = is_invhd-bukrs.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
" Place of supply & is not valid
IF is_invhd-plc_sup IS NOT INITIAL .
SELECT COUNT(*) FROM zunpi_sh_region WHERE land1 = @is_invhd-ekorg+0(2)
AND bland = @is_invhd-plc_sup
INTO @DATA(lv_plc_count) UP TO 1 ROWS.
IF sy-subrc <> 0 .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '456'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-plc_sup.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
" GST Partner & is not valid
IF is_invhd-gst_part IS NOT INITIAL .
SELECT COUNT(*) FROM zunp_zsupplr_int WHERE lifnr = @is_invhd-gst_part
INTO @DATA(lv_gstpart_cnt) UP TO 1 ROWS.
IF sy-subrc <> 0 .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '457'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-gst_part.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
" Business place is mandatory.
IF is_invhd-bupla IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '451'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
" Section code is mandatory.
IF is_invhd-secco IS INITIAL .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '452'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
" GST Partner is mandatory.
IF is_invhd-gst_part IS INITIAL .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '453'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-gst_part.
APPEND ls_message TO et_messages.
ENDIF.
" Place of supply is mandatory.
IF is_invhd-plc_sup IS INITIAL .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '454'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-gst_part.
APPEND ls_message TO et_messages.
ENDIF.
* "HSN Code Validated
* LOOP AT it_invit INTO DATA(ls_invit).
* IF ls_invit-in_con_code IS INITIAL.
* CLEAR ls_message.
* ls_message-msgid = 'ZUNP_ZMCIV'.
* ls_message-msgno = '547'.
* ls_message-msgty = 'E'.
* ls_message-msgv1 = is_invhd-ekorg.
* APPEND ls_message TO et_messages.
* ELSEIF ls_invit-in_con_code IS NOT INITIAL.
* SELECT SINGLE steuc FROM zunp_t604f WHERE land1 = 'IN' AND steuc =
@ls_invit-in_con_code
* INTO @DATA(lv_steuc).
* IF sy-subrc IS NOT INITIAL.
* CLEAR ls_message.
* ls_message-msgid = 'ZUNP_ZMCIV'.
* ls_message-msgno = '553'.
* ls_message-msgty = 'E'.
* ls_message-msgv1 = ls_invit-in_con_code.
* APPEND ls_message TO et_messages.
* ENDIF.
* ENDIF.
* ENDLOOP.
ENDIF.
IF is_invhd-ekorg = 'AR00'.
** Document type is mandatory
IF is_invhd-blart IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '429'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
CASE is_invhd-ekorg.
WHEN 'CL00'.
IF ls_item-vatcost EQ 'V'.
READ TABLE it_invwht INTO ls_wht INDEX 1.
IF sy-subrc IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '446'.
ls_message-msgty = 'E'.
ls_message-msgv1 = ls_item-buzei.
APPEND ls_message TO et_messages.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '445'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
** DF-1392 Check tax code
* CLEAR: lv_mwskz, lv_mwart.
* IF ls_item-posid IS NOT INITIAL AND ls_item-saknr IS NOT INITIAL AND
ls_item-wfkey IS NOT INITIAL.
** SELECT prart FROM zunp_zbudget WHERE bukrs = @ls_item-bukrs AND wbs =
@ls_item-posid ORDER BY PRIMARY KEY INTO @DATA(lv_prart_tx) UP TO 1 ROWS.
ENDSELECT.
* lv_mwskz = VALUE #( lt_zprgl[ bukrs = ls_item-bukrs saknr = ls_item-
saknr ]-mwskz OPTIONAL ). "#EC CI_STDSEQ
* ELSEIF ls_item-kostl IS NOT INITIAL AND ls_item-saknr IS NOT INITIAL AND
ls_item-wfkey IS NOT INITIAL.
* lv_mwskz = VALUE #( lt_zccgl[ bukrs = ls_item-bukrs saknr = ls_item-
saknr ]-mwskz OPTIONAL ). "#EC CI_STDSEQ
* ELSEIF ls_item-saknr IS NOT INITIAL AND ls_item-prctr IS NOT INITIAL AND
ls_item-wfkey IS NOT INITIAL.
* lv_mwskz = VALUE #( lt_zblgl[ bukrs = ls_item-bukrs saknr = ls_item-
saknr ]-mwskz OPTIONAL ). "#EC CI_STDSEQ
* ENDIF.
* lv_mwart = VALUE #( lt_taxdetail[ ekorg = is_invhd-ekorg mwskz = ls_item-
mwskz kalsm = lv_kalsm ]-mwart OPTIONAL ). "#EC CI_STDSEQ
* CASE lv_mwskz.
* WHEN '+'.
* IF lv_mwart NE 'A'.
* CLEAR ls_message.
* ls_message-msgid = 'ZUNP_ZMCIV'.
* ls_message-msgno = '269'.
* ls_message-msgty = 'E'.
* ls_message-msgv1 = ls_item-saknr.
* ls_message-msgv2 = ls_item-bukrs.
* ls_message-msgv3 = ls_item-mwskz.
* APPEND ls_message TO et_messages.
* ENDIF.
* WHEN '-'.
* IF lv_mwart NE 'V'.
* CLEAR ls_message.
* ls_message-msgid = 'ZUNP_ZMCIV'.
* ls_message-msgno = '270'.
* ls_message-msgty = 'E'.
* ls_message-msgv1 = ls_item-saknr.
* ls_message-msgv2 = ls_item-bukrs.
* ls_message-msgv3 = ls_item-mwskz.
* APPEND ls_message TO et_messages.
* ENDIF.
* WHEN ' '.
* IF ls_item-mwskz NE space.
* CLEAR ls_message.
* ls_message-msgid = 'ZUNP_ZMCIV'.
* ls_message-msgno = '271'.
* ls_message-msgty = 'E'.
* ls_message-msgv1 = ls_item-saknr.
* ls_message-msgv2 = ls_item-bukrs.
* ls_message-msgv3 = ls_item-mwskz.
* APPEND ls_message TO et_messages.
* ENDIF.
* WHEN '+B'.
* WHEN '-B'.
* WHEN '* '.
* WHEN '< '.
* WHEN '> '.
* WHEN OTHERS.
* IF lv_mwskz NE ls_item-mwskz.
* CLEAR ls_message.
* ls_message-msgid = 'ZUNP_ZMCIV'.
* ls_message-msgno = '272'.
* ls_message-msgty = 'E'.
* ls_message-msgv1 = ls_item-saknr.
* ls_message-msgv2 = lv_mwskz.
* ls_message-msgv3 = ls_item-mwskz.
* APPEND ls_message TO et_messages.
* ENDIF.
* ENDCASE.
** end of DF-1392 Check tax code
ENDLOOP.
ELSEIF is_invhd-type = 'CN'.
* for credit note, error msg on blank currency
IF is_invhd-waers IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '026'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
** invoice reference number should not be blank
IF is_invhd-xblnr IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '510'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
** invoice document date must be filled
IF is_invhd-bldat IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '511'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
**** India Localization Validations
IF is_invhd-ekorg = 'IN00'.
IF is_invhd-bupla IS NOT INITIAL AND is_invhd-secco IS NOT INITIAL AND
is_invhd-bukrs IS NOT INITIAL.
*** Business place & and Sec Code & entry are not valid for Company Code &.
SELECT COUNT(*) FROM zunp_seccode WHERE bukrs = @is_invhd-bukrs
AND seccode = @is_invhd-secco AND bplace = @is_invhd-bupla INTO
@DATA(lv_bupla_count1) UP TO 1 ROWS.
IF sy-subrc <> 0 .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '455'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-bupla.
ls_message-msgv2 = is_invhd-secco.
ls_message-msgv2 = is_invhd-bukrs.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
" Place of supply & is not valid
IF is_invhd-plc_sup IS NOT INITIAL .
SELECT COUNT(*) FROM zunpi_sh_region WHERE land1 = @is_invhd-ekorg+0(2)
AND bland = @is_invhd-plc_sup
INTO @DATA(lv_plc_count1) UP TO 1 ROWS.
IF sy-subrc <> 0 .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '456'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-plc_sup.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
" GST Partner & is not valid
IF is_invhd-gst_part IS NOT INITIAL .
SELECT COUNT(*) FROM zunp_zsupplr_int WHERE lifnr = @is_invhd-gst_part
INTO @DATA(lv_gstpart_cnt1) UP TO 1 ROWS.
IF sy-subrc <> 0 .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '457'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-gst_part.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
" Business place is mandatory.
IF is_invhd-bupla IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '451'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
" Section code is mandatory.
IF is_invhd-secco IS INITIAL .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '452'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
" GST Partner is mandatory.
IF is_invhd-gst_part IS INITIAL .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '453'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-gst_part.
APPEND ls_message TO et_messages.
ENDIF.
" Place of supply is mandatory.
IF is_invhd-plc_sup IS INITIAL .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '454'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-gst_part.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
IF is_invhd-ekorg = 'AR00'.
** Document type is mandatory
IF is_invhd-blart IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '429'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
IF lv_old_lifnr NE is_invhd-lifnr.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '548'.
ls_message-msgty = 'E'.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
ENDIF.
IF it_invit IS NOT INITIAL.
* fetch and validate the workflow key
SELECT bukrs, wfkey, dateto FROM zunp_zwfwkey FOR ALL ENTRIES IN @it_invit
WHERE bukrs = @it_invit-bukrs AND wfkey = @it_invit-wfkey ORDER BY
PRIMARY KEY
INTO TABLE @DATA(lt_zfwkey_cn).
IF sy-subrc EQ 0.
SORT lt_zfwkey_cn BY bukrs wfkey ASCENDING.
ENDIF.
ENDIF.
LOOP AT it_invit INTO ls_item.
CLEAR lv_itmumkrs.
READ TABLE lt_t001 INTO ls_t001 WITH KEY bukrs = ls_item-bukrs BINARY
SEARCH.
IF sy-subrc = 0.
lv_itmumkrs = ls_t001-umkrs.
ENDIF.
* lv_itmumkrs = VALUE #( lt_t001[ bukrs = ls_item-bukrs ]-umkrs OPTIONAL ).
***check for intercompany posting
IF lv_itmumkrs <> lv_umkrs AND NOT lv_itmumkrs IS INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '532'.
ls_message-msgty = 'E'.
ls_message-msgv1 = ls_item-buzei.
APPEND ls_message TO et_messages.
ENDIF.
** Validate the amounts
CLEAR lv_itmumkrs.
IF ls_item-shkzg = 'S'.
lv_nebtr = lv_nebtr - ls_item-nebtr.
lv_vatamt = lv_vatamt - ls_item-vatamt.
lv_grossamt = lv_grossamt - ls_item-rmwwr.
ELSE.
lv_nebtr = lv_nebtr + ls_item-nebtr.
lv_vatamt = lv_vatamt + ls_item-vatamt.
lv_grossamt = lv_grossamt + ls_item-rmwwr.
ENDIF.
ENDLOOP.
** Check if AP to ASL ==> Credit note posting not allowed against royalty invoices
zunp_cl_invoice=>asl_to_ap(
EXPORTING
is_invhd = is_invhd
it_invit = it_invit
IMPORTING
ev_linflag = DATA(lv_linflag)
ev_accflg = DATA(lv_accflg)
ev_aslflg = DATA(lv_aslflg)
ev_blgl_flg = DATA(lv_blgl_flg)
).
** if AP to ASL functionality is activated, then error message
IF lv_accflg IS NOT INITIAL AND lv_aslflg IS NOT INITIAL AND lv_blgl_flg IS
NOT INITIAL.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '448'.
ls_message-msgty = 'E'.
ls_message-msgv1 = ls_item-buzei.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
"Localisition for Russia country validation for contract number
IF is_invhd-ekorg = 'RU00' AND is_invhd-intcnum IS NOT INITIAL.
SELECT SINGLE intcnum,lifnr FROM zunp_j_3rfcnt
WHERE bukrs = @is_invhd-bukrs AND intcnum = @is_invhd-intcnum INTO
@DATA(ls_j_3rfcnt).
"Validate Supplier
IF lv_eikto EQ 'PII'.
SELECT SINGLE pii_grdat FROM zunp_zekorg WHERE ekorg = @is_invhd-ekorg INTO
@DATA(lv_grdat).
DATA(lv_date) = lv_user_date.
* DATA(lv_date) = cl_abap_context_info=>get_system_date( ).
IF lv_grdat < lv_date. "sy-datum.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '184'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-lifnr.
ls_message-msgv2 = is_invhd-ekorg.
APPEND ls_message TO et_messages.
ENDIF.
ENDIF.
"SCB Indicataor
IF is_invhd-lzbkz IS NOT INITIAL.
SELECT SINGLE lzbkz FROM zunp_t015l WHERE lzbkz = @is_invhd-lzbkz INTO
@DATA(lv_lzbkz).
IF sy-subrc IS NOT INITIAL AND lv_lzbkz+0(1) EQ is_invhd-ekorg+0(1) .
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '546'.
ls_message-msgty = 'E'.
ls_message-msgv1 = is_invhd-lzbkz.
ENDIF.
ENDIF.
* validate net amounts
IF lv_nebtr NE is_invhd-hnet.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '513'.
ls_message-msgty = 'E'.
ls_message-msgv1 = ls_item-buzei.
APPEND ls_message TO et_messages.
ENDIF.
* validate tax amount
IF lv_vatamt NE is_invhd-htax.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '514'.
ls_message-msgty = 'E'.
ls_message-msgv1 = ls_item-buzei.
APPEND ls_message TO et_messages.
ENDIF.
* validate gross amount
IF lv_grossamt NE is_invhd-gswrt.
CLEAR ls_message.
ls_message-msgid = 'ZUNP_ZMCIV'.
ls_message-msgno = '035'.
ls_message-msgty = 'E'.
ls_message-msgv1 = ls_item-buzei.
APPEND ls_message TO et_messages.
ENDIF.
*******************Code added for INC2086578
starts************************************
READ TABLE et_messages INTO DATA(es_messages) WITH KEY msgno = '504'.
IF sy-subrc IS INITIAL.
DATA(lv_flag1) = abap_true.
ENDIF.
*******************Code added for INC2086578
ends************************************
* If et_messages is INITIAL. " Added for DF-344, to avoid multiple messages
of the same error
IF et_messages IS INITIAL OR lv_flag1 IS NOT INITIAL. "++INC2086578
zunp_utility_class=>get_rfcdest( IMPORTING ev_rfc_obj = lv_rfc_obj
ev_rfc_dest = lv_rfc_dest ).
** validate invoice from ECC
DO lv_attempts TIMES. "INC2149404 #NP24092024
TRY.
CLEAR ev_pterm.
ev_pterm = is_invhd-zterm. "pass the payment term for Shitauke-hou
supplier
CALL FUNCTION 'ZUNP_INVOICE_VALIDATE' DESTINATION lv_rfc_dest
EXPORTING
is_header = is_invhd
it_items = it_invit
it_adds = it_invadd
iv_apprv = COND #( WHEN is_invhd-statu = 'WFL' THEN
abap_true ELSE abap_false )
IMPORTING
et_error = lt_text
et_return = lt_return
CHANGING
cv_pterm = ev_pterm
EXCEPTIONS
system_failure = 1 MESSAGE msg
communication_failure = 2 MESSAGE msg
OTHERS = 3.
CASE sy-subrc.
*Start of INC2149404 #NP24092024
WHEN 0.
CLEAR lt_txt[].
EXIT.
*End of INC2149404 #NP24092024
WHEN 1.
APPEND |EXCEPTION SYSTEM_FAILURE | && msg TO lt_text.
WAIT UP TO 1 SECONDS.
WHEN 2.
APPEND |EXCEPTION COMMUNICATION_FAILURE | && msg TO lt_text.
WAIT UP TO 1 SECONDS.
WHEN 3.
APPEND |EXCEPTION OTHERS| TO lt_text.
WAIT UP TO 1 SECONDS.
ENDCASE.
ls_message-msgno = ls_messg-number.
ls_message-msgty = ls_messg-type.
ls_message-msgv1 = ls_messg-message_v1.
APPEND ls_message TO et_messages.
ENDLOOP.
ENDIF.
ENDMETHOD.
ENDCLASS.