Skip to Content

Understanding the technical stuff in SAP APO gATP module

Would like to provide some information on gATP tables and Function Modules which will be useful in terms of developing a solution in SAP APO-gATP module.Before getting into details, we first need to understand that gATP system has a beautiful feature called Live Cache memory and the order line information is being stored using dynamically generated GUIDs. GUID is nothing but a random alphanumeric code as shown below. Generally, it will be of 22 Characters.

Example :- Ikqk45pV52NX0000ctsd10

Basic tables in SAP APO – gATP:-

1) /SAPAPO/POSMPAN :- This is one of the crucial tables which stores the line item guid in the APO system. As you all know APO is a planning system and usually the key factors for planning is material(product) and plant(location). Hence, everything that is stored in APO system would be treated at line item level for any Sales Order. The guid available in this table is the base to retrieve information from many other tables.

2) /SAPAPO/ORDADM_I :- This is the table which stores the order line information details. If you want to find out the header information, then you need to use the field HEADER in this table and pass the contents to the table /SAPAPO/ORDADM_H to get the information. 

3) /SAPAPO/ORDADM_H :- This table has got the header information like Sales document type(Field name-PROCESS_TYPE) , Created on timestamp, changed on time stamp, username who had created the Sales order etc.,

4) /SAPAPO/SD_DOC :- This is again line item related table which provides the quantity that has been ordered(QNTY field), Company code, Sold-to-party(PKUNAG or KUNNR), Customer Hierarchy levels, Customer group, Product Hierarchy, etc.,

5) /SAPAPO/SDFIELD :- This is the field catalog table. When I talk about Field catalog, it is an internal table which carries some set of parameters from ECC to APO for every sales order. SAP has provided an userexit  USEREXIT_CATALOG_VALU (Include  FV45VFZY_USEREXIT_CATALOG_VALU) where you can enhance the fieldcatalog and pass customer requested Z-fields to APO. Once the Sales Order is saved, you can see all the enhanced Z-fields in this /SAPAPOSDFIELD table. If you want to get corresponding entry from this table, then you need to pass the POSID from which is available in the table /SAPAPO/POSMAPN.

6) /SAPAPO/ATPPARAM :- This is an another important table which is again at line item level which can be queried using the POSID available in /SAPAPO/POSMAPN table. When a Sales order line item is passed to APO for ATP check the list of parameters that it uses would be stored in here in this table. Important parameters like Checkmode, Business Event, Allocation/ATP index, PAP(Product Allocation Procedure), etc.,

7) /SAPAPO/SRVFCSL :-  By passing the Sales Order number and item number, you can find out the ordered quantity, confirmed quantity of a Sales order line item from this table. Also, there is a specific field called “GI Time”, which gives you the Goods Issue time for that specific Sales Order line item if it is PGIed.

8) /SAPAPO/OBREF :- With the help of this table, you can find out the delivered quantity. You need to pass POSID which is available in /SAPAPO/POSMAPN table to get the delivered quantity

9) /SAPAPO/SDQTVB :- This is allocation specific table. In this table, you would only find information about the line items which has gone for allocation check. It takes POSID, PLUID(It is the planning object guid which refers to the CVC), start time stamp of the bucket as input anf gives you the confirmed quantity. If the line item has consumed the allocation from two different buckets and by passing only one POSID then you would see two entries in this table corresponding to that POSID.

10) /SAPAPO/QTTAB :- This is the underlying table behind the transaction /SAPAPO/QTTAB, which is nothing but the PAG(Product Allocation Group). It gives the total incoming ordered quantity and remaining quantity avaialable for the PLUID(CVC Guid in short terms).

If you pass only the CVC GUID i.e., PLUID to this table, it gives list of time series buckets along with the quantities assigned under that CVC. If you pass So, PLUID and Starting timestamp of the bucket is needed to retrieve one entry.

11) /SAPAPO/QTCHA :- It is CVC related table. When you pass PLUID, it gives the level at which the CVC has been maintained. You can find out the list of CVC fields along with CVC fieldvalues in this table.

12) /SAPAPO/ZPAGE001 :-  (/SAPAPO/ZPAGE00* ) These are Product Allocation : CVC tables. These tables get generated dynamically whenever we create a new Product Allocation Procedure (PAP). Each entry gets created in this table when we create a new CVC.

13) /SAPAPO/T190H :- Product Allocation Procedure table. This table has got a field KOSCH which indicates the PAPs. It gives the list of PAGs under its name.

14) /SAPAPO/T190AREA :- Links PAG and Planning area. One PAG can have only one Planning Area. But, one Planning Area can share multiple PAGs.

15) /SAPAPO/TBQTVB :- This table gives the confirmed quantity for each posguid. If there is an entry for PLGUID across the POSID, then it indicates that the line item has gone for Allocation check.

16) /SAPAPO/MATKEY :-  This table is similar to MARA in ECC.

17) /SAPAPO/MATLOC :- This table has got the material-location related data.

18) /SAPAPO/ORDSTA_I :- It takes POSID as the input and gives you the Status of the item in Live Cache, ATP status, etc.,

19) /SAPAPO/ORDLINK :- THIS IS THE MOST CRUCIAL table. It takes a POSGUID as input in the field GUID_HI and gives you the list of guids in the field GUID_SET along with the type of the GUID(OBJTYPE_HI) which has been stored in the field GUID_SET.  There is another field  objtype_hi which indicates whether the guid that we have passed in GUID_HI is line item guid or header level guid.

05 indicates line item guid
06 indicates header level guid.

These GUIDs which are further available in GUID_SET field can be used to query different tables like 

/SAPAPO/SHIPPING using guid_set 12 and object type 05
/SAPAPO/PART using guid_set 07 and object type 06
/SAPAPO/ORGMAN using guid_set 21 and object type 06
/SAPAPO/SALES using guid_set 11 and object type 06

20) /SAPAPO/SHIPPING :- Another important gATP table wihch gives you the shipping point (SHIP_POINT), Delivery priority (DLV_PRIO), Route (ROUTE), Reason for rejection (LIFSP).

21) /SAPAPO/ORDPART – Partner related information.

22) /SAPAPO/ORGMAN :- Sales order header details like Sales Area etc.,

23) /SAPAPO/BOPHEAD :- This is the crucial table for Back Order Processing. Whenever you run BOP, it creates a transaction guid(22 characters). All BOP related operations happen with the help of transaction guid. This table contains the user who had run the BOP, timestamp at which BOP run took place, Filter Profile which has been used, Sort Profile etc.,

You must be Logged on to comment or reply to a post.
      • Hi Babu,

        Can you please provide the underlying table for the tcode /sapapo/ac42? I want to understand as to what is the SAP table which gets updated with Planning Object no(PLUID), product(material) along with Product Allocations(KONOB) and  Product Allocation Quantity.



          • Thanks Babu. But this table doesn’t contain product. Is there any table where Product ,Product Allocations(KONOB) and PLUID are present? If not, is there a way I can join some other table with /SAPAPO/QTTAB to fetch the Allocated quantity for a specific Product Allocations(KONOB) and for a specific material?

          • Hi Pavan,

            I think you are looking for the data at CVC level which maps to PLUID which then is available in this table //QTTAB. For each PAP, there is a table that gets generated. I had mentioned the naming convention of such tables in the above blog. Please read through. With this you should be able to achieve what you are looking for

            Thanks & Best Regards,

            Babu Kilari

      • Hi Babu,

        Wondering if there is any harm in deleting the /sapapo/sdfield entries once the order item is PGIed. Since this table can grow phenomenally (since it stores one row per field), I am wondering if we can cleanup just this table by deleting the entries for orders which will neither go thru gATP nor BOP.

        Any comments?


        • Hello Srini

          You should schedule program /SAPAPO/SDORDER_DEL to delete these entries.  Run it at least once a week, my last project had 18 million entries in this table and it had a huge impact on CIF performance.


          • Hi Mike,

            We looked into sdorder_del program. The criteria to select data for that program may not cleanup enough data for us. The issue we have is there is so much data and the requirement is we have to keep orders which are 10 years old or less, due to regulation. Since we have so much of custom code dealing with sdfield table, I am wondering if I could rid of the entries as these fields are custom fields and if the gATP and BOP is done with these orders, it could be safe. If some one does the gATP on these orders by any chance, these entries come back to APO anyways, so the thinking is it is safe to get rid of data related to orders which are done with deliveries and pgi. What I am not sure is if it can cause any other issues with other standard processes. I am reasonably confident though as this data in sdfield table is really only custom (user defined) data. Just to give you an idea, our sdfield table has about 1 billion rows right now with about 45 rows for each order item.


  • Thank you Babu,

    excellent job.

    I managed to find the sales order priority combining tables /SAPAPO/POSMAN, /SAPAPO/ORD_LING, /SAPAPO/SHIPPING. In case someone needs to do the same I send the links of the above tables.

  • Hello Babu

    This is a very good compilation. I have a question. If I want the sales order and item number to appear in the field catalog, then what approach will you suggest?


    Rajiv Sarin

    • Hello Rajiv,

      Use the field catalogue user exit and push it to APO and you will see it in /SAPAPO/SDFIELD table. But, why do you want to do that as standard SAP table /SAPAPO/POSMAPN can give that info to you already at POSID level right ?

      Babu Kilari

      • Hello

        Yes you are right and I have used the field catalog user exit several times. But I am in the RBATP user exit and for my logic I need the sales order and item number details in that exit in some field either in available tables or field catalog. Field catalog is populated in ECC while ATP check is happening. At that time order number itself is not there so how do I populate it? Can you help me with a way to do it after order save happens?

        Thanks for your response!!!


        Rajiv Sarin