Skip to Content

Enhancing the BOP Filter with custom fields so as to run the BOP in a flexible way

As part of the gATP implementations, I found some additional flexibility in terms of BOP processing. If you take a look at the list of BOP filter fields, they are pretty much limited and they may not fit into the business requirements of different industries as some might be interesting in deciding the BOP confirmations to happen at a restricted list like Shipping point, Sales order level, ATP group level, Customer group etc., or a combination of these.

To achieve this functionality SAP has provided couple of structures which can be enhanced as shown below and to account them to work with BOP, you need to implement couple of user exits as the underlying filtering has to be done for the field that has been added.

Now, let us consider a business scenario where in a user wants to run BOP only for a selected list of Sales orders and the reason why he wants to select only these set of orders could be due to many reasons and varies from business to business :-

As a first step, enhance the following structures with the new field “Sales order number”



Once the above filters are added, you can see that the newly added field is part of the filter selection and it can be added to your filter as shown below.


You can also see that the field is available now in the BOP filter as shown below.

BOP Filter.JPG

Now, to make it work and to run the BOP only for those selected list of sales orders, you need to make sure that you implement the following user exit and exclude all the POSGUIDs ( order lines ) which are to be excluded and select only the ones that are required.


In the above mentioned user exit, you have a parameter called CT_BUFFER which actually contains the list of documents that are selected to undergo BOP check and you can find all those GUIDs there. As a first step, you need to read the sales orders that were entered in the selection screen by using the function modules   ( First you need to read if the sales order has been extended in the filter using FM /SAPAPO/BOP_FILTER_GET_DETAIL – Pass BOP_FILTER as program class, second you need to read the variant details of the filter using FM RS_VARIANT_CONTENTS )

Once the list of POSGUIDs is retrieved for the sales orders that were entered in the selection screen, you just need to implement a piece of code that reads the above mentioned internal table CT_BUFFER and set the status as “D” in the field “STATUS_ITM” for those which doesn’t match with the selection screen relevant POSGUIDs.

Once the above user exit is implemented, system works in such a way that unnecessary documents are not ATP checked in BOP, however those documents are still displayed in the BOP results screen, which remains to be an incomplete solution. Hence, to achieve the same you need to implement the following user exit to restrict the unnecessary documents from displaying.


In the above mentioned exit, read the entries in the internal table CT_BUFFER_DISPLAY that has the status as “D” or “Unchecked” and restrict them from displaying by deleting them from the internal table.

This ensures that BOP gets executed only for the relevant set of documents that you’ve entered in the selection screen.

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

    Very nice document.

    I have a similar requirement to add sales org and user status(from sales order item)

    in the BOP filter.I followed the steps, and could add sales org only in the filter variant.

    Could you guide on how the filter logic has to be written in the user exit EXIT_/SAPAPO/SAPLBOP_FILT_010 and how the values will be transferred from and to ECC.

    The screen shots in the post above are not visible.

    Thank You.

    Abhijeet Kapgate

    • Hello Abhijeet,

      Sorry, I have missed to see this question. Since you have added the Sales org field in the field catalog, the information would be already available in APO after saving the sales document that was created/changed. Now, you should write the filter exit logic in such a way that the sales orgs that were entered in the selection screen is respected and only those POSGUIDs that belong to the above sales orgs should be proceeded further for ATP checking. Those that do not match the selection should be ignored for ATP checking. You need to pass the status_itm as “D” to restrict that. I have mentioned that information in the document.

      Hope this helps.

      Babu Kilari
      SCM APO Consultant.

      • Hi Babu,

        The user-exit ‘FV45VFZY_USEREXIT_CATALOG_VALU’ does not get triggered at the time of saving the order, then how to capture the runtime changes in the item level (say in additional data tab A) that are to be moved to APO thru structure US_CATALOGUE ?



        • Hi Abhijeet,

          As a first check, please try to see if there is any CIF queue that is getting triggered for the changes that are being done in Additional Data menu of the sales order. You can check this by stopping the CIF queues for your user id. If you’re sure that the CIF queue is getting triggered for Additional Data changes as well, then I am sure that this user exit should also be getting triggered. You can reach out to the place by setting an external break-point and updates changes selected during the saves process of sales document. Hope this helps.

          Babu Kilari

  • Hi Babu,

    Thanks for the detailed information.

    I can’t see the screenshots of your post for some reason.

    I wanted to know the field for Sales Order to be used in Filter Type – Is it VBELN (Sales document) or DELNR (Order Number (OLTP)) ?

    Thanks in Advance,


  • Dear, Babu,

    we are facing the necessity to add the filter criteria ‘plant-specific material status’ marc-mmsta for the BOP.

    I already implemented the SAP Note 376773 and regarded your hints as well.

    For sales orders it is already working, but for STOs my problem is that neither the function ‘  /SAPAPO/ATP_SD_ORDER_GET nor the method ‘  /sapapo/cl_atpfield_buf=>get_atpfield ‘ is finding anything of the field catalogue from STOs .

    I can see that during /sapapo/CL_ATPFIELD->init_atpfield the structure lt_atpfield is also filled for STOs, but both routines do not found the atpfields for STO.

    Furthermore I thing I need another exit on ECC side to enter MMSTA for STOs into the field catalog…?

    Do you know how to handle it and can give me some hints?

    Thanks in advance!

    Best regards,



    • Hi Janine,

      Sorry for the late reply. I only saw this message now. I think ATPfield data perhaps doesnt get stored on DB for STO documents. Could you check if you have the information in the table /SAPAPO/MM_DOC and if yes – you could potentially read the data and use it as per your need. I hope that helps.