cancel
Showing results for 
Search instead for 
Did you mean: 

One Supplier, One SC, Two Contracts, Two POs, Wanted One PO

former_member184214
Contributor
0 Kudos

Hello all,

in classic scenario, SRM 4.0, R/3 4.7.

User is creating one Shopping Cart from catalog which contains items from one supplier. Company is having two contracts with supplier, thus considered as two sources of supply in the backend. (Contracts are only in the backend, not in SRM).

Because of that EBP is creating two Purchase Orders in the backed where we want to have only one PO which will count only for the supplier, and not consider if supplier has several contracts.

Is that possible?

TIA

Gordan

Accepted Solutions (0)

Answers (1)

Answers (1)

yann_bouillut
Active Contributor
0 Kudos

Hi Gordan,

You can modify the standard code or try (not done myself before) to use the badi_group_po_badi

Please refer to the standard code :

METHOD split_backend_po .

INCLUDE bbp_pd_con_cl.

DATA: lt_object_split TYPE bbpt_bs_object_be_split,

ls_object_split LIKE LINE OF lt_object_split,

lt_object_group TYPE bbpt_bs_object_be_split,

lt_object_pack TYPE bbpt_bs_object_pack,

ls_object_pack LIKE LINE OF et_object_pack,

lt_item LIKE ls_object_pack-items,

ls_item LIKE LINE OF lt_item.

FIELD-SYMBOLS: <object_split> LIKE LINE OF lt_object_split,

<object_pack> LIKE LINE OF et_object_pack.

*=======================================================================

  • map splitting criteria fields

split_po_be_map_criteria(

EXPORTING is_objtype_pack = is_objtype_pack

IMPORTING et_object_split = lt_object_split ).

*=======================================================================

  • sort object list for PO grouping

SORT lt_object_split BY fixed_vend

proc_org_ot

proc_org_id

proc_group_ot

proc_group_id

agreement

be_doc_type

be_co_code

vper_end

vper_start

plant_country

number_int.

*=======================================================================

LOOP AT lt_object_split ASSIGNING <object_split>.

IF lt_object_group IS NOT INITIAL.

IF ls_object_split-fixed_vend <> <object_split>-fixed_vend OR

ls_object_split-proc_org_ot <> <object_split>-proc_org_ot OR

ls_object_split-proc_org_id <> <object_split>-proc_org_id OR

ls_object_split-proc_group_ot <> <object_split>-proc_group_ot OR

ls_object_split-proc_group_id <> <object_split>-proc_group_id OR

ls_object_split-agreement <> <object_split>-agreement OR

ls_object_split-be_doc_type <> <object_split>-be_doc_type OR

ls_object_split-be_co_code <> <object_split>-be_co_code OR

ls_object_split-plant_country <> <object_split>-plant_country OR

( ( <object_split>-vper_end IS NOT INITIAL OR

ls_object_split-vper_end IS NOT INITIAL ) AND

( ls_object_split-vper_start <> <object_split>-vper_start OR

ls_object_split-vper_end <> <object_split>-vper_end ) ).

  • call BADI (customer can split PO)

badi_group_po_be(

IMPORTING et_object_pack = lt_object_pack

CHANGING ct_object_split = lt_object_group ).

APPEND LINES OF lt_object_pack TO et_object_pack.

REFRESH lt_object_group.

ENDIF.

ENDIF.

APPEND <object_split> TO lt_object_group.

  • save current line for next round

ls_object_split = <object_split>.

ENDLOOP.

IF lt_object_group IS NOT INITIAL.

  • call BADI (customer can split PO)

badi_group_po_be(

IMPORTING et_object_pack = lt_object_pack

CHANGING ct_object_split = lt_object_group ).

APPEND LINES OF lt_object_pack TO et_object_pack.

ENDIF.

LOOP AT et_object_pack ASSIGNING <object_pack>.

  • get next PO ID

<object_pack>-pack_logsys = iv_logsys.

<object_pack>-pack_objtype = c_b_po.

get_next_foll_object_id(

EXPORTING is_object = <object_pack>

IMPORTING ev_object_id = <object_pack>-pack_object_id ).

Kind regards,

Yann