cancel
Showing results for 
Search instead for 
Did you mean: 

Item Level Po Number and PO date need to copy from sales contract to sales order while creating sales order with reference to sales contract

anuja_gdhodnge
Participant
0 Kudos

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

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

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.

anuja_gdhodnge
Participant
0 Kudos

Hello Gaurav,

Yes Exit is getting called for each line item.

but only last line item value are getting copied to sales order...

anuja_gdhodnge
Participant
0 Kudos

because vbkd is a structure....in which i am passing the value...

if i pass value to xvbkd then nothing is getting copied to sales order...

Ashokv
Explorer
0 Kudos

Hi,

I think you are not considering POSNR while updating VBKD. Check what data XVBKD contains at that moments. May be you can try modifying XVBKD with reference to that POSNR.

Thanks,

Ashok Veer

anuja_gdhodnge
Participant
0 Kudos

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

Ashokv
Explorer
0 Kudos

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

Former Member
0 Kudos

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.

anuja_gdhodnge
Participant
0 Kudos

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

Answers (0)