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.
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 |
The data extraction is developed for SAP.
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.
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.extract_theobald.ps1
script and the config.json
file. Unzip the content on the server where Theobald Xtract Universal is installed.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 |
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 |
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
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
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'
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
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 |
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 |
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
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 |
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
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
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
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)
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
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'
)
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 |
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'
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'
Stores Logon Data
Field | Type | Description |
---|---|---|
BNAME |
text | User name in user master record |
MANDT |
text | Client |
USTYP |
text | User type |
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? |
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'
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'
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) |
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'
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'
Stores Storage Locations Data
Field | Type | Description |
---|---|---|
LGOBE |
text | Storage location description |
LGORT |
text | Storage location |
MANDT |
text | Client |
WERKS |
text | Plant |
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'
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"
Stores Company Codes Data
Field | Type | Description |
---|---|---|
BUKRS |
text | Company code |
BUTXT |
text | Company (code) name |
MANDT |
text | Client |
WAERS |
text | Currency key |
Stores Plants/Branches Data
Field | Type | Description |
---|---|---|
MANDT |
text | Client |
NAME1 |
text | Name |
WERKS |
text | Plant |
Stores Purchasing Groups Data
Field | Type | Description |
---|---|---|
EKGRP |
text | Purchasing group |
EKNAM |
text | Purchasing group description |
MANDT |
text | Client |
Stores Purchasing Organizations Data
Field | Type | Description |
---|---|---|
EKORG |
text | Purchasing organization |
EKOTX |
text | Purchasing organization description |
MANDT |
text | Client |
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'
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'
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'
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'
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'
Stores Decimal Places in Currencies data
Field | Type | Description |
---|---|---|
CURRDEC |
integer | Number of decimal places |
CURRKEY |
text | Currency key |
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.
The following diagram shows all objects that are used for the process.
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 |
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 |
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 |
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:
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'.
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" |