Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 2175

Re: create and change condition prices in opportunity

$
0
0

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.

 

INCLUDEcrm_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.


Viewing all articles
Browse latest Browse all 2175

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>