cancel
Showing results for 
Search instead for 
Did you mean: 

SRM7 PO output trigger

former_member184741
Active Contributor
0 Kudos

Hi Experts,

I would like to know about PO triggering concept in SRM7. Particularly, I want to know what are the fields when changed triggers PO output. For example when i change price at item level PO output gets triggered, but if I change internal note / account assignment, output is not triggered.

I tried to debug a bit into this as below

In class CL_BBP_ACTION_OUTPUT_PO method CHECK_RELEVANCE_DIFF there is a FM

CALL FUNCTION 'BBP_PD_ALL_GET_DIFF'

     EXPORTING

       iv_guid1          = mv_object_key

       iv_guid2          = mv_object_key

       iv_comp_method    = bbppd_comp-po_output

       is_read_flags     = ls_read_flags

     IMPORTING

       ev_objects_differ = lv_objectdiffers.

if lv_objectdiffers is 'X' then output is triggered.

If we go two levels inside we have forms  get_diff_header and  get_diff_itemlist to identify any kind of difference at Header/ Item level respectively. Inside each of these forms there are separate FMs to compare different sets of data. For example for comparing longtexts we have  BBP_PDLTX_GET_DIFF and for Organisational data  BBP_PDLTX_GET_DIFF etc.,  Before calling these FMs there is another FM  BBP_PDH_CLEAR_FIELDS where the fields are compared with table BBPD_COMP_FIELDS.

I could not understand the role of table BBPD_COMP_FIELDS in PO triggering. Even though I maintain PRICE /GROSS_PRICE/ TOTAL_VALUE in table BBPD_COMP_FIELDS with COMPARE_KIND indicator as 'E", output still gets triggered.

Thanks,

sankar.

Accepted Solutions (1)

Accepted Solutions (1)

wendy_xu
Employee
Employee
0 Kudos

Hi Sankar,

In standard, in PO for change versions, the application first checks the PO status whether it is ordered or not & then checks the differences between change and active versions using the compare method POO.


Depending on the differences, new output generation is determined. Therefore, during version comparison, the system checks for the fields in the system table BBPV_COMP_FIELDS for the method POO whether they defined as exclusive(E) or inclusive(I). The comparison is excluded if
a particular field along with its dependent fields are set as E. So, when those particular field/fields are changed and order the PO it will not generate a new output.


For checking those differences, the FM used is BBP_PD_ALL_GET_DIFF. The application sends the flags of the required sets to be compared to find the differences between active and change version for determining a new output. Those sets will then be cross_checked with the fields in the table BBPV_COMP_FIELDS. Based on the values in this table new output determination is done. This is the procedure how a new output is determined for PO change version.


As per the standard system behaviour, a new output will be generated whenever the PO is changed & reordered. By default, the following three fields of structure BBP_PDS_ITEMS are set as 'E' in table BBPC_COMP_FILEDS. That means, when any of these fields are only changed in & reordered the PO, a new output will not be generated. But for the rest of all changes in PO, a new output will be generated.


BBPD_COMP_FIELDS:
POO            BBP_PDS_ITEM    BE_OBJECT_ID     E
POO            BBP_PDS_ITEM    BE_OBJECT_TYPE   E
POO            BBP_PDS_ITEM    BE_OBJ_ITEM      E


If you define any field in this table BBPV_COMP_FIELDS as E that has no dependencies with any other field from other structures and if you change that field which is set as E and reorder the PO then NO new output will be generated.

Example: if you define PO Header description which is set a E in table BBPV_COMF_FIELDS, like this  ==> POO Description BBP_PDS_HEADER E as description does not have any dependencies with any other field and if you change description only in PO and reorder the PO. For this
change no new output is generated !!

However, if you change field which has dependencies and those dependent fields are not defined in this table as E instead only the changed field is defined then output will generated if you change this field in PO and reorder the PO.


Example: Define ==> POO Currency BBP_PDS_HEADER E in table BBPV_COMP_FIELDS.
Change currency and reorder the PO. An output will be generated for this change although Currency is defined as E. This is because, for currency other dependent fields of BBP_PDS_PRC and BBP_PDS_ITEM structures will also be changed dynamically at run time.

As to "Price", this field is an exception to this input, you CANNOT prevent the output to be generated again when changing it. "Price" plays a main role in PO. Obviously when you change price in PO, this change has to be informed to the vendor. So in that point of view it is must to generate new output so that the changes can be intimated to the vendor. Due to this reason, output still gets triggered even you have maintained it in this table.

I hope this could help you understand the logic.

Regards,
Wendy

former_member184741
Active Contributor
0 Kudos

Hi Wendy,

Thank you so much  for the answer.

Is it possible for you to point me to the exact code where the table BBPC_COMP_FILEDS entries are taken into consideration when determining the fields for output trigger. That would help to debug this and understand it more clearly.

Thanks,

sankar.

former_member184741
Active Contributor
0 Kudos

Hi,

I have found the place. I will update the thread with the details later.

former_member184741
Active Contributor
0 Kudos

HI,

I have now put all my findings in a blog

Answers (0)