[SAP ABAP] Get PO Tax






FUNCTION zfm_mmods_po_get_tax.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(I_EBELN) LIKE  EKPO-EBELN
*"     REFERENCE(I_EBELP) LIKE  EKPO-EBELP
*"  EXPORTING
*"     REFERENCE(E_TAXCOM) TYPE  TAXCOM
*"  TABLES
*"      T_KOMV STRUCTURE  KOMV
*"----------------------------------------------------------------------
  DATA : lw_ekko LIKE ekko,
         lw_ekpo LIKE ekpo,
         lw_lfa1 LIKE lfa1.

  SELECT SINGLE * INTO lw_ekko
  FROM ekko
  WHERE ebeln = i_ebeln.

  IF lw_ekko IS NOT INITIAL.
    SELECT SINGLE * INTO lw_ekpo
    FROM ekpo
    WHERE ebeln = i_ebeln AND
          ebelp = i_ebelp.

    SELECT SINGLE * INTO lw_lfa1
    FROM lfa1
    WHERE lifnr = lw_ekko-lifnr.
  ELSE.
    EXIT.
  ENDIF.

  CHECK lw_ekpo IS NOT INITIAL.

  DATA: li_tax TYPE j_1b_taxcom ,
        li_taxcom  TYPE taxcom ,
        l_wa_t001    TYPE t001,
*        e_taxcom  TYPE taxcom ,
        l_wa_komv TYPE komv ,
        l_gv_amount TYPE netwr ,
        l_unitprice TYPE netwr,
        l_ipiamount TYPE netwr,
        l_total_ipi TYPE netwr,
        l_total  TYPE netwr  ,
        l_taxamount TYPE netwr.

  SELECT SINGLE * FROM t001
                  INTO l_wa_t001
                  WHERE bukrs EQ lw_ekko-bukrs.

* Fill tax fields relevant for PO
  li_tax-txreg_sf = lw_lfa1-txjcd.
  li_tax-txreg_st = lw_ekpo-txjcd.
  li_tax-taxbs    = lw_lfa1-taxbs.
  li_tax-ipisp    = lw_lfa1-ipisp.
  li_tax-brsch    = lw_lfa1-brsch.
  li_tax-mtuse    = lw_ekpo-j_1bmatuse.
  li_tax-mtorg    = lw_ekpo-j_1bmatorg.
  li_tax-ownpr    = lw_ekpo-j_1bownpro.
  li_tax-steuc    = lw_ekpo-j_1bnbm.
  li_tax-matkl    = lw_ekpo-matkl.
  li_tax-vrkme    = lw_ekpo-meins.
  li_tax-mgame    = lw_ekpo-menge.

* ISS Calculation with 2-level tax jurisdiction code
* To get the ISS Tax Condtions, need to pass the Following Parameters
  li_tax-loc_se = lw_lfa1-txjcd.
  li_tax-loc_sr = lw_lfa1-txjcd.
* if you don't pass the above parameters and if your PO has ISS Tax conditions,
* you don't see them in the Result


* Location of service provider = Tax Jur. Code of
* vendor:
  li_tax-loc_pr   = lw_lfa1-txjcd.
* Location of service = Tax Jur. Code of delivery address

*Populate fields based on country
  CALL FUNCTION 'J_1B_SAVE_TAX_FIELDS'
    EXPORTING
      i_taxcom = li_tax.

  CLEAR li_taxcom.
  li_taxcom-bukrs = lw_ekpo-bukrs.
  li_taxcom-budat = lw_ekko-bedat.
  li_taxcom-waers = lw_ekko-waers.
  li_taxcom-kposn = lw_ekpo-ebelp.
  li_taxcom-mwskz = lw_ekpo-mwskz.
  li_taxcom-txjcd = lw_ekpo-txjcd.
  li_taxcom-shkzg = 'H'.
  li_taxcom-xmwst = 'X'.
  IF lw_ekko-bstyp EQ 'F'.
    li_taxcom-wrbtr = lw_ekpo-netwr.
  ELSE.
    li_taxcom-wrbtr = lw_ekpo-zwert.
  ENDIF.
  li_taxcom-lifnr = lw_ekko-lifnr.
  li_taxcom-land1 = lw_ekko-lands. "WIA
  li_taxcom-ekorg = lw_ekko-ekorg.
  li_taxcom-hwaer = l_wa_t001-waers.
  li_taxcom-llief = lw_ekko-llief.
  li_taxcom-bldat = lw_ekko-bedat.
  li_taxcom-matnr = lw_ekpo-matnr. "HTN-Abwicklung
  li_taxcom-werks = lw_ekpo-werks.
  li_taxcom-bwtar = lw_ekpo-bwtar.
  li_taxcom-matkl = lw_ekpo-matkl.
  li_taxcom-meins = lw_ekpo-meins.
  IF lw_ekko-bstyp EQ 'F'.
    li_taxcom-mglme = lw_ekpo-menge.
  ELSE.
    IF lw_ekko-bstyp EQ 'K' AND lw_ekpo-abmng GT 0.
      li_taxcom-mglme = lw_ekpo-abmng.
    ELSE.
      li_taxcom-mglme = lw_ekpo-ktmng.
    ENDIF.
  ENDIF.
  IF li_taxcom-mglme EQ 0.
    li_taxcom-mglme = 1000.
  ENDIF.
  li_taxcom-mtart = lw_ekpo-mtart.

*Calculation of TAX

  CALL FUNCTION 'CALCULATE_TAX_ITEM'
    EXPORTING
      dialog       = ' '
      display_only = ' '
      i_taxcom     = li_taxcom
    IMPORTING
      e_taxcom     = e_taxcom
    TABLES
      t_xkomv      = t_komv.




ENDFUNCTION.

Comments