IF int_edidd-segnam = 'E1EDP01'.
DATA:idoc_data TYPE edidd,
ls_e1edp04 TYPE e1edp04,
it_komvtab TYPE STANDARD TABLE OF komv,
is_taxcom TYPE taxcom,
es_lfa1 TYPE lfa1.
IF xekko-bsart NE 'ZSER'. “ For Po type Not Equal to Services
LOOP AT xekpo INTO DATA(is_ekpodata) WHERE ebelp = int_edidd-sdata+0(5).
is_taxcom-bukrs = xekko-bukrs.
is_taxcom-budat = xekko-aedat.
is_taxcom-bldat = xekko-aedat.
is_taxcom-waers = xekko-waers.
is_taxcom-hwaer = xekko-waers.
is_taxcom-kposn = is_ekpodata-ebelp.
is_taxcom-mwskz = is_ekpodata-mwskz.
*IS_TAXCOM-KOART = 'H'.
is_taxcom-shkzg = 'H'.
IF xekko-bstyp EQ 'F'.
is_taxcom-wrbtr = is_ekpodata-netwr.
ELSE.
is_taxcom-wrbtr = is_ekpodata-zwert.
ENDIF.
is_taxcom-xmwst = 'X'."is_ekpodata-xmwst."
is_taxcom-lifnr = xekko-lifnr.
is_taxcom-ekorg = xekko-ekorg.
is_taxcom-llief = xekko-llief.
is_taxcom-bwtar = xekpo-bwtar.
is_taxcom-txjcd = is_ekpodata-txjcd.
is_taxcom-matnr = is_ekpodata-matnr.
is_taxcom-werks = is_ekpodata-werks.
is_taxcom-matkl = is_ekpodata-matkl.
is_taxcom-meins = is_ekpodata-meins.
is_taxcom-mglme = is_ekpodata-menge.
is_taxcom-mtart = is_ekpodata-mtart.
is_taxcom-land1 = xekko-lands.
is_taxcom-ebeln = is_ekpodata-ebeln.
is_taxcom-ebelp = is_ekpodata-ebelp.
IF xekko-bstyp EQ 'F'.
is_taxcom-mglme = is_ekpodata-menge.
ELSE.
IF xekko-bstyp EQ 'K' AND is_ekpodata-abmng GT 0.
is_taxcom-mglme = is_ekpodata-abmng.
ELSE.
is_taxcom-mglme = is_ekpodata-ktmng.
ENDIF.
ENDIF.
IF is_taxcom-mglme EQ 0.
is_taxcom-mglme = 1000.
ENDIF.
*To Get Tax Calculation for PO
DATA: lv_gst_rele TYPE char1,
lo_gst_service_purchasing TYPE REF TO j_1icl_gst_service_purchasing,
lo_copypo TYPE REF TO if_ex_me_cin_mm06efko,
ls_ekpo TYPE ekpo,
ls_ekko TYPE ekko.
CLEAR:lv_gst_rele,lo_gst_service_purchasing,lo_copypo,ls_ekpo,ls_ekko.
CALL FUNCTION 'J_1BSA_COMPONENT_ACTIVE'
EXPORTING
bukrs = xekko-bukrs
component = xekko-lands "'IN'.
EXCEPTIONS
component_not_active = 1
OTHERS = 2.
IF sy-subrc = 0.
DATA is_t005 TYPE t005.
CALL FUNCTION 'SAP_TO_ISO_COUNTRY_CODE'
EXPORTING
sap_code = xekko-lands
IMPORTING
iso_code = is_t005-intca
EXCEPTIONS
not_found = 1
no_iso_code = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* CALL METHOD cl_exithandler=>get_instance
* CHANGING
* instance = me_copypo.
*
* CALL METHOD me_copypo->me_cin_copy_po_data
* EXPORTING
* flt_val = t005-intca
* y_ekpo = ekpo.
ls_ekpo = is_ekpodata.
ls_ekko = xekko.
CALL METHOD cl_exithandler=>get_instance
EXPORTING
exit_name = 'ME_CIN_MM06EFKO'
null_instance_accepted = 'X'
CHANGING
instance = lo_copypo.
IF NOT lo_copypo IS INITIAL.
CALL METHOD lo_copypo->me_cin_copy_po_data
EXPORTING
flt_val = is_t005-intca
y_ekpo = ls_ekpo.
ENDIF.
*** GST India ---------------------------------------------------------------*
***Check if Company Code Country is India
CALL FUNCTION 'J_1BSA_COMPONENT_ACTIVE'
EXPORTING
bukrs = ls_ekko-bukrs
component = 'IN'
EXCEPTIONS
component_not_active = 1
OTHERS = 2.
IF sy-subrc EQ 0.
DATA:im_gst_rele TYPE char1.
CLEAR im_gst_rele.
CALL FUNCTION 'J_1IG_DATE_CHECK'
IMPORTING
ex_gst_rele = im_gst_rele.
IF im_gst_rele EQ 'X'.
*PASS EKKO and EKPO to pricing
CALL FUNCTION 'J_1IG_PASS_EKKO_EKPO'
EXPORTING
im_ekko = ls_ekko
im_ekpo = ls_ekpo.
*** Begin of note 2444868
*DATA lo_gst_service_purchasing TYPE REF TO j_1icl_gst_service_purchasing.
lo_gst_service_purchasing = j_1icl_gst_service_purchasing=>get_instance( ).
lo_gst_service_purchasing->extend_mm06efko_kond_taxes( ls_ekpo ).
*** End of note 2444868
ENDIF.
ENDIF.
ENDIF.
CALL FUNCTION 'CALCULATE_TAX_ITEM'
EXPORTING
anzahlung = 'X'
i_taxcom = is_taxcom
* IMPORTING
* E_NAVFW =
* E_TAXCOM =
* E_XSTVR =
* NAV_ANTEIL =
TABLES
t_xkomv = it_komvtab
EXCEPTIONS
mwskz_not_defined = 1
mwskz_not_found = 2
mwskz_not_valid = 3
steuerbetrag_falsch = 4
country_not_found = 5
txjcd_not_valid = 6
amounts_too_large_for_tax = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*To Populate tax data to Idoc Segment
LOOP AT it_komvtab ASSIGNING FIELD-SYMBOL(<fs_komvtab>) WHERE kschl NE 'BASB'.
"KNTYP = D or KNTYP ne space
ls_e1edp04-mwskz = is_taxcom-mwskz. "<fs_komvtab>-mwsk1.
IF <fs_komvtab>-kbetr IS NOT INITIAL.
ls_e1edp04-msatz = <fs_komvtab>-kbetr / 10.
ENDIF.
ls_e1edp04-mwsbt = <fs_komvtab>-kwert.
ls_e1edp04-txjcd = <fs_komvtab>-kschl.
SELECT SINGLE vtext FROM t685t INTO ls_e1edp04-ktext WHERE spras = 'E' AND kschl = <fs_komvtab>-kschl.
CONDENSE:ls_e1edp04-mwskz, ls_e1edp04-msatz, ls_e1edp04-mwsbt, ls_e1edp04-txjcd, ls_e1edp04-ktext NO-GAPS.
idoc_data-segnam = 'E1EDP04'.
idoc_data-sdata = ls_e1edp04.
APPEND idoc_data TO int_edidd[].
CLEAR : ls_e1edp04,idoc_data.
ENDLOOP.
REFRESH:it_komvtab.CLEAR:is_taxcom.
ENDLOOP.
ELSE. "Logic To Calculate tax for Service POS
DATA(it_ekpoitem) = xekpo[].
DELETE it_ekpoitem WHERE ebelp NE int_edidd-sdata+0(5).
SELECT * FROM esll INTO TABLE @DATA(it_esll1) FOR ALL ENTRIES IN @xekpo[]
WHERE packno = @xekpo-packno.
IF sy-subrc = 0.
SELECT * FROM esll INTO TABLE @DATA(it_esll2) FOR ALL ENTRIES IN @it_esll1
WHERE packno = @it_esll1-sub_packno.
IF sy-subrc = 0.
*To GET TAXTARIFFCODE
SELECT * FROM asmd INTO TABLE @DATA(it_asmd) FOR ALL ENTRIES IN @it_esll2
WHERE asnum = @it_esll2-srvpos.
IF sy-subrc = 0.
READ TABLE it_ekpoitem[] INTO DATA(is_werks) INDEX 1.
SELECT SINGLE * FROM t001w INTO @DATA(is_t001w) WHERE werks = @is_werks-werks.
CALL FUNCTION 'LFA1_READ_SINGLE'
EXPORTING
id_lifnr = xekko-lifnr
*ID_CVP_BEHAVIOR =
IMPORTING
es_lfa1 = es_lfa1
EXCEPTIONS
not_found = 1
input_not_specified = 2
lifnr_blocked = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*Condition Table this will differ from Customer to Customer
SELECT * FROM A900 INTO TABLE @DATA(it_a900) FOR ALL ENTRIES IN @it_asmd
WHERE kappl = 'TX' AND lland = @is_t001w-land1 AND regio = @es_lfa1-regio AND wkreg = @is_t001w-regio AND taxim = @it_asmd-taxim AND mwskz = @is_werks-mwskz AND steuc = @it_asmd-taxtariffcode.
IF sy-subrc = 0.
SELECT * FROM konp INTO TABLE @DATA(it_konp) FOR ALL ENTRIES IN @it_a900
WHERE knumh = @it_a900-knumh.
LOOP AT it_esll2 INTO DATA(is_esll2).
*TO GET TAXIM
READ TABLE it_asmd INTO DATA(is_amd) WITH KEY asnum = is_esll2-srvpos.
IF sy-subrc = 0.
LOOP AT it_a900 INTO DATA(is_a900) WHERE steuc = is_esll2-taxtariffcode AND
mwskz = is_werks-mwskz.
READ TABLE it_konp INTO DATA(is_konp) WITH KEY knumh = is_a900-knumh.
IF sy-subrc = 0.
*w_netpr = ( ( is_esll2-netwr * ( is_konp-kbetr / 10 ) ) / 100 ).
ls_e1edp04-mwskz = is_werks-mwskz.
IF is_konp-kbetr IS NOT INITIAL.
ls_e1edp04-msatz = is_konp-kbetr / 10.
ENDIF.
ls_e1edp04-mwsbt = ( is_esll2-netwr * ls_e1edp04-msatz ) / 100.
ls_e1edp04-txjcd = is_konp-kschl.
SELECT SINGLE vtext FROM t685t INTO ls_e1edp04-ktext WHERE spras = 'E' AND
kschl = is_konp-kschl.
CONDENSE:ls_e1edp04-mwskz, ls_e1edp04-msatz, ls_e1edp04-mwsbt, ls_e1edp04-txjcd, ls_e1edp04-ktext NO-GAPS.
idoc_data-segnam = 'E1EDP04'.
idoc_data-sdata = ls_e1edp04.
APPEND idoc_data TO int_edidd[].
CLEAR : ls_e1edp04,idoc_data.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
In General Most of the customers needs to populate PO tax details from S/4 to Ariba Network, So by following the above process you can be able to send PO tax details in IDOC segment which we can map it in Ariba Network.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.