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

Quantity not updating for education contracts no having schedule lines

$
0
0

Hi All,

 

 

I am updating the quantity from the third party system and from third party system it comes to ecc through  the BAPI -  SD_SALESDOCUMENT_CHANGE where we its updating the quantity as below

 

Suppose if I am changing the quantity in the third party from 10 to 9 and in sap if already the quantity for the quotation is 10 then after

full execution of the program the target quantity is updating in sap as 19 ( 10 +9) .

 

Please provide me the solution to update the correct quantity which I am passing

Below is my code :

 

 

FUNCTION z_sd_order_maintain.

*"----------------------------------------------------------------------

*"*"Local Interface:

*"  IMPORTING

*"     VALUE(SALESDOCUMENT) TYPE  VBELN OPTIONAL

*"     VALUE(SALES_HEADER_IN) TYPE  BAPISDHD1 OPTIONAL

*"     VALUE(HEADER_CUSTOM_FIELDS) TYPE  ZGD_SD_S_DOC_HEAD_CUST_FIELDS

*"       OPTIONAL

*"     VALUE(DEAL_TEAM_DATA) TYPE  ZGD_SD_QSPL_STS OPTIONAL

*"  EXPORTING

*"     VALUE(SALESDOCUMENT_EX) TYPE  VBELN

*"     VALUE(SALES_HEADER_OUT) TYPE  BAPISDHD

*"     VALUE(SALES_HEADER_STATUS) TYPE  BAPISDHDST

*"  TABLES

*"      RETURN STRUCTURE  ZGD_SD_S_RFC_MSGS OPTIONAL

*"      SALES_ITEMS_IN STRUCTURE  BAPISDITM OPTIONAL

*"      SALES_ITEMS_CUST STRUCTURE  ZGD_SD_S_DOC_ITEM_CUST_FIELDS

*"       OPTIONAL

*"      SALES_PARTNERS STRUCTURE  BAPIPARNR OPTIONAL

*"      SALES_SCHEDULES_IN STRUCTURE  BAPISCHDL OPTIONAL

*"      SALES_CONDITIONS_IN STRUCTURE  BAPICOND OPTIONAL

*"      SALES_CFGS_VALUE STRUCTURE  BAPICUVAL OPTIONAL

*"      SALES_CCARD STRUCTURE  BAPICCARD OPTIONAL

*"      SALES_TEXT STRUCTURE  BAPISDTEXT OPTIONAL

*"      SALES_KEYS STRUCTURE  BAPISDKEY OPTIONAL

*"      SALES_CONTRACT_IN STRUCTURE  BAPICTR OPTIONAL

*"      PARTNERADDRESSES STRUCTURE  BAPIADDR1 OPTIONAL

*"      SALES_SCHED_CONF_IN STRUCTURE  BAPISCHDL2 OPTIONAL

*"      INCOMPLETE_LOG STRUCTURE  ZGD_SD_S_RFC_MSGS OPTIONAL

*"      BILLPLAN_DATES STRUCTURE  FPLT OPTIONAL

*"----------------------------------------------------------------------

 

 

*TABLES:

  DATA: it_return TYPE TABLE OF bapiret2 WITH HEADER LINE,

        it_incomplete_log TYPE TABLE OF bapiincomp WITH HEADER LINE  .

  DATA: sales_cfgs_ref TYPE STANDARD TABLE OF bapicucfg WITH HEADER LINE,

        sales_cfgs_refinst TYPE STANDARD TABLE OF bapicuref WITH HEADER LINE,

        sales_cfgs_inst TYPE STANDARD TABLE OF bapicuins WITH HEADER LINE,

        sales_cfgs_part_of TYPE STANDARD TABLE OF bapicuprt WITH HEADER LINE,

        tmp_config TYPE STANDARD TABLE OF bapicuval WITH HEADER LINE.

 

 

  CONSTANTS: c_create TYPE c VALUE 'C',

             c_update TYPE c VALUE 'U'.

  DATA: l_action TYPE c, l_has_errors TYPE c , l_has_new_lines TYPE c.

 

 

  DATA: conf_id(6) TYPE n,

       inst_id(8) TYPE n,

       cpu_inst_id(8) TYPE n,

       l_netwr TYPE vbap-netwr,

       l_subline_count TYPE i,

       l_count TYPE i.

 

 

  FIELD-SYMBOLS: <fs_item> LIKE LINE OF sales_items_in,

                 <fs_conf> LIKE LINE OF sales_cfgs_value,

                 <fs_cond> LIKE LINE OF sales_conditions_in,

                 <fs_sales_partners> LIKE LINE OF sales_partners,

                 <fs_eaid_link> TYPE zgd_eaid_link,

                 <fs_sales_items_in> TYPE bapisditm.

 

 

 

 

  DATA: itemx LIKE bapisditmx OCCURS 10 WITH HEADER LINE,

        itemx_update  LIKE bapisditmx OCCURS 10 WITH HEADER LINE .

  DATA: it_vbap TYPE TABLE OF vbap WITH HEADER LINE.

 

 

  DATA: lt_extensionin TYPE  STANDARD TABLE OF bapiparex ,

        lt_extensionex TYPE  STANDARD TABLE OF bapiparex ,

        wa_extensionin TYPE bapiparex,

        wa_extensionex TYPE bapiparex ,

        wa_sales_schedule_inx TYPE bapischdlx,

        sales_schedule_inx TYPE STANDARD TABLE OF bapischdlx.

 

 

  DATA: wa_bape_vbak   TYPE bape_vbak,

        wa_bape_vbakx  TYPE bape_vbakx,

        wa_bape_vbap TYPE bape_vbap,

        wa_bape_vbapx TYPE bape_vbapx.

  DATA: conditions_inx TYPE TABLE OF  bapicondx WITH HEADER LINE,

        items_ex TYPE TABLE OF bapisdit WITH HEADER LINE.

 

 

*  DATA: bapi_tcode(4) TYPE c VALUE 'VA01',

  DATA: bapi_tcode(4) TYPE c .   "VALUE 'VA01',

  DATA: l_memory_id(15) TYPE c.

  DATA: l_ismodified TYPE c,

        old_num LIKE sales_partners-partn_numb,

        l_msg(100) TYPE c.

  DATA: it_vbuv LIKE TABLE OF vbuv WITH HEADER LINE,

        da_dfies_tab TYPE dfies,

        l_field(20) TYPE c,

        l_billplan(100) TYPE c,

        l_date(10) TYPE c,

        l_fakwr(20) TYPE c.

  DATA: l_cond_value TYPE char15.

  DATA: no_decimals1 TYPE tcurx-currdec.

  DATA: lv_bussobject LIKE  bapiusw01-objtype,

        l_target_val TYPE bapisditm-target_val.

  DATA: v_target_val LIKE bapisditm-target_val.

 

 

  DATA: l_flag TYPE c,

        l_vbeln(10) TYPE n,

        l_posnr LIKE bapisditm-val_con_i .

 

 

 

 

  FIELD-SYMBOLS : <fs_cond1> TYPE bapicond, "LIKE LINE OF sales_conditions_in,

                  <fs_items> TYPE bapisditm. "LIKE LINE OF sales_items_in.

  DATA: t_sales_items TYPE STANDARD TABLE OF bapisditm.

  t_sales_items[] = sales_items_in[].

  SORT t_sales_items BY itm_number.

 

 

 

 

  DELETE sales_items_in WHERE itm_number = '000000'.

 

 

  LOOP AT sales_conditions_in ASSIGNING <fs_cond1>.

    IF <fs_cond1>-cond_value > '999999999.99'.

      CONCATENATE 'The quantity entered for line item' <fs_cond1>-itm_number INTO return-message SEPARATED BY space.

      APPEND return.

      READ TABLE t_sales_items ASSIGNING <fs_items> WITH KEY itm_number = <fs_cond1>-itm_number BINARY SEARCH.

      IF sy-subrc = 0.

        CONCATENATE return-message 'product' <fs_items>-material INTO return-message SEPARATED BY space.

      ENDIF.

      APPEND return.

      return-message = 'exceeds the maximum digits allowed in this field. Please update Order to Special Metric'.

*      return-message = 'exceeds 999999999.99. Please update Quote to Special Metric'.

      APPEND return.

      return-message = 'and adjust the quantity accordingly'.

      APPEND return.

      RETURN.

    ENDIF.

  ENDLOOP.

 

 

 

 

 

 

  CLEAR: return,return[],l_memory_id,l_has_errors,l_has_new_lines.

  CLEAR: wa_bape_vbak,l_action.

 

 

  sales_header_in-ref_1_s = header_custom_fields-opp_number.

 

 

  wa_bape_vbak-vbeln = salesdocument.

  wa_bape_vbak-zrevregmodel  = header_custom_fields-zrevregmodel.

*  wa_bape_vbak-zdelmethod    = HEADER_CUSTOM_FIELDS-zdelmethod.

 

 

  IF sales_header_in-doc_type EQ 'ZDRO'.

*    for direct regi CPQ will send QUOTE number

    wa_bape_vbak-zcpqno        = header_custom_fields-cpq_quote_number.

  ELSE.

    wa_bape_vbak-zcpqno = header_custom_fields-cpq_quote_backup.

  ENDIF.

 

 

  wa_bape_vbak-zopp_number   = header_custom_fields-opp_number.

 

 

  wa_bape_vbak-zopp_type     = header_custom_fields-zopp_type.

  wa_bape_vbak-zquick_ctr    = header_custom_fields-zquick_ctr.

 

 

 

 

  wa_bape_vbak-zzcpq_ordno            = header_custom_fields-zzcpq_ordno.

  wa_bape_vbak-zzpromo_code           = header_custom_fields-zzpromo_code.

  wa_bape_vbak-zzpo_required          = header_custom_fields-zzpo_required.

  wa_bape_vbak-zzinv_paymnt_amt       = header_custom_fields-zzinv_paymnt_amt.

  wa_bape_vbak-zzinv_paymnt_date      = header_custom_fields-zzinv_paymnt_date.

  wa_bape_vbak-zzcredit_card_payamnt  = header_custom_fields-zzcredit_card_payamnt.

  wa_bape_vbak-zzcredit_card_paydate  = header_custom_fields-zzcredit_card_paydate .

 

 

  wa_extensionin-structure   = 'BAPE_VBAK'.

  wa_extensionin+30(960) = wa_bape_vbak.

  APPEND wa_extensionin TO lt_extensionin.

  CLEAR wa_extensionin.

 

 

  CLEAR wa_bape_vbakx.

  wa_bape_vbakx-vbeln = salesdocument.

  wa_bape_vbakx-zrevregmodel = 'X'.

  wa_bape_vbakx-zcpqno       = 'X'.

*  wa_bape_vbakx-zdelmethod  = 'X'.

  wa_bape_vbakx-zopp_number  = 'X'.

 

 

  wa_bape_vbakx-zopp_type     = 'X'.

  wa_bape_vbakx-zquick_ctr    = 'X'.

 

 

 

 

 

 

  wa_bape_vbakx-zzcpq_ordno           = 'X'.

  wa_bape_vbakx-zzpromo_code          = 'X'.

  wa_bape_vbakx-zzpo_required         = 'X'.

  wa_bape_vbakx-zzinv_paymnt_amt      = 'X'.

  wa_bape_vbakx-zzinv_paymnt_date     = 'X'.

  wa_bape_vbakx-zzcredit_card_payamnt = 'X'.

  wa_bape_vbakx-zzcredit_card_paydate = 'X'.

 

 

 

 

  wa_extensionex-structure = 'BAPE_VBAKX'.

*

  wa_extensionex+30(960)   = wa_bape_vbakx.

*

  APPEND wa_extensionex TO lt_extensionin. "

  APPEND wa_extensionex TO lt_extensionex.

  CLEAR wa_extensionex.

 

 

*  CONF_ID -> should match with line item id.

  LOOP AT sales_cfgs_value ASSIGNING <fs_conf>.

    conf_id = <fs_conf>-config_id.

    inst_id = <fs_conf>-config_id.

    <fs_conf>-config_id = conf_id.

    <fs_conf>-inst_id = inst_id.

  ENDLOOP.

 

 

*

  DELETE sales_cfgs_value WHERE charc = 'ZZ_SHIP'. " defect

 

 

 

 

  IF salesdocument IS NOT INITIAL.

    SELECT vbeln posnr matnr uepos cuobj FROM vbap INTO CORRESPONDING FIELDS OF TABLE it_vbap

      WHERE vbeln = salesdocument.

*     delete subline items

    DELETE it_vbap WHERE uepos IS NOT INITIAL.

  ENDIF.

 

 

  CALL FUNCTION 'TCURX_READ'

    EXPORTING

      i_curr    = sales_header_in-currency

    IMPORTING

      e_currdec = no_decimals1.

 

 

*     pricing conditions

  LOOP AT sales_conditions_in ASSIGNING <fs_cond>.

    AT NEW itm_number.

      CLEAR: wa_bape_vbap, wa_bape_vbapx,l_netwr,conf_id,l_subline_count.

 

 

      LOOP AT sales_conditions_in WHERE itm_number = <fs_cond>-itm_number.

        l_netwr = sales_conditions_in-cond_value.

 

 

        CASE sales_conditions_in-cond_type.

 

 

          WHEN 'ZEDP' .

*            wa_bape_vbap-zedp_a = l_netwr .

            PERFORM cond_value TABLES sales_conditions_in USING no_decimals1 CHANGING l_cond_value.

            wa_bape_vbap-zedp_a = l_cond_value.

            wa_bape_vbapx-zedp_a = 'X' .

          WHEN 'ZEDA' .

            PERFORM cond_value TABLES sales_conditions_in USING no_decimals1 CHANGING l_cond_value.

            wa_bape_vbap-zeda_a = l_cond_value.

            wa_bape_vbapx-zeda_a = 'X' .

          WHEN 'ZLEP' .

            PERFORM cond_value TABLES sales_conditions_in USING no_decimals1 CHANGING l_cond_value.

            wa_bape_vbap-zlep_a = l_cond_value .

            wa_bape_vbapx-zlep_a = 'X' .

        ENDCASE.

      ENDLOOP.

 

 

      conf_id = <fs_cond>-itm_number.

      <fs_cond>-itm_number = conf_id.

 

 

      wa_bape_vbapx-vbeln = wa_bape_vbap-vbeln = salesdocument.

      wa_bape_vbapx-posnr = wa_bape_vbap-posnr = <fs_cond>-itm_number.

 

 

      READ TABLE sales_items_cust WITH KEY line_item = wa_bape_vbapx-posnr.

      IF sy-subrc EQ 0.

        wa_bape_vbap-z_prior_contract = sales_items_cust-old_contract_number.

        wa_bape_vbapx-z_prior_contract = 'X'.

        wa_bape_vbap-z_prior_ln_itm =  sales_items_cust-old_contract_line.

        wa_bape_vbapx-z_prior_ln_itm = 'X'.

     

        wa_bape_vbap-zpayment_method =  sales_items_cust-zpayment_method.

        wa_bape_vbapx-zpayment_method = 'X'.

        wa_bape_vbap-zdelivery_method =  sales_items_cust-zdelivery_method.

        wa_bape_vbapx-zdelivery_method = 'X'.

   

      ENDIF.

 

 

      CLEAR: wa_extensionin.

      wa_extensionin-structure   = 'BAPE_VBAP'.

      wa_extensionin+30(960)     = wa_bape_vbap.

      APPEND wa_extensionin TO lt_extensionin.

      CLEAR wa_extensionex.

      wa_extensionex-structure = 'BAPE_VBAPX'.

      wa_extensionex+30   = wa_bape_vbapx.

      APPEND wa_extensionex TO lt_extensionin. "<-- this is required.

      APPEND wa_extensionex TO lt_extensionex.

    ENDAT.

 

 

  ENDLOOP.

 

 

  CLEAR: sales_conditions_in[],sales_conditions_in.

 

 

  SORT sales_cfgs_value BY config_id charc.

 

 

  LOOP AT sales_items_in ASSIGNING <fs_item> WHERE hg_lv_item IS INITIAL.

    CLEAR: itemx.

    conf_id = <fs_item>-itm_number.

    inst_id = <fs_item>-itm_number.

 

 

    <fs_item>-itm_number = conf_id.

    <fs_item>-po_itm_no = <fs_item>-itm_number.

 

 

*    sales_items_in-target_qty =  <fs_item>-target_qty.

 

 

    PERFORM sub_move_x_structure USING sales_items_in  CHANGING itemx.

 

 

    READ TABLE it_vbap WITH KEY posnr = <fs_item>-itm_number.

    IF sy-subrc EQ 0.

 

 

*      sales_items_in-target_qty =  <fs_item>-target_qty.

      itemx-itm_number = <fs_item>-itm_number.

      itemx-po_itm_no = 'X'.

      itemx-updateflag = 'U'.

      itemx-material = 'X'.

      itemx-target_qty = 'X'.

 

 

      APPEND itemx.

      CLEAR itemx.

 

 

*      IF  sales_schedules_in-req_qty = <fs_item>-target_qty.

*      update quantity.

      sales_schedules_in-itm_number = <fs_item>-itm_number.

      sales_schedules_in-req_qty = <fs_item>-target_qty.  

 

 

      APPEND sales_schedules_in.

*      clear sales_schedules_in.

*

      wa_sales_schedule_inx-itm_number = 'X'.

      wa_sales_schedule_inx-req_qty = 'X'. 

*

      APPEND wa_sales_schedule_inx to sales_schedule_inx.

*      CLEAR  wa_sales_schedule_inx.

*     ENDIF.

 

 

 

    ELSE.

      itemx-itm_number = <fs_item>-itm_number.

      itemx-po_itm_no = 'X'.

      itemx-updateflag = 'I'.

      itemx-material = 'X'.

      itemx-target_qty = 'X'.

*      itemx-trg_qty_no = 'X'.

*    For education materials use the item category that comes from CPQ

      IF salesdocument IS NOT INITIAL AND <fs_item>-item_categ IS NOT INITIAL .

        itemx-item_categ = 'X'.

      ENDIF.

 

 

      APPEND itemx.

      CLEAR: itemx.

      l_has_new_lines = 'X'.

*       insert data into SALES_SCHEDULES_IN

      sales_schedules_in-itm_number = <fs_item>-itm_number.

      sales_schedules_in-req_qty = <fs_item>-target_qty.  

      APPEND sales_schedules_in.

    ENDIF.

*    load VC config tables

    PERFORM sub_load_config_tables

              TABLES sales_items_in sales_cfgs_refinst  sales_cfgs_ref sales_cfgs_inst

                     sales_cfgs_part_of sales_cfgs_value

              USING conf_id inst_id  <fs_item>-material .

  ENDLOOP.

 

 

  LOOP AT it_vbap.

    READ TABLE sales_items_in WITH KEY itm_number = it_vbap-posnr.

    IF sy-subrc <> 0.

      "DELETE THE LINE ITEMS WHERE ARE NOT THERE IN INPUT STRUCTURE

      sales_items_in-itm_number = it_vbap-posnr.

      sales_items_in-po_itm_no = it_vbap-posnr.

      sales_items_in-material = it_vbap-matnr.

      APPEND sales_items_in.

      CLEAR: itemx.

      itemx-itm_number = it_vbap-posnr.

      itemx-po_itm_no = 'X'.

      itemx-updateflag = 'D'.

*      itemx-MATERIAL = 'X'.

      APPEND itemx.

      CLEAR: itemx.

 

 

    ENDIF.

  ENDLOOP.

 

 

  SORT itemx BY itm_number.

 

 

  CLEAR: l_flag,l_vbeln,l_posnr.

 

 

  READ TABLE sales_items_in INDEX 1 .

  IF NOT sales_items_in[] IS INITIAL AND sales_items_in-ref_doc IS NOT INITIAL.

    SELECT SINGLE posnr INTO l_posnr FROM vbap WHERE vbeln = sales_items_in-ref_doc AND zwert > 0.

    IF sy-subrc EQ 0.

      l_vbeln = sales_items_in-ref_doc.

*        CONCATENATE 'VB' l_vbeln l_posnr INTO SALES_HEADER_IN-REFOBJKEY.

      sales_header_in-refdoctype = 'G'.

      sales_header_in-ref_doc = sales_items_in-ref_doc.

      sales_header_in-refdoc_cat = 'G'." contract

 

 

 

 

      LOOP AT sales_items_in ASSIGNING <fs_sales_items_in>.

        <fs_sales_items_in>-ref_doc = sales_items_in-ref_doc.

        <fs_sales_items_in>-val_contr = sales_items_in-ref_doc.

        <fs_sales_items_in>-val_con_i = l_posnr.

        <fs_sales_items_in>-ref_doc_it = l_posnr.

        <fs_sales_items_in>-ref_doc_ca = 'G'.

      ENDLOOP.

    ENDIF.

  ENDIF.

 

 

 

 

  IF salesdocument IS INITIAL .

    SORT sales_items_in[] BY itm_number ASCENDING.

 

 

    l_action = c_create.

 

 

    bapi_tcode = 'VA01'.

    EXPORT bapi_tcode TO MEMORY ID 'BAPI_TCODE'.

    lv_bussobject  = 'BUS2032'.   " Direct Reg.Order

 

 

 

 

    CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'

      EXPORTING

        sales_header_in      = sales_header_in

*       SALES_HEADER_INX     =

*       SENDER               =

        business_object      = lv_bussobject "'BUS2034'

      IMPORTING

        salesdocument_ex     = salesdocument_ex

        sales_header_out     = sales_header_out

        sales_header_status  = sales_header_status

      TABLES

        return               = it_return

        sales_items_in       = sales_items_in

*       SALES_ITEMS_INX      = itemx

        sales_partners       = sales_partners

        sales_schedules_in   = sales_schedules_in

*       SALES_SCHEDULES_INX  =

*       sales_conditions_in  = sales_conditions_in

        sales_conditions_inx = conditions_inx

        sales_cfgs_ref       = sales_cfgs_ref

        sales_cfgs_inst      = sales_cfgs_inst

        sales_cfgs_part_of   = sales_cfgs_part_of

        sales_cfgs_value     = sales_cfgs_value

*       SALES_CFGS_BLOB      =

*       SALES_CFGS_VK        =

        sales_cfgs_refinst   = sales_cfgs_refinst

        sales_ccard          = sales_ccard

        sales_text           = sales_text

        sales_keys           = sales_keys

        sales_contract_in    = sales_contract_in

*       SALES_CONTRACT_INX   =

        extensionin          = lt_extensionin[]

        partneraddresses     = partneraddresses

        sales_sched_conf_in  = sales_sched_conf_in

        items_ex             = items_ex

*       SCHEDULE_EX          =

*       BUSINESS_EX          =

        incomplete_log       = it_incomplete_log

        extensionex          = lt_extensionex[]

*       CONDITIONS_EX        =

*       PARTNERS_EX          =

*       TEXTHEADERS_EX       =

*       TEXTLINES_EX         =

*       BATCH_CHARC          =

      .

*    ENDIF.

* endif.

    PERFORM sub_check_vc_errors TABLES it_return sales_items_in sales_cfgs_value return

          CHANGING l_has_errors.

 

 

    PERFORM sub_collect_msgs TABLES it_return return.

 

 

    IF salesdocument_ex IS NOT INITIAL.

      CLEAR:it_return[],it_return.

      salesdocument = salesdocument_ex.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

        EXPORTING

          wait   = 'X'

        IMPORTING

          return = it_return.

      PERFORM sub_collect_msgs TABLES it_return return.

    ELSE.

      l_has_errors = 'X'.

      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    ENDIF.

 

 

 

 

  ELSE. " UPDATE REQUEST START HERE<----------------------

 

 

    DATA: sales_header_inx LIKE bapisdhd1x,

          sales_contract_inx TYPE TABLE OF bapictrx  WITH HEADER LINE,

          partnerchanges TYPE TABLE OF bapiparnrc WITH HEADER LINE,

          it_vbpa TYPE TABLE OF vbpa WITH HEADER LINE.

 

 

    FIELD-SYMBOLS: <fs> LIKE LINE OF sales_contract_in.

 

 

    bapi_tcode = 'VA02'.

    EXPORT bapi_tcode TO MEMORY ID 'BAPI_TCODE'.

 

 

    l_action = c_update.

 

 

    sales_header_inx-updateflag = 'U'. "<-this should be passed as otherwise document will not be updated

    sales_header_inx-cust_grp3 = 'X'.

    sales_header_inx-cust_grp4 = 'X'.

    sales_header_inx-purch_no_c = 'X'.

*    TODO:

    "for date changes update X structure is mandatory

    CLEAR: sales_contract_inx[].

    LOOP AT sales_contract_in ASSIGNING <fs>.

      conf_id = <fs>-itm_number.

      <fs>-itm_number = conf_id.

 

 

      sales_contract_inx-itm_number = conf_id.

      sales_contract_inx-updateflag = 'U'.

      sales_contract_inx-inst_date = 'X'.

      sales_contract_inx-dism_date = 'X'.

      APPEND sales_contract_inx.

    ENDLOOP.

 

 

 

 

    SELECT vbeln posnr parvw kunnr pernr parnr FROM vbpa INTO CORRESPONDING FIELDS OF TABLE it_vbpa

        WHERE vbeln = salesdocument.

 

 

    LOOP AT sales_partners.

 

 

      READ TABLE it_vbpa WITH KEY parvw = sales_partners-partn_role.

      IF sy-subrc EQ 0.

 

 

        IF it_vbpa-kunnr IS INITIAL AND it_vbpa-pernr IS INITIAL AND it_vbpa-parnr IS INITIAL.

          READ TABLE sales_partners WITH KEY partn_role = it_vbpa-parvw.

          IF sy-subrc EQ 0 AND sales_partners-partn_numb IS NOT INITIAL.

            CLEAR: partnerchanges.

            partnerchanges-document = salesdocument.

            partnerchanges-itm_number = '000000'.

            partnerchanges-updateflag = 'U'.

            partnerchanges-partn_role = sales_partners-partn_role.

            partnerchanges-p_numb_old = '0'.

            partnerchanges-p_numb_new = sales_partners-partn_numb.

            APPEND partnerchanges.

          ENDIF.

        ELSE.

 

 

          CLEAR: l_ismodified,old_num.

 

 

          IF it_vbpa-kunnr IS NOT INITIAL.

            old_num = it_vbpa-kunnr.

            IF it_vbpa-kunnr <> sales_partners-partn_numb.

              l_ismodified = 'X'.

            ENDIF.

          ELSEIF it_vbpa-pernr IS NOT INITIAL.

            old_num = it_vbpa-pernr.

            IF it_vbpa-pernr <> sales_partners-partn_numb.

              l_ismodified = 'X'.

            ENDIF.

          ELSEIF it_vbpa-parnr IS NOT INITIAL.

            old_num = it_vbpa-parnr.

            IF it_vbpa-parnr <> sales_partners-partn_numb.

              l_ismodified = 'X'.

            ENDIF.

          ENDIF.

 

 

          IF l_ismodified IS NOT INITIAL.

            CLEAR: partnerchanges.

            partnerchanges-document = salesdocument.

            partnerchanges-itm_number = '000000'.

            partnerchanges-updateflag = 'U'.

            partnerchanges-partn_role = sales_partners-partn_role.

            partnerchanges-p_numb_old = old_num.

            partnerchanges-p_numb_new = sales_partners-partn_numb.

            APPEND partnerchanges.

          ENDIF.

        ENDIF.

      ELSE.

        CLEAR: partnerchanges.

        partnerchanges-document = salesdocument.

        partnerchanges-itm_number = '000000'.

        partnerchanges-updateflag = 'I'.

        partnerchanges-partn_role = sales_partners-partn_role.

        partnerchanges-p_numb_old = '0'.

        partnerchanges-p_numb_new = sales_partners-partn_numb.

        APPEND partnerchanges.

      ENDIF.

    ENDLOOP.

 

 

 

 

    CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'

      EXPORTING

        salesdocument       = salesdocument

        order_header_in     = sales_header_in

        order_header_inx    = sales_header_inx

        business_object     = lv_bussobject    " 'BUS2032'

        call_from_bapi      = 'X'     "<-- this is required

      IMPORTING

        sales_header_out    = sales_header_out

        sales_header_status = sales_header_status

      TABLES

        return              = it_return

        item_in             = sales_items_in

        item_inx            = itemx

        schedule_in         = sales_schedules_in

        schedule_inx        = sales_schedule_inx 

*       PARTNERS            = SALES_PARTNERS <- don't pass this table again

        partnerchanges      = partnerchanges

        partneraddresses    = partneraddresses

        sales_cfgs_ref      = sales_cfgs_ref

        sales_cfgs_inst     = sales_cfgs_inst

        sales_cfgs_part_of  = sales_cfgs_part_of

        sales_cfgs_value    = sales_cfgs_value

*       SALES_CFGS_BLOB     =

*       SALES_CFGS_VK       =

        sales_cfgs_refinst  = sales_cfgs_refinst

        sales_ccard         = sales_ccard

        sales_text          = sales_text

        sales_keys          = sales_keys

        conditions_in       = sales_conditions_in

        conditions_inx      = conditions_inx

        sales_contract_in   = sales_contract_in

        sales_contract_inx  = sales_contract_inx

        extensionin         = lt_extensionin[]

*       ITEMS_EX            =

*       SCHEDULE_EX         =

*       BUSINESS_EX         =

        incomplete_log      = it_incomplete_log

        extensionex         = lt_extensionex[].

 

 

 

 

    PERFORM sub_check_vc_errors TABLES it_return sales_items_in sales_cfgs_value return

          CHANGING l_has_errors.

 

 

    PERFORM sub_collect_msgs TABLES it_return return.

    READ TABLE it_return WITH KEY type = 'E'.

    IF sy-subrc <> 0.

      READ TABLE it_return WITH KEY type = 'A'.

    ENDIF.

 

 

    IF sy-subrc <> 0.

      CLEAR:it_return[],it_return.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

        EXPORTING

          wait   = 'X'

        IMPORTING

          return = it_return.

      PERFORM sub_collect_msgs TABLES it_return return.

    ELSE.

      l_has_errors = 'X'.

      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    ENDIF.

  ENDIF.


Viewing all articles
Browse latest Browse all 8927

Trending Articles



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