Danke für den Hinweis, aber das war genau das, was ich schon versucht hatte. Das Ergebnis war, dass die HU ausgepackt war, aber der Packstatus der ausgepackten Lieferposition war noch "C". Damit würde im Packdialog keine zu verpackende Menge mehr angezeigt werden und man könnte die Lieferposition nicht neu verpacken. Das ist auch im OSS-Hinweis 581282 - Verpacken von Lieferungen ueber BAPI oder Funktionsbaustein beschrieben:wreichelt hat geschrieben:Hallo,
auf der Seite http://www.tricktresor.de
http://www.tricktresor.de/blog/auspacken-von-hus/
gibt's Beispiele dazu.
Gruß
Wolfgang
Ich werde mal Lars Empfehlung, obwohl es mir vor dem erneuten K(r)ampf mit dem WS_DELIVERY_UPDATE graut.Es sollen Handling Units zu einer Lieferung erzeugt oder veraendert werden. Es ist geplant, dies ueber die BAPIs zum Business Objekt "Handling Units" zu realisieren. (Z.B. BAPI_HU_CREATE, BAPI_HU_DELETE, BAPI_HU_PACK, BAPI_HU_REPACK, BAPI_HU_UNPACK). Da diese Bausteine kein update auf die Lieferung machen, koennen diese nicht fuer das Verpacken in der Lieferung genutzt werden.
Ebenso ist es nicht moeglich, Lieferungen mit den Funktionsbausteinen der Funktionsgruppe V51E zu verpacken (HU_CREATE_ITEM, HU_CREATE_ONE_HU, HU_DELETE_HU, HU_REPACK, HU_UNPACK).
Code: Alles auswählen.
append iv_hu to gt_exidv.
CALL FUNCTION 'HU_GET_HUS'
EXPORTING
* IF_OBJECT =
IF_LOCK_HUS = 'X'
IF_MORE_HUS = 'X'
if_no_loop = /spe/if_consolidator_constants=>c_no
IT_HUS = gt_exidv
IMPORTING
ET_HEADER = gt_header
ET_ITEMS = gt_item
ET_ITEM_SERIALNO = it_serial_no
* ET_HIGHEST_LEVELS = gt_high
EXCEPTIONS
HUS_LOCKED = 1
NO_HU_FOUND = 2
FATAL_ERROR = 3
OTHERS = 4 .
* Check for exceptions
et_messages = create_messages( iv_subrc = sy-subrc ).
if et_messages[] is not initial.
exit.
endif.
* Prepare the parameter to call HU_Unpack method
loop at gt_item assigning <item>.
ls_from-exidv = iv_hu.
LS_ITEM-ITEM_NUMBER = <item>-vepos.
LS_ITEM-VELIN = '1'. "Material item
LS_ITEM-QUANTITY = <item>-vemng.
LS_ITEM-MEINS = <item>-vemeh.
* Get the serial numbers into it_hu_ser_no for the item in the HU for
* the same VENUM and VEPOS as the <item>
loop at it_serial_no into ls_serial_no.
if ls_serial_no-venum = <item>-venum and
ls_serial_no-vepos = <item>-vepos.
move ls_serial_no-sernr to ls_hu_ser_no-sernr.
append ls_hu_ser_no to lt_hu_ser_no.
endif.
endloop.
* Call the unpack method to delete the HU; pass the serial number
* IT_HU_SERIAL_NO as an exporting parameter
CALL METHOD me->HU_UNPACK
EXPORTING
IS_FROM = ls_from
IT_SERIAL_NR = lt_hu_ser_no
* IMPORTING
* ES_HEADER =
CHANGING
IS_ITEM = ls_item
EXCEPTIONS
INPUT_MISSING = 1
INPUT_ERROR = 2
NOT_POSSIBLE = 3
NOT_PACKED = 4
FATAL_ERROR = 5
others = 6
.
* Check for exceptions
et_messages = create_messages( iv_subrc = sy-subrc ).
if et_messages[] is not initial.
exit.
endif.
endloop.
******************************
* end of change delivery-HUs *
******************************
****************************************
* STEP 3
****************************************
ls_vbkok_wa-vbeln = iv_dn.
ls_vbkok_wa-packing_final = 'X'.
ls_vbkok_wa-vbeln_vl = iv_dn.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok_wa
delivery = iv_dn
nicht_sperren = 'X'
if_get_delivery_buffered = 'X'
if_no_generic_system_service = 'X'
TABLES
prot = lt_prot.
commit work and wait.
Code: Alles auswählen.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok_wa
delivery = i_vbeln
nicht_sperren = 'X'
if_get_delivery_buffered = 'X'
if_no_generic_system_service = 'X'
TABLES
vbpok_tab = lt_vbpok
prot = lt_prot.
Code: Alles auswählen.
REPORT zz_hu_auspacken .
TYPE-POOLS: vsep.
DATA: lt_header TYPE hum_hu_header_t,
lt_items TYPE hum_hu_item_t.
DATA: lwa_items LIKE LINE OF lt_items,
lwa_header LIKE LINE OF lt_header.
DATA: h_is_objects TYPE hum_object,
lwa_vbkok_wa LIKE vbkok,
lt_verko TYPE TABLE OF verko,
lwa_verko LIKE LINE OF lt_verko.
DATA: cs_p_r TYPE vsep_s_pithu.
PARAMETER: p_belnr TYPE likp-vbeln DEFAULT '80000010',
p_posnr TYPE lips-posnr DEFAULT '00020',
p_auspac TYPE ltap_ndifa DEFAULT '-10.000'.
START-OF-SELECTION.
h_is_objects-object = '01'.
h_is_objects-objkey = p_belnr.
*1. ** Globale Tabellen füllen
CALL FUNCTION 'HU_GET_HUS'
EXPORTING
if_lock_hus = 'X'
is_objects = h_is_objects
IMPORTING
et_header = lt_header
et_items = lt_items.
READ TABLE lt_items INTO lwa_items WITH KEY vbeln = p_belnr
posnr = p_posnr.
READ TABLE lt_header INTO lwa_header WITH KEY venum = lwa_items-venum.
MOVE-CORRESPONDING lwa_items TO cs_p_r.
cs_p_r-belnr = lwa_items-vbeln.
cs_p_r-quantity = p_auspac.
*2. ** Auspacken des HU's
CALL FUNCTION 'HU_PACKING_AND_UNPACKING'
EXPORTING
is_packing_request = cs_p_r
IMPORTING
es_p_request = cs_p_r.
*3. **Verbuchen der HUs nach erfolgreicher letzter Prüfung
CALL FUNCTION 'HU_POST'
EXPORTING
if_synchron = 'X'
if_commit = 'X'
is_object = h_is_objects.
LOOP AT lt_header INTO lwa_header. ": where venum <> p_venum.
MOVE-CORRESPONDING lwa_header TO lwa_verko.
APPEND lwa_verko TO lt_verko.
ENDLOOP.
lwa_vbkok_wa-vbeln_vl = p_belnr.
lwa_vbkok_wa-vbtyp_vl = 'J'.
*4. ** Update: Änderungen von Lieferungen
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
vbkok_wa = lwa_vbkok_wa
delivery = p_belnr
TABLES
verko_tab = lt_verko.
*5. ** und WICHTIG!!!
COMMIT WORK.
ook tot ziens
Das Tricktresor-Programm funktioniert leider wegen der Einschränkung im HU_Unpack auf Verpackungsobjekte leider nicht mit Lieferung bzw. Transporten (Shipments)wreichelt hat geschrieben: ↑26.01.2016 17:04Hallo,
auf der Seite www.tricktresor.de
http://www.tricktresor.de/blog/auspacken-von-hus/
gibt's Beispiele dazu.
Gruß
Wolfgang
Code: Alles auswählen.
if ( ls_header-vpobj = gc_obj_01 or ls_header-vpobj = gc_obj_02 or
ls_header-vpobj = gc_obj_03 or ls_header-vpobj = gc_obj_04 or
( ls_header-vpobj = gc_obj_08 and gs_object-object ne gc_obj_08 ) )
and gs_general-object ne '14'.
Code: Alles auswählen.
DATA:
g_venum TYPE venum VALUE '',
g_vbeln TYPE vbeln_vl VALUE ''.
DATA(g_rehang_hu) = VALUE hum_rehang_hu_t( (
top_hu_internal = g_venum
venum = g_venum
vepos = ''
rfbel = g_vbeln
rfpos = ''
) ).
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
vbkok_wa = VALUE vbkok( vbeln = g_vbeln )
synchron = abap_true
commit = abap_true
delivery = g_vbeln
TABLES
it_handling_units_1 = g_rehang_hu.
Code: Alles auswählen.
DATA:
g_vbeln TYPE vbeln_vl VALUE '',
g_venum TYPE venum VALUE '',
g_verko TYPE TABLE OF verko,
g_venums TYPE hum_venum_t,
g_header TYPE hum_hu_header_t.
CALL FUNCTION 'HU_GET_HUS'
EXPORTING
is_objects = VALUE hum_object( object = '01' objkey = g_vbeln )
IMPORTING
et_header = g_header.
g_venums = VALUE #( ( venum = g_venum ) ).
CALL FUNCTION 'V51P_DELETE_RELATIONSHIP'
EXPORTING
it_hus = g_venums.
IF lines( g_header ) EQ 1.
g_verko = VALUE #( ( ) ).
ELSE.
g_verko = VALUE #(
FOR x IN g_header WHERE ( venum NE g_venum )
( exidv = x-exidv )
).
ENDIF.
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
vbkok_wa = VALUE vbkok( vbeln = g_vbeln )
synchron = abap_true
commit = abap_true
delivery = g_vbeln
TABLES
verko_tab = g_verko.