Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

BAPI_SALESORDER_CHANGE

Former Member
0 Likes
3,016

Hi,

i am using the bapi BAPI_SALESORDER_CHANGE to chenge the requirement type it is working fine but it is inserting extra line items.

Please find the attchment for the same.

13 REPLIES 13
Read only

nabheetscn
SAP Champion
SAP Champion
0 Likes
2,687

Hi Sreeni

In case you change it via tcode does the same things happen?

Nabheet

Read only

0 Likes
2,687

Hi Madan,

yes i trying to change the same with the tcode.

Thanks,

Sreenivas.

Read only

0 Likes
2,687

Does it create extra lines..?

Read only

0 Likes
2,687

Yes


Read only

0 Likes
2,687

So, where is the problem?

Read only

0 Likes
2,687

Time to ask your Functional that is how SAP tcode are working . Let him answer it for you then

Nabheet

Read only

0 Likes
2,687

i dont need extra line items if i tried to delete also it is not possible.

Read only

0 Likes
2,687

Tcode also created by me for my program.

if u want i will send my code


Read only

0 Likes
2,687

Have you creating/changing the PO through the ME21N/me22n  or your report?

Read only

0 Likes
2,687

i am changing the sales order requirement type .


Read only

0 Likes
2,687

Sreeni

When standard SAP tcode is also behaving in same way as BAPI is behaving so where is the issue?

Nabehet

Read only

0 Likes
2,687

That is my Question. I am Providing the code which i used.

i am getting this in only one System.

Thanks,

Sreenivasulu.

Read only

0 Likes
2,687

REPORT  zv_reqt_change1.

TABLES: vbak, vbap.

SELECT-OPTIONS: s_vkorg FOR vbak-vkorg OBLIGATORY NO INTERVALS,               "Sales Org
                s_vtweg FOR vbak-vtweg OBLIGATORY NO INTERVALS,               "Distribution Channel
                s_spart FOR vbak-spart            NO INTERVALS,               "Divison
                s_vbeln FOR vbak-vbeln            ,                           "Sales Order Number
                s_posnr FOR vbap-posnr            ,                           "Item number
                s_prodh FOR vbap-prodh            ,                           "Product hierarchy
                p_werks FOR vbap-werks OBLIGATORY NO INTERVALS NO-EXTENSION"Plant
SELECT-OPTIONS: s_matnr FOR vbap-matnr            NO INTERVALS.               "Material
PARAMETERS: p_dydue(5TYPE c         OBLIGATORY.                            "Days ovedue
SELECT-OPTIONS: s_bedae FOR vbap-bedae            NO INTERVALS,               "Requirement type
                s_dtrng FOR sy-datum    OBLIGATORY            .               "Date Range

TYPES: BEGIN OF ty_vbbe,
       VBELN TYPE VBELN,
       POSNR TYPE POSNR,
       ETENR TYPE ETENR,
       MATNR TYPE MATNR,
       WERKS TYPE WERKS,
  END OF ty_vbbe.

DATA: it_vbbe TYPE TABLE OF ty_vbbe,
      wa_vbbe TYPE ty_vbbe.

TYPES: BEGIN OF ty_vbak,
       vbeln TYPE vbak-vbeln,
       erdat TYPE vbak-erdat,
       vkorg TYPE vbak-vkorg,
       vtweg TYPE vbak-vtweg,
       kunnr TYPE vbak-kunnr,
END OF ty_vbak.

DATA: it_vbak TYPE TABLE OF ty_vbak,
      wa_vbak TYPE ty_vbak.

TYPES: BEGIN OF ty_vbap,
       vbeln TYPE vbap-vbeln,
       posnr TYPE vbap-posnr,
       matnr TYPE vbap-matnr,
       matkl TYPE vbap-matkl,
       arktx TYPE vbap-arktx,
       prodh TYPE vbap-prodh,
       netwr TYPE vbap-netwr,
       vrkme TYPE vbap-vrkme,
       brgew TYPE vbap-brgew,
       werks TYPE vbap-werks,
       bedae TYPE vbap-bedae,
       mwsbp TYPE vbap-mwsbp,
END OF ty_vbap.

DATA: it_tab TYPE TABLE OF ty_vbap,
      wa_tab TYPE ty_vbap.

TYPES : BEGIN OF ty_stat_n,
        vbeln TYPE vbeln,
        posnr TYPE posnr,
        mesage TYPE char100,
  END OF ty_stat_n.

TYPES: BEGIN OF ty_stat_a,
       vbeln TYPE vbeln,
       posnr TYPE posnr,
       bedae TYPE bedae,
  END OF ty_stat_a.

DATA: it_status TYPE TABLE OF bapisdstat,
      wa_status TYPE bapisdstat.

DATA: it_return TYPE bapireturn,
      wa_return TYPE bapireturn.

DATA: it_ret_cng TYPE TABLE OF bapiret2,
      wa_ret_cng TYPE bapiret2.

DATA: it_bapi_ret TYPE bapiret2,
      wa_bapi_ret TYPE bapiret2.

DATA: it_vbep   TYPE TABLE OF vbep ,
      wa_vbep   TYPE vbep.

DATA: it_stat_n TYPE TABLE OF ty_stat_n,
      wa_stat_n TYPE ty_stat_n.

DATA: it_stat_a TYPE TABLE OF ty_stat_a,
      wa_stat_a TYPE ty_stat_a.

DATAit_bapisditm TYPE STANDARD TABLE OF bapisditm,
       wa_bapisditm TYPE bapisditm,
      it_bapisditmx TYPE STANDARD TABLE OF bapisditmx,
      wa_bapisditmx TYPE bapisditmx,
       wa_bapisdh1x TYPE bapisdh1x.

DATA: key_date   TYPE sy-datum.
DATA: lv_flag(1) TYPE c.

START-OF-SELECTION.
  "Calculation of Key date.
  key_date sy-datum - p_dydue.

SELECT VBELN
       POSNR
       ETENR
       MATNR
       WERKS
   FROM vbbe
  INTO TABLE it_vbbe
  WHERE werks IN p_werks
    AND vbeln IN s_vbeln
    AND VBTYP = 'C'.
IF  it_vbbe[] IS NOT INITIAL.
SELECT vbeln
       erdat
       vkorg
       vtweg
       kunnr
  FROM vbak
  INTO TABLE it_vbak
  FOR ALL ENTRIES IN it_vbbe
  WHERE vbeln = it_vbbe-vbeln
     AND vkorg   IN s_vkorg "sales org
     AND vbeln   IN s_vbeln "Sales Order
     AND vdatu   IN s_dtrng "Date Range
     AND vtweg   IN s_vtweg "Distribution channel
     AND spart   IN s_spart."Division
ENDIF.

IF  it_vbak[] IS NOT INITIAL .
SELECT vbeln
        posnr
        matnr
        matkl
        arktx
        prodh
        netwr
        vrkme
        brgew
        werks
        bedae
        mwsbp
  FROM vbap
   INTO TABLE it_tab
   FOR ALL ENTRIES IN it_vbak
   WHERE vbeln = it_vbak-vbeln
     AND posnr   IN s_posnr "Item
     AND werks   IN p_werks "Plant
     AND matnr   IN s_matnr "Material
     AND prodh   IN s_prodh "Product hierarchy
     AND bedae   IN s_bedae."Requirement type
ENDIF.

  IF sy-subrc = 0.

    SELECT *
      INTO TABLE it_vbep
      FROM vbep FOR ALL ENTRIES IN it_tab
     WHERE vbeln = it_tab-vbeln
       AND posnr = it_tab-posnr.

    SORT it_vbep BY vbeln posnr etenr.
    DELETE ADJACENT DUPLICATES FROM it_vbep COMPARING vbeln posnr.

    IF  it_vbep IS NOT INITIAL.
      LOOP AT it_vbep INTO wa_vbep.
        CALL FUNCTION 'BAPI_SALESORDER_GETSTATUS'
          EXPORTING
            salesdocument = wa_vbep-vbeln
          IMPORTING
            return        = it_return
          TABLES
            statusinfo    = it_status.

        IF sy-subrc = 0.
          READ TABLE it_status INTO wa_status WITH KEY dlv_stat_i = 'A' itm_number = wa_vbep-posnr.
          IF sy-subrc = 0.

            wa_bapisdh1x-updateflag = 'U'"Header

            wa_bapisditm-itm_number = wa_vbep-posnr.
            IF wa_vbep-edatu <= key_date.
              READ TABLE it_tab INTO wa_tab WITH KEY vbeln = wa_vbep-vbeln  posnr = wa_vbep-posnr.
              IF wa_tab-bedae = '041'.
                wa_stat_a-vbeln = wa_vbep-vbeln.
                wa_stat_a-posnr = wa_vbep-posnr.
                wa_stat_a-bedae = '041'.
                APPEND wa_stat_a TO it_stat_a.
                CLEAR wa_stat_a.
                CONTINUE.
              ENDIF.
              wa_bapisditm-reqmts_typ = '041'.
            ELSEIF wa_vbep-edatu > key_date.
              READ TABLE it_tab INTO wa_tab WITH KEY vbeln = wa_vbep-vbeln  posnr = wa_vbep-posnr.
              IF wa_tab-bedae = 'KSV'.
                wa_stat_a-vbeln = wa_vbep-vbeln.
                wa_stat_a-posnr = wa_vbep-posnr.
                wa_stat_a-bedae = 'KSV'.
                APPEND wa_stat_a TO it_stat_a.
                CLEAR wa_stat_a.
                CONTINUE.
              ENDIF.
              wa_bapisditm-reqmts_typ = 'KSV'.
            ENDIF.

            wa_bapisditmx-itm_number = wa_vbep-posnr.
            wa_bapisditmx-updateflag = 'X'.
            wa_bapisditmx-reqmts_typ = 'X'.

            APPEND wa_bapisditm TO it_bapisditm.
            CLEAR: wa_bapisditm.
            APPEND wa_bapisditmx TO it_bapisditmx.
            CLEAR: wa_bapisditmx.
            CLEAR: wa_bapisditmx.

            CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
              EXPORTING
                salesdocument    = wa_vbep-vbeln
                order_header_inx = wa_bapisdh1x
              TABLES
                return           = it_ret_cng
                order_item_in    = it_bapisditm
                order_item_inx   = it_bapisditmx.
            IF sy-subrc = 0.
              READ TABLE it_ret_cng INTO wa_ret_cng WITH KEY  type = 'E'.
              IF sy-subrc EQ 0.
                DELETE it_ret_cng WHERE type = 'S'.
                PERFORM error_log.
              ELSE.
                CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                  EXPORTING
                    wait   = 'X'
                  IMPORTING
                    return = it_bapi_ret.
                PERFORM success_log.
              ENDIF.
            ELSE.
              PERFORM error_log.
            ENDIF.
          ELSE.
            CLEAR wa_stat_n.
            wa_stat_n-vbeln = wa_vbep-vbeln.
            wa_stat_n-posnr = wa_vbep-posnr.
            APPEND wa_stat_n TO it_stat_n.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ELSE.
      MESSAGE: 'No Data Selected in VBEP' TYPE 'I'.
    ENDIF.
  ELSE.
    MESSAGE: 'No Data Selected please change the selection Criteria' TYPE 'I'.
  ENDIF.

  IF  it_stat_a IS NOT INITIAL AND  lv_flag NE 'X'.
    LOOP AT it_stat_a INTO wa_stat_a.
      AT FIRST.
        WRITE:/ 'Please find the below records which are already updated with status'.
        WRITE:/ 'Sales order', 30 'item', 40 'Requirement Type'.
        ULINE.
      ENDAT.
      WRITE:/ wa_stat_a-vbeln,30 wa_stat_a-posnr, 40 wa_stat_a-bedae.
    ENDLOOP.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  ERROR_LOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM error_log .
  lv_flag = 'X'.
  LOOP AT it_ret_cng INTO wa_ret_cng WHERE type = 'E'.
    WRITE:/'Error Type ' ,25 wa_ret_cng-type ,35 'Error Message',65 wa_ret_cng-message.
  ENDLOOP.
ENDFORM.                    " ERROR_LOG
*&---------------------------------------------------------------------*
*&      Form  SUCCESS_LOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM success_log .
   lv_flag = 'X'.
  LOOP AT it_ret_cng INTO wa_ret_cng WHERE type = 'S'.
    WRITE:/ 'Sales Order: ',25 wa_vbep-vbeln , 35 'Item:  ', 45 wa_vbep-posnr ,55'Changed Succesfully'.
    DELETE it_ret_cng WHERE type = 'S'.
  ENDLOOP.
ENDFORM.                    " SUCCESS_LOG