Skip to Content
Author's profile photo Babu Kilari

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.,

Assigned Tags

      29 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Former Member
      Former Member
      Maybe add this to a WIKI?  When I'm looking for great information like this that usually the first place I start.  🙂

      Michelle

      Author's profile photo Babu Kilari
      Babu Kilari
      Blog Post Author
      Hi Michelle,

      Sure. I will try to get this to Wiki with some more nice info added. But, need some more time.

      Thanks

      Author's profile photo Former Member
      Former Member
      Thank you!  It would be a nice addition.
      Author's profile photo Revanth V P
      Revanth V P

      Hi Babu Kilari,

      I am newbie to SAP APO, just I need to know is there any coding or programming required for SAP APO Technical.

      Thanks,

      Revanth

      Author's profile photo Babu Kilari
      Babu Kilari
      Blog Post Author

      Hi Revanth,

      Of course, there is programming that is required to build your custom solutions in APO. All the above technical details would help you.

      Babu Kilari

      Author's profile photo Parth Soneji
      Parth Soneji

      Thanks for this great checklist Babu! 🙂

      Author's profile photo Former Member
      Former Member

      Nice Job Babu. I know you have worked extensively in this area & now making it even more useful by sharing with all.

      Author's profile photo Babu Kilari
      Babu Kilari
      Blog Post Author

      Thank you Parth, Pushkar for your feedback !!

      Author's profile photo Satish Waghmare
      Satish Waghmare

      Very valuable information. Many thanks for sharing Babu. Keep it up 🙂

      Thank you

      Satish Waghmare

      Author's profile photo Babu Kilari
      Babu Kilari
      Blog Post Author

      Thank you Satish !!

      Author's profile photo Thamizhchelvan SAP APO
      Thamizhchelvan SAP APO

      good stuff

      Author's profile photo Shashidhar Pabba
      Shashidhar Pabba

      Thanks Babu. Very helpful info.

      Author's profile photo Former Member
      Former Member

      Thanks! Very helpful.

      Author's profile photo Babu Kilari
      Babu Kilari
      Blog Post Author

      Thanks for the feedback Ying !!

      Author's profile photo Former Member
      Former Member

      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,

      Pavan

      Author's profile photo Babu Kilari
      Babu Kilari
      Blog Post Author

      What you see in //AC42 is Product Allocation Group data. You should see that in the DB table /SAPAPO/QTTAB

      Author's profile photo Former Member
      Former Member

      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?

      Author's profile photo Babu Kilari
      Babu Kilari
      Blog Post Author

      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

      Author's profile photo Srini Bulusu
      Srini Bulusu

      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?

      -Srini

      Author's profile photo M. Wallace
      M. Wallace

      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.

      Mike

      Author's profile photo Srini Bulusu
      Srini Bulusu

      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.

      -Srini

      Author's profile photo M. Wallace
      M. Wallace

      Thanks!

      Author's profile photo Former Member
      Former Member

      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.

      Author's profile photo Srinath Hr
      Srinath Hr

      Thank you Babu..

      Author's profile photo Former Member
      Former Member

      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?

      Regards

      Rajiv Sarin

      Author's profile photo Babu Kilari
      Babu Kilari
      Blog Post Author

      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

      Author's profile photo Former Member
      Former Member

      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!!!

      Regards

      Rajiv Sarin

      Author's profile photo Former Member
      Former Member

      Thanks a lot Babu for sharing this technical Info!!

       

      Author's profile photo klif wiee
      klif wiee

      Thanks for the nice doc! The first table should be /SAPAPO/POSMAPN, right?