on 01-13-2009 4:53 AM
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
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.