cancel
Showing results for 
Search instead for 
Did you mean: 

GN_DELIVERY_CREATE

Former Member
0 Kudos

Hello Experts,

I am creating inbound delivery with reference to purchase order, my problem

is i have a record in table xkomdlgn , and i want to create single inbound delivery

for all data available in above mentioned table ,but it is creating inbound delivery

for each

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

hi sanju

i was wondering whether you can give/write the program which called this FORM...

and tell me please when or on which proccess are you calling this function

im writing here my code which is activated on the "POST GOOD ISSUES" in the "vl02n" transection

the whole point of my application is to create an inbound delivery and assign the Handling Units after posting good issues in the outbound delivery creation (vl02n).

im getting a various kinds of errors about it:

  • No document number was assigned

  • Data of preceding document was not transmitted

im pretty sure it is caused by the function

here is my code:

METHOD f_ex_le_shp_delivery_proc~save_document_prepare.

types: BEGIN OF t_hu_numbers,

exidv type exidv,

venum type venum,

vepos type vepos,

matnr type matnr,

charg type CHARG_D,

END OF t_hu_numbers.

DATA: wa_xlikp LIKE LINE OF ct_xlikp,

wa_xvbuk LIKE LINE OF it_xvbuk,

lv_status TYPE vttk-stlad.

  • added by Eyal Cohen 07.01.08

types: BEGIN OF t_hu_numbers,

exidv type exidv,

venum type venum,

vepos type vepos,

matnr type matnr,

charg type CHARG_D,

END OF t_hu_numbers.

DATA: out_del_lines TYPE TABLE OF lips,

wa_out_del_lines like LINE OF out_del_lines,

wa_hu_numbers type t_hu_numbers,

hu_numbers TYPE TABLE OF t_hu_numbers.

  • Data for the create inbound delivery function

DATA: wa_XVBPA like LINE OF CT_XVBPA,

xkomdlgn TYPE TABLE OF komdlgn ,

wa_xkomdlgn like LINE OF xkomdlgn,

wa_vbsk_i TYPE vbsk,

  • wa_vbsk_i like LINE OF vbsk_i,

xvbfs TYPE TABLE OF vbfs ,

xvbls TYPE TABLE OF vbls,

hu_tab TYPE hum_rehang_hu_t,

l_sammg type SAMMG,

tvsa TYPE TABLE OF tvsa,

wa_tvsa like line of tvsa,

L_NRNR type nrnr,

l_number type integer,

wa_hu_tab TYPE hum_rehang_hu.

DATA: hu_name(15) TYPE c VALUE 'V51VE-EXIDV(',

line_no(2) TYPE n VALUE '00',

lifnr type lifnr,

in_del_num type vbeln,

l_out_del type vbeln,

l_lifnr type lifnr,

rfpos type posnr.

READ TABLE ct_xlikp INTO wa_xlikp INDEX 1.

IF not is_v50agl-warenausgang is INITIAL and wa_xlikp-lfart = 'ZNL'.

l_out_del = wa_xlikp-vbeln.

READ TABLE CT_XVBPA into wa_xvbpa index 1.

l_lifnr = wa_XVBPA-lifnr.

  • get the vbsk data

SELECT SINGLE *

FROM TVSA

into wa_tvsa

WHERE SMART = 'L'.

L_NRNR = wa_TVSA-NUMKI.

CALL FUNCTION 'NUMBER_GET_NEXT'

EXPORTING

NR_RANGE_NR = L_NRNR

OBJECT = 'RV_SAMMG'

IMPORTING

NUMBER = wa_vbsk_i-SAMMG

EXCEPTIONS

OTHERS = 1.

  • wa_vbsk_i-mandt = sy-mandt.

  • wa_vbsk_i-

  • wa_vbsk_i-ERNAM = sy-uname.

  • wa_vbsk_i-BRGEW = 1111.

  • APPEND wa_vbsk_i to vbsk_i.

  • Get data from the outbound delivery

SELECT *

INTO TABLE out_del_lines

FROM lips

WHERE vbeln EQ l_out_del.

SORT out_del_lines BY posnr.

  • Get HU data

SELECT exidv vekp~venum vepos matnr charg

INTO TABLE hu_numbers

FROM vepo INNER JOIN vekp

ON vepovenum = vekpvenum

WHERE vepo~vbeln = l_out_del.

rfpos = 10.

  • Get the next free number for the inbound delivery

CALL FUNCTION 'NUMBER_GET_NEXT'

EXPORTING

nr_range_nr = '41'

object = 'RV_BELEG'

IMPORTING

number = in_del_num

EXCEPTIONS

interval_not_found = 1

number_range_not_intern = 2

object_not_found = 3

quantity_is_0 = 4

quantity_is_not_1 = 5

interval_overflow = 6

buffer_overflow = 7

OTHERS = 8.

IF sy-subrc <> 0.

MESSAGE e036(ysd) WITH text-013.

ENDIF.

  • init data for inbound delivery

LOOP AT out_del_lines INTO wa_out_del_lines.

wa_xkomdlgn-mandt = sy-mandt.

wa_xkomdlgn-lfart = 'EL'.

wa_xkomdlgn-auart = 'DL'.

wa_xkomdlgn-vbeln = in_del_num.

wa_xkomdlgn-matnr = wa_out_del_lines-matnr.

wa_xkomdlgn-werks = wa_out_del_lines-werks.

  • Get the delivery date

CLEAR wa_xkomdlgn-lfdat.

SELECT SINGLE eindt

INTO wa_xkomdlgn-lfdat

FROM eket

WHERE ebeln EQ wa_out_del_lines-vgbel AND

ebelp EQ wa_out_del_lines-vgpos.

wa_xkomdlgn-lfimg = wa_out_del_lines-lfimg.

wa_xkomdlgn-umvkz = '1'.

wa_xkomdlgn-umvkn = '1'.

wa_xkomdlgn-vrkme = wa_out_del_lines-vrkme.

wa_xkomdlgn-meins = wa_out_del_lines-meins.

wa_xkomdlgn-vgbel = wa_out_del_lines-vgbel.

wa_xkomdlgn-vgpos = wa_out_del_lines-vgpos.

wa_xkomdlgn-vgtyp = 'V'.

wa_xkomdlgn-kzazu = 'X'.

wa_xkomdlgn-lgort = '2000'.

wa_xkomdlgn-charg = wa_out_del_lines-charg.

wa_xkomdlgn-ntgew = wa_out_del_lines-ntgew.

wa_xkomdlgn-brgew = wa_out_del_lines-brgew.

wa_xkomdlgn-gewei = wa_out_del_lines-gewei.

wa_xkomdlgn-lifnr = l_lifnr.

wa_xkomdlgn-bukrs_best = '2000'.

  • wa_xkomdlgn-matkl = wa_out_del_lines-matkl.

wa_xkomdlgn-ematn = wa_out_del_lines-matnr.

  • wa_xkomdlgn-vkorg = ekpv_tab-vkorg.

  • wa_xkomdlgn-vtweg = ekpv_tab-vtweg.

  • wa_xkomdlgn-spart = ekpv_tab-spart.

APPEND wa_xkomdlgn to xkomdlgn.

  • Init the handle unit for the inbound delivery

LOOP AT hu_numbers into wa_hu_numbers WHERE matnr EQ wa_out_del_lines-matnr.

SHIFT wa_hu_numbers-exidv LEFT DELETING LEADING '0'.

wa_hu_tab-top_hu_internal = wa_hu_numbers-exidv.

wa_hu_tab-venum = wa_hu_numbers-venum.

wa_hu_tab-vepos = wa_hu_numbers-vepos.

wa_hu_tab-rfbel = in_del_num.

wa_hu_tab-rfpos = rfpos.

APPEND wa_hu_tab TO hu_tab.

ENDLOOP.

ADD 10 TO rfpos.

ENDLOOP.

  • create the inbound delivery

CALL FUNCTION 'GN_DELIVERY_CREATE'

EXPORTING

vbsk_i = wa_vbsk_i

it_handling_units = hu_tab

TABLES

xkomdlgn = xkomdlgn

xvbfs = xvbfs

xvbls = xvbls.

commit WORK AND WAIT.

ENDIF.

Former Member
0 Kudos

Hi Eyal,

Did you ever get this code to work?

We are also trying to create an inbound delivery and pack the delivery at the same time. We have got it to create the delivery, but it is creating empty handling units and is not packing the items on the delivery.

Thanks in advance,

Finbarr

Former Member
0 Kudos

solve myself

former_member294729
Participant
0 Kudos

can you give your source code ?

I also want to create inbound delivery by using it

thank you in advance.

Regards.

Former Member
0 Kudos

form xkomdlgn_fill using p_open_qty like ekpo-menge

p_eindt like eket-eindt

p_licha like eket-licha

p_charg like eket-charg

p_uzeit like eket-uzeit.

STATICS: h_grkor LIKE lips-grkor,

h_bsmng LIKE ekpo-menge.

clear T_xkomdlgn.

check T_ekpo-uptyp NE '5' " Lot

AND T_ekpo-uptyp NE '6' " Display

AND T_ekpo-uptyp NE '7' " VK-Set

AND T_ekpo-uptyp NE 'H'. " GT-Stückliste

if T_ekpo-uebpo is initial and T_ekpo-upvor CA '1I'.

check 1 = 2.

endif.

if not ekko-lifnr is initial.

CALL FUNCTION 'VENDOR_MASTER_DATA_SELECT_12'

EXPORTING

PI_LIFNR = EKKO-LIFNR

PI_EKORG = EKKO-EKORG

IMPORTING

PE_LFM1 = LFM1

EXCEPTIONS

NO_ENTRY_FOUND = 1

OTHERS = 2.

T_xkomdlgn-vsbed = lfm1-vsbed.

else.

clear T_xkomdlgn-vsbed.

endif.

T_xkomdlgn-adrnr_li = ekko-adrnr.

T_xkomdlgn-lifnr = ekko-lifnr.

T_xkomdlgn-inco1 = ekko-inco1.

T_xkomdlgn-inco2 = ekko-inco2.

T_xkomdlgn-exnum = ekko-exnum.

T_xkomdlgn-bukrs_best = ekko-bukrs.

T_xkomdlgn-matnr = T_ekpo-matnr.

T_xkomdlgn-werks = T_ekpo-werks.

*IF STORAGE LOCATION IS MISSING APPEND

*FG01 As storage location

IF T_ekpo-lgort IS INITIAL .

T_xkomdlgn-lgort = 'FG01' .

ELSE .

T_xkomdlgn-lgort = T_ekpo-lgort.

ENDIF.

  • xkomdlgn-charg = ?

T_xkomdlgn-vrkme = T_ekpo-meins.

T_xkomdlgn-meins = T_ekpo-lmein.

T_xkomdlgn-umvkz = T_ekpo-umrez.

T_xkomdlgn-umvkn = T_ekpo-umren.

if T_ekpo-matnr eq space.

T_xkomdlgn-meins = T_ekpo-meins.

T_xkomdlgn-umvkz = 1.

T_xkomdlgn-umvkn = 1.

endif.

T_xkomdlgn-insmk = T_ekpo-insmk.

T_xkomdlgn-kzfme = T_ekpo-kzfme.

T_xkomdlgn-kzvbr = T_ekpo-kzvbr.

T_xkomdlgn-lfimg = p_open_qty.

T_xkomdlgn-lfdat = p_eindt.

T_xkomdlgn-lfuhr = p_uzeit.

  • xkomdlgn-vstel = ?

  • xkomdlgn-vkorg = ?

  • xkomdlgn-vtweg = ?

  • xkomdlgn-spart = ?

T_xkomdlgn-TRAID = T_ekpo-TRAID."CARRIER CODE

T_xkomdlgn-LIFEX = T_ekpo-LIFEX."External ID

T_xkomdlgn-BOLNR = T_ekpo-BOLNR."Bill Of Lading

T_xkomdlgn-XABLN = T_ekpo-XABLN."Goods Receipt/Issue Slip Number

T_xkomdlgn-vgbel = T_ekpo-ebeln.

T_xkomdlgn-vgpos = T_ekpo-ebelp.

T_xkomdlgn-lfart = gf_dlv_type.

T_xkomdlgn-vgtyp = 'V'.

T_xkomdlgn-kzazu = 'X'.

T_xkomdlgn-knttp = T_ekpo-knttp.

T_xkomdlgn-sobkz = T_ekpo-sobkz.

select * from t163g where bstae eq T_EKPO-bstae

and ebtyp eq gf_ebtyp.

exit.

endselect.

if sy-subrc = 0.

  • Prüfen, ob Lieferavis WE-Zuordnung hat (Vorauss. für WE über VL32)

  • und wepos prüfen

if t163g-wezuo eq space or T_ekpo-wepos eq space.

T_xkomdlgn-nowab = 'X'.

else.

clear T_xkomdlgn-nowab.

endif.

endif.

if T_ekpo-matnr is initial or T_ekpo-pstyp = '6'.

T_xkomdlgn-posar = 'B'.

endif.

T_xkomdlgn-ematn = T_EKPO-ematn.

T_xkomdlgn-mfrnr = T_EKPO-mfrnr.

T_xkomdlgn-mfrpn = T_EKPO-mfrpn.

T_xkomdlgn-emnfr = T_EKPO-emnfr.

T_xkomdlgn-cuobj = T_EKPO-cuobj.

T_xkomdlgn-uebto = T_EKPO-uebto.

T_xkomdlgn-untto = T_EKPO-untto.

T_xkomdlgn-uebtk = T_EKPO-uebtk.

T_xkomdlgn-lichn = p_licha.

T_xkomdlgn-charg = p_charg.

T_xkomdlgn-bwtar = T_EKPO-bwtar.

T_xkomdlgn-kdmat = T_EKPO-idnlf.

T_xkomdlgn-arktx = T_EKPO-txz01.

T_xkomdlgn-mfrgr = T_EKPO-mfrgr.

T_xkomdlgn-gewei = T_EKPO-gewei.

T_xkomdlgn-voleh = T_EKPO-voleh.

T_xkomdlgn-ntgew = T_EKPO-ntgew * T_xkomdlgn-lfimg.

T_xkomdlgn-brgew = T_EKPO-brgew * T_xkomdlgn-lfimg.

T_xkomdlgn-volum = T_EKPO-volum * T_xkomdlgn-lfimg.

T_xkomdlgn-ean11 = T_EKPO-ean11.

T_xkomdlgn-podrel = t163l-podrel.

T_xkomdlgn-aktnr = T_EKPO-aktnr.

T_xkomdlgn-abeln = T_EKPO-abeln.

T_xkomdlgn-abelp = T_EKPO-abelp.

  • xkomdlgn-ltssf = only sort criteria in vl31n

T_xkomdlgn-aurel = T_EKPO-aurel.

T_xkomdlgn-idnlf = T_EKPO-idnlf.

T_xkomdlgn-matkl = T_EKPO-matkl.

  • Leergut-Stückliste übernehmen

clear T_XKOMDLGN-grkor.

clear T_XKOMDLGN-kmpmg.

clear T_XKOMDLGN-uepos.

clear T_XKOMDLGN-uepvw. "549736

if T_EKPO-upvor ca '3X'.

h_grkor = h_grkor + 1.

T_XKOMDLGN-grkor = h_grkor.

h_bsmng = T_EKPO-menge.

endif.

if not T_EKPO-uebpo is initial and

T_EKPO-uptyp ca '3X'.

T_XKOMDLGN-uepvw = 'G'. "549736

T_XKOMDLGN-uepos = T_EKPO-uebpo.

T_XKOMDLGN-grkor = h_grkor.

if h_bsmng ne 0.

T_XKOMDLGN-kmpmg = T_EKPO-menge / h_bsmng.

endif.

endif.

if T_EKPO-pstyp eq '2'.

T_XKOMDLGN-sobkz = 'K'.

endif.

  • Kontierungsfelder

if T_EKPO-sobkz eq 'E' or T_EKPO-sobkz eq 'Q'.

call function 'MMPUR_EKKN_READ_EBELN_EBELP'

exporting

pi_ebeln = T_EKPO-ebeln

pi_ebelp = T_EKPO-ebelp

  • PI_BYPASSING_BUFFER =

  • PI_REFRESH_BUFFER =

tables

pto_ekkn_po = xekkn

exceptions

no_records_requested = 1

others = 2.

if sy-subrc eq 0.

read table xekkn index 1.

T_XKOMDLGN-ps_psp_pnr = xekkn-ps_psp_pnr.

T_XKOMDLGN-vbelv = xekkn-vbeln.

T_XKOMDLGN-posnv = xekkn-vbelp.

endif.

endif.

append T_XKOMDLGN.

ENDFORM. "xkomdlgn_fill

LOOP AT T_XKOMDLGN.

  • set default parameter

T_XKOMDLGN-VGTYP = 'V'.

T_XKOMDLGN-KZAZU = 'X'.

IF T_XKOMDLGN-LFART IS INITIAL.

T_XKOMDLGN-LFART = 'EL'.

ENDIF.

MODIFY T_XKOMDLGN.

ENDLOOP.

SELECT SINGLE * FROM TVSA WHERE SMART = xvbsk-SMART.

IF SY-SUBRC <> 0.

      • Error Handling To be Done

  • Meldung ins Protokoll

ENDIF.

L_NRNR = TVSA-NUMKI.

CALL FUNCTION 'NUMBER_GET_NEXT'

EXPORTING

NR_RANGE_NR = L_NRNR

OBJECT = 'RV_SAMMG'

IMPORTING

NUMBER = xvbsk-SAMMG

EXCEPTIONS

OTHERS = 1.

IF SY-SUBRC <> 0.

      • Error Hadling TBD

  • Meldung ins Protokoll

ENDIF.

call function 'GN_DELIVERY_CREATE'

exporting

  • no_commit = 'X'

vbsk_i = xvbsk

  • if_no_deque = 'X'

  • IF_MASS_READ_MAT_SW = 'X'

*

  • vbls_pos_rueck = 'X'

tables

xkomdlgn = T_xkomdlgn

xvbfs = xvbfs

xvbls = xvbls

xxlips = xlips.

get informatioin from ekpo table and fill T_xkomdlgn

former_member294729
Participant
0 Kudos

dear sanju joseph , thank you very much.

Former Member
0 Kudos

It's great to hear that, you got the solution on your own.

Can you please let me know how to create Inbound Delivery with reference to a sales order instead of BDC.

Regards,

YSRao.

0 Kudos

How did you solve it as I am also facing the same issue. My IBDs are getting split up.