Hi group!
We're trying to update condition prices in opportunities (create / change / delete) using BAPI_OPPORTUNITY_CHANGEMULTI. However the BAPI is not updating the conditions, neither in creation (condition_create) nor in change (condition_change). Does anyone have a running example on how to use the BAPI for updating condition prices? Please find below our current code (it's just a program that will try to add a new condition price to an existing position of an opportunity).
Thanks!!
&----
*& Report ZTEST_PRIDOC *
*& *
&----
*& *
*& *
&----
REPORT ZTEST_PRIDOC .
Actualizamos las condiciones de precio ya existentes
MAINTAIN-structures
DATA:
gt_orderadm_h TYPE crmt_orderadm_h_comt,
gt_orderadm_i TYPE crmt_orderadm_i_comt,
gt_schedlin_i_com TYPE crmt_schedlin_i_comt,
gt_input_fields TYPE crmt_input_field_tab,
gt_partner TYPE crmt_partner_comt,
gt_orgman TYPE crmt_orgman_comt,
gt_appointment TYPE crmt_appointment_comt,
gt_pricing TYPE crmt_pricing_comt,
gt_sales TYPE crmt_sales_comt,
gt_pridoc TYPE crmt_pridoc_comt,
WORK-structures
gs_orderadm_h TYPE crmt_orderadm_h_com,
gs_schedlin_i_com TYPE crmt_schedlin_i_com,
gs_orderadm_h_wrk TYPE crmt_orderadm_h_wrk,
gs_partner TYPE crmt_partner_com,
temp structures
gt_saved_objects TYPE crmt_return_objects,
gt_obj_guids TYPE crmt_object_guid_tab,
gt_requested_objects TYPE crmt_object_name_tab,
gt_schedlin TYPE crmt_schedlin_wrkt,
gv_log_handle TYPE balloghndl,
gt_pricing_t TYPE crmt_pricing_i_comint,
gt_input_field_names TYPE crmt_input_field_names_tab,
gs_input_field_names TYPE crmt_input_field_names,
wa_input_fields TYPE BAPIBUS20001_INPUT_FIELDS,
t_input_fields TYPE BAPIBUS20001_INPUT_FIELDS occurs 0,
t_condition_change TYPE BAPIBUS20001_CONDITION_CHANGE occurs 0,
wa_condition_change TYPE BAPIBUS20001_CONDITION_CHANGE,
t_condition_create TYPE BAPIBUS20001_CONDITION_CREATE occurs 0,
wa_condition_create TYPE BAPIBUS20001_CONDITION_CREATE,
t_header TYPE BAPIBUS20001_HEADER_UPD occurs 0,
wa_header TYPE BAPIBUS20001_HEADER_UPD,
t_obj_save TYPE BAPIBUS20001_GUID_DIS occurs 0,
wa_obj_save TYPE BAPIBUS20001_GUID_DIS,
t_oportunidad TYPE BAPIBUS20001_OPPORTUNITY occurs 0,
wa_oportunidad TYPE BAPIBUS20001_OPPORTUNITY.
t_pric_cond TYPE PRCT_COND_PRINT_T,
wa_t_PRIC_COND TYPE PRCT_COND_PRINT.
DATA: ls_field_name TYPE CRMT_FIELDNAME.
clear wa_input_fields.
CLEAR ls_field_name.
DATA: lv_pd_handle TYPE PRCT_HANDLE.
CALL FUNCTION 'CRM_PRIDOC_GET_HANDLE_OW'
EXPORTING
IV_HEADER_GUID =
'E6CDBF9A7B3ECE4E9CCD9350E0F06EA9'
IV_NO_CREATION = FALSE
IV_PRIC_PROC =
IMPORTING
EV_PD_HANDLE = lv_pd_handle
EV_PRICING_PROCEDURE =
EV_NEW_PRICING_DOCUMENT =
EV_PRIDOC_GUID =
EXCEPTIONS
ERROR_OCCURRED = 1
HANDLE_DETERMINATION_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*Position
wa_input_fields-ref_handle = lv_pd_handle.
wa_input_fields-ref_guid = 'B07CD76614763840B88425DB8692051C'.
wa_input_fields-ref_kind = 'B'.
wa_input_fields-objectname = 'PRIDOC'.
wa_input_fields-fieldname = 'COND_ADD'.
APPEND wa_input_fields TO t_input_fields.
*ls_field_name = 'COND_RATE'.
*APPEND ls_field_name TO lt_field_name.
*
*ls_field_name = 'COND_P_UNT'.
*APPEND ls_field_name TO lt_field_name.
*
*ls_field_name = 'COND_UOM'.
*APPEND ls_field_name TO lt_field_name.
*
*ls_field_name = 'COND_TYPE'.
*APPEND ls_field_name TO lt_field_name.
*
*APPEND wa_input_fields TO t_input_fields.
*Posicion
*wa_condition_change-REF_GUID = 'B07CD76614763840B88425DB8692051C'.
*wa_condition_change-REF_KIND = 'B'.
*wa_condition_change-cond_st_no = '010'.
*wa_condition_change-COND_COUNT = '001'.
*wa_condition_change-CURRENCY = 'EUR'.
*wa_condition_change-COND_RATE = '105'.
*wa_condition_change-cond_p_unt = '1'.
*wa_condition_change-COND_UOM = 'UN'.
wa_condition_create-REF_GUID = 'B07CD76614763840B88425DB8692051C'.
wa_condition_create-REF_KIND = 'B'.
wa_condition_create-CURRENCY = 'EUR'.
wa_condition_create-COND_RATE = '105'.
wa_condition_create-COND_P_UNT = '1'.
wa_condition_create-COND_UOM = 'UN'.
wa_condition_create-COND_TYPE = 'ZVAI'.
APPEND wa_condition_create TO t_condition_create.
*Header
wa_header-GUID = 'E6CDBF9A7B3ECE4E9CCD9350E0F06EA9'.
APPEND wa_header TO t_header.
wa_oportunidad-REF_GUID = wa_posiciones_modificacion-guid.
*
APPEND wa_oportunidad TO t_oportunidad.
**
CALL FUNCTION 'BAPI_BUSPROCESSND_CHANGEMULTI'
TABLES
HEADER = t_header
*
input_fields = t_input_fields
CONDITION_CHANGE = t_condition_change.
CALL FUNCTION 'BAPI_OPPORTUNITY_CHANGEMULTI'
EXPORTING
TESTRUN =
TABLES
HEADER = t_header
ITEM =
OPPORTUNITY = t_oportunidad
ORGANISATION =
PRICING =
PARTNER =
TEXT =
PRODUCT =
STATUS =
SERVICE_OS =
input_fields = t_input_fields
RETURN =
APPOINTMENT =
SCHEDULELINE =
DOCUMENT_FLOW =
PRICING_ITEM =
CONDITION_CREATE =
CONDITION_CHANGE = t_condition_change
CONDITION_CREATE = t_condition_create
CONDITION_DELETE =
.
wa_obj_save = wa_posiciones_modificacion-guid.
wa_obj_save = 'E6CDBF9A7B3ECE4E9CCD9350E0F06EA9'.
APPEND wa_obj_save to t_obj_save.
DATA: LT_SAVED_OBJECTS TYPE BAPIBUS20001_OBJECT_ID OCCURS 0 WITH HEADER
LINE.
CLEAR LT_SAVED_OBJECTS[].
DATA: RETURN TYPE BAPIRET2 OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'BAPI_BUSPROCESSND_SAVE'
EXPORTING
UPDATE_TASK_LOCAL = FALSE
SAVE_FRAME_LOG = FALSE
IMPORTING
LOG_HANDLE =
TABLES
OBJECTS_TO_SAVE = t_obj_save
SAVED_OBJECTS = LT_SAVED_OBJECTS
RETURN = RETURN.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
RETURN = RETURN.