10-25-2013 9:09 AM
Hi gurus,
i have created a 'z' functional module to create sales order. as per my requirement we have made a Z FM in that i am using 'bapi_salesorder_createfromdat2 ' Bapi for creating sales order . sales order is creating properly with out any errors.
but now the problem is we have an appended structure in VBAK table around 20 fields so created designed these fields in va01 ADDITIONAL DATA B tab in the header level. now the problem is when i run this FM by passing all data sales order number is generated properly but the fields in additional data B tab are not updated. but while debugging all the values in the EXTENSIONIN fields are available . can any one plz suggest how its possible.
here is the coding
*"*"Local Interface:
*" IMPORTING
*" VALUE(IM_HEADER) TYPE ZORD_HD
*" VALUE(IM_PAYMENT) TYPE ZADD_PAYDET
*" VALUE(IM_SHIPMENT) TYPE ZADD_SHIPDET
*" VALUE(IM_TEXT) TYPE ZADD_TEXT
*" EXPORTING
*" VALUE(SAL_DOC_NUM) TYPE VBRK-VBELN
*" TABLES
*" IM_ITEM STRUCTURE ZORD_ITEM OPTIONAL
*" ORD_EXT STRUCTURE ZBAPE_VBAK OPTIONAL
*"----------------------------------------------------------------------
DATA : CR_HEADER TYPE BAPISDHD1,
CR_ITEM TYPE STANDARD TABLE OF BAPISDITM WITH HEADER LINE,
CR_SCHD TYPE STANDARD TABLE OF BAPISCHDL WITH HEADER LINE,
CR_SCHDX TYPE STANDARD TABLE OF BAPISCHDLX WITH HEADER LINE,
CR_PAY_SHIP TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE ,
* ORD_EXT TYPE standard table of ZBAPE_VBAK with header line,
CR_PART TYPE STANDARD TABLE OF BAPIPARNR WITH HEADER LINE,
CR_RETURN TYPE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE ,
COMMENT TYPE STRING.
TYPES : BEGIN OF TY_ORD,
ZZOCT_ORDNO TYPE ZBAPE_VBAK-ZZOCT_ORDNO ,
ZZOR_DAT TYPE ZBAPE_VBAK-ZZOR_DAT ,
ZZPAY_MODE TYPE ZBAPE_VBAK-ZZPAY_MODE ,
ZZZPAY_DAT TYPE ZBAPE_VBAK-ZZZPAY_DAT ,
ZZSHIP_CHARG TYPE ZBAPE_VBAK-ZZSHIP_CHARG,
ZZCOUP_NUM TYPE ZBAPE_VBAK-ZZCOUP_NUM ,
ZZCOUP_AMT TYPE ZBAPE_VBAK-ZZCOUP_AMT ,
ZZDISC_NUM TYPE ZBAPE_VBAK-ZZDISC_NUM ,
ZZDISC_AMT TYPE ZBAPE_VBAK-ZZDISC_AMT ,
ZZZCUST_EID TYPE ZBAPE_VBAK-ZZZCUST_EID ,
ZZCUST_NAME TYPE ZBAPE_VBAK-ZZCUST_NAME ,
END OF TY_ORD.
DATA: IRD_EXT TYPE STANDARD TABLE OF TY_ORD WITH HEADER LINE.
***************************HEADER DETAILS*************************************
CR_HEADER-DOC_TYPE = IM_HEADER-DOC_TYPE ."SO_TYPE.
CR_HEADER-SALES_ORG = IM_HEADER-SALES_ORG."SO_ORGN.
CR_HEADER-DISTR_CHAN = IM_HEADER-DISTR_CHAN."SO_DIST.
CR_HEADER-DIVISION = IM_HEADER-DIVISION. "SO_DIVI.
CR_HEADER-PURCH_NO_C = IM_HEADER-PO_NUMBER.
CR_HEADER-PURCH_DATE = IM_HEADER-PO_DATE.
CR_HEADER-REQ_DATE_H = IM_HEADER-REQ_DEL_DATE.
***************************ITEM DETAILS*************************************
LOOP AT IM_ITEM.
CR_ITEM-ITM_NUMBER = IM_ITEM-ITEM_NUMBER.
CR_ITEM-MATERIAL = IM_ITEM-MATERIAL.
CR_ITEM-TARGET_QTY = IM_ITEM-TARGET_QTY.
APPEND CR_ITEM.
CR_SCHD-ITM_NUMBER = IM_ITEM-ITEM_NUMBER.
CR_SCHD-SCHED_LINE = 0001.
CR_SCHD-REQ_QTY = CR_ITEM-TARGET_QTY .
APPEND CR_SCHD.
CR_SCHDX-ITM_NUMBER = IM_ITEM-ITEM_NUMBER.
CR_SCHDX-SCHED_LINE = 0001.
CR_SCHDX-REQ_QTY = 'X'.
CR_SCHDX-UPDATEFLAG = 'I'.
APPEND CR_SCHDX.
ENDLOOP.
***********************PAYMENT DETAILS *******************
clear : ord_ext.
CR_PAY_SHIP-STRUCTURE = 'ZBAPE_VBAK'.
ORD_EXT-ZZOCT_ORDNO = IM_HEADER-PO_NUMBER.
ORD_EXT-ZZOR_DAT = IM_HEADER-PO_DATE.
ORD_EXT-ZZPAY_MODE = IM_PAYMENT-ZZPAY_MODE.
ORD_EXT-ZZZPAY_DAT = IM_PAYMENT-ZZZPAY_DAT.
ORD_EXT-ZZSHIP_CHARG = IM_PAYMENT-ZZSHIP_CHARG.
ORD_EXT-ZZCOUP_NUM = IM_PAYMENT-ZZCOUP_NUM.
ORD_EXT-ZZCOUP_AMT = IM_PAYMENT-ZZCOUP_AMT.
ORD_EXT-ZZDISC_NUM = IM_PAYMENT-ZZDISC_NUM.
ORD_EXT-ZZDISC_AMT = IM_PAYMENT-ZZDISC_AMT.
*
*************************SHIPMENT DETAILS *************
ORD_EXT-ZZZCUST_EID = IM_SHIPMENT-ZZZCUST_EID.
ORD_EXT-ZZCUST_NAME = IM_SHIPMENT-ZZCUST_NAME.
ORD_EXT-ZZADDR1 = IM_SHIPMENT-ZZADDR1 .
ORD_EXT-ZZADDR2 = IM_SHIPMENT-ZZADDR2 .
ORD_EXT-ZZADDR3 = IM_SHIPMENT-ZZADDR3 .
ORD_EXT-ZZADDR4 = IM_SHIPMENT-ZZADDR4 .
ORD_EXT-ZZPINCODE = IM_SHIPMENT-ZZCITY .
ORD_EXT-ZZCITY = IM_SHIPMENT-ZZPHONE_NUM .
ORD_EXT-ZZDISTRICT = IM_SHIPMENT-ZZPINCODE .
ORD_EXT-ZZPHONE_NUM = IM_SHIPMENT-ZZDISTRICT .
ORD_EXT-ZZMOB_NUM = IM_SHIPMENT-ZZMOB_NUM .
* APPEND ORD_EXT.
* APPEND ORD_EXT1.
CR_PAY_SHIP-VALUEPART1 = ORD_EXT.
CR_PAY_SHIP-VALUEPART2 = ORD_EXT+240(230).
append CR_PAY_SHIP.
**************** pARTNER dETAILS **********************
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = IM_HEADER-CUST_NUM
IMPORTING
OUTPUT = CR_PART-PARTN_NUMB.
CR_PART-PARTN_ROLE = 'AG'.
APPEND CR_PART.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' " TEST RUN PROGRAM
EXPORTING
ORDER_HEADER_IN = CR_HEADER
INT_NUMBER_ASSIGNMENT = 'X'
CONVERT = 'X'
TESTRUN = 'X'
IMPORTING
SALESDOCUMENT = SAL_DOC_NUM
TABLES
RETURN = CR_RETURN
ORDER_ITEMS_IN = CR_ITEM
ORDER_PARTNERS = CR_PART
ORDER_SCHEDULES_IN = CR_SCHD
ORDER_SCHEDULES_INX = CR_SCHDX
* ORDER_TEXT = CR_TEXT
EXTENSIONIN = CR_PAY_SHIP.
READ TABLE CR_RETURN INTO CR_RETURN WITH KEY TYPE = 'S'.
IF SY-SUBRC EQ 0.
* IF CR_RETURN[] IS INITIAL. " IF NO ERROR OCUURS THEN ONLY CREATE ORDER
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
ORDER_HEADER_IN = CR_HEADER
INT_NUMBER_ASSIGNMENT = 'X'
* CONVERT = 'X'
IMPORTING
SALESDOCUMENT = SAL_DOC_NUM
TABLES
RETURN = CR_RETURN
ORDER_ITEMS_IN = CR_ITEM
ORDER_PARTNERS = CR_PART
ORDER_SCHEDULES_IN = CR_SCHD
ORDER_SCHEDULES_INX = CR_SCHDX
* ORDER_TEXT = CR_TEXT
EXTENSIONIN = CR_PAY_SHIP.
ELSE.
LOOP AT CR_RETURN WHERE TYPE = 'E'.
CONCATENATE COMMENT ' : ' CR_RETURN-MESSAGE INTO COMMENT RESPECTING BLANKS.
ENDLOOP.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDFUNCTION.
10-25-2013 9:15 AM
Please check the BAPI documentation..It clearly specifies what needs to be done..
5. Adjust the following structures for customer enhancements to table VBAK:
a) VBAKKOZ
b) VBAKKOZX
c) BAPE_VBAK
d) BAPE_VBAKX
Fill the extension structures accordingly..Hope this will resolve your issue..
10-25-2013 9:24 AM
Extend below structures this will work.
BAPE_VBAK
BAPE_VBAKX
VBAKKOM
VBAKKOMX
-Venkat
10-25-2013 10:09 AM
10-25-2013 10:17 AM
Hi Rakesh,
Few days back I have faced the same problem. Even after extending the structures given in standard documentation, I failed to achieve the desired output. In debugging I found these structures needs to be extended VBAKKOM, VBAKKOMX rather than VBAKKOZ, VBAKKOZX. Once I did this everything worked fine.
Please confirm the structures you have extended.
-Venkat
10-25-2013 11:18 AM
Dear Venkat,
I have already updated these structures
BAPE_VBAK
BAPE_VBAKX
VBAKKOM
VBAKKOMX
VBAKKOZ
VBAKKOZX
when i call this rfc from external system it is i.e( JAVA 3rd party) then these fields are updating
but when i try to check this in SAP then it is not Updating .
in the third party For temporary purpose they are calling 'BAPI_SALESORDER_CREATEFROMDAT2 '
this BAPI . And now the requirement is i need a Z bapi so i made the program as the coding is shown above
but when i pass the details it is not updating .
10-25-2013 11:28 AM
Check my code for your reference, I know it's different BAPI but for both Create/Update it should work same.
IF p_shipping_ref IS NOT INITIAL OR
p_carrier_name IS NOT INITIAL OR
p_tracking_num IS NOT INITIAL.
*--populate Credit Memo Request number
lv_credit_memo = p_credit_memo.
*--Order check list for updating Credit Memo
lwa_order_check_list-updateflag = 'U'. "U -> Update
IF p_shipping_ref IS NOT INITIAL.
lwa_order_header-purch_no_c = p_shipping_ref.
lwa_order_check_list-purch_no_c = 'X'.
ELSE.
lwa_bape_vbak-vbeln = p_credit_memo. "Credit Memo
IF p_carrier_name IS NOT INITIAL.
lwa_bape_vbak-zzcarr = p_carrier_name. "Carrier Name
ENDIF.
IF p_tracking_num IS NOT INITIAL.
lwa_bape_vbak-zzcustref = p_tracking_num. "Tracking Number
ENDIF.
lwa_extension-structure = 'BAPE_VBAK'. "Structure Name
lwa_extension+30 = lwa_bape_vbak.
APPEND lwa_extension TO lt_extension.
*--update flags
lwa_bape_vbakx-vbeln = p_credit_memo.
IF p_carrier_name IS NOT INITIAL.
lwa_bape_vbakx-zzcarr = 'X'.
ENDIF.
IF p_tracking_num IS NOT INITIAL.
lwa_bape_vbakx-zzcustref = 'X'.
ENDIF.
lwa_extension-structure = 'BAPE_VBAKX'. "Structure Name
lwa_extension+30 = lwa_bape_vbakx.
APPEND lwa_extension TO lt_extension.
ENDIF.
*--BAPI to update Order
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = lv_credit_memo
order_header_in = lwa_order_header
order_header_inx = lwa_order_check_list
TABLES
return = lt_return
extensionin = lt_extension.
You are not updating structure 'BAPE_VBAKX', please pass 'X' value for all the custom fields which you would like to update.
This should work for sure.
-Venkat
10-29-2013 11:42 AM
Dear gurus,
Thanks for u r help ,
But i Have solved the issue by my self
I have declared a variable of the type valuepart1 in the extensionin
and passed the values. Then the fields updated.
thanks and regards.
Rakesh S