cancel
Showing results for 
Search instead for 
Did you mean: 

Link between delivery line item and sales order item schedule line.

Former Member
0 Kudos
3,045

Hello friends,

This is a continuation of my earlier query - for which I got half the solution, and this is the remaining problem.

I want to know: from delivery document line item, how to link it to sales order line item's schedule line (when there are multiple schedule lines with identical quantities).

Thanks for your help.

- Chetan

View Entire Topic
jj
Active Contributor
0 Kudos

This is the code which i used for the same purpose and its working.

Hope this will help you too....

****it_itab is my final internal table.

*Internal table for manupulating the Delivery balance when

*its used in more than one schedule line

TYPES: BEGIN OF ty_new,

vbeln TYPE vbep-vbeln," so no

posnr TYPE vbep-posnr," so line no

etenr TYPE vbep-etenr," schedule line

delno TYPE lips-vbeln,"delivery no

delposnr TYPE lips-posnr,"del item no

totval TYPE vbep-wmeng," total del wise value

val TYPE vbep-wmeng," del wise used value

sdval TYPE vbep-wmeng,"schedule wise del used value

sdtotval TYPE vbep-wmeng," total Schedule value

END OF ty_new.

DATA:it_new TYPE ty_new OCCURS 0,

wa_new TYPE ty_new.

DATA: it_vbepvb TYPE TABLE OF vbepvb,

wa_vbepvb LIKE LINE OF it_vbepvb,

fvbfa TYPE TABLE OF vbfa,

fvbup TYPE TABLE OF vbup,

fvbap TYPE TABLE OF vbapvb.

LOOP AT it_vbak INTO wa_vbak.

LOOP AT it_vbap INTO wa_vbap

WHERE vbeln = wa_vbak-vbeln.

SELECT * FROM vbfa INTO TABLE fvbfa WHERE vbelv = wa_vbap-vbeln

AND posnv = wa_vbap-posnr.

SELECT * FROM vbup INTO TABLE fvbup WHERE vbeln = wa_vbap-vbeln

AND posnr = wa_vbap-posnr.

SELECT * FROM vbap INTO TABLE fvbap WHERE vbeln = wa_vbap-vbeln

AND posnr = wa_vbap-posnr.

SELECT * FROM vbep INTO TABLE it_vbepvb WHERE vbeln = wa_vbap-vbeln

AND posnr = wa_vbap-posnr.

CALL FUNCTION 'RV_SCHEDULE_CHECK_DELIVERIES'

EXPORTING

fbeleg = wa_vbap-vbeln

fposnr = wa_vbap-posnr

  • FVERRECHNUNG = ' '

  • FS073_ALT = ' '

  • IF_NO_SORT = ' '

TABLES

fvbfa = fvbfa

fvbup = fvbup

fxvbep = it_vbepvb

  • FVBLB =

fvbap = fvbap

  • EXCEPTIONS

  • FEHLER_BEI_LESEN_FVBUP = 1

  • FEHLER_BEI_LESEN_FXVBEP = 2

  • OTHERS = 3

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

SORT it_vbepvb BY vbeln posnr edatu.

LOOP AT it_vbepvb INTO wa_vbepvb

WHERE vbeln = wa_vbap-vbeln

AND posnr = wa_vbap-posnr.

        • to write data of schedule line with no delivery

MOVE wa_vbepvb-olfmng_flt TO wa_itab-openqty.

IF wa_vbepvb-bmeng EQ wa_itab-openqty.

CLEAR wa_itab.

PERFORM schedule_data. "schedule line based data to be displayed

MOVE: wa_vbap-lgort TO wa_itab-lgort.

MOVE: wa_vbepvb-etenr TO wa_itab-etenr,

wa_vbepvb-bmeng TO wa_itab-kwmeng,

wa_vbepvb-olfmng_flt TO wa_itab-openqty.

APPEND wa_itab TO it_itab .

CLEAR wa_itab.

ENDIF.

LOOP AT it_vbfa INTO wa_vbfa WHERE vbelv = wa_vbepvb-vbeln

AND posnv = wa_vbepvb-posnr.

READ TABLE it_likp INTO wa_likp WITH KEY vbeln = wa_vbfa-vbeln.

CHECK wa_likp-bldat >= wa_vbepvb-edatu.

  • check the Delivery doc date with the schedule line confirmed date

CLEAR: delbal, deltot,wa_new.

LOOP AT it_new INTO wa_new WHERE vbeln = wa_vbepvb-vbeln

AND posnr = wa_vbepvb-posnr

AND etenr = wa_vbepvb-etenr.

deltot = deltot + wa_new-sdval.

ENDLOOP.

delbal = wa_new-sdtotval - deltot.

CHECK sy-subrc <> 0 OR delbal GT 0.

MOVE wa_vbepvb-olfmng_flt TO wa_itab-openqty.

CHECK wa_vbepvb-bmeng NE wa_itab-openqty.

****To check whether this delivery is already fully allocated against

        • any other schedule.

LOOP AT it_lips INTO wa_lips WHERE vbeln = wa_vbfa-vbeln

AND posnr = wa_vbfa-posnn.

MOVE: wa_likp-bolnr TO wa_itab-vesname.

MOVE: wa_likp-vbeln TO wa_itab-delno.

MOVE: wa_likp-wadat TO wa_itab-wadat.

MOVE: wa_likp-anzpk TO wa_itab-anzpk.

MOVE: wa_likp-lddat TO wa_itab-lddat.

MOVE: wa_likp-ernam TO wa_itab-ernam.

******end of code added by IVL1 on sep 27 2007 #3618

PERFORM schedule_data.

IF wa_lips-umvkz <> 0.

tempquant = wa_lips-umvkn / wa_lips-umvkz.

ELSE.

tempquant = wa_lips-umvkn. "delivery qty

ENDIF.

tempquant = tempquant * wa_vbfa-rfmng.

***New logic added to get delivery qty schedule wise****

MOVE: wa_vbepvb-etenr TO wa_itab-etenr,

wa_vbepvb-bmeng TO wa_itab-kwmeng,

wa_vbepvb-olfmng_flt TO wa_itab-openqty. "jo

**if delivery qty is less than or equal to schedule line qty******

IF tempquant LE wa_vbepvb-bmeng.

wa_itab-delqty = tempquant.

LOOP AT it_new INTO wa_new WHERE vbeln = wa_vbepvb-vbeln

AND posnr = wa_vbepvb-posnr

AND etenr = wa_vbepvb-etenr

AND delno = wa_lips-vbeln

AND delposnr = wa_lips-posnr.

MOVE-CORRESPONDING wa_itab TO wa_new.

wa_new-delposnr = wa_lips-posnr.

wa_new-val = tempquant.

wa_new-totval = tempquant.

wa_new-sdval = tempquant.

wa_new-sdtotval = wa_vbepvb-bmeng.

MODIFY TABLE it_new FROM wa_new .

IF NOT sy-subrc IS INITIAL.

APPEND wa_new TO it_new.

ENDIF.

ENDLOOP.

IF sy-subrc <> 0.

MOVE-CORRESPONDING wa_itab TO wa_new.

wa_new-delposnr = wa_lips-posnr.

wa_new-val = tempquant.

wa_new-totval = tempquant.

wa_new-sdval = tempquant.

wa_new-sdtotval = wa_vbepvb-bmeng.

APPEND wa_new TO it_new.

ENDIF.

  • wa_itab-delqty = tempquant.

  • CLEAR tempquant.

ELSE.

  • lips qty > so schedule lineqty

CLEAR deltol.

LOOP AT it_new INTO wa_new WHERE vbeln = wa_vbepvb-vbeln

AND posnr = wa_vbepvb-posnr

  • AND etenr = wa_vbepvb-etenr

AND delno = wa_lips-vbeln

AND delposnr = wa_lips-posnr.

deltol = deltol + wa_new-val.

ENDLOOP.

LOOP AT it_new INTO wa_new WHERE vbeln = wa_vbepvb-vbeln

AND posnr = wa_vbepvb-posnr

AND delno = wa_lips-vbeln

AND delposnr = wa_lips-posnr.

MOVE-CORRESPONDING wa_itab TO wa_new.

wa_new-val = wa_new-totval - deltol.

wa_itab-delqty = wa_new-val.

wa_new-delposnr = wa_lips-posnr.

wa_new-totval = tempquant.

wa_new-sdval = wa_new-val.

wa_new-sdtotval = wa_vbepvb-bmeng.

MODIFY TABLE it_new FROM wa_new .

IF NOT sy-subrc IS INITIAL.

APPEND wa_new TO it_new.

ENDIF.

ENDLOOP.

IF sy-subrc <> 0.

MOVE-CORRESPONDING wa_itab TO wa_new.

wa_itab-delqty = wa_vbepvb-bmeng.

wa_new-delposnr = wa_lips-posnr.

wa_new-val = wa_vbepvb-bmeng.

wa_new-totval = tempquant.

wa_new-sdval = wa_vbepvb-bmeng.

wa_new-sdtotval = wa_vbepvb-bmeng.

APPEND wa_new TO it_new.

ENDIF.

ENDIF.

IF NOT wa_lips-lgort IS INITIAL.

MOVE: wa_lips-lgort TO wa_itab-lgort.

ELSE.

MOVE: wa_vbap-lgort TO wa_itab-lgort.

ENDIF.

APPEND wa_itab TO it_itab .

CLEAR wa_itab.

ENDLOOP.

ENDLOOP.

CLEAR wa_vbepvb.

ENDLOOP.

ENDLOOP.

CLEAR wa_vbak.

ENDLOOP.

jj
Active Contributor
0 Kudos
code.txt

please refer this file