SAP PP tables & link between them

Taken from :

SAP Production Order Tables and Join Between PO Tables (AUFK, AFVC, AFFL, AFRU…)

SAP Production Order Tables: find the most important SAP Tables used for Production Orders.

SAP PO Tables, in this article, will be classified by topics including: AFKO, AFVC, Status, Operation, Routines, Confirmations, missing Parts Tables, SAP CIM Order Tables.

As bonus, you will find some useful join condition to retrieve data of Production Order data for Standard SAP Tables.

SAP Production Order Tables

What’s Production Order in SAP

Production orders are a fundamental part of Production Planning and Control (PP).

PP is fully integrated in the Logistics (LO) component and has, among others, interfaces to

  • Sales and Distribution (SD)
  • Materials Management (MM)
  • Controlling (CO)

Source: Production Orders (PP-SFC)

Main SAP Production Order Tables

The main Production order tables name in sap are

  • AUFK Production order headers
  • AFKO Order header data PP orders
  • AFPO Order item

Check also SAP Production Orders Tcodes and SAP Planning Order Transactions

Join Between AUFK and AFPO

To retrieve Order Header from PP Production Order, join between

AUFK (Order header) and AFPO on field AUFNR

SAP PO Status tables

The main Production Order Status tables are:

  • JSTO Status profile
  • JEST Object status
  • TJ30 user status codes
  • TJ31 process control user status

How to find Status of SAP Production Order ?

In order to find SAP Production Order Status make a join between
AUFK (Order header) & JEST (active Status) on OBJNR

Link between JEST and TJ31 is set on STSMAS and ESTAT.

Alternatively, you can use the SAP Standard BAPI to read Production Order status: call function ‘STATUS_READ’ exporting OBJNR = L_AUFNR ONLY_ACTIVE = ‘X’ tables STATUS = IT_JEST exceptions OBJECT_NOT_FOUND = 1 others = 2.

SAP Production Order: Operation Table AFVC

The Production Order Operation can be found in the following Tables

  • AFVC Order operations
  • AFVV Quantities/dates/values in the operation
  • AFVU User fields of the operation

SAP Production Order: SAP Routing Tables

The Routing for Production Orders tables are:

  • AFFL Work order sequence
  • AFFH PRT assignment data for the work order (routing)

The link between AFKO (Order header) & AFVC (order routing) is set on field AUFPL

Sap production order confirmation table

SAP Order Confirmations are stored in

  • AFRU (confirmation)

To retrieve the confirmation of a SAP Production Order;
join between AFVC (order routing) and AFRU (confirmation) on : AUFPL & APLZL & PLNFL & VORN

Sap production order Tcode and Transaction

Find the list of the most important SAP Tcodes for SAP Production Orders and Planned Order in SAP PP in the following Post SAP Production Orders Tcodes.

Production Order Tables in SAP PP

SAP PP Confirmations for SAP Production Orders Tables

The following list is the SAP Tables for Production Orders Confirmation in SAP PP

AFFWGoods movements with errors from confirmation
AFRCTable of planned changes to conf.: Automatic
AFRDDefault values for collective confirmation
AFRHHeader information for confirmation pool
AFRP1Table of planned changes to conf.: Automatic
AFRP2/3/4Table of planned changes for confirmation: A/B/Data
AFRUOrder completion confirmations
AFWISubsequently posted goods movements for conf
TAFWDCORU: Messages that are not interpreted
TCORDTable for field-dependent check routines
TCORUParameters for order confirmations
TCORVTable with Routines for structuring variable
TCORWConfirmation: Window Control
TPARUControl paralleled confirmation processes
TPRRUControl table for process chain for confirmation
TPRRUTText table for process control of confirmation
TRUGSUser status caused by deviation

Source:Table name & field name for production order & operation confirmation

List of SAP PP Production Order Data Tables

The following list is the SAP Production Order Tables in SAP PP.

These SAP PO Tables stored all the PO Data:

AFBPCIM order: Batch print requests
AFFLWork order sequence
AFKOOrder header data PP orders
AFPOOrder item
AFVCOperation within an order
AFVUDB structure of the user fields of the opera
AFVVDB structure of the quantities/dates/values
FAPWIndex of production-/issuing plant for production
ORDCOMCommunication control Operation download

SAP Print PP Tables

SAP Print PP Tables handles the output of PP Documents.

T496PPrint PP documents: Determination of output
T496RPrint PP shop papers: Report control
T496TSAP Print PP shop papers: Transaction control
T496VPP Print: Default Value for Printing Online

SAP CIM Order Tables in PP

The following List contains Related SAP CIM Tables in PP.

T496BCIM order: Assigning document types to refer
T496DCIM: Destination/lists/spool parameters per
T496FCIM order: Form description of the list
T496KCIM order: Entity table of possible table id
T496NList descriptions for CIM order Table
T496ZCIM order: Table-controlled table access
TCO03CIM order: Texts for TCO01
TCO41Default values for generating operation in CIM order
TCO09CIM order: Text IDs of objects in orders

SAP Missing Parts Tables

Here another list of SAP PP Tables related to Production Order Process.

The main SAP Missing Parts Tables are:

TCOFProfile for missing parts info system
TCOFFProfile for Missing Parts Info System: Display
TCOFFTTexts for Missing Parts Info System: Display
TCOFGProfile for missing parts info system: Criteria
TCOFGTTexts for Missing Parts Info System: Criteria
TCOFKTexts for functions in milestones/trigger
TCOFSProfile for Missing Parts Info System: Sort
TCOFSTTexts for Missing Parts Info System: Sort
TCOFTTexts for Missing Parts Info System
TXPR1XPRA control : missing parts info system
TXPR1XPRA control : missing parts info system
FTINDMissing parts index

Text & Customizing Tables for Production Order

In the next part, you will find the list to related SAP PP Production Order Tables starting with T*.

In fact, this Tables’s List is more for customizing and Text Tables.

T024FProduction scheduler
T399XParameters dependent on order type
T441CProfile : availability check
T441CTTexts for Profile “Display Availability Check”
T490Transactions PP – orders – order category
T024FProduction scheduler
T024FProduction scheduler
T399XParameters dependent on order type
T441CProfileavailability check
T441CTTexts for Profile “Display Availability Check”
T490Transactions PP orders: order category
TC32Assigning subscreen to processing location
TC34Allocating operation to object type for the
TC62Sequence of detail screens when processing
TCO01Sequence/operations control in logistics
TCO04Table for controlling the screen sequence
TCO05CUA status depending on panel & trans. type
TCO06Exclusive functions for PP orders
TCO10Valuation variant for order costing
TCO11Control table for production orders – available
TCO12Control table production orders – stock
TCO36PP orders: Control table for calling up pop-
TCO43PP-SFC order profile
TCO43TDescription of production scheduler profile
TCO60Sequence keys for input facility and verification
TCO61Sequence key for PP orders
TCO62Defining screen sequences for input facility
TCO63Sequence of detail screens when maintaining
TCODBDatabase fields development class CO per order
TCOKOConstants for PP orders
TCOKTAccount assignment categories for order
TCOPField selection profile
TCOPSField selection profile
TCOPTDescription of Profile for Field Selection
TRUGReason for variances in completion confirmation
TRUGTText describing the reason for a variance in

IBP Formulas in KF

Standard Functions

IF(intarg , arg2, arg3)Return arg2 if intarg is considered true (not equal to zero), else return arg3.CAPACITYOVERLOADS@PERLOCRES = IF(“CAPADEMANDUTILPCT@PERLOCRES”> 1,1,0)
CASE(arg1, default)CASE(arg1, cmp1, value1, cmp2, value2, …, default)Return value1 if arg1 == cmp1value2 if arg1 == cmp2, and so on, default if there is no match.CASE(SELECTEDOPTION@PERPROD, 1, KF1@PERPROD, 2, KF2@PERRPROD,KF@PERPROD)
ROUND(double, int)ROUND(123.456, 0) = 123ROUND(123.456, 1) = 123.5ROUND(-123.456, 1) = -123.5ROUND(123.456, -1) = 120KF1@PERPRODLOCSRC = ROUND(KF@ PERPRODLOCSRC, 0)
LTRIM(string)LTRIM(string,string)Remove a whitespace prefix from a string. The whitespace characters may be specified in an optional argument. 
RTRIM(string)RTRIM(string,string)Remove trailing whitespace from a string. The whitespace characters may be specified in an optional argument. 
TRIM(string)TRIM(string,string)Remove whitespace from the beginning and end of a string. 
UPPER(arg1)Returns arg1 in upper caseKF1@PERPRODCUST = IF(UPPER( »ATTR1 ») =  »APPROVED », « KF2@PERPRODCUST », NULL)
MIN(arg1,arg2,…)In the case of several input key figures, there is no aggregation; it returns the lowest value of the input key figures.MINCAPACITY@MTHPRODLOC = MIN(« CAPACITYMORNING@MTHPRODLOC », « CAPACITYAFTERNOON@MTHPRODLOC », « CAPACITYNIGHT@MTHPRODLOC »)
MAX(arg1,arg2,…)In the case of several input key figures, there is no aggregation; it returns the highest value of the input key figures.MAXCAPACITY@MTHPRODLOC = MAX(« CAPACITYMORNING@MTHPRODLOC », « CAPACITYAFTERNOON@MTHPRODLOC », « CAPACITYNIGHT@MTHPRODLOC »)


Sample configuration for aggregation of standard deviation

Take the sum of the squares; then calculate the square root of the total:

  1. Calculate the squares:
    1. Square the values:HKF1@PL = PROPAGATEDDEMANDSTDEV@PL ** 2
    2. Sum the squares:HKF1@REQUEST = SUM(HKF1@PL)
  2. Calculate the square root of the total:PROPAGATEDDEMANDSTDEV@REQUEST= HKF1@REQUEST ** 0.5



The ISNULL condition works only when an underlying time series record exists for the planning object.

Imagine that Sales Forecast Quantity and Marketing Forecast Quantity are the stored key figures for planning level PERPROD.

Planning ObjectPeriodKey Figure: Sales Forecast QtyKey Figure: Marketing Forecast Qty
P1Jan 2018100 
P1Mar 2018 100

With the above data, IF(ISNULL(SALESFCSTQTY),1,0) exhibits the following behavior:

PeriodISNULL ValueNotes
Jan 20180January 2018 has the value “100”.
Feb 2018Not evaluatedThe planning object for the time period February 2018 does not exist.
Mar 20181Though there is no value for Sales Forecast Quantity, the Marketing Forecast Quantity key figure (for the same planning level) has a valid value. Therefore, a record exists in the time series for this planning object.

Sample Expressions

Key FigureCalculation Expression

Spécifique HR – Include modif orders ZXCO1U06

ZXCO1U06 –

  • Verif des consos/Confirmations ordres Moli
    • Vérif champs ZZPRO et ZZSPRO
    • Blocage sauvegarde si control de dispo raté
    • Envoi Email à Juan Pedro si l’ordre bouge de 1 semaine – L137
    • Envoi Email à Juan Pedro si l’ordre est créé pour la semaine – L176
    • Envoi Email à Juan Pedro si on ramène un ordre sur la semaine – L290
    • Bloque le TECO si l’ordre a encore des COGI – L449
    • Envoi Email à Juan Pedro si on modifie une quantité – L539

Activate Change pointers for Message generation

BD10 to generate Material Idocs (MATMAS)

BD30 to generate BOM idocs (BOMMAT)

BD21 to process changes pointers. Here is how to set them :

Important :

  • By default, change pointers are generated for all changes in the material master (no filter by plant).
    • Filter can be done by Badi BDCP_BEFORE_WRITE for the specific message type to register in change pointer table (BDCP2) only the relevant changes required.
    • It can be done also filtering in the distribution model but then the plant in this case should be in a mandatory segment to avoid those messages to be sent. 


This document explains how to track the Material Master Data changes using change pointers in SAP R/3 environment.

Let us understand by taking following example –

The requirement is to track the Material Master changes in SAP R/3 environment and to send the information to some Legacy system (in form of AL11 Text file), if following fields changes –

  • If any new Material is created.
  • If Material is assigned with Dangerous indicator profile
  • UN Number
  • Dangerous Good Class
  • Dangerous Good Packing Group

Master data changes can be distributed with the SMD (Shared Master Data) tool. Changes to the Master Data are written in change documents interface, which in turn logs entries into change pointers.

The following step shows the change pointers settings and how to track the change logs for modified data.

Step 1 – Create Message Type (WE81)


Step 2: Assign Table Fields to Message type (BD52)

Assign table fields to message type which needs to be considered for Change pointers generation.


Step 3: Activate Change Pointers generally (BD61)


Step 4: Activate change pointers corresponding to fields in message type(BD50)


Also check if the data elements of all the required fields has ‘change Document’ field checked (Below screen shot for Material Number)


Step 5: Create a new Part Number and change following fields to test the generation of change logs in table CDHDR, CDPOS, BDCP and BDCPS.

  • Dangerous indicator profile (Transaction MM02)
  • UN Number (Transaction DGP3)
  • Dangerous Good Class (Transaction DGP3)
  • Dangerous Good Packing Group (Transaction DGP3)
Transaction – MM02Transaction – DGP3

Step 6: Create a report which will perform following functions –

  • Read non processed change logs using Function Module CHANGE_POINTERS_READ by passing the Message type name
  • Create a text file with all the required material information
  • Transfer that file on the application server (AL11)

And from application server the file is transferred to legacy system using some UNIX Script (this is out of scope of this BOK)

In addition to above FM (change_pointers_Read) you can also see the logs in following Table –

  • CDHDR (Change Document Header Table)
  • CDPOS (Change Document Items)
  • BDCP   (Change Pointer table
  • BDCPS (Change Pointer Status table)

IDOC Generation to send modified records –

In addition to above report you can also create a Function module and create an IDOC’s to send the modified data to legacy system-

Step1 – Create a Function module (e.g. ZTESTFM)

In this you can populate the IDOC segments and use the FM – MASTER IDOC_DISTRIBUTE to create and IDOC

Step2 – Assign Function module to Message Type (Transaction BD60)


Step 7: For the master data that are processed set the change pointer status to ‘Processed’ by setting its value to ‘X’ by calling function module CHANGE_POINTER_STATUS_WRITE.


Delete change pointers

Transaction is BD22 or the standard program RBDCPCLR deletes the obsolete/processed change pointers.