Sie sind auf Seite 1von 25

Calculate tax using SABRIX

INTRODUCTION
SAP does not have inbuilt Tax calculation solution, hence external tax bolt on software
products are used for tax solution. Sabrix is one of the many external tax Software
products available as SAP bolt-on. The scope of this document is tax calculation in SAP
using SABRIX for North America and Canada regions. As Sabrix is a SAP bolt-on, required
information needs to be passed from SAP to Sabrix to calculate tax and receive the
results from Sabrix back in SAP.
There is a standard interface for passing predetermined fields between SAP and SABRIX. In most
cases, the fields available in the standard interface are not enough for effective and efficient tax
calculation. Hence some enhancements are required while sending and receiving data between SAP
and SABRIX. When the required fields with required information are sent to SABRIX, it returns the
Taxable amount and Tax Code which in turn gets posted in SAP. If this exchange of information
happens seamlessly, it results in accurate calculation of Tax (or the taxable amount) which is the
ultimate aim of using Tax software.

ARCHITECTURE
There must be communication established between ECC SAP & SABRIX. Communication between
these two is established using SAP RFC (Remote Function Calls).
There are two ways of communication between SAP and SABRIX:
OUTBOUND SAP sends required data to SABRIX to calculate Tax using RFC
(RFC_CALCULATE_TAXES_DOC).
INBOUND SABRIX returns Taxable amount and Tax Code to SAP through RFC.

Generated by Jive on 2015-12-22+01:00


1

Calculate tax using SABRIX

CONFIGURATION
Below are the steps required in the configuration of Sabrix. To get the details of each step, please go through
the link given below along with the OSS notes.
http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/047ab790-0201-0010-a9b1-e612f8b71dcd?
overridelayout=true
Below are the configuration steps which are provided for information only and this document will not cover the
config part.
1.
2.
3.
4.
5.
6.
7.

The configuration should be done for the communication purpose.


Retrieve the Tax data from external system and testing same.
The Tax Interface System should be activated.
The External Tax Document should be configured.
Structure which defines the tax jurisdiction.
Customize the Tax Indicators for Master Data (MM)
Master data maintenance (MM)

Generated by Jive on 2015-12-22+01:00


2

Calculate tax using SABRIX

8. Tax will be configured based on the tax codes.

REQUIREMENT
While creating PO manually or by reference of PR/PO, the Taxable amount should be calculated by
SABRIX. The Tax Exemption code should be assigned for each PO line item based on the taxable
amount. This Tax Exemption

Below are the transactions used for tax calculations:


ME21N/ME22N/ME23N Purchase Order Create/Change/Display
MIRO, MR8M Cancel Invoice
MRRL ERS
MRKO Consignment Invoice
MRIS Invoice plan settlement
MIRO background invoice

As per requirement, Sabrix should be called for following scenarios:


1.
2.
3.

If the Cost Center is changed for the PO.


If the Order (AUFNR) is changed for the PO.
If the WBS (PS_PSP_PNR) is changed for the PO.

The above three fields were used as part of our requirement. The requirement could be different for other
projects and can use different fields as well.

STEPS FOR SOLUTION


In order to implement this requirement, there are multiple ABAP objects used which are given below in
sequence for each scenario.

Generated by Jive on 2015-12-22+01:00


3

Calculate tax using SABRIX

OUTBOUND
The User exit EXIT_SAPLFYTX_USER_001 (mentioned below in document) is used to pass required
data to Sabrix for Tax calculation. The standard fields present in the user exit are not enough to
calculate the correct Tax amount for PO. In order to calculate the correct Tax amount, additional
fields needs to be passed to the above user exit which is explained in the document below.
To send additional fields to the SABRIX, one has to implement Enhancements, BADIs and
Classes. The details and sequence of each are mentioned below.
The User Exit can be searched during PO creation/change by using break points on call
customer-function and it will take you to the User Exit shown below.

Generated by Jive on 2015-12-22+01:00


4

Calculate tax using SABRIX

A. Enhancement ACCOBL01 (Tax interface)


The User Exit can be searched during PO creation/change by using break points on call
customer-function and it will take you to the User Exit shown below.

It holds the coding block data of PO and can be used to get the current values of PO fields like Cost
Center, WBS and Order Number.

This Enhancement has the component EXIT_SAPLKACB_002 and Include ZXKNTU02.


As per requirement, we need to use the existing account assignment field values and validate if they
were changed or not during creation/change of PO.
This user exit will be helpful in this case because when PO is created OR changed, it will always
trigger. It holds the current values (coding block values) of the existing PO created/changed in the
COBL structure.
We will export cost center, WBS element and order fields from COBL structure. SABRIX will be
triggered on change of any of the above fields in order to calculate tax.

Generated by Jive on 2015-12-22+01:00


5

Calculate tax using SABRIX

We can use the COBL structure to get the current values of Cost Center (KOSTL), Order (AUFNR)
and WBS (PS_PSP_PNR) and export the values.

B. Implement BADI ME_DEFINE_CALCTYPE.


This BADI has a method DEFINE_CALCTYPE which is used to set the Pricing Type field value in
case of Purchase Order Change/Create and assigns it to the parameter CH_X_LF_CALCTYPE. This
indicator is used to call Sabrix.

Generated by Jive on 2015-12-22+01:00


6

Calculate tax using SABRIX


As per requirement, the Sabrix should be called if the Cost Center/Order/WBS is changed for the
existing PO.
For above scenario of changing the existing Purchase Order, we will check whether the cost Center,
Order and WBS was changed or not.
The User Exit ACCOBL01 (mentioned above) is used to get the current values of the PO.
We will import cost Center, Order and WBS and use it in BADI implementation
ME_DEFINE_CALCTYPE. This Badi compares the current values of cost center, Order, WBS with
the existing PO values.

In case they are not same then Sabrix should be called and changing parameter CH_X_LF_CALCTYPE will be
set which calls Sabrix. Details are mentioned below.

Import parameters related to the PO header/Item data:

Generated by Jive on 2015-12-22+01:00


7

Calculate tax using SABRIX

IM_X_OEKKO, IM_X_NEKKO, IM_X_OEKPO, IM_X_NEKPO, IM_X_OBEKPO, IM_X_NBEKPO,


IM_X_ACC_CH.
Changing parameter:
CH_X_LF_CALCTYPE (TYPE KOMV-KSTEU) this parameter is pricing type and the below values can
be assigned to it. For e.g.: We can use option C in case of PO change or Create.
For the new POs created, the parameter CH_X_LF_CALCTYPE already has the value as C and
Sabrix is called.

C. Implement BADI-> EXTENSION_US_TAXES


(Additional data for Tax calculate to SABRIX)
This BADI helps to get the values of Cost Center, Order and WBS element and pass to SABRIX for TAX
Calculation.
Below are the methods used in this BADI:

Method 1->ME_TAXCOM_MEPO
This method is used to get PO header, item and account assignment data. There are following importing
parameters IM_OEKKO, IM_EKKO, IM_OFEKPO, IM_EKPO and IM_ACCOUNTING

Generated by Jive on 2015-12-22+01:00


8

Calculate tax using SABRIX

Parameter IM_ACCOUNTING is the Account Assignment Data for Item. It is a table which contains multiple
records. Following values can available in this table:
Cost center, order number, WBS, G/L Account Number and Project Number. These values can be exported
and used further in order to pass to SABRIX.
E.g. We can check the Account Assignment Category (IM_EKPO-KNTTP) with 3 cases:
1. 1. Account Assignment = K This is related to the Cost Center. We can use the Cost
Center in the IM_ACCOUNTING (KOSTL).
2. Account Assignment = P This is related to WBS Element. We can use WBS element
(PS_PSP_PNR) from IM_ACCOUNTING. Based on this value, actual WBS can be fetched
from PRPS table.
3. Account Assignment = F This is related to the Order number. We can use order
(AUFNR) from IM_ACCOUNTING. Based on this value, we can select Order master data
from table COAS table.

As per our scenario, we collected the Cost Center, Order and WBS data in the internal table and exported it
along with PO item details. We will need these values further in our logic.
Method 2->MM_DATA_FOR_TAX_SYSTEM
(Preparation and Sending of Additional Data for Tax):

Generated by Jive on 2015-12-22+01:00


9

Calculate tax using SABRIX


The existing standard data passed to Sabrix does not calculate the Tax amount correctly. So, in
order to do the correct Tax calculation, additional fields are needed by Sabrix. The details of the
additional fields passed are mentioned below in this document.
This method has the three importing parameters TI_BSEG, TI_DRSEG and TI_BSEG_MAT.
The importing parameter will be used to get the additional data to be passed to the Sabrix.
The PO line item data is present in the table TI_BSEG_MAT. We are using below fields as
additional data to be send to Sabrix.
Material Group, G/L Account Number, Purchasing Document Number, Item Number of Purchasing
Document, Reference Document Number, Material Document, Item for the Material Document.

D. Enhancement FYTX0002
(EXIT_SAPLFYTX_USER_001)
This User Exit is used for passing the additional data to Sabrix required for Tax Calculation.
Details are mentioned below.
This Enhancement has the component EXIT_SAPLFYTX_USER_001 and Include ZXFYTU03.
This Enhancement is used for Sales and Purchase Order transactions to pass the Field values to
the Sabrix for Tax Calculation.
Import Parameters are given in below snapshot.

Generated by Jive on 2015-12-22+01:00


10

Calculate tax using SABRIX

I_T007A
I_TTXD
I_TAX_HEADER_INPUT Not Used in our scenario.
I_TAX_ITEM_INPUT Not Used in our scenario.
I_INPUT_USER - This parameter has the standard fields avaiable but does not contaitn the
additional fields to pass to Sabrix. In order to calculate the Tax properly, we will append this
structure with those additional fields, needed by Sabrix. For
eg. MATKL, KUNNR, AUART,
WERKS etc.

Using this Enhancement, the additional fields given below can be passed to the Sabrix for Tax
calculation:

Generated by Jive on 2015-12-22+01:00


11

Calculate tax using SABRIX

Material Group, Plant Number, Cost Center, G/L Account Number, Internal Order, PO Line Type, (item
category), PO Account Assignment Indicator, Material Type, Cost Center Category, Invoice Header Reference,
Profit Center, Project No.
In order to pass the additional fields we need to enhance the structure
TAX_ALLOWED_FIELDS of the CHANGING Parameter CH_USER_CHANGED_FIELDS.

Below Struture is appended with the Attribute fields which will hold additional fields.

Generated by Jive on 2015-12-22+01:00


12

Calculate tax using SABRIX

The additional fields like zzattribute16 (Cost Center), zzattribute18 (ORDER) and zzattribute21
(WBS) etc. were passed to Sabrix in our scenario. Similarly, all the fields described in the
structure above were passed to Sabrix.
This User Exit will run for multiple transactions such as ME21, ME21N, ME22, ME22N, ME23,
ME23N, MIRO, MRRL, MRIS, MRKO, FB60, FB65, and ML81N. Based on the requirement,
one can add the logic respectively to pass the fields to Changing structure.

In the above screenshot, we are passing Cost Center (KOSTL), Cost element (SAKTO), Order
Number (AUFNR), Item Category (PSTYP), Account Assignment Category (KNTTP), Material
Type (MTART) and Profit Center (PRCTR) in the ZZATTRIBUTE fields.

Generated by Jive on 2015-12-22+01:00


13

Calculate tax using SABRIX

E. SABRIX CALL (RFC_CALCULATE_TAXES_DOC)


Once the changing structure CH_USER_CHANGED_FIELDS shown above is populated with all
the required ZZATTRIBUTE fields, the same structure is already appended with the Input table
TAX_CAL_ITEM_INXX of the Sabrix RFC. Scroll down for details.
Please see the below snapshots.
Structure of CH_USER_CHANGED_FIELDS

Structure of Sabrix RFC Input table

Generated by Jive on 2015-12-22+01:00


14

Calculate tax using SABRIX

Once the structure is populated, the RFC will have the updated values in the input
table TAX_CAL_ITEM_INXX to send to Sabrix. The SABRIX is called through the RFC
RFC_CALCULATE_TAXES_DOC and returns the taxable amount. The input field values are
provided by table TAX_CAL_ITEM_INXX and the Taxable amount is returned in the table
TAX_CAL_ITEM_OUTXX.

Generated by Jive on 2015-12-22+01:00


15

Calculate tax using SABRIX

We can read the RFC table TAX_CAL_ITEM_OUTXX and get the taxable amount in the field
TAXAMOV.

INBOUND
A. Transactions Used For Purchase Order
Generate the Purchase Order: ME21N and ME21.
Change Existing Purchase Order : ME22N and ME22
Display the Purchase Order: ME23N and ME23.

B. Custom Table Creation


A custom Maintainable Control table was created to hold the Tax Exemption
This table will be maintained by user with the below given fields.

Generated by Jive on 2015-12-22+01:00


16

Calculate tax using SABRIX

There are 5 tax Exemption codes associated with each PO line item. i.e. A1, A2, A3, A4, A5.
Each Tax Exemption Code has a description given in the table below and is used in Purchase Order
form output as per the tax Exemption code assigned to each line item of PO.
Tax Exemption codesRFC_CALCULATE_TAXES_DOC) and will be assigned to the PO line item and
displayed on the screen(Logic for tax Exemption code will be covered in enhancement below).
Tax Exemption Codes A4 and A5 will be added with custom logic as per or scenario

Generated by Jive on 2015-12-22+01:00


17

Calculate tax using SABRIX

C. Enhancement Implementation
The Sabrix is called for each line item to calculate tax. In order to get the line item number, an Implicit
Enhancement ZMM_LINEITEM_GET was created in the inlcude LFYTX_TAXMF12. The line item
determined this way will help in placing the correct Tax Exemption Code on the PO screen.

This enhancement is called after SABRIX returns tax information so that the correct line item number
can be used to populate Tax Exemption Code.
The line item number is exported to the memory ID to use it further.

D. Enhancement Implementation (ZMM_TAXCODE_GET)


This enhancement implementation was created once the SABRIX RFC returns the data. Also this
Enhancement was created just after the RFC_CALCULATE_TAXES_DOC in the code in order to
utilize the data returned by SABRIX.

Generated by Jive on 2015-12-22+01:00


18

Calculate tax using SABRIX

The line number exported above can be imported here so that the Tax Exemption Code can be
assigned for respective line item.
To get the tax Exemption code and taxable amount returned by SABRIX, Read the table
TAX_CAL_ITEM_OUTXX which is output of SABRIX RFC.
The tax amount will be in the field TAXAMOV of the table TAX_CAL_ITEM_OUTXX
The tax Exemption code Returned from SABRIX will be in the field EXT_EXREASON of the same
table.

Generated by Jive on 2015-12-22+01:00


19

Calculate tax using SABRIX

The tax Exemption code A1, A2 and A3 will be returned from the SABRIX in the field
EXT_EXREASON and A4/A5 will be assigned by the logic in code depending on the taxable amount.
Logic To Calculate Tax Exemption Code A4 and A5
Tax Exemption code A1, A2 and A3 are standard and will be returned by Sabrix RFC. But as per
our requirement, we need A4 and A5 which explained below how to determine these Tax Exemption
codes.
Check the taxable amount (TAX_CAL_ITEM_OUTXX TAXAMOV) returned by the SABRIX.
When taxable amount = 0, for a particular line item and the tax ExemptionExemption code to
populate the PO Customer data Screen field(Sabrix tax Exemption code). In case the SABRIX do not
return the tax ExemptionExemption code, Then use tax Exemption code as A4. This mean TAX
EXEMPT.
If the taxable amount is NOT 0, for a particular line item and the Tax ExemptionExemption
codeExemption Code). In case the SABRIX doesn't return the tax Exemptiontax Exemption, Then
use tax Exemption code as A5. This mean TAXABLE amount.
(See the Code Snippet 1 as an attachment)
Collect the tax Exemption code for each item in the internal table and export the internal table.

Generated by Jive on 2015-12-22+01:00


20

Calculate tax using SABRIX

This table will be used further in the inlcude ZXM06O03(Detail given below) to assign the Tax Exemption
Code to the PO Customer Data
Screen.

E. EXIT_SAPMM06E_018 (Include ZXM06U40)


This user exit will populate the Tax Exemption Code for each line item to the structure E_CI_EKPO. This
structure hold the tax Exemption code and will be populated on the PO customer Tab screen while displaying
the Purchase order.

Generated by Jive on 2015-12-22+01:00


21

Calculate tax using SABRIX

Generated by Jive on 2015-12-22+01:00


22

Calculate tax using SABRIX

F. Assign Tax Exemption Code to Customer Tab of PO


The Screen to add the Sabrix Tax Exemption Code field is SAPLXM06 (011) .

A custom include ZXM06ZZZ was created for all the subprograms and modules.

Generated by Jive on 2015-12-22+01:00


23

Calculate tax using SABRIX

Inside this include, another custom include ZXM06O03 contains the code to get the Tax Exemption Code from
Sabrix and assign to the Screen Field Tax Exemption Code.
Code Snippet2:
The PO below has been assigned TaxCode as A1 for Line item 10. Simillarly, Line item
20 and 30 has been assigned TAXCODE as A5 because the Tax is calculated for each line
item. Please go through below screen shots.

Generated by Jive on 2015-12-22+01:00


24

Calculate tax using SABRIX

Sabrix EX Code is the custom functionality added per requirement.


This field is added in 'Customer data' tab of ME21N/ME22N/ME23N transaction, this field will be filled
in EXIT_SAPMM06E_018 from sabrix data by enhancing the structure CI_EKPODB for EKPO table.

Generated by Jive on 2015-12-22+01:00


25

Das könnte Ihnen auch gefallen