on 04-08-2015 8:09 AM
Hello ,
My requirement is to copy Item level PO number and po date from sales contract to sales order while creating sales order with reference to sales contract.
I am wrting my code in "userexit_move_field_to_vbkd".
TYPES : BEGIN OF TY_VBKD,
POSNR TYPE VBKD-POSNR,
BSTKD TYPE VBKD-BSTKD,
BSTDK TYPE VBKD-BSTDK,
END OF TY_VBKD.
DATA : IT_VBKD TYPE TABLE OF TY_VBKD,
WA_VBKD LIKE LINE OF IT_VBKD.
IF SY-TCODE = 'VA01'.
SELECT SINGLE POSNR BSTKD BSTDK FROM VBKD
INTO (WA_VBKD-POSNR,WA_VBKD-BSTKD,WA_VBKD-BSTDK)
WHERE VBELN EQ XVBFA-VBELV.
* AND POSNR EQ CVBKD-POSNR.
IF SY-SUBRC = 0.
IF WA_VBKD-BSTKD IS NOT INITIAL OR WA_VBKD-BSTKD IS NOT INITIAL.
VBKD-BSTKD_E = WA_VBKD-BSTKD.
VBKD-BSTDK_E = WA_VBKD-BSTDK.
ENDIF.
ENDIF.
But vbkd is structure,so it is updating last value of PO number and po date from sales contract to sales order.
Suppose , sales contract is having 3 line item with diffrent PO number and Po date then same should get copy in sales order.
But currently only last line item's PO number and PO date are getting copied in sales order for all line items.
Kindly help.
Regards,
Anuja dhondge
Please debug and check if this Exit is called for each line items, if yes try and find out it is getting wrong.
Your code seems to be fine, just check if you are passing the values in the right structure,
The field you are using VBKD-BSTKD_E to pass the no is for PO No in Ship To Party PO no,
Sold To party PO no is passed to VBKD-BSTKD.
Please check and revert if you need more help.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
hello,
I have changed the code :
TYPES : BEGIN OF TY_VBKD,
POSNR TYPE VBKD-POSNR,
BSTKD TYPE VBKD-BSTKD,
BSTDK TYPE VBKD-BSTDK,
BSTKD_E TYPE VBKD-BSTKD_E,
BSTDK_E TYPE VBKD-BSTDK_E,
END OF TY_VBKD.
DATA : IT_VBKD TYPE TABLE OF TY_VBKD,
WA_VBKD LIKE LINE OF IT_VBKD.
FIELD-SYMBOLS: <fs_xvbkd> like xvbkd.
IF SY-TCODE = 'VA01'.
SELECT SINGLE POSNR BSTKD BSTDK BSTKD_E BSTDK_E FROM VBKD
INTO (WA_VBKD-POSNR,WA_VBKD-BSTKD,WA_VBKD-BSTDK,WA_VBKD-BSTKD_E,WA_VBKD-BSTDK_E)
* WHERE VBELN EQ XVBFA-VBELV
WHERE VBELN EQ CVBKD-VBELN
AND POSNR EQ CVBKD-POSNR.
IF SY-SUBRC = 0.
VBKD-BSTKD = WA_VBKD-BSTKD.
VBKD-BSTDK = WA_VBKD-BSTDK.
VBKD-BSTKD_E = WA_VBKD-BSTKD.
VBKD-BSTDK_E = WA_VBKD-BSTDK.
ENDIF.
endif.
i have checked in debugger that xvbkd is having 3 line items with different value .
now when i go to va01 to create sale order wtr to sales contract ... i am getting below message
"The header business data does not apply to item 10."
if i click ok then same msg for item 20 and then for 30.
if i click ok on it,then in debugger cvbkd-posnr is 30 and hence it is copying value of line item 30 only.
why i am getting this pop up.
plzzz help..
Regards,
Anuja Dhondge
Hi,
Try to find POSNR value as below and modify only that record. Something like below.
* Find exact POSNR
READ TABLE XVBAP INTO GS_VBAP
WHERE VGPOS = WA_VBKD-POSNR.
IF SY-SUBRC EQ 0.
READ TABLE XVBKD INTO GS_VBKD
WITH KEY POSNR = GS_VBAP-POSNR.
IF SY-SUBRC = 0.
GS_VBKD-BSTKD = WA_VBKD-BSTKD.
GS_VBKD-BSTDK = WA_VBKD-BSTDK.
MODIFY XVBKD FROM GS_VBKD
TRANSPORTING BSTKD BSTDK
WHERE POSNR = GS_VBKD-POSNR.
ENDIF.
ENDIF.
Hope this helps.
Thanks,
Ashok Veer
It should come to debugger 4 times , 1 for header and 3 for line items.
but XVBKD will have only 1 line item for header since BSTKD_E field is blank,
What you can do is append the lines in XVBKD no of line as in the Sales order where you fill BSTKD_E as your logic.: for eg:
loop at xvbap.
xvbkd = vbkd.
xvbkd-posnr = xvbap-posnr.
xvbkd-bstkd_E = 'Your Logic'.
append xvbkd.
endloop.
Just make sure that XVBKD is not appending every time your code hit that logic so put some checks to avoid that.
hi ,
I have changed my code as below :
TYPES : BEGIN OF TY_VBKD,
POSNR TYPE VBKD-POSNR,
BSTKD TYPE VBKD-BSTKD,
BSTDK TYPE VBKD-BSTDK,
BSTKD_E TYPE VBKD-BSTKD_E,
BSTDK_E TYPE VBKD-BSTDK_E,
END OF TY_VBKD.
DATA : IT_VBKD TYPE TABLE OF TY_VBKD,
WA_VBKD LIKE LINE OF IT_VBKD.
FIELD-SYMBOLS: <fs_xvbkd> like xvbkd.
IF SY-TCODE = 'VA01'.
SELECT SINGLE POSNR BSTKD BSTDK BSTKD_E BSTDK_E FROM VBKD
INTO (WA_VBKD-POSNR,WA_VBKD-BSTKD,WA_VBKD-BSTDK,WA_VBKD-BSTKD_E,WA_VBKD-BSTDK_E)
WHERE VBELN EQ CVBKD-VBELN
AND POSNR EQ CVBKD-POSNR.
IF SY-SUBRC = 0 and WA_VBKD-POSNR > 0.
READ TABLE XVBKD WITH KEY POSNR = CVBKD-POSNR.
IF SY-SUBRC NE 0.
VBKD-BSTKD_E = WA_VBKD-BSTKD_E.
VBKD-BSTDK_E = WA_VBKD-BSTDK_E.
VBKD-BSTKD = WA_VBKD-BSTKD.
VBKD-BSTDK = WA_VBKD-BSTDK.
ENDIF.
ENDIF.
endif.
Problem solved.
Thanks a lot for help.
Regards,
Anuja dhondge
User | Count |
---|---|
98 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.