cancel
Showing results for 
Search instead for 
Did you mean: 

Can we change Goods Recipient after shopping cart is ordered

Former Member
0 Kudos

Hi Experts,

Please advise if we can change Goods Recipient after shopping cart is ordered. Our issue is if Goods Recipient is on leave someone else wants to do goods reciept from SRM side and this user is not having central purchaser role.

Just curious if there is any report/program which can change requestor of the shopping cart.

Also in transaction BBPSC02 if i am giving different Goods Recipient, new Goods Recipient can not confirm the goods, it's creator of the shopping cart who is able to confirm. As i understand if you change Goods Recipient in BBPSC02, he should be able to confirm the goods.

Please advise.

Regards,

Kamal

Accepted Solutions (0)

Answers (2)

Answers (2)

dean_hinson2
Active Contributor
0 Kudos

Have you tried to see if substitution would work? However, I believe the substitute needs to have the central purchasing authority as well. It is just an idea that is not development based and might resolve your current issue and future ones as well.

Just a thought,

Regards, Dean.

Former Member
0 Kudos

Hi

You can create a custom program for updating the Requestor, goods Receipient and central person

Usally this is useful in cases where users have open Purchase Orders and they are deactivated on reason of leave etc. and the substitute has to perform the good receipts.

In such cases you can change the good receipent to any other person.

Following is the sample program which can give you a breif idea -

FORM get_po_by_partner TABLES et_items STRUCTURE gs_items_partner

USING iv_partner_fct TYPE crmt_partner_fct.

DATA ls_bbp_pdview_list TYPE bbp_pdview_list.

  • CHECK ( s_po[] IS INITIAL OR

  • ( s_sc[] IS INITIAL AND p_sc EQ gc_yes ) ) OR

  • gt_items_c[] IS NOT INITIAL.

  • Get document GUIDs for partner selection

IF gt_guids[] IS INITIAL.

IF s_po[] IS NOT INITIAL OR s_date[] IS NOT INITIAL.

SELECT h~guid i~guid

INTO TABLE gt_guids

FROM bbp_pdview_list AS h

LEFT JOIN crmd_orderadm_i AS i ON i~header EQ h~guid

WHERE h~doc_closed EQ gc_no

AND h~object_id IN s_po

AND h~posting_date IN s_date

AND h~object_type EQ c_po.

ENDIF.

IF p_sc EQ gc_yes AND

( s_sc[] IS NOT INITIAL OR s_date[] IS NOT INITIAL ).

SELECT h~guid i~guid

APPENDING TABLE gt_guids

FROM bbp_pdview_list AS h

LEFT JOIN crmd_orderadm_i AS i ON i~header EQ h~guid

WHERE h~doc_closed EQ gc_no

AND h~object_id IN s_sc

AND h~posting_date IN s_date

AND h~object_type EQ c_shop.

ENDIF.

ENDIF.

REFRESH et_items.

  • SELECT * FROM bbp_pdview_bup

  • INTO CORRESPONDING FIELDS OF TABLE et_items

  • FOR ALL ENTRIES IN lt_guids

  • WHERE ( ( guid_hi EQ lt_guids-h_guid

  • AND objtype_hi EQ '05' )

  • OR ( guid_hi EQ lt_guids-i_guid

  • AND objtype_hi EQ '06' ) )

  • AND partner_fct EQ iv_partner_fct

  • AND partner_no EQ gv_partner_s.

SELECT * FROM bbp_pdview_bup

INTO CORRESPONDING FIELDS OF TABLE et_items

WHERE partner_fct EQ iv_partner_fct

AND partner_no EQ gv_partner_s.

IF gt_guids[] IS NOT INITIAL.

LOOP AT et_items.

CASE et_items-objtype_hi.

WHEN '05'.

READ TABLE gt_guids WITH KEY h_guid = et_items-guid_hi.

CHECK sy-subrc NE 0.

DELETE et_items.

WHEN '06'.

READ TABLE gt_guids WITH KEY i_guid = et_items-guid_hi.

CHECK sy-subrc NE 0.

DELETE et_items.

ENDCASE.

ENDLOOP.

ENDIF.

LOOP AT et_items.

CASE et_items-objtype_hi.

  • Check partner is linked to a header

WHEN '05'.

SELECT SINGLE * FROM bbp_pdview_list INTO ls_bbp_pdview_list

WHERE guid EQ et_items-guid_hi

AND doc_closed EQ gc_no.

IF sy-subrc EQ 0.

CASE ls_bbp_pdview_list-object_type.

WHEN c_po.

IF ls_bbp_pdview_list-object_id NOT IN s_po OR

ls_bbp_pdview_list-posting_date NOT IN s_date.

DELETE et_items.

CONTINUE.

ENDIF.

WHEN c_shop.

IF ls_bbp_pdview_list-object_id NOT IN s_sc OR

ls_bbp_pdview_list-posting_date NOT IN s_date OR

p_sc EQ gc_no.

DELETE et_items.

CONTINUE.

ENDIF.

WHEN OTHERS.

DELETE et_items.

CONTINUE.

ENDCASE.

et_items-object_id = ls_bbp_pdview_list-object_id.

et_items-version_type = ls_bbp_pdview_list-version_type.

et_items-version_no = ls_bbp_pdview_list-version_no.

et_items-process_type = ls_bbp_pdview_list-process_type.

et_items-posting_date = ls_bbp_pdview_list-posting_date.

et_items-description = ls_bbp_pdview_list-description.

  • et_items-created_by = ls_BBP_PDVIEW_LIST-created_by.

  • et_items-changed_by = ls_BBP_PDVIEW_LIST-changed_by.

et_items-number_int = gc_header.

MODIFY et_items.

ELSE.

DELETE et_items.

ENDIF.

  • Check partner is linked to an item

WHEN '06'.

SELECT SINGLE hguid hversion_type hversion_no hobject_id

hprocess_type hposting_date h~description

hcreated_by hchanged_by h~object_type

iguid icreated_by i~changed_by

idescription inumber_int

INTO gs_items_c

FROM bbp_pdview_list AS h

JOIN crmd_orderadm_i AS i ON iheader EQ hguid

WHERE h~doc_closed EQ gc_no

AND i~guid EQ et_items-guid_hi.

IF sy-subrc EQ 0.

CASE gs_items_c-object_type.

WHEN c_po.

IF gs_items_c-object_id NOT IN s_po OR

gs_items_c-posting_date NOT IN s_date.

DELETE et_items.

CONTINUE.

ENDIF.

WHEN c_shop.

IF gs_items_c-object_id NOT IN s_sc OR

gs_items_c-posting_date NOT IN s_date OR

p_sc EQ gc_no.

DELETE et_items.

CONTINUE.

ENDIF.

WHEN OTHERS.

DELETE et_items.

CONTINUE.

ENDCASE.

et_items-object_id = gs_items_c-object_id.

et_items-version_type = gs_items_c-version_type.

et_items-version_no = gs_items_c-version_no.

et_items-process_type = gs_items_c-process_type.

et_items-posting_date = gs_items_c-posting_date.

et_items-description = gs_items_c-i_description.

  • et_items-created_by = gs_items_c-i_created_by.

  • et_items-changed_by = gs_items_c-i_changed_by.

et_items-number_int = gs_items_c-number_int.

MODIFY et_items.

ELSE.

DELETE et_items.

ENDIF.

ENDCASE.

ENDLOOP.

ENDFORM. " get_po_by_partner

&----


*& Form get_user_partner

&----


  • text

----


  • -->P_P_USER_S text

  • <--P_GV_PARTNER_S text

----


FORM get_user_partner USING user TYPE usr02-bname

CHANGING partner TYPE crmt_partner_no.

DATA lv_bu_partner_guid TYPE bu_partner_guid.

CALL FUNCTION 'BP_CENTRALPERSON_GET'

EXPORTING

iv_username = user

IMPORTING

ev_bu_partner_guid = lv_bu_partner_guid

EXCEPTIONS

no_central_person = 1

no_business_partner = 2

no_id = 3

OTHERS = 4.

IF sy-subrc EQ 0.

partner = lv_bu_partner_guid.

ELSE.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM. " get_user_partner

&----


*& Form get_partner_address

&----


  • text

----


  • -->P_GV_PARTNER_T text

----


*FORM get_partner_address USING partner TYPE crmt_partner_no.

*

  • DATA ls_address TYPE bapiaddr3.

*

  • CALL FUNCTION 'BBP_PARTNER_DETERMINE_ADDRESS'

  • EXPORTING

    • IV_PARTNER_ID =

  • iv_partner_no = partner

  • iv_partner_fct = '00000016'

  • IMPORTING

  • es_address = ls_address

    • EV_PARTNER_ID =

    • TABLES

    • ET_MESSAGES =

  • .

*

  • IF ls_address-pers_no IS INITIAL OR ls_address-addr_no IS INITIAL.

  • MESSAGE e040(bbp_bupa) WITH p_user_t.

*

  • ELSE.

  • gv_addr_np = ls_address-pers_no.

  • gv_addr_nr = ls_address-addr_no.

  • ENDIF.

*

*ENDFORM. " get_partner_address

&----


*& Form check_user_type

&----


  • text

----


  • -->P_P_USER_S text

----


FORM check_user_type USING user TYPE usr02-bname.

DATA lv_user_type TYPE bbuwaplist-selection.

CALL FUNCTION 'BBPU_GET_USER_TYPE'

EXPORTING

username = user

IMPORTING

user_type = lv_user_type.

IF lv_user_type IS NOT INITIAL.

MESSAGE e060(bbpu_messages) WITH user.

ENDIF.

ENDFORM. " check_user_type

&----


*& Form fill_list

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM fill_list .

LOOP AT gt_items_c.

CLEAR gt_outtab.

READ TABLE gt_outtab WITH KEY guid = gt_items_c-h_guid

number_int = gc_header

TRANSPORTING NO FIELDS.

IF sy-subrc NE 0 AND

( gt_items_c-h_created_by EQ p_user_s OR

gt_items_c-h_changed_by EQ p_user_s OR

gt_items_c-h_ychanged_by EQ p_user_s ).

MOVE-CORRESPONDING gt_items_c TO gt_outtab.

gt_outtab-guid = gt_items_c-h_guid.

gt_outtab-number_int = gc_header.

gt_outtab-description = gt_items_c-h_description.

gt_outtab-created_by = gt_items_c-h_created_by.

gt_outtab-changed_by = gt_items_c-h_changed_by.

gt_outtab-ychanged_by = gt_items_c-h_ychanged_by.

APPEND gt_outtab.

ENDIF.

CLEAR gt_outtab.

IF gt_items_c-i_created_by EQ p_user_s OR

gt_items_c-i_changed_by EQ p_user_s.

MOVE-CORRESPONDING gt_items_c TO gt_outtab.

gt_outtab-guid = gt_items_c-i_guid.

gt_outtab-description = gt_items_c-i_description.

gt_outtab-created_by = gt_items_c-i_created_by.

gt_outtab-changed_by = gt_items_c-i_changed_by.

APPEND gt_outtab.

ENDIF.

ENDLOOP.

LOOP AT gt_items_rq.

CLEAR gt_outtab.

  • READ TABLE gt_outtab WITH KEY object_id = gt_items_rq-object_id

  • version_type = gt_items_rq-version_type

  • version_no = gt_items_rq-version_no

  • process_type = gt_items_rq-process_type

  • posting_date = gt_items_rq-posting_date

  • number_int = gt_items_rq-number_int.

READ TABLE gt_outtab WITH KEY guid = gt_items_rq-guid_hi.

gt_outtab-requester = p_user_s.

gt_outtab-guid = gt_items_rq-guid_hi.

gt_outtab-req_guid = gt_items_rq-partner_guid.

  • gt_outtab-req_no = gt_items_rq-partner_no.

IF sy-subrc EQ 0.

MODIFY gt_outtab INDEX sy-tabix.

ELSE.

MOVE-CORRESPONDING gt_items_rq TO gt_outtab.

APPEND gt_outtab.

ENDIF.

ENDLOOP.

LOOP AT gt_items_rc.

CLEAR gt_outtab.

  • READ TABLE gt_outtab WITH KEY object_id = gt_items_rc-object_id

  • version_type = gt_items_rc-version_type

  • version_no = gt_items_rc-version_no

  • process_type = gt_items_rc-process_type

  • posting_date = gt_items_rc-posting_date

  • number_int = gt_items_rc-number_int.

READ TABLE gt_outtab WITH KEY guid = gt_items_rc-guid_hi.

gt_outtab-recipient = p_user_s.

gt_outtab-guid = gt_items_rc-guid_hi.

gt_outtab-rec_guid = gt_items_rc-partner_guid.

  • gt_outtab-rec_no = gt_items_rq-partner_no.

IF sy-subrc EQ 0.

MODIFY gt_outtab INDEX sy-tabix.

ELSE.

MOVE-CORRESPONDING gt_items_rc TO gt_outtab.

APPEND gt_outtab.

ENDIF.

ENDLOOP.

ENDFORM. " fill_list

&----


*& Form fill_fieldcat

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM fill_fieldcat .

DATA ls_fieldcat TYPE slis_fieldcat_alv.

DATA ls_dd04v TYPE dd04v.

  • CLEAR ls_fieldcat.

  • ls_fieldcat-col_pos = 1.

  • ls_fieldcat-seltext_l = 'Sel'.

  • ls_fieldcat-fieldname = 'CK'.

  • ls_fieldcat-ref_tabname = 'TAB'.

  • ls_fieldcat-checkbox = 'X'.

  • ls_fieldcat-input = 'X'.

  • ls_fieldcat-edit = 'X'.

  • APPEND ls_fieldcat TO gt_fieldcat.

  • ls_fieldcat-fieldname = 'GUID'.

    • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

  • ls_fieldcat-rollname = 'CRMT_OBJECT_GUID'.

  • ls_fieldcat-key = gc_yes.

  • APPEND ls_fieldcat TO gt_fieldcat.

  • CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'OBJECT_ID'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'DOC_NO'.

ls_fieldcat-key = gc_yes.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'VERSION_NO'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'BBP_VERSION'.

ls_fieldcat-key = gc_yes.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'VERSION_TYPE'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'BBP_VERSION_TYPE'.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'PROCESS_TYPE'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'CRMT_PROCESS_TYPE'.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'POSTING_DATE'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'CRMT_POSTING_DATE'.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'NUMBER_INT'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'CRMT_ITEM_NO'.

ls_fieldcat-no_zero = gc_yes.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'DESCRIPTION'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'CRMT_PROCESS_DESCRIPTION'.

ls_fieldcat-ddictxt = 'M'.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'CREATED_BY'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'CRMT_CREATED_BY'.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'CHANGED_BY'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'CRMT_CHANGED_BY'.

APPEND ls_fieldcat TO gt_fieldcat.

CALL FUNCTION 'DDIF_DTEL_GET'

EXPORTING

name = 'CRMT_CHANGED_BY'

langu = sy-langu

IMPORTING

dd04v_wa = ls_dd04v

EXCEPTIONS

illegal_input = 1

OTHERS = 2.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'YCHANGED_BY'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'CRMT_CHANGED_BY'.

  • ls_fieldcat-seltext_l = 'Changed by (WF)'.

CONCATENATE ls_dd04v-reptext '(WF)' INTO ls_fieldcat-seltext_l

SEPARATED BY space.

  • ls_fieldcat-seltext_m = 'Changed by (WF)'.

CONCATENATE ls_dd04v-reptext '(WF)' INTO ls_fieldcat-seltext_m

SEPARATED BY space.

  • ls_fieldcat-seltext_s = 'Changed by (WF)'.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'REQUESTER'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'REQ_NAME'.

APPEND ls_fieldcat TO gt_fieldcat.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'RECIPIENT'.

  • ls_fieldcat-ref_tabname = 'GT_OUTTAB'.

ls_fieldcat-rollname = 'BBPRECNAME'.

APPEND ls_fieldcat TO gt_fieldcat.

ENDFORM. " fill_fieldcat

&----


*& Form display_list

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_list .

gs_layout-detail_popup = gc_yes.

gs_layout-colwidth_optimize = gc_yes.

gs_layout-box_fieldname = 'SEL'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

i_callback_program = sy-repid

  • I_CALLBACK_PF_STATUS_SET = ' '

i_callback_user_command = 'USER_COMMAND'

  • I_CALLBACK_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

  • I_STRUCTURE_NAME =

  • I_BACKGROUND_ID = ' '

  • I_GRID_TITLE =

  • I_GRID_SETTINGS =

is_layout = gs_layout

it_fieldcat = gt_fieldcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

it_sort = gt_sort

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

it_events = gt_events

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_HTML_HEIGHT_TOP = 0

  • I_HTML_HEIGHT_END = 0

  • IT_ALV_GRAPHICS =

  • IT_HYPERLINK =

  • IT_ADD_FIELDCAT =

  • IT_EXCEPT_QINFO =

  • IR_SALV_FULLSCREEN_ADAPTER =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab = gt_outtab

EXCEPTIONS

program_error = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM. " display_list

&----


*& Form sort_build

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM sort_build .

DATA: ls_sort TYPE LINE OF slis_t_sortinfo_alv.

ls_sort-fieldname = 'PROCESS_TYPE'.

ls_sort-spos = 1.

ls_sort-down = gc_yes.

APPEND ls_sort TO gt_sort.

CLEAR ls_sort.

ls_sort-fieldname = 'OBJECT_ID'.

ls_sort-spos = 2.

ls_sort-up = gc_yes.

APPEND ls_sort TO gt_sort.

CLEAR ls_sort.

ls_sort-fieldname = 'VERSION_NO'.

ls_sort-spos = 3.

APPEND ls_sort TO gt_sort.

CLEAR ls_sort.

ls_sort-fieldname = 'VERSION_TYPE'.

ls_sort-spos = 3.

ls_sort-down = gc_yes.

APPEND ls_sort TO gt_sort.

CLEAR ls_sort.

ls_sort-fieldname = 'NUMBER_INT'.

ls_sort-spos = 5.

ls_sort-up = gc_yes.

APPEND ls_sort TO gt_sort.

ENDFORM. " sort_build

&----


*& Form eventtab_build

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM eventtab_build .

DATA: ls_event TYPE slis_alv_event.

MOVE 'PF_STATUS_SET' TO ls_event-name.

MOVE 'STANDARD_FULLSCREEN' TO ls_event-form.

APPEND ls_event TO gt_events.

CLEAR ls_event.

MOVE 'USER_COMMAND' TO ls_event-name.

MOVE 'USER_COMMAND' TO ls_event-form.

APPEND ls_event TO gt_events.

CLEAR ls_event.

ENDFORM. " eventtab_build

&----


*& Form user_command

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM user_command USING rf_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

  • DATA ls_crmd_orderadm_h TYPE crmd_orderadm_h.

  • DATA ls_crmd_orderadm_i TYPE crmd_orderadm_i.

DATA lv_partner_guid TYPE crmt_partner_guid.

DATA ls_crmd_partner TYPE crmd_partner.

  • DATA ls_bbp_pdhsc TYPE bbp_pdhsc.

DATA ls_bbp_pdview_list TYPE bbp_pdview_list.

DATA lv_update TYPE xfeld.

DATA ls_outtab LIKE gt_outtab.

DATA lv_object_type TYPE crmd_orderadm_h-object_type.

  • DATA ls_read_flags TYPE bbps_detail_requested.

  • DATA ls_header TYPE bbp_pds_header.

  • DATA lt_partner TYPE TABLE OF bbp_pds_partner WITH HEADER LINE.

  • DATA ls_partner TYPE bbp_pds_partner.

DATA lv_guid TYPE crmd_orderadm_h-guid.

DATA lt_item TYPE TABLE OF bbp_pds_item WITH HEADER LINE.

  • DATA lt_messages TYPE TABLE OF bbp_pds_messages.

  • DATA ls_header_sc_u TYPE bbp_pds_sc_header_u.

  • DATA ls_header_po_u TYPE bbp_pds_po_header_u.

  • DATA ls_header_po TYPE bbp_pds_po_header_d.

  • DATA lv_changed TYPE xfeld.

CASE rf_ucomm.

WHEN '&UPD'.

REFRESH gt_guids.

                        • Update POs with created by ********************************

LOOP AT gt_outtab WHERE sel EQ gc_yes.

      • Fill PO guids table to update partners

CLEAR gt_guids.

IF ( p_req EQ gc_yes AND

gt_outtab-requester EQ p_user_s ) OR

( p_recip EQ gc_yes AND

gt_outtab-recipient EQ p_user_s ) OR

( p_creat EQ gc_yes AND

( gt_outtab-ychanged_by EQ p_user_s OR

gt_outtab-created_by EQ p_user_s ) ).

IF gt_outtab-number_int EQ gc_header.

gt_guids-h_guid = gt_outtab-guid.

IF p_creat EQ gc_yes AND gt_outtab-created_by EQ p_user_s.

gt_guids-creat_upd = gc_yes.

ENDIF.

APPEND gt_guids.

ELSE.

READ TABLE gt_guids WITH KEY i_guid = gt_outtab-guid.

IF sy-subrc NE 0.

gt_guids-i_guid = gt_outtab-guid.

APPEND gt_guids.

ENDIF.

ENDIF.

ENDIF.

IF gt_outtab-number_int EQ gc_header.

LOOP AT gt_outtab INTO ls_outtab

WHERE sel EQ gc_yes

AND object_id EQ gt_outtab-object_id

AND version_no EQ gt_outtab-version_no

AND version_type EQ gt_outtab-version_type

AND process_type EQ gt_outtab-process_type

AND number_int NE gc_header.

IF ( p_req EQ gc_yes AND

ls_outtab-requester EQ p_user_s ) OR

( p_recip EQ gc_yes AND

ls_outtab-recipient EQ p_user_s ).

gt_guids-i_guid = ls_outtab-guid.

APPEND gt_guids.

ENDIF.

ENDLOOP.

ENDIF.

IF p_creat EQ gc_yes.

CASE gt_outtab-number_int.

WHEN gc_header.

  • SELECT SINGLE * FROM crmd_orderadm_h

  • INTO ls_crmd_orderadm_h

  • WHERE guid EQ gt_outtab-guid.

  • IF sy-subrc EQ 0.

  • IF ls_crmd_orderadm_h-created_by EQ p_user_s.

IF gt_outtab-created_by EQ p_user_s.

  • ls_crmd_orderadm_h-created_by = p_user_t.

    • UPDATE crmd_orderadm_h FROM ls_crmd_orderadm_h.

UPDATE crmd_orderadm_h SET created_by = p_user_t

WHERE guid EQ gt_outtab-guid.

IF sy-subrc EQ 0.

gt_outtab-created_by = p_user_t.

lv_update = gc_yes.

ENDIF.

ENDIF.

  • IF ls_crmd_orderadm_h-changed_by EQ p_user_s.

IF gt_outtab-changed_by EQ p_user_s.

  • ls_crmd_orderadm_h-changed_by = p_user_t.

    • UPDATE crmd_orderadm_h FROM ls_crmd_orderadm_h.

UPDATE crmd_orderadm_h SET changed_by = p_user_t

WHERE guid EQ gt_outtab-guid.

IF sy-subrc EQ 0.

gt_outtab-changed_by = p_user_t.

lv_update = gc_yes.

ENDIF.

ENDIF.

  • ENDIF.

    • SELECT SINGLE * FROM bbp_pdhsc

    • INTO ls_bbp_pdhsc

    • WHERE guid EQ gt_outtab-guid.

    • IF sy-subrc EQ 0.

    • IF ls_bbp_pdhsc-ychanged_by EQ p_user_s.

  • IF gt_outtab-ychanged_by EQ p_user_s.

    • ls_bbp_pdhsc-ychanged_by = p_user_t.

      • UPDATE bbp_pdhsc FROM ls_bbp_pdhsc.

  • UPDATE bbp_pdhsc SET ychanged_by = p_user_t

  • WHERE guid EQ gt_outtab-guid.

  • IF sy-subrc EQ 0.

  • gt_outtab-ychanged_by = p_user_t.

  • lv_update = gc_yes.

  • ENDIF.

  • ENDIF.

    • ENDIF.

WHEN OTHERS.

  • SELECT SINGLE * FROM crmd_orderadm_i

  • INTO ls_crmd_orderadm_i

  • WHERE guid EQ gt_outtab-guid.

  • IF sy-subrc EQ 0.

  • IF ls_crmd_orderadm_i-created_by EQ p_user_s.

IF gt_outtab-created_by EQ p_user_s.

  • ls_crmd_orderadm_i-created_by = p_user_t.

  • UPDATE crmd_orderadm_i FROM ls_crmd_orderadm_i.

UPDATE crmd_orderadm_i SET created_by = p_user_t

WHERE guid EQ gt_outtab-guid.

IF sy-subrc EQ 0.

gt_outtab-created_by = p_user_t.

lv_update = gc_yes.

ENDIF.

ENDIF.

  • IF ls_crmd_orderadm_i-changed_by EQ p_user_s.

IF gt_outtab-changed_by EQ p_user_s.

  • ls_crmd_orderadm_i-changed_by = p_user_t.

    • UPDATE crmd_orderadm_i FROM ls_crmd_orderadm_i.

UPDATE crmd_orderadm_i SET changed_by = p_user_t

WHERE guid EQ gt_outtab-guid.

IF sy-subrc EQ 0.

gt_outtab-changed_by = p_user_t.

lv_update = gc_yes.

ENDIF.

ENDIF.

  • ENDIF.

ENDCASE.

ENDIF.

  • IF p_req EQ gc_yes AND gt_outtab-requester EQ p_user_s.

    • SELECT SINGLE partner_guid FROM bbp_pdview_bup

    • INTO lv_partner_guid

    • WHERE guid_hi EQ gt_outtab-guid

    • AND partner_fct EQ '00000016'

    • AND partner_no EQ gv_partner_s

*.

*

    • IF sy-subrc EQ 0.

    • SELECT SINGLE * FROM crmd_partner

    • INTO ls_crmd_partner

    • WHERE partner_guid EQ lv_partner_guid.

    • IF sy-subrc EQ 0.

    • IF gt_outtab-req_no EQ gv_partner_s.

    • ls_crmd_partner-partner_no = gv_partner_t.

    • ls_crmd_partner-addr_nr = gv_addr_nr.

    • ls_crmd_partner-addr_np = gv_addr_np.

      • UPDATE crmd_partner FROM ls_crmd_partner.

  • UPDATE crmd_partner SET partner_no EQ gv_partner_t

  • addr_nr EQ gv_addr_nr

  • addr_np EQ gv_addr_np

  • WHERE partner_guid EQ gt_outtab-req_guid.

  • IF sy-subrc EQ 0.

  • gt_outtab-requester = p_user_t.

  • lv_update = gc_yes.

  • ENDIF.

    • ENDIF.

    • ENDIF.

  • ENDIF.

*

  • IF p_recip EQ gc_yes AND gt_outtab-recipient EQ p_user_s.

    • SELECT SINGLE partner_guid FROM bbp_pdview_bup

    • INTO lv_partner_guid

    • WHERE guid_hi EQ gt_outtab-guid

    • AND partner_fct EQ '00000020'

    • AND partner_no EQ gv_partner_s

*.

    • IF sy-subrc EQ 0.

    • SELECT SINGLE * FROM crmd_partner

    • INTO ls_crmd_partner

    • WHERE partner_guid EQ lv_partner_guid.

    • IF sy-subrc EQ 0.

    • IF gt_outtab-rec_no EQ gv_partner_s.

    • ls_crmd_partner-partner_no = gv_partner_t.

    • ls_crmd_partner-addr_nr = gv_addr_nr.

    • ls_crmd_partner-addr_np = gv_addr_np.

      • UPDATE crmd_partner FROM ls_crmd_partner.

  • UPDATE crmd_partner SET partner_no EQ gv_partner_t

  • addr_nr EQ gv_addr_nr

  • addr_np EQ gv_addr_np

  • WHERE partner_guid EQ gt_outtab-rec_guid.

  • IF sy-subrc EQ 0.

  • gt_outtab-recipient = p_user_t.

  • lv_update = gc_yes.

  • ENDIF.

    • ENDIF.

    • ENDIF.

  • ENDIF.

MODIFY gt_outtab.

ENDLOOP.

IF lv_update EQ gc_yes.

rs_selfield-refresh = gc_yes.

COMMIT WORK.

ENDIF.

                • Update POs with requester, goods recipient and ychanged_by ****

      • Update POs with modifications on header

LOOP AT gt_guids WHERE i_guid IS INITIAL.

READ TABLE gt_outtab WITH KEY sel = gc_yes

guid = gt_guids-h_guid.

CHECK sy-subrc EQ 0.

PERFORM update_document USING gt_outtab-guid gc_yes

CHANGING lv_update.

ENDLOOP.

      • Update POs with modifiations on items only

LOOP AT gt_guids WHERE h_guid IS INITIAL

AND del_ind IS INITIAL.

READ TABLE gt_outtab WITH KEY sel = gc_yes

guid = gt_guids-i_guid.

CHECK sy-subrc EQ 0.

CASE gt_outtab-process_type.

WHEN 'SHC'.

lv_object_type = c_shop_item.

WHEN OTHERS.

lv_object_type = c_po_item.

ENDCASE.

CALL FUNCTION 'BBP_PROCDOC_RESET_BUFFER'.

REFRESH lt_item.

CALL FUNCTION 'BBP_PROCDOC_ITEM_GETDETAIL'

EXPORTING

i_guid = gt_outtab-guid

i_object_type = lv_object_type

  • I_ATTACH_WITH_DOC =

  • I_READ_I_FLAGS =

  • I_DISP_CURRENCY =

  • I_DISP_DATE =

  • IV_HEADER_GUID =

  • IMPORTING

  • ET_ATTACH =

  • ET_CONDITIONS =

  • ET_DYN_ATTR =

TABLES

e_item = lt_item

  • E_ACCOUNT =

  • E_PARTNER =

  • E_CONFIRM =

  • E_LONGTEXT =

  • E_LIMIT =

  • E_ORGDATA =

  • E_TAX =

  • E_PRIDOC =

  • E_SDLN =

  • E_ICF =

  • E_TOL =

  • E_WEIGHT =

  • E_DEP =

  • E_ACTVAL =

  • E_ACC_ACTVAL =

  • E_ITM_REL =

  • E_STATUS =

  • E_MESSAGES =

.

READ TABLE lt_item INDEX 1.

CHECK sy-subrc EQ 0.

lv_guid = lt_item-header.

PERFORM update_document USING lv_guid gc_no

CHANGING lv_update.

ENDLOOP.

IF lv_update EQ gc_yes.

rs_selfield-refresh = gc_yes.

ENDIF.

WHEN '&IC1'.

READ TABLE gt_outtab INDEX rs_selfield-tabindex.

SELECT SINGLE * FROM bbp_pdview_list INTO ls_bbp_pdview_list

WHERE version_type EQ gt_outtab-version_type

AND version_no EQ gt_outtab-version_no

AND object_id EQ gt_outtab-object_id

AND process_type EQ gt_outtab-process_type.

CHECK sy-subrc EQ 0.

SUBMIT bbp_pd WITH guid EQ ls_bbp_pdview_list-guid

AND RETURN.

ENDCASE.

ENDFORM. " user_command

&----


*& Form STANDARD_FULLSCREEN

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM standard_fullscreen USING extab TYPE slis_t_extab.

SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING extab.

ENDFORM. " STANDARD_FULLSCREEN

&----


*& Form update_document

&----


  • text

----


  • -->P_GT_OUTTAB_GUID text

  • -->P_LV_IS_HEADER text

----


FORM update_document USING iv_guid TYPE crmt_object_guid

iv_is_header TYPE xfeld

CHANGING ev_update TYPE xfeld.

DATA lv_object_type TYPE crmd_orderadm_h-object_type.

DATA ls_read_flags TYPE bbps_detail_requested.

DATA ls_header TYPE bbp_pds_header.

DATA lt_partner TYPE TABLE OF bbp_pds_partner WITH HEADER LINE.

DATA ls_partner TYPE bbp_pds_partner.

DATA lv_guid TYPE crmd_orderadm_h-guid.

DATA lt_item TYPE TABLE OF bbp_pds_item WITH HEADER LINE.

DATA lt_item_sc TYPE TABLE OF bbp_pds_sc_item_icu WITH HEADER LINE.

DATA lt_item_po TYPE TABLE OF bbp_pds_po_item_icu WITH HEADER LINE.

DATA lt_messages TYPE TABLE OF bbp_pds_messages.

DATA ls_header_sc_u TYPE bbp_pds_sc_header_u.

DATA ls_header_po_u TYPE bbp_pds_po_header_u.

DATA ls_header_po TYPE bbp_pds_po_header_d.

DATA lv_changed TYPE xfeld.

DATA lv_modify TYPE xfeld.

ls_read_flags-partner_tab = gc_yes.

CASE gt_outtab-process_type.

WHEN 'SHC'.

lv_object_type = c_shop.

WHEN OTHERS.

lv_object_type = c_po.

ENDCASE.

CALL FUNCTION 'BBP_PROCDOC_RESET_BUFFER'.

CALL FUNCTION 'BBP_PROCDOC_GETDETAIL'

EXPORTING

i_guid = iv_guid

  • I_OBJECT_ID =

i_object_type = lv_object_type

  • I_REF_DOC_NO =

  • I_PARTNER_NO =

  • I_ATTACH_WITH_DOC = ' '

  • I_WITH_ITEMDATA = 'X'

i_read_flags = ls_read_flags

  • I_READ_TEXT_FLAGS =

i_without_header_totals = gc_yes

  • I_DISP_CURRENCY =

  • I_DISP_DATE =

  • I_READ_FROM_ARCHIVE = ' '

IMPORTING

e_header = ls_header

  • ET_ATTACH =

  • ET_CONDITIONS =

  • ET_DYN_ATTR =

TABLES

e_item = lt_item

  • E_ACCOUNT =

e_partner = lt_partner

  • E_CONFIRM =

  • E_LONGTEXT =

  • E_LIMIT =

  • E_ORGDATA =

  • E_FREIGHT =

  • E_TAX =

  • E_PRIDOC =

  • E_SDLN =

  • E_HCF =

  • E_ICF =

  • E_TOL =

  • E_WEIGHT =

  • E_DEP =

  • E_ACTVAL =

  • E_ACC_ACTVAL =

  • E_VERSION =

  • E_HEADER_REL =

  • E_ITMLIM_REL =

  • E_OVE_REL =

  • E_STATUS =

  • E_MESSAGES =

.

IF iv_is_header EQ gc_yes AND

p_creat EQ gc_yes.

IF ls_header-ychanged_by EQ p_user_s.

ls_header-ychanged_by = p_user_t.

ENDIF.

IF gt_guids-creat_upd EQ gc_yes.

IF ls_header-ypo_updated IS INITIAL.

ls_header-ypo_updated = gc_yes.

ELSE.

CLEAR ls_header-ypo_updated.

ENDIF.

ENDIF.

ENDIF.

LOOP AT lt_partner.

CLEAR: ls_partner, lv_modify.

IF ( ( p_req EQ gc_yes AND

lt_partner-partner_fct EQ '00000016' ) OR

( p_recip EQ gc_yes AND

lt_partner-partner_fct EQ '00000020' ) ) AND

lt_partner-partner_no EQ gv_partner_s.

  • lt_partner-partner_no = gv_partner_t.

  • lt_partner-del_ind = gc_yes.

IF lt_partner-p_guid EQ gt_outtab-guid.

  • MODIFY lt_partner.

  • ADD 1 TO lv_guid.

  • ls_partner-partner_guid = lv_guid.

ls_partner-client = lt_partner-client.

ls_partner-partner_guid = lt_partner-partner_guid.

ls_partner-p_guid = lt_partner-p_guid.

ls_partner-partner_fct = lt_partner-partner_fct.

ls_partner-partner_no = gv_partner_t.

ls_partner-addr_type = lt_partner-addr_type.

ls_partner-addr_origin = lt_partner-addr_origin.

CLEAR lt_partner.

MODIFY lt_partner FROM ls_partner.

lv_modify = gc_yes.

  • APPEND ls_partner TO lt_partner.

ELSE.

IF iv_is_header EQ gc_yes.

READ TABLE gt_guids WITH KEY h_guid = gt_outtab-guid

i_guid = lt_partner-p_guid

TRANSPORTING NO FIELDS.

ELSE.

LOOP AT gt_guids WHERE h_guid IS INITIAL

AND i_guid = lt_partner-p_guid.

gt_guids-del_ind = gc_yes.

MODIFY gt_guids.

EXIT.

ENDLOOP.

ENDIF.

IF sy-subrc EQ 0.

  • MODIFY lt_partner.

  • ADD 1 TO lv_guid.

  • ls_partner-partner_guid = lv_guid.

ls_partner-client = lt_partner-client.

ls_partner-partner_guid = lt_partner-partner_guid.

ls_partner-p_guid = lt_partner-p_guid.

ls_partner-partner_fct = lt_partner-partner_fct.

ls_partner-partner_no = gv_partner_t.

  • ls_partner-addr_type = lt_partner-addr_type.

  • ls_partner-addr_origin = lt_partner-addr_origin.

CLEAR lt_partner.

MODIFY lt_partner FROM ls_partner.

lv_modify = gc_yes.

  • APPEND ls_partner TO lt_partner.

ENDIF.

ENDIF.

IF lv_modify EQ gc_yes.

READ TABLE lt_item WITH KEY guid = ls_partner-p_guid.

IF sy-subrc EQ 0.

CASE lv_object_type.

WHEN c_shop.

READ TABLE lt_item_sc WITH KEY guid = lt_item-guid.

IF sy-subrc NE 0.

CLEAR lt_item_sc.

MOVE-CORRESPONDING lt_item TO lt_item_sc.

APPEND lt_item_sc.

ENDIF.

WHEN c_po.

READ TABLE lt_item_po WITH KEY guid = lt_item-guid.

IF sy-subrc NE 0.

CLEAR lt_item_po.

MOVE-CORRESPONDING lt_item TO lt_item_po.

APPEND lt_item_po.

ENDIF.

ENDCASE.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

CASE lv_object_type.

WHEN c_shop.

MOVE-CORRESPONDING ls_header TO ls_header_sc_u.

CALL FUNCTION 'BBP_PD_SC_UPDATE'

EXPORTING

  • IV_BAPIMODE =

  • I_PARK =

i_header = ls_header_sc_u

  • I_SAVE =

  • IV_REJECT =

  • IV_TESTRUN =

  • IV_MSG_SCENARIO =

  • IT_ATTACH =

iv_with_change_approval = space

IMPORTING

e_changed = lv_changed

TABLES

i_item = lt_item_sc

  • I_ACCOUNT =

i_partner = lt_partner

  • I_CONFIRM =

  • I_LONGTEXT =

  • I_LIMIT =

  • I_ORGDATA =

  • I_TAX =

  • I_PRIDOC =

  • I_HCF =

  • I_ICF =

e_messages = lt_messages

.

CALL FUNCTION 'BBP_PD_SC_SAVE'

EXPORTING

  • IV_WORKITEM_ID =

iv_usertype = 'E'

iv_header_guid = ls_header_sc_u-guid

.

lv_guid = ls_header_sc_u-guid.

WHEN c_po.

MOVE-CORRESPONDING ls_header TO ls_header_po_u.

CLEAR ls_header_po_u-approval_ind.

CALL FUNCTION 'BBP_PD_PO_UPDATE'

EXPORTING

  • I_PARK =

i_header = ls_header_po_u

  • I_SAVE =

  • IV_REJECT =

  • IT_ATTACH =

iv_with_change_approval = space

IMPORTING

e_changed = lv_changed

es_header = ls_header_po

TABLES

i_item = lt_item_po

  • I_ACCOUNT =

i_partner = lt_partner

  • I_CONFIRM =

  • I_LONGTEXT =

  • I_LIMIT =

  • I_ORGDATA =

  • I_TAX =

  • I_PRIDOC =

e_messages = lt_messages

  • I_HCF =

  • I_ICF =

  • I_TOL =

.

  • Set time to "Processing using selection report" to avoid PO

  • being sent automatically (this is the case when PO was previously

  • saved using button "order and send immediately")

CALL FUNCTION 'BBP_OUTPUT_PO_PARAMS_SET'

EXPORTING

iv_guid = ls_header_po-guid

iv_printer = gc_local_printer

iv_medium_type = gc_printer

iv_dispatch = '1'

EXCEPTIONS

no_print_possible = 1

no_mail_possible = 2

no_fax_possible = 3

no_xml_possible = 4

OTHERS = 5.

CALL FUNCTION 'BBP_PD_PO_SAVE'

EXPORTING

  • IV_WORKITEM_ID =

iv_usertype = 'E'

iv_header_guid = ls_header_po-guid

  • IV_CREATE_HIST_VERSION =

.

lv_guid = ls_header_po-guid.

ENDCASE.

CLEAR ls_header.

REFRESH: lt_item, lt_partner.

CALL FUNCTION 'BBP_PROCDOC_GETDETAIL'

EXPORTING

i_guid = lv_guid

  • I_OBJECT_ID =

i_object_type = lv_object_type

  • I_REF_DOC_NO =

  • I_PARTNER_NO =

  • I_ATTACH_WITH_DOC = ' '

  • I_WITH_ITEMDATA = 'X'

i_read_flags = ls_read_flags

  • I_READ_TEXT_FLAGS =

i_without_header_totals = gc_yes

  • I_DISP_CURRENCY =

  • I_DISP_DATE =

  • I_READ_FROM_ARCHIVE = ' '

IMPORTING

e_header = ls_header

  • ET_ATTACH =

  • ET_CONDITIONS =

  • ET_DYN_ATTR =

TABLES

e_item = lt_item

  • E_ACCOUNT =

e_partner = lt_partner

  • E_CONFIRM =

  • E_LONGTEXT =

  • E_LIMIT =

  • E_ORGDATA =

  • E_FREIGHT =

  • E_TAX =

  • E_PRIDOC =

  • E_SDLN =

  • E_HCF =

  • E_ICF =

  • E_TOL =

  • E_WEIGHT =

  • E_DEP =

  • E_ACTVAL =

  • E_ACC_ACTVAL =

  • E_VERSION =

  • E_HEADER_REL =

  • E_ITMLIM_REL =

  • E_OVE_REL =

  • E_STATUS =

  • E_MESSAGES =

.

IF lv_changed EQ gc_yes.

COMMIT WORK.

READ TABLE gt_outtab WITH KEY sel = gc_yes

guid = ls_header-guid.

IF sy-subrc EQ 0.

IF iv_is_header EQ gc_yes AND gt_outtab-ychanged_by EQ p_user_s.

gt_outtab-ychanged_by = ls_header-ychanged_by.

ENDIF.

gt_outtab-changed_by = ls_header-changed_by.

MODIFY gt_outtab INDEX sy-tabix.

ev_update = gc_yes.

ENDIF.

LOOP AT lt_item.

READ TABLE gt_outtab WITH KEY sel = gc_yes

guid = lt_item-guid.

IF sy-subrc = 0.

gt_outtab-changed_by = lt_item-changed_by.

MODIFY gt_outtab INDEX sy-tabix.

ev_update = gc_yes.

ENDIF.

ENDLOOP.

LOOP AT lt_partner WHERE partner_fct EQ '00000016'

AND partner_no = gv_partner_t.

READ TABLE gt_outtab WITH KEY sel = gc_yes

guid = lt_partner-p_guid.

IF sy-subrc EQ 0 AND gt_outtab-requester EQ p_user_s.

gt_outtab-requester = p_user_t.

MODIFY gt_outtab INDEX sy-tabix.

ev_update = gc_yes.

ENDIF.

ENDLOOP.

LOOP AT lt_partner WHERE partner_fct EQ '00000020'

AND partner_no = gv_partner_t.

READ TABLE gt_outtab WITH KEY sel = gc_yes

guid = lt_partner-p_guid.

IF sy-subrc EQ 0 AND gt_outtab-recipient EQ p_user_s.

gt_outtab-recipient = p_user_t.

MODIFY gt_outtab INDEX sy-tabix.

ev_update = gc_yes.

ENDIF.

ENDLOOP.

ENDIF.

ENDFORM. " update_document

Thanks

Nimish Sheth

Former Member
0 Kudos

Hi,

You can change the goods recipient in the SC using the badi "BBP_DOC_CHANGE_BADI".

However for your requirement,you may have to put some valid condition in the BADI code when this change should be carried out.

BR,

Disha.