Hi
I have given a single program which can create or add and modify the mandatory or any pricing conditions in one Upload program. Please go through it patiently you can find the solution for both the cases.
*&---------------------------------------------------------------------*
*& Report ZIROS_OPP_UPLOAD
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ziros_opp_upload.
INCLUDE: crm_log_states_con,
crm_changeable_con,
crm_object_names_con,
crm_object_kinds_con,
crm_object_types_con,
crm_bin_relation_con,
crm_mode_con,
crm_act_switch_con.
DATA: ls_bo TYPE sibflporb,
lt_prop_attr TYPE crmt_cm_t_name_value,
ls_prop_attr LIKE LINE OF lt_prop_attr,
lv_file_name TYPE sstring.
DATA: ls_orderadm_h_com TYPE crmt_orderadm_h_com,
ls_orderadm_h_wrk TYPE crmt_orderadm_h_wrk,
ls_orderadm_i_com TYPE crmt_orderadm_i_com,
ls_orderadm_i_wrk TYPE crmt_orderadm_i_wrk,
ls_item_guid_adm TYPE crmt_intlay_guid_adm,
ls_input_fields TYPE crmt_input_field,
s_fieldname TYPE LINE OF crmt_input_field_names_tab,
lv_guid TYPE crmt_object_guid,
lv_template_type TYPE crmt_template_type,
ls_doc_flow TYPE crmt_doc_flow_com,
ls_schedlin_i TYPE crmt_schedlin_i_com,
ls_schedlin_ext TYPE crmt_schedlin_extd,
ls_doc_link TYPE crmt_doc_flow_extd,
ls_active_switch TYPE crmt_active_switch,
ls_predecessor TYPE crmt_predecessor_guid,
ls_activity_h_com TYPE crmt_activity_h_com.
DATA: lt_header_guid TYPE crmt_object_guid_tab,
lt_orderadm_h_com TYPE crmt_orderadm_h_comt,
lt_orderadm_h_com_all TYPE crmt_orderadm_h_comt,
lt_orderadm_i_com TYPE crmt_orderadm_i_comt,
lt_orderadm_h_wrk TYPE crmt_orderadm_h_wrkt,
lt_orderadm_i_wrk TYPE crmt_orderadm_i_wrkt,
lt_schedlin_i TYPE crmt_schedlin_i_comt,
lt_schedlin_ext TYPE crmt_schedlin_extdt,
lt_item_guid_adm TYPE crmt_intlay_guid_adm_tab,
lt_input_fields TYPE crmt_input_field_tab,
lt_input_field_names TYPE crmt_input_field_names_tab,
t_input_field TYPE crmt_input_field_tab,
s_input_field TYPE crmt_input_field ,
lt_doc_flow TYPE crmt_doc_flow_comt,
lt_active_switch TYPE crmt_active_switch_t,
lt_predecessor TYPE crmt_predecessor_guid_tab,
lt_activity_h_com TYPE crmt_activity_h_comt.
DATA : lt_partner TYPE crmt_partner_comt,
ls_partner LIKE LINE OF lt_partner,
lt_orgman TYPE crmt_orgman_comt,
ls_orgman LIKE LINE OF lt_orgman,
lt_pridoc TYPE crmt_pridoc_comt,
ls_pridoc LIKE LINE OF lt_pridoc,
lt_cond_add TYPE prct_cond_external_input_t,
ls_cond_add LIKE LINE OF lt_cond_add,
lt_cond_change TYPE prct_cond_external_change_t,
ls_cond_change LIKE LINE OF lt_cond_change,
lt_text TYPE crmt_text_comt,
ls_text TYPE crmt_text_com,
lt_line TYPE comt_text_lines_t,
ls_line TYPE LINE OF comt_text_lines_t,
lt_subject TYPE crmt_subject_comt,
ls_subject LIKE LINE OF lt_subject.
DATA: lt_os TYPE TABLE OF crmt_srv_osset_com1,
ls_os TYPE crmt_srv_osset_com1,
ls_ser TYPE crmt_srv_osset_com,
lt_ser TYPE TABLE OF crmt_srv_osset_com,
ls_sub TYPE crmt_srv_subject_com,
lt_sub TYPE TABLE OF crmt_srv_subject_com,
lv_country TYPE land1,
lv_region TYPE regio.
DATA lv_h_index TYPE i.
DATA: BEGIN OF ls_error,
sl_no(006),
description_h(040),
head_guid TYPE guid_16,
lt_msg TYPE rmps_bal_t_msg,
END OF ls_error.
DATA : lt_error LIKE TABLE OF ls_error,
lt_error_all LIKE TABLE OF ls_error.
DATA : lt_objects_to_save TYPE crmt_object_guid_tab,
lr_mess_obj TYPE REF TO cl_crm_message_obj_bt,
lt_messages TYPE crmt_genil_message_tab,
ls_message TYPE crmt_genil_message,
lv_error_state TYPE abap_bool,
lv_error_order TYPE abap_bool,
lv_error_ogr TYPE abap_bool,
lt_saved_objects TYPE crmt_return_objects,
lt_objects_not_saved TYPE crmt_object_guid_tab,
ls_objects_not_saved TYPE crmt_object_guid,
lt_nocheck_before_save TYPE crmt_object_guid_tab,
lv_loio TYPE skwf_io,
lv_phio TYPE skwf_io,
lv_error TYPE skwf_error.
DATA : lv_logical_key(42) TYPE c,
lv_flwp_mgr TYPE bu_partner.
DATA: lv_head_guid TYPE guid_16,
lt_item_read TYPE crmt_orderadm_i_wrkt,
ls_item_read TYPE crmt_orderadm_i_wrk,
lv_handler_read TYPE balloghndl.
DATA: BEGIN OF ls_zkls,
h_guid TYPE crmt_object_guid,
i_guid TYPE crmt_object_guid,
cond_zkls_i(035), "Price List Manual PJ
END OF ls_zkls.
DATA : lt_zkls LIKE STANDARD TABLE OF ls_zkls.
DATA: BEGIN OF ls_order,
sl_no(006),
description_h(040),
sold_party_h(010),
** sales_org(004),
** distr_chan_h(002),
** division_h(002),
sales_man_h(008),
manager_h(010),
itm_number_i(006),
material_type(010),
material_i(018),
target_qty_i(017),
bom_material_i(018),
** cond_zlri_i(035), "Landed Rate
** cond_zmup_i(035), "Item markup
cond_zkls_i(035), "Price List Manual PJ
cond_zw2y_i(035), "Warranty Years
cond_zmkr_i(035), "Marketing Cost
cond_zrsr_i(035), "Risk Reserve
cond_zpjr_i(035), "PMP Cost
cond_zhle_i(035), "Hiring Local Serv.E.
cond_znre_i(035), "Negotiation reserve.
cond_zpin_i(035), "PI Cost
cond_zpmu_i(035), "PI Markup.
cond_ztra_i(035), "Training Cost
cond_ztmu_i(035), "Training Markup
END OF ls_order.
DATA : gt_order LIKE STANDARD TABLE OF ls_order,
gt_i_order LIKE STANDARD TABLE OF ls_order,
ls_h_order LIKE ls_order,
ls_i_order LIKE ls_order.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS:
file TYPE rlgrap-filename OBLIGATORY,
save TYPE flag.
SELECTION-SCREEN END OF BLOCK b1.
*********************At Selection Screen on Value Request****************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR file.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
CHANGING
file_name = file
EXCEPTIONS
mask_too_long = 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.
END-OF-SELECTION.
**********************Start-of-Selection********************************
START-OF-SELECTION.
CALL FUNCTION 'UPLOAD_XLS_FILE_2_ITAB'
EXPORTING
i_filename = file
TABLES
e_itab = gt_order
EXCEPTIONS
file_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
lv_h_index = 1.
gt_i_order = gt_order.
****************Header*****Process Type******************
LOOP AT gt_order INTO ls_h_order.
IF ls_h_order-sl_no = lv_h_index.
CLEAR: lv_head_guid.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_16 = lv_head_guid.
ls_orderadm_h_com-guid = lv_head_guid.
ls_orderadm_h_com-process_type = 'ZIMG'.
ls_orderadm_h_com-description = ls_h_order-description_h.
*ls_orderadm_h_com-handle = 0.
ls_orderadm_h_com-mode = gc_mode-create.
INSERT ls_orderadm_h_com INTO TABLE lt_orderadm_h_com.
CLEAR: s_input_field, s_fieldname.
s_fieldname-fieldname = 'PROCESS_TYPE'.
s_fieldname-changeable = gc_changeable-yes.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_fieldname-fieldname = 'MODE'.
s_fieldname-changeable = gc_changeable-yes.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_fieldname-fieldname = 'DESCRIPTION'.
s_fieldname-changeable = gc_changeable-yes.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_input_field-ref_handle = 0.
s_input_field-ref_guid = lv_head_guid.
s_input_field-ref_kind = 'A'.
s_input_field-objectname = 'ORDERADM_H'.
INSERT s_input_field INTO TABLE t_input_field.
**********************Partner*****************************
* Sold to Party
ls_partner-ref_guid = lv_head_guid.
ls_partner-ref_handle = 0.
ls_partner-ref_kind = 'A'.
ls_partner-ref_partner_handle = 0.
ls_partner-kind_of_entry = 'C'.
ls_partner-partner_fct = '00000014'."Emp Res
ls_partner-partner_no = ls_h_order-sales_man_h.
ls_partner-no_type = 'BP'.
ls_partner-display_type = 'BP'.
INSERT ls_partner INTO TABLE lt_partner.
ls_partner-ref_guid = lv_head_guid.
ls_partner-ref_handle = 0.
ls_partner-ref_kind = 'A'.
ls_partner-ref_partner_handle = 0.
ls_partner-kind_of_entry = 'C'.
ls_partner-partner_fct = '00000021'."Sold to party
ls_partner-partner_no = ls_h_order-sold_party_h.
ls_partner-no_type = 'BP'.
ls_partner-display_type = 'BP'.
INSERT ls_partner INTO TABLE lt_partner.
ls_partner-ref_guid = lv_head_guid.
ls_partner-ref_handle = 0.
ls_partner-ref_kind = 'A'.
ls_partner-ref_partner_handle = 0.
ls_partner-kind_of_entry = 'C'.
ls_partner-partner_fct = 'Z0000011'. "Project Manager
ls_partner-partner_no = ls_h_order-manager_h.
ls_partner-no_type = 'BP'.
ls_partner-display_type = 'BP'.
INSERT ls_partner INTO TABLE lt_partner.
CLEAR: s_input_field, s_fieldname.
s_fieldname-fieldname = 'DISPLAY_TYPE'.
s_fieldname-changeable = gc_changeable-yes.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_fieldname-fieldname = 'KIND_OF_ENTRY'.
s_fieldname-changeable = gc_changeable-yes.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_fieldname-fieldname = 'NO_TYPE'.
s_fieldname-changeable = gc_changeable-yes.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_fieldname-fieldname = 'PARTNER_FCT'.
s_fieldname-changeable = gc_changeable-yes.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_fieldname-fieldname = 'PARTNER_NO'.
s_fieldname-changeable = gc_changeable-yes.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_input_field-ref_handle = 0.
s_input_field-ref_guid = lv_head_guid.
s_input_field-ref_kind = 'A'.
s_input_field-objectname = 'PARTNER'.
s_input_field-logical_key = '0000'.
INSERT s_input_field INTO TABLE t_input_field.
**********************ORGMAN*****************************
ls_orgman-ref_handle = 0.
ls_orgman-ref_guid = lv_head_guid.
ls_orgman-ref_kind = 'A'.
ls_orgman-dis_channel = '60'. "ls_h_order-distr_chan_h. "'60'.
ls_orgman-division = '00'.
ls_orgman-service_org_ori = 'A'.
ls_orgman-service_orgr_ori = 'A'.
ls_orgman-sales_orgr_ori = 'C'.
ls_orgman-sales_org = 'O 50001476'.
ls_orgman-sales_office = 'O 50001397'.
ls_orgman-sales_group = 'O 50000025'.
ls_orgman-sales_org_resp = 'O 50000025'.
SELECT SINGLE country region INTO (lv_country , lv_region) FROM adrc
INNER JOIN but020 ON adrc~addrnumber = but020~addrnumber
WHERE but020~partner = ls_h_order-sold_party_h.
IF lv_region = '01' OR lv_region = '02' OR lv_region = '03' OR lv_region = '04'.
* lv_orgman_entity->set_property( iv_attr_name = 'SALES_OFFICE_SHORT' iv_value = 'EZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SALES_ORG_RESP_SHORT' iv_value = 'EZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SERVICE_ORG_SHORT' iv_value = 'EZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SERVICE_ORG_RESP_SHORT' iv_value = 'EZ' ).
ls_orgman-service_org_short = 'EZ'.
ls_orgman-service_org_resp_short = 'EZ'.
ELSEIF lv_region = '05' OR lv_region = '06'.
* lv_orgman_entity->set_property( iv_attr_name = 'SALES_OFFICE_SHORT' iv_value = 'CZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SALES_ORG_RESP_SHORT' iv_value = 'CZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SERVICE_ORG_SHORT' iv_value = 'CZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SERVICE_ORG_RESP_SHORT' iv_value = 'CZ' ).
ls_orgman-service_org_short = 'CZ'.
ls_orgman-service_org_resp_short = 'CZ'.
ELSEIF lv_region = '07' OR lv_region = '08' OR lv_region = '09'.
* lv_orgman_entity->set_property( iv_attr_name = 'SALES_OFFICE_SHORT' iv_value = 'WZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SALES_ORG_RESP_SHORT' iv_value = 'WZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SERVICE_ORG_SHORT' iv_value = 'WZ' ).
* lv_orgman_entity->set_property( iv_attr_name = 'SERVICE_ORG_RESP_SHORT' iv_value = 'WZ' ).
ls_orgman-service_org_short = 'WZ'.
ls_orgman-service_org_resp_short = 'WZ'.
ENDIF.
ls_orgman-service_org = '50001397'.
ls_orgman-service_org_resp = '50001397'.
* ls_orgman-service_org_short = 'WZ'.
* ls_orgman-service_org_resp_short = 'WZ'.
ls_orgman-district = 'WZC001'.
ls_orgman-error_flag = 'X'.
ls_orgman-mode = 'A'.
ls_orgman-no_determination = 'X'.
INSERT ls_orgman INTO TABLE lt_orgman.
CLEAR s_input_field.
CLEAR s_fieldname.
s_fieldname-fieldname = 'DISTRICT'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'DIS_CHANNEL'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'DIVISION'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'NO_DETERMINATION'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'SALES_GROUP'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'SALES_OFFICE'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'SALES_ORG'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'SALES_ORGR_ORI'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'SALES_ORG_RESP'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_input_field-ref_handle = 0.
s_input_field-ref_guid = lv_head_guid.
s_input_field-ref_kind = 'A'.
s_input_field-objectname = 'ORGMAN'.
INSERT s_input_field INTO TABLE t_input_field.
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
it_orgman = lt_orgman
it_partner = lt_partner
CHANGING
ct_orderadm_h = lt_orderadm_h_com
ct_input_fields = t_input_field
EXCEPTIONS
OTHERS = 99.
IF sy-subrc <> 0.
* RAISE error_occurred.
ENDIF.
CLEAR : t_input_field.
LOOP AT gt_i_order INTO ls_i_order WHERE sl_no = ls_h_order-sl_no.
*******************ITEM and BOM************************************
DATA: lv_fag_guid TYPE guid_16.
CLEAR: lv_fag_guid.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_16 = lv_fag_guid.
DATA: lv_item_guid TYPE guid_16.
CLEAR: lv_item_guid.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_16 = lv_item_guid.
IF ls_i_order-material_type EQ 'THIRD' OR ls_i_order-material_type EQ 'SERVICE'.
* Update NUMBER_EXT for THIRD and SERVICE Material
DATA : it_header_guid1 TYPE crmt_object_guid_tab.
lv_guid = lv_head_guid.
APPEND lv_guid TO lt_header_guid.
CALL FUNCTION 'CRM_ORDER_READ_OW'
EXPORTING
it_header_guid = lt_header_guid
IMPORTING
et_orderadm_i = lt_item_read
CHANGING
cv_log_handle = lv_handler_read.
READ TABLE lt_item_read INTO ls_item_read WITH KEY ordered_prod = ls_i_order-bom_material_i.
ls_orderadm_i_com-number_ext = ls_item_read-number_int.
CLEAR : lt_item_read, ls_item_read, lt_header_guid, lv_guid.
ENDIF.
ls_orderadm_i_com-guid = lv_item_guid.
ls_orderadm_i_com-header = lv_head_guid.
ls_orderadm_i_com-ordered_prod = ls_i_order-material_i. "'SEIKO8'.
ls_orderadm_i_com-mode = gc_mode-create.
APPEND ls_orderadm_i_com TO lt_orderadm_i_com.
CLEAR s_input_field.
CLEAR s_fieldname.
s_fieldname-fieldname = 'MODE'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
CLEAR s_fieldname.
s_fieldname-fieldname = 'ORDERED_PROD'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
IF ls_orderadm_i_com-number_ext IS NOT INITIAL.
CLEAR s_fieldname.
s_fieldname-fieldname = 'NUMBER_EXT'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
ENDIF.
s_input_field-ref_guid = lv_item_guid.
s_input_field-objectname = 'ORDERADM_I'.
INSERT s_input_field INTO TABLE t_input_field.
********************SCHEDLIN************************************
ls_schedlin_ext-guid = lv_fag_guid.
ls_schedlin_ext-item_guid = lv_item_guid.
ls_schedlin_ext-quantity = '1'.
ls_schedlin_ext-logical_key = lv_fag_guid.
ls_schedlin_ext-mode = 'A'.
APPEND ls_schedlin_ext TO lt_schedlin_ext.
ls_schedlin_i-ref_guid = lv_item_guid.
ls_schedlin_i-schedlines = lt_schedlin_ext.
APPEND ls_schedlin_i TO lt_schedlin_i.
CLEAR s_input_field.
CLEAR s_fieldname.
s_fieldname-fieldname = 'QUANTITY'.
INSERT s_fieldname INTO TABLE s_input_field-field_names.
s_input_field-ref_guid = lv_item_guid.
s_input_field-ref_kind = 'B'.
s_input_field-logical_key = lv_fag_guid.
s_input_field-objectname = 'SCHEDLIN'.
INSERT s_input_field INTO TABLE t_input_field.
********************PRICING*********************************
**************** Create pricing condition ***************
* IF ls_i_order-cond_zlri_i IS NOT INITIAL.
* ls_cond_add-kschl = 'ZLRI'.
* ls_cond_add-waers = '%'.
* ls_cond_add-kbetr = ls_i_order-cond_zlri_i."'3'.
* APPEND ls_cond_add TO lt_cond_add.
* ENDIF.
*
* IF ls_i_order-cond_zmup_i IS NOT INITIAL.
* ls_cond_add-kschl = 'ZMUP'.
* ls_cond_add-waers = '%'.
* ls_cond_add-kbetr = ls_i_order-cond_zmup_i."'3'.
* APPEND ls_cond_add TO lt_cond_add.
* ENDIF.
* IF ls_i_order-cond_zkls_i IS NOT INITIAL.
* ls_zkls-h_guid = lv_head_guid.
* ls_zkls-i_guid = lv_item_guid.
* ls_zkls-cond_zkls_i = ls_i_order-cond_zkls_i.
* APPEND ls_zkls TO lt_zkls.
* ENDIF.
*To Add pricing conditions
IF ls_i_order-cond_zw2y_i IS NOT INITIAL.
ls_cond_add-kschl = 'ZW2Y'.
ls_cond_add-waers = 'SAR'.
ls_cond_add-kbetr = ls_i_order-cond_zw2y_i."'3'.
APPEND ls_cond_add TO lt_cond_add.
ENDIF.
IF ls_i_order-cond_zmkr_i IS NOT INITIAL.
ls_cond_add-kschl = 'ZMKR'.
ls_cond_add-waers = 'SAR'.
ls_cond_add-kbetr = ls_i_order-cond_zmkr_i."'4000'.
APPEND ls_cond_add TO lt_cond_add.
ENDIF.
IF ls_i_order-cond_zrsr_i IS NOT INITIAL.
ls_cond_add-kschl = 'ZRSR'.
ls_cond_add-waers = 'SAR'.
ls_cond_add-kbetr = ls_i_order-cond_zrsr_i. "'50000'.
APPEND ls_cond_add TO lt_cond_add.
ENDIF.
IF ls_i_order-cond_zpjr_i IS NOT INITIAL.
ls_cond_add-kschl = 'ZPJR'.
ls_cond_add-waers = 'SAR'.
ls_cond_add-kbetr = ls_i_order-cond_zpjr_i."'3000'.
APPEND ls_cond_add TO lt_cond_add.
ENDIF.
IF ls_i_order-cond_zhle_i IS NOT INITIAL.
ls_cond_add-kschl = 'ZHLE'.
ls_cond_add-waers = 'SAR'.
ls_cond_add-kbetr = ls_i_order-cond_zhle_i."'3000'.
APPEND ls_cond_add TO lt_cond_add.
ENDIF.
IF ls_i_order-cond_znre_i IS NOT INITIAL.
ls_cond_add-kschl = 'ZNRE'.
ls_cond_add-waers = 'SAR'.
ls_cond_add-kbetr = ls_i_order-cond_znre_i."'3000'.
APPEND ls_cond_add TO lt_cond_add.
ENDIF.
IF ls_i_order-cond_zpin_i IS NOT INITIAL AND ls_i_order-cond_zpmu_i IS NOT INITIAL.
ls_cond_add-kschl = 'ZPIN'.
ls_cond_add-waers = 'SAR'.
ls_cond_add-kbetr = ls_i_order-cond_zpin_i."'3000'.
APPEND ls_cond_add TO lt_cond_add.
ls_cond_add-kschl = 'ZPMU'.
ls_cond_add-waers = '%'.
ls_cond_add-kbetr = ls_i_order-cond_zpmu_i."'3000'.
APPEND ls_cond_add TO lt_cond_add.
ENDIF.
IF ls_i_order-cond_ztra_i IS NOT INITIAL AND ls_i_order-cond_ztmu_i IS NOT INITIAL.
ls_cond_add-kschl = 'ZTRA'.
ls_cond_add-waers = 'SAR'.
ls_cond_add-kbetr = ls_i_order-cond_ztra_i."'3000'.
APPEND ls_cond_add TO lt_cond_add.
ls_cond_add-kschl = 'ZTMU'.
ls_cond_add-waers = '%'.
ls_cond_add-kbetr = ls_i_order-cond_ztmu_i."'3000'.
APPEND ls_cond_add TO lt_cond_add.
ENDIF.
ls_pridoc-ref_guid = lv_item_guid.
ls_pridoc-ref_kind = 'B'.
ls_pridoc-cond_add = lt_cond_add.
APPEND ls_pridoc TO lt_pridoc.
CLEAR s_input_field.
CLEAR s_fieldname.
*s_input_field-ref_handle = 1.
s_input_field-ref_guid = lv_item_guid.
s_input_field-ref_kind = 'B'.
s_input_field-objectname = 'PRIDOC'.
INSERT s_input_field INTO TABLE t_input_field.
* process order maintain
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
it_schedlin_i = lt_schedlin_i
it_pridoc = lt_pridoc
CHANGING
ct_orderadm_i = lt_orderadm_i_com
ct_input_fields = t_input_field
EXCEPTIONS
OTHERS = 99.
IF sy-subrc <> 0.
* RAISE error_occurred.
ENDIF.
*=======================>>>>>>>>>>>>>>>
DATA :
lv_m_item_guid TYPE crmt_object_guid,
lv_m_head_guid TYPE crmt_object_guid,
is_m_pridoc TYPE crmt_pric_cond,
is_m_pric_cond TYPE prct_cond_du,"prct_cond_du_tab,
is_pridoc TYPE crmt_pridoc_com,
lt_m_pridoc TYPE crmt_pridoc_comt,
is_m_pricond_change TYPE prct_cond_external_change,
is_m_input_field TYPE crmt_input_field,
lt_m_input_fields TYPE crmt_input_field_tab,
is_m_input_field_names TYPE crmt_input_field_names.
********************PRICING*********************************
**************** Modify pricing condition (like mandatory condition) ***************
lv_m_item_guid = lv_item_guid.
lv_m_head_guid = lv_head_guid.
CLEAR is_m_pridoc.
CALL FUNCTION 'CRM_PRIDOC_READ_OW'
EXPORTING
iv_header_guid = lv_m_head_guid
* iv_item_guid = lv_m_item_guid
IMPORTING
es_pridoc = is_m_pridoc.
IF sy-subrc EQ 0.
LOOP AT is_m_pridoc-pric_cond INTO is_m_pric_cond.
IF is_m_pric_cond-kschl EQ 'ZKLS'.
is_pridoc-ref_guid = is_m_pric_cond-kposn.
is_pridoc-ref_kind = 'B'.
is_pridoc-pricing_type = 'ZKLS'.
is_m_pricond_change-stunr = is_m_pric_cond-stunr.
is_m_pricond_change-zaehk = is_m_pric_cond-zaehk.
is_m_pricond_change-waers = is_m_pric_cond-waers.
is_m_pricond_change-kbetr = ls_i_order-cond_zkls_i.
is_m_pricond_change-kpein = is_m_pric_cond-kpein.
is_m_pricond_change-kmein = is_m_pric_cond-kmein.
INSERT is_m_pricond_change INTO TABLE is_pridoc-cond_change.
INSERT is_pridoc INTO TABLE lt_m_pridoc.
is_m_input_field-ref_guid = lv_item_guid.
is_m_input_field-ref_kind = 'B'.
is_m_input_field-objectname = 'PRIDOC'.
is_m_input_field_names-fieldname = 'REF_GUID'.
INSERT is_m_input_field_names INTO TABLE is_m_input_field-field_names.
is_m_input_field_names-fieldname = 'REF_KIND'.
INSERT is_m_input_field_names INTO TABLE is_m_input_field-field_names.
is_m_input_field_names-fieldname = 'PRICING_TYPE'.
INSERT is_m_input_field_names INTO TABLE is_m_input_field-field_names.
is_m_input_field_names-fieldname = 'KSCHL'.
INSERT is_m_input_field_names INTO TABLE is_m_input_field-field_names.
is_m_input_field_names-fieldname = 'WAERS'.
INSERT is_m_input_field_names INTO TABLE is_m_input_field-field_names.
is_m_input_field_names-fieldname = 'KBETR'.
INSERT is_m_input_field_names INTO TABLE is_m_input_field-field_names.
is_m_input_field_names-fieldname = 'KPEIN'.
INSERT is_m_input_field_names INTO TABLE is_m_input_field-field_names.
is_m_input_field_names-fieldname = 'KMEIN'.
INSERT is_m_input_field_names INTO TABLE is_m_input_field-field_names.
INSERT is_m_input_field INTO TABLE lt_m_input_fields.
ENDIF.
ENDLOOP.
ENDIF.
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
it_pridoc = lt_m_pridoc
CHANGING
ct_input_fields = lt_m_input_fields
EXCEPTIONS
error_occurred = 1
document_locked = 2
no_change_allowed = 3
no_authority = 4
OTHERS = 5.
CLEAR : is_m_input_field_names,is_m_input_field ,is_pridoc,is_m_pricond_change,lt_m_input_fields,lt_m_pridoc.
*=======================>>>>>>>>>>>>>>>
CLEAR : t_input_field,lt_schedlin_i,lt_pridoc,lt_orderadm_i_com,
ls_schedlin_i,ls_pridoc,ls_orderadm_i_com.
CLEAR : lv_fag_guid,lv_item_guid,lt_cond_add,lt_schedlin_ext,
ls_i_order, ls_schedlin_ext, ls_cond_add.
ENDLOOP.
***********************************************************
*CALL FUNCTION 'CRM_BSP_ACTIVE_SET'.
***************** ERROR LOG *******************************
DATA: lt_log_handle TYPE bal_t_logh.
* Get Log Handle(s)
CALL FUNCTION 'CRM_MESSAGES_GET_LOG_HANDLES'
IMPORTING
et_log_handle = lt_log_handle.
DATA:
lt_exception TYPE crmt_exception_t.
FIELD-SYMBOLS:
<lfs_log_handle> TYPE balloghndl.
* Get Exception(s)
LOOP AT lt_log_handle ASSIGNING <lfs_log_handle>.
CALL FUNCTION 'CRM_MESSAGES_GET_EXCEPTIONS'
EXPORTING
iv_log_handle = <lfs_log_handle>
iv_from_regmsg = abap_true
IMPORTING
et_exception = lt_exception
EXCEPTIONS
parameter_error = 1
not_found = 2
OTHERS = 3.
ENDLOOP.
DATA:
ls_msg TYPE bal_s_msg.
FIELD-SYMBOLS:
<lfs_exception> TYPE crmt_exception.
* Get Exception Message(s)
LOOP AT lt_exception ASSIGNING <lfs_exception>.
CLEAR ls_msg.
CALL FUNCTION 'CRM_MESSAGES_GET_MSG_INFO'
EXPORTING
is_msg_handle = <lfs_exception>-msg_handle
IMPORTING
es_msg = ls_msg
EXCEPTIONS
not_found = 1
wrong_context_structure = 2
data_error = 3
OTHERS = 4.
APPEND ls_msg TO ls_error-lt_msg.
CLEAR : ls_msg.
ENDLOOP.
ls_error-sl_no = ls_h_order-sl_no.
ls_error-description_h = ls_h_order-description_h.
ls_error-head_guid = lv_head_guid.
APPEND ls_error TO lt_error.
lv_h_index = lv_h_index + 1.
APPEND LINES OF lt_orderadm_h_com TO lt_orderadm_h_com_all.
ENDIF.
CLEAR : lv_head_guid, lt_orgman,lt_partner, lt_schedlin_i,lt_pridoc,lt_orderadm_h_com,lt_orderadm_i_com,t_input_field,
ls_i_order, ls_orderadm_i_com, ls_schedlin_ext, ls_cond_add,ls_error.
ENDLOOP.
DATA :ls_saved_objects TYPE crmt_return_objects_struc,
lv_object_id TYPE crmt_object_id,
lv_message LIKE bapiret2-message.
** > Save newly created document
LOOP AT lt_orderadm_h_com_all INTO ls_orderadm_h_com.
INSERT ls_orderadm_h_com-guid INTO TABLE lt_objects_to_save.
ls_saved_objects-guid = ls_orderadm_h_com-guid.
ENDLOOP.
IF save EQ abap_true.
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = lt_objects_to_save
IMPORTING
et_saved_objects = lt_saved_objects
et_objects_not_saved = lt_objects_not_saved
* CHANGING
* ct_nocheck_before_save = lt_nocheck_before_save
EXCEPTIONS
document_not_saved = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
LOOP AT lt_saved_objects INTO ls_saved_objects.
READ TABLE lt_error INTO ls_error WITH KEY head_guid = ls_saved_objects-guid.
WRITE :/ ls_error-sl_no , 'IROS Opportunity:',ls_saved_objects-object_id , ls_error-description_h , 'is Saved'.
LOOP AT ls_error-lt_msg INTO ls_msg.
CALL FUNCTION 'BAPI_MESSAGE_GETDETAIL'
EXPORTING
id = ls_msg-msgid
number = ls_msg-msgno
* LANGUAGE = SY-LANGU
textformat = 'ASC'
* LINKPATTERN =
message_v1 = ls_msg-msgv1
message_v2 = ls_msg-msgv2
message_v3 = ls_msg-msgv3
message_v4 = ls_msg-msgv4
* LANGUAGE_ISO =
IMPORTING
message = lv_message
* RETURN =
* TABLES
* TEXT =
.
IF ls_msg-msgty EQ 'E'.
WRITE :/ lv_message COLOR COL_NEGATIVE.
ELSEIF ls_msg-msgty EQ 'W'.
WRITE :/ lv_message COLOR COL_TOTAL.
ELSEIF ls_msg-msgty EQ 'S' OR ls_msg-msgty EQ 'I'.
WRITE :/ lv_message COLOR COL_POSITIVE.
ENDIF.
CLEAR lv_message.
ENDLOOP.
CLEAR ls_error.
WRITE :/.
ENDLOOP.
LOOP AT lt_objects_not_saved INTO ls_objects_not_saved.
READ TABLE lt_error INTO ls_error WITH KEY head_guid = ls_objects_not_saved.
WRITE :/ ls_error-sl_no , ls_error-description_h , 'Not Saved'.
LOOP AT ls_error-lt_msg INTO ls_msg.
CALL FUNCTION 'BAPI_MESSAGE_GETDETAIL'
EXPORTING
id = ls_msg-msgid
number = ls_msg-msgno
* LANGUAGE = SY-LANGU
textformat = 'ASC'
* LINKPATTERN =
message_v1 = ls_msg-msgv1
message_v2 = ls_msg-msgv2
message_v3 = ls_msg-msgv3
message_v4 = ls_msg-msgv4
* LANGUAGE_ISO =
IMPORTING
message = lv_message
* RETURN =
* TABLES
* TEXT =
.
IF ls_msg-msgty EQ 'E'.
WRITE :/ lv_message COLOR COL_NEGATIVE.
ELSEIF ls_msg-msgty EQ 'W'.
WRITE :/ lv_message COLOR COL_TOTAL.
ELSEIF ls_msg-msgty EQ 'S' OR ls_msg-msgty EQ 'I'.
WRITE :/ lv_message COLOR COL_POSITIVE.
ENDIF.
CLEAR lv_message.
ENDLOOP.
CLEAR ls_error.
WRITE :/.
ENDLOOP.
ELSE.
LOOP AT lt_error INTO ls_error.
WRITE :/ ls_error-sl_no, ls_error-description_h.
LOOP AT ls_error-lt_msg INTO ls_msg.
CALL FUNCTION 'BAPI_MESSAGE_GETDETAIL'
EXPORTING
id = ls_msg-msgid
number = ls_msg-msgno
* LANGUAGE = SY-LANGU
textformat = 'ASC'
* LINKPATTERN =
message_v1 = ls_msg-msgv1
message_v2 = ls_msg-msgv2
message_v3 = ls_msg-msgv3
message_v4 = ls_msg-msgv4
* LANGUAGE_ISO =
IMPORTING
message = lv_message
* RETURN =
* TABLES
* TEXT =
.
IF ls_msg-msgty EQ 'E'.
WRITE :/ lv_message COLOR COL_NEGATIVE.
ELSEIF ls_msg-msgty EQ 'W'.
WRITE :/ lv_message COLOR COL_TOTAL.
ELSEIF ls_msg-msgty EQ 'S' OR ls_msg-msgty EQ 'I'.
WRITE :/ lv_message COLOR COL_POSITIVE.
ENDIF.
CLEAR lv_message.
ENDLOOP.
WRITE :/.
ENDLOOP.
ENDIF.