‎2014 Jan 29 8:18 AM
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.
‎2014 Jan 29 8:25 AM
Hi Sreeni
In case you change it via tcode does the same things happen?
Nabheet
‎2014 Jan 29 8:56 AM
Hi Madan,
yes i trying to change the same with the tcode.
Thanks,
Sreenivas.
‎2014 Jan 29 9:01 AM
‎2014 Jan 29 9:05 AM
‎2014 Jan 29 9:06 AM
‎2014 Jan 29 9:06 AM
Time to ask your Functional that is how SAP tcode are working . Let him answer it for you then
Nabheet
‎2014 Jan 29 9:07 AM
i dont need extra line items if i tried to delete also it is not possible.
‎2014 Jan 29 9:08 AM
Tcode also created by me for my program.
if u want i will send my code
‎2014 Jan 29 9:09 AM
Have you creating/changing the PO through the ME21N/me22n or your report?
‎2014 Jan 29 9:14 AM
‎2014 Jan 29 9:22 AM
Sreeni
When standard SAP tcode is also behaving in same way as BAPI is behaving so where is the issue?
Nabehet
‎2014 Jan 29 10:02 AM
That is my Question. I am Providing the code which i used.
i am getting this in only one System.
Thanks,
Sreenivasulu.
‎2014 Jan 29 10:03 AM
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(5) TYPE 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.
DATA: it_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