SAP Purchase-to-Pay


Process description

Purchase-to-Pay is the process from a buyer's perspective of buying, receiving, paying and accounting for goods. The process starts with a purchase request and ends with the payment of the invoice and includes all confirmation and checking steps in between. It is one of the core processes in an organization and is typically performed by multiple departments. The most important artifacts of the Purchase-to-Pay process are purchase orders, receipt of the goods and the invoice. Purchase-to-Pay is also known as Procure-to-Pay.

Purchase-to-Pay covers the following main processes in the procurement lifecycle.

Note that the Delivery and (parts of the) Payment processes are usually done in parallel.

Buying The process starts with a buyer from the company who wants to buy some goods. The buyer requests the purchase, using a purchase requisition. Procurement is involved to get the best deal. This could mean negotiation for a new contract or adapting to an already available contract. Procurement converts the requisition to a purchase order and makes sure the missing information is filled where needed. Procurement approves the purchase order (PO), which is then sent to the vendor.

Delivery The warehouse department (if available) waits for the goods to be received. When goods arrive, the inventory is checked and updated. The goods are received by the initial buyer, who accepts the goods.

Payment The finance department awaits the invoice to be received. When the invoice arrives, it is administrated. The invoice is paid by accounts payable. Accounting administrates the payment.

With the SAP Purchase-to-Pay app template you can create process apps that give insight in how your Purchase-to-Pay process actually performs. For example, how long it takes for a purchase request to become an actual Purchase Order, how long it takes to process the Purchase Orders, and most important to what extent are you paying in time. For all steps in the process, Purchase-to-Pay provides insights into the throughput times.

KPIs Specification

The following table describes the KPIs defined in SAP Purchase-to-Pay app template and presented in different dahboards:

KPI Description Dashboard
Maverick PO items rate Percentage of purchase order items involved in maverick buying Maverick buying
Maverick spend rate Percentage of the total purchase order item values involved in maverick buying Maverick buying
Spend without contract rate Percentage of purchase order item values that are not referenced to an existing contract Maverick buying
PO item without contract rate Percentage of purchase order items that are not referenced to an existing contract Maverick buying
PO items without material rate Percentage of purchase order items that do not have a material assigned Maverick buying
First time right rate (PR to GR) Percentage of purchase order items that flowed from PR creation to good receipt (GR) without requiring any forms of revision Order process velocity
Restore events Total number of restore events, indicating the number of times a deleted object was restored Order process velocity
Revoke events Total number of revoke events, indicating the number of times an approved request was revoked Order process velocity
Change events Total number of change events, indicating the number of times a value, material or date related to an object was changed Order process velocity
Reject events Total number of reject events, indicating the number of times a request was rejected Order process velocity
Avg. revision events per PO item Average number of revision events per purchase order item Order process velocity
OTIF delivery rate Percentage of complete delivered purchase order items (in full) that were delivered on time Supplier performance
Late delivery rate Percentage of complete delivered purchase order items (in full) that were delivered late Supplier performance
Avg. delayed delivery duration Average duration of delayed delivery for complete delivered purchase order items Supplier performance
Suppliers without contract rate Percentage of suppliers that did not have a contract for at least one purchase order item Supplier performance

Extraction

System configuration

The data extraction is developed for SAP.

Extraction tool configuration

The data extraction is developed for SAP and is using Theobald Xtract Universal. In general, you should follow the steps as described in Loading Data Using Theobald Xtract Universal (Automation Cloud) to set up data loading using Theobald Xtract Universal. Note: If you are using Automation Suite, make sure to select AUTOMATION SUITE as the DELIVERY option on the documentation page. In addition, select the Automation Suite version you are using to open the appropriate Loading Data Using Theobald Xtract Universal page.

Importing the template extractions

  1. Download the XU_template_extractions.zip file with template extractions for Automation Cloud or the XU_template_extractions_as.zip file with template extractions for Automation Suite.
  2. This file contains the folders destinations, extractions, and sources. Copy the folders from the downloaded zip file to the config folder of Xtract Universal. The location of this folder is [XU_installation_path]/config.
  3. Open Xtract Universal Designer and click on the refresh button to load all extractions.

Configuring the extraction script

  1. Download the extract_theobald.zip file to load data for Automation Cloud or extract_theobald_as.zip to load data for Automation Suite.
  2. This file contains the extract_theobald.ps1 script and the config.json file. Unzip the content on the server where Theobald Xtract Universal is installed.
  3. Configure the variables for the script.

Input data

Input types

The following table provides an overview of the different field types and their default format settings.

Field type Description
boolean true, false, 1, 0
date YYYYMMDD
time hhmmss
double Decimal separator: . (dot); thousand separator: none
integer Thousand separator: none
text N/A

Input tables & fields

The following tables are extracted from the source system:

Transactional Data Master Data
BKPF ADCP
BSAK ADRP
BSE_CLR CSKT
BSIK KNA1
CDHDR LFA1
CDPOS MAKT
EBAN T001
EKBE T001L
EKET T001W
EKKN T005T
EKKO T005U
EKPO T006A
RBKP T008T
RSEG T023T
T024
T024E
T161T
TCURF
TCURR
TCURX
TGSBT
USR02
USR21

Purchase requisition tables

EBAN

Stores Purchase Requisition Data.

Field Type Description
AFNAM text Requisitioner name
BADAT date Requisition date
BANFN text Purchase requisition item number
BANPR text Requisition processing dtate
BNFPO text Cross-System Purchase requisition item
BSART text Purchase requisition document type
BSTYP text Purchasing document category
ERNAM text Name of person who created the object
MANDT text Client
MATKL text Material gorup
MATNR text Material number
MEINS text Purchase requisition unit of measure
MENGE double Purchase requisition quantity
PREIS double Price in purchase requisition
WAERS text Currency key

Filtering: BSTYP = 'B', Date: BADAT

Purchasing document tables

EKKO

Stores Purchasing Document Header Data.

Field Type Description
AEDAT date Record creation data
BSART text Purchasing document type
BSTYP text Purchasing document category
BUKRS text Company code
EBELN text Purchasing document number
EKGRP text Purchasing group
EKORG text Purchasing organization
ERNAM text Name of person who created the object
LIFNR text Vendor account number
MANDT text Client
PROCSTAT text Purchasing document processing state
WAERS text Currency key
WKURS currency Exchange rate

Filtering: BSTYP = 'F', Date: AEDAT

EKPO

Stores Purchasing Document Item Data.

Field Type Description
BANFN text Purchase requisition item number
BNFPO text Cross-System Purchase requisition item
EBELN text Purchasing document number
EBELP text Purchasing document item number
KUNNR text Customer
LGORT text Storage location
MANDT text Client
MATKL text Material group
MATNR text Material number
MEINS text Purchase Order unit of measure
MENGE double Purchase order quantity
NETWR double Net order value in Purchase order currency
PRDAT date Date of price determination
WERKS text Plant
BSTYP text Purchasing document category
KONNR text Number of Principal Purchase Agreement

Filtering:BSTYP = 'F'

EKBE

Stores History per Purchasing Document Data.

Field Type Description
BELNR text Material document number
BUZEI text Material document item
CPUDT date Accounting document creation date
CPUTM time Time of entry
EBELN text Purchasing document number
EBELP text Purchasing document item number
ELIKZ text "Delivery Completed" indicator
ERNAM text Name of person who created the object
MANDT text Client
BEWTP text Purchase Order history category
SHKZG text Debit/Credit Indicator

Filtering: BEWTP = 'E' AND SHKZG = 'S' Date: CPUDT

EKET

Stores Scheduling Agreement Schedule Lines Data.

Field Type Description
EBELN text Purchasing document number
EBELP text Purchasing document item number
EINDT date Item delivery date
MANDT text Client
SLFDT date Statistics-Relevant delivery date
WEMNG number Received order quantity

EKKN

Stores Account Assignment in Purchasing Document Data.

Field Type Description
EBELN text Purchasing document number
EBELP text Purchasing document item number
GSBER text Business area
KOKRS text Controlling area
KOSTL text Cost centre
MANDT text Client

Invoice tables

RBKP

Stores Document Header Invoice Receipt Data.

Field Type Description
BELNR text Invoice document number
BUKRS text Company code
CPUDT date Accounting document creation date
CPUTM time Time of entry
GJAHR text Fiscal year
MANDT text Client
USNAM text User name
KURSF text Exchange rate
WAERS text Currency key

Filtering: Date: CPUDT

RSEG

Stores Document Item Incoming Invoice Data.

Field Type Description
BELNR text Invoice document number
BUZEI text Invoice document item
EBELN text Purchasing document number
EBELP text Purchasing document item number
GJAHR text Fiscal year
MANDT text Client
WRBTR double Amount in document currency

Accounting tables

BKPF

Stores Accounting Document Header Data.

Field Type Description
AWKEY text Reference key
BELNR text Accounting document number
BLART text Document type
BUKRS text Company code
CPUDT date Accounting document creation date
CPUTM time Time of entry
GJAHR text Fiscal year
MANDT text Client
USNAM text User name
WAERS text Currency key
KURSF text Exchange rate
BUDAT date Posting date
BLDAT date Document date

Filtering: Date: CPUDT

BSIK

Stores Accounting Secondary Index for Vendors Data.

Field Type Description
BELNR text Accounting document number
BUKRS text Company code
BUZEI text Accounting document item
GJAHR text Fiscal year
MANDT text Client
WRBTR double Amount in document currency

Filtering: BUZEI = 001 Date: CPUDT

BSAK

Stores Accounting Secondary Index for Vendors (Cleared Items) Data.

Field Type Description
BELNR text Accounting document number
BUKRS text Company code
BUZEI text IAccountingnvoice document item
GJAHR text Fiscal year
MANDT text Client
WRBTR double Amount in document currency

Filtering: BUZEI = 001 Date: CPUDT

BSE_CLR

Stores Additional Data for Document Segment Clearing Information Data.

Field Type Description
BELNR text Accounting document number
BELNR_CLR text Accounting document number
BUKRS text Company code
BUKRS_CLR text Company code
BUZEI text Accounting document line item number
CLRIN text Type of clearing
GJAHR text Fiscal year
GJAHR_CLR text Fiscal year
INDEX_CLR text Sequential number for clearing information
MANDT text Client
SHKZG text Debit/Credit Indicator
WAERS text Currency key
WRBTR double Amount in document currency

Filtering: BUZEI = 001 AND (CLRIN = '' or CLRIN = 2)

Change log tables

CDHDR

Stores Change Document Header Data.

Field Type Description
CHANGENR text Document change number
MANDANT text Client
OBJECTCLAS text Object class
OBJECTID text Object value
UDATE date Change document creation dated
USERNAME text User name responsible in change document
UTIME time Time changed

FIltering: OBJECTCLAS in ["BANF", "EINKBELEG", "INCOMINGINVOICE", "BELEG"] Date: UDATE

CDPOS

Stores Change Document Item Cluster Data.

Field Type Description
CHANGENR text Document change number
CHNGIND text Change Type (U, I, S, D)
FNAME text Field name
MANDANT text Client
OBJECTCLAS text Object class
OBJECTID text Object value
TABKEY text Changed table record key
TABNAME text Table name
VALUE_NEW text New contents of changed field
VALUE_OLD text Old contents of changed field

Filtering: FNAME in ["KEY", "BANPR", "PROCSTAT", "FRGZU", "LOEKZ", "ABSKZ", "NETPR", "ZLSPR", "ZTERM", "ZFBDT", "ZUONR", "BVTYP", "HBKID", "AUGBL"] AND TABNAME in ["EBAN", "EKKO", "EKPO", "RBKP", "RSEG", "BSEG", "BSEGR"] AND CHANGENR >= '<value>' AND CHANGENR <= '<value>' (For example, AND CHANGENR >= '0001299707' AND CHANGENR <= '0001507899')

User master data tables

USR21

Stores User Name/Address Key Assignment Data

Field Type Description
ADDRNUMBER text Address number number
BNAME text User name in user master record
MANDT text Client
PERSNUMBER text Person number
ADRP

Stores Persons (Business Address Services) Data

Field Type Description
CLIENT text Client
DATE_FROM date Valid-from date
DATE_TO date Valid-to date
NAME_FIRST text First name
NAME_LAST text Last name
PERSNUMBER text Person number
NATION text Version ID for international addresses

Filtering: NATION = '' or NATION = 'I'

ADCP

Stores Person/Address Assignment (Business Address Services) Data

Field Type Description
ADDRNUMBER text Address number
CLIENT text Client
DATE_FROM date Valid-from date
DATE_TO date Valid-to date
DEPARTMENT text Department
FUNCTION text Function
PERSNUMBER text Person number
NATION text Version ID for international addresses

Filtering: NATION = '' or NATION = 'I'

USR02

Stores Logon Data

Field Type Description
BNAME text User name in user master record
MANDT text Client
USTYP text User type

Supplier master data tables

LFA1

Stores General Vendor Master Data

Field Type Description
LAND1 text Country key
LIFNR text Vendor account number
MANDT text Client
NAME1 text Name 1
NAME2 text Name 2
REGIO text Region (State, Province, County)
XCPDK text Indicator: one-time account?
T005T

Stores Country Names Data

Field Type Description
LAND1 text Country key
LANDX text Country name
MANDT text Client
SPRAS text Language key

Filtering: SPRAS = 'Language'

T005U

Stores Taxes Region Key Texts Data

Field Type Description
BEZEI text Description
BLAND text Region (State, Province, County)
LAND1 text Country key
MANDT text Client
SPRAS text Language key

Filtering: SPRAS = 'Language'

Customer master data tables

KNA1

Stores General Vendor Master Data

Field Type Description
KUNNR text Customer number
LAND1 text Country key
MANDT text Client
NAME1 text Name 1
NAME2 text Name 2
REGIO text Region (State, Province, County)

Material master data tables

MAKT

Stores Material Descriptions Data

Field Type Description
MAKTX text Material Description (Short Text)
MANDT text Client
MATNR text Material number
SPRAS text Language key

Filtering: SPRAS = 'Language'

T023T

Stores Material Group Descriptions Data

Field Type Description
MANDT text Client
MATKL text Material group
WGBEZ text Material group description
SPRAS text Language key

Filtering: SPRAS = 'Language'

T001L

Stores Storage Locations Data

Field Type Description
LGOBE text Storage location description
LGORT text Storage location
MANDT text Client
WERKS text Plant
T006A

Stores Assign Internal to Language-Dependent Unit Table and Data

Field Type Description
MANDT text Client
MSEHI text Unit of measurement
MSEHT text Unit of measurement text
SPRAS text Language key

Filtering: SPRAS = 'Language'

Organizational structure master data tables

CSKT

Stores Cost Center Texts Data

Field Type Description
KOKRS text Controlling area
KOSTL text Cost center
KTEXT text General name
MANDT text Client
SPRAS text Language key
DATBI text Valid to date

Filtering: SPRAS = 'Language' AND DATBI = "99991231"

T001

Stores Company Codes Data

Field Type Description
BUKRS text Company code
BUTXT text Company (code) name
MANDT text Client
WAERS text Currency key
T001W

Stores Plants/Branches Data

Field Type Description
MANDT text Client
NAME1 text Name
WERKS text Plant
T024

Stores Purchasing Groups Data

Field Type Description
EKGRP text Purchasing group
EKNAM text Purchasing group description
MANDT text Client
T024E

Stores Purchasing Organizations Data

Field Type Description
EKORG text Purchasing organization
EKOTX text Purchasing organization description
MANDT text Client
TGSBT

Stores Business Area Names Data

Field Type Description
GSBER text Business area
GTEXT text Business area description
MANDT text Client
SPRAS text Language key

Filtering: SPRAS = 'Language'

Purchasing document master data tables

T161T

Stores Texts for Purchasing Document Types Data

Field Type Description
BATXT text Purchasing document type short description
BSART text Purchasing document type
BSTYP text Purchasing document category
MANDT text Client
SPRAS text Language key

Filtering: SPRAS = 'Language'

Block & Cancellation reasons master data tables

T008T

Stores Blocking Reason Names in Automatic Payment Transactional Data

Field Type Description
MANDT text Client
TEXTL text Explanation of the reason for payment block
ZAHLS text Block key for payment
SPRAS text Language key

Filtering: SPRAS = 'Language'

Currency master data tables

TCURR

Stores Exchange Rates Data

Field Type Description
FCURR text From currency
GDATU date Date as of which exchange rate is effective
MANDT text Client
TCURR text To currency
KURST text Exchange rate type
UKURS text Exchange rate

Filtering: KURST = 'Exchange rate type'

TCURF

Stores Conversion Factors Data

Field Type Description
FCURR text From currency
FFACT integer Ratio for the "from" currency units
GDATU date Block key for payment
MANDT text Client
TCURR text To currency
TFACT integer Ratio for the "to" currency units
KURST text Exchange rate type

Filtering: KURST = 'Exchange rate type'

TCURX

Stores Decimal Places in Currencies data

Field Type Description
CURRDEC integer Number of decimal places
CURRKEY text Currency key

Configuring transformations

Dbt variables

Variable Type Description
accounting_document_type Text Set of accounting document type codes used for incoming payments. Example: ('KZ')
date-format Text Date format used. The date format is dependent on the database used
exchange_rate_type Text Currency exchange rate type. Example: 'M'
language Text Language code from the SAP system
reporting_currency Text Currency which is used for reporting

Note that while there is a date format that can be configured in the dbt variables, there is no time format defined. The time format is implemented via a custom macro. This is done because SQL server does not support converting the 6 digits time format to time data type.


Design specifications

Objects

The following diagram shows all objects that are used for the process.

Process objects

Object Input Data
Purchase requisition EBAN
Purchase order EKKO
Purchase order item EKPO
Goods receipt EKBE
Purchasing document account assignment EKKN
Purchasing order schedule lines EKET
Invoice RBKP
Invoice item RSEG
Accounting document BKPF, BSAK, BSIK
Payment BKPF, BSE_CLR

Master data objects

Object Input Data
Business area TGSBT
Company T001
Cost center CSKT
Currency conversion factor TCURF
Currency decimal places TCURX
Currency exchange rate TCURR
Customer KNA1, T005T, T005U
Material MAKT
Material group T023T
Payment block reason T008T
Plant T001W
Purchasing document type T161T
Purchasing group T024
Purchasing organization T024E
Storage location T001L
Supplier LFA1, T005T, T005U
Unit of measurement T006A
User address USR21, ADCP
User name USR21, ADRP
User type USR02

Activities

Activity Object Description
Create purchase requisition Purchase requisition The purchase requisition is created, based on the creation date or time of insertion in the changelog.
Approve purchase requisition level Purchase requisition Purchase requistion is approved, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = FRGZU
Revoke approved purchase requisition level Purchase requisition Purchase requistion approval is revoked, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = FRGZU
Delete purchase requisition Purchase requisition Purchase requistion is deleted, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Restore purchase requisition Purchase requisition Purchase requistion is restored, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Reject purchase requisition Purchase requisition Purchase requistion is rejected, based on VALUE_NEW from the change log where FNAME = BANPR
Create purchase order Purchase order The purchase order is created, based on the creation date or time of insertion in the changelog.
Set purchase order block Purchase order Purchase order block is set, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Remove purchase order block Purchase order Purchase order block is removed, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Delete purchase order Purchase order Purchase order is deleted, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Restore purchase order Purchase order Purchase order is restored, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Reject purchase order Purchase order Purchase order is rejected, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = PROCSTAT
Approve purchase order level Purchase order Purchase order is approved, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = FRGZU
Revoke approved purchase order level Purchase order Purchase order appproval is revoked, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = FRGZU
Create purchase order item Purchase order The purchase order item is created, based on the creation date of the purchase order or time of insertion in the changelog.
Set purchase order item block Purchase order Purchase order item block is set, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Remove purchase order item block Purchase order Purchase order item block is removed, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Delete purchase order item Purchase order Purchase order item is deleted, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Restore purchase order item Purchase order Purchase order item is restored, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = LOEKZ
Change purchase order item value Purchase order Purchase order item value is changed, based on the change log where FNAME = NETPR
Reject purchase order item by supplier Purchase order Purchase order item is rejected by the supplier, based on VALUE_NEW from the change log where FNAME = ABSKZ
Post goods receipt Goods receipt Goods receipt was posted, based on the CPUDT and CPUTM fields of the object.
Set invoice item payment block Invoice Invoice payment block is set, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = ZLSPR
Remove invoice item payment block Invoice Invoice payment block is removed, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = ZLSPR
Create invoice item Invoice The invoice item is created, based on the CPUDT and CPUTM fields of the object.
Create accounting document Accounting document The accounting document is created, based on the CPUDT and CPUTM fields of the object.
Set payment block Accounting document Payment block is set, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = ZLSPR
Remove payment block Accounting document Payment block is removed, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = ZLSPR
Change payment terms Accounting document Payment terms have changed, based on the change log where FNAME = ZTERM
Change payment due date Accounting document Payment due date has changed, based on the change log where FNAME = ZFBDT
Change payment assignment Accounting document Payment assignment has changed, based on the change log where FNAME = ZUONR
Change payment bank data Accounting document Payment bank data has changed, based on the change log where FNAME is BVTYP or HBKID
Cancel payment Accounting document Payment is caneclled, based on VALUE_OLD and VALUE_NEW from the change log where FNAME = AUGBL
Create incoming payment Accounting document An incoming payment created, based on the CPUDT and CPUTM fields of the object
Create outgoing payment Accounting document An outgoing payment is created, based on the CPUDT and CPUTM fields of the object

Design details

Change log

The Change log, created by joining the CDHDR and CDPOS tables, is not an object on its own, but is used for all objects to generate the corresponding events. By default the Change log contains only changes for the default activities, gained by filtering on the FNAME field from the CDPOS table during data extraction.

For each object its 'change events' are created as follows:

Automated events

An event can be labeled as automated. This is dependent on the user_type associated with the event. The user_type stems from the USR02 table. If the value of the field USTYP is B or C, meaning System or Communications Data, respectively, the event is labeled as 'Automated'.

Currency conversion

Price-related information is given in a certain currency. These prices and corresponding currency are stored in the document tables. These currencies vary between items. To be able to analyze all of them in one app template, all prices are converted from their document currency to a single currency, referred to as the reporting currency. The reporting currency is a variable that can be specificed in dbt and unifies all the currencies shown in the App template. The currency conversion is done based on the exchange rate information stored in the TCURR, TCURF, and TCURX tables. In case the exchange rates listed are an indirect rate, they contain a - to indicate this.

Currency conversion is applied on all object values, including purchase requisitions, purchase order items, accounting documents, invoice items and payments. The corresponding SQL files can be found in the folder currency conversion, under the objects folder in the transformations. Except for purchase requisition, all objects require two steps for currency conversion:

The local currency is the currency of the company. This local currency can be found in the company table T001. The conversion to the reporting currency is done based on the exchange rate information stored in the TCURR, TCURF, and TCURX tables. In particular, the TCURX tables is used to determine the number of decimal places for each currency. This is important to get the correct conversion factor from the TCURF table. The TCURF is used to determine the conversion factor between two currencies. For example, if you want to convert from USD to EUR, you need to find the row in TCURF where FCURR = 'USD' and TCURR = 'EUR'. The conversion factor is then calculated as TFACT / FFACT. This factor is particulary important when two currencies have a different number of decimal places. For example, if you want to convert from JPY (0 decimal places) to USD (2 decimal places), you need to take into account that 1 JPY = 0.0091 USD. This is done by using the conversion factor from TCURF. the TCURR table is used to determine the exchange rate between two currencies. For example, if you want to convert from USD to EUR, you need to find the row in TCURR where FCURR = 'USD' and TCURR = 'EUR'. The exchange rate is then given by the UKURS field.

The only exeption in having the two step currrency conversion is purchase requisition where no specific exchange rate is reported in the corresponding SAP tables of this object. Therefore we convert the document currency directly into the reporting one, without the need for local currency conversion step.

Table below gives an overview of the fields used for currency conversion per object. It is important to note that for each object the baseline date for currency conversion is different. This is because the date used for currency conversion should be as close as possible to the date of the transaction. For example, for purchase requisition we use the request date while for purchase order item we use the date of price determination. Each object also has its own value field which is used for currency conversion:

Object Baseline date for currency conversion Exchange rate from document to local currency Exchange rate from local to reporting currency Value
Purchase requisition EBAN."BADAT" (Request Date) - TCURR."UKURS" EBAN."PREIS"
Purchase order item EKPO."PRDAT" (Date of Price Determination) EKKO."WKURS" TCURR."UKURS" EKPO."NETWR"
Invoice item RBKP."CPUDT" (Day On Which Accounting Document Was Entered) RBKP."KURSF" TCURR."UKURS" RSEG."WRBTR"
Accounting document BKPF."BLDAT" (Document Date in Document) BKPF."KURSF" TCURR."UKURS" BSIK."WRBTR", BSAK."WRBTR"
Payment BKPF."CPUDT" (Day On Which Accounting Document Was Entered) BKPF."KURSF" TCURR."UKURS" BSE_CLR."WRBTR"