Code: Alles auswählen.
REPORT z_testdp.
DATA ls_object TYPE hum_object.
DATA: ls_hum TYPE hum_rehang_hu,
lt_hum TYPE TABLE OF hum_rehang_hu.
DATA lf_exidv TYPE exidv VALUE 'HU_NUMMER'.
DATA lt_messages TYPE huitem_messages_t.
DATA: ls_hum_exidv TYPE hum_exidv,
lt_hum_exidv TYPE hum_exidv_t.
ls_object-object = '01'.
ls_object-objkey = 'LIEFERNUMMER'.
lf_exidv = |{ lf_exidv ALPHA = IN }|.
ls_hum_exidv-exidv = lf_exidv.
APPEND ls_hum_exidv TO lt_hum_exidv.
CALL FUNCTION 'HU_GET_HUS'
EXPORTING
it_hus = lt_hum_exidv
IMPORTING
* ET_HEADER =
et_messages = lt_messages
EXCEPTIONS
hus_locked = 1
no_hu_found = 2
fatal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
SELECT SINGLE * FROM vekp
INTO @DATA(ls_vekp)
WHERE exidv EQ @lf_exidv.
ls_hum-venum = ls_vekp-venum.
ls_hum-top_hu_internal = ls_vekp-venum.
APPEND ls_hum TO lt_hum.
CALL FUNCTION 'HU_ASSIGN_HUS_TO_OBJECT'
EXPORTING
is_object = ls_object
* IS_HEADER51 =
it_handling_units = lt_hum
* IT_HUM_QM =
IMPORTING
et_messages = lt_messages
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* Update HU data:
CALL FUNCTION 'HU_PACKING_UPDATE'
EXPORTING
if_synchron = 'X'.
DATA lt_prott TYPE TABLE OF prott.
DATA ls_prott TYPE prott.
DATA ls_vbkok TYPE vbkok.
DATA: lv_error_any TYPE xfeld,
lv_error_inf TYPE xfeld,
lv_error_fch TYPE xfeld.
* Update delivery:
ls_vbkok-vbeln_vl = ls_object-objkey.
ls_vbkok-vbeln = ls_object-objkey.
ls_vbkok-packing_final = 'X'.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok
delivery = ls_vbkok-vbeln
IMPORTING
ef_error_any_0 = lv_error_any
ef_error_in_interface_0 = lv_error_inf
ef_error_in_final_check_0 = lv_error_fch
TABLES
it_handling_units = lt_hum
prot = lt_prott
EXCEPTIONS
error_message = 1
OTHERS = 2.
COMMIT WORK AND WAIT.
Hatte auch schon so meine Späße mit den HUs, du scheinst dich da ja richtig auszutobenBarney hat geschrieben:Wenn ich mir meine HU anschaue, fällt mir auf, dass die Felder VSTEL, VKORG und VTWEG nicht gefüllt sind. Wenn ich die HU direkt in der Lieferung erzeuge, sind diese Felder aber gepflegt. Ich vermute, dass die Lieferung bei meinem Vorgehen noch nicht wirklich die Zuordnung mitbekommt und deswegen die HU nicht richtig in der Lieferung ist.
Hat jemand einen Hinweis, woran das liegen könnte oder was ich aufrufen muss, dass damit der Verpackungsvorgang richtig läuft?
Code: Alles auswählen.
CALL FUNCTION 'HU_GET_HUS'
EXPORTING
it_hus = lt_hum_exidv
IMPORTING
* ET_HEADER =
et_messages = lt_messages
EXCEPTIONS
hus_locked = 1
no_hu_found = 2
fatal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
Code: Alles auswählen.
CALL FUNCTION 'HU_GET_HUS'
EXPORTING
it_hus = lt_hum_exidv
IMPORTING
* ET_HEADER =
et_messages = lt_messages.
* EXCEPTIONS
* hus_locked = 1
* no_hu_found = 2
* fatal_error = 3
* OTHERS = 4.
*IF sy-subrc <> 0.
** Implement suitable error handling here
*ENDIF.
Code: Alles auswählen.
DATA ls_object TYPE hum_object.
DATA: ls_hum TYPE hum_rehang_hu,
lt_hum TYPE TABLE OF hum_rehang_hu.
DATA lf_exidv TYPE exidv VALUE 'HU_NUMMER'.
DATA lt_messages TYPE huitem_messages_t.
DATA: ls_hum_exidv TYPE hum_exidv,
lt_hum_exidv TYPE hum_exidv_t.
DATA ls_header51 TYPE header51.
DATA lf_vbeln TYPE vbeln.
data ls_likp2 type likpvb.
ls_object-object = '01'.
ls_object-objkey = 'LIEFERNUMMER'.
lf_exidv = |{ lf_exidv ALPHA = IN }|.
lf_vbeln = ls_object-objkey.
SELECT SINGLE * FROM vekp
INTO @DATA(ls_vekp)
WHERE exidv EQ @lf_exidv.
ls_hum-venum = ls_vekp-venum.
ls_hum-top_hu_internal = ls_vekp-venum.
ls_hum-top_hu_external = lf_exidv.
ls_hum-rfbel = ls_object-objkey.
ls_hum-rfpos = 'POS_NUMMER'.
APPEND ls_hum TO lt_hum.
SELECT SINGLE * FROM likp
INTO @DATA(ls_likp)
WHERE vbeln EQ @lf_vbeln.
MOVE-CORRESPONDING ls_likp to ls_likp2.
PERFORM assign_hu_to_delivery(sapmv50a)
USING ls_likp2 lt_hum[].
COMMIT WORK AND WAIT.
Also in dem Testprogramm habe ich mir überhaupt keine Gedanken über das Fehlerhandling gemacht. Trotzdem muss ich fragen, wo denn der Vorteil Deines Vorschlages ist, denn bei einigen Bausteinen brechen diese mit RAISE ab, aber die Protokolltabelle ist leer. Wenn ich dann später in meinem Programm ein vernünftiges Fehlerhandling machen will, dann muss ich die SY auslesen, um dem Nutzer ein passendes Feedback zu geben.Unit605 hat geschrieben:Auch, oder gerade weil es sich 'nur' um ein Testprogramm handelt, verstehe ich das Errorhandling bei Deinen FuBa Aufrufen nicht.
...snip...
In einem Testprogramm mache ich mir auch keine grossen Gedanken ueber das Fehlerhandling. In einem fertigen Programm sieht das Fehlerhandling auch gaaaanz anders aus, als in einem Testprogramm, fuer Entwickler.Barney hat geschrieben:Also in dem Testprogramm habe ich mir überhaupt keine Gedanken über das Fehlerhandling gemacht. Trotzdem muss ich fragen, wo denn der Vorteil Deines Vorschlages ist, denn bei einigen Bausteinen brechen diese mit RAISE ab, aber die Protokolltabelle ist leer. Wenn ich dann später in meinem Programm ein vernünftiges Fehlerhandling machen will, dann muss ich die SY auslesen, um dem Nutzer ein passendes Feedback zu geben.Unit605 hat geschrieben:Auch, oder gerade weil es sich 'nur' um ein Testprogramm handelt, verstehe ich das Errorhandling bei Deinen FuBa Aufrufen nicht.
...snip...
Tot ziens.
Code: Alles auswählen.
IF SY-SUBRC NE 0. " Materialkurztext fehlt!
* System error in program & (&) -> F1
MESSAGE X895(CJ) WITH sy-repid.
ENDIF.
Code: Alles auswählen.
*IF SY-SUBRC NE 0.
*** Person hat keine Faxnummer, ist aber auch egal, da nicht mandatory
*ENDIF.
Hey,Barney hat geschrieben: ↑24.03.2016 15:33Hallo,
die Hinweise von Ingo und Hendrik haben leider nicht direkt weitergeholfen. Aber ich habe noch ein wenig rechecheriert und der Zwischenstand ist folgender:
Mein Testprogramm hat sich wie folgt vereinfacht:
Danach sah die HU genauso aus, als hätte ich sie mit der VL02N hinzugefügt. Nach Ostern werde ich schauen, ob beim Verpacken dann auch wie gewünscht die Packunterposition in der Lieferung erzeugt wird.Code: Alles auswählen.
DATA ls_object TYPE hum_object. DATA: ls_hum TYPE hum_rehang_hu, lt_hum TYPE TABLE OF hum_rehang_hu. DATA lf_exidv TYPE exidv VALUE 'HU_NUMMER'. DATA lt_messages TYPE huitem_messages_t. DATA: ls_hum_exidv TYPE hum_exidv, lt_hum_exidv TYPE hum_exidv_t. DATA ls_header51 TYPE header51. DATA lf_vbeln TYPE vbeln. data ls_likp2 type likpvb. ls_object-object = '01'. ls_object-objkey = 'LIEFERNUMMER'. lf_exidv = |{ lf_exidv ALPHA = IN }|. lf_vbeln = ls_object-objkey. SELECT SINGLE * FROM vekp INTO @DATA(ls_vekp) WHERE exidv EQ @lf_exidv. ls_hum-venum = ls_vekp-venum. ls_hum-top_hu_internal = ls_vekp-venum. ls_hum-top_hu_external = lf_exidv. ls_hum-rfbel = ls_object-objkey. ls_hum-rfpos = 'POS_NUMMER'. APPEND ls_hum TO lt_hum. SELECT SINGLE * FROM likp INTO @DATA(ls_likp) WHERE vbeln EQ @lf_vbeln. MOVE-CORRESPONDING ls_likp to ls_likp2. PERFORM assign_hu_to_delivery(sapmv50a) USING ls_likp2 lt_hum[]. COMMIT WORK AND WAIT.
Tot ziens
Code: Alles auswählen.
DATA ls_object TYPE hum_object.
DATA: ls_hum TYPE hum_rehang_hu,
lt_hum TYPE TABLE OF hum_rehang_hu.
DATA lf_exidv TYPE exidv VALUE '00000000000113023787'.
DATA lt_messages TYPE huitem_messages_t.
DATA: ls_hum_exidv TYPE hum_exidv,
lt_hum_exidv TYPE hum_exidv_t.
DATA ls_header51 TYPE header51.
DATA lf_vbeln TYPE vbeln.
DATA ls_likp2 TYPE likpvb.
DATA: lt_huchanged TYPE TABLE OF bapihuheader,
ls_huchanged TYPE bapihuheader,
lv_switch(1) TYPE c VALUE 'A',
lt_return TYPE TABLE OF bapiret2.
DATA ls_flags TYPE v51p_select_flags.
DATA lt_hus TYPE hum_exidv_t.
DATA ls_hu LIKE LINE OF lt_hus.
DATA lt_items TYPE TABLE OF vepovb.
DATA lt_history TYPE TABLE OF vevwvb.
DATA lt_high TYPE hum_venum_t.
DATA lt_new_values TYPE hum_update_header_t.
DATA ls_new_values LIKE LINE OF lt_new_values.
DATA lt_objects TYPE hum_object_t.
DATA lv_rcode TYPE sysubrc.
ls_object-object = '01'.
ls_object-objkey = '0011543649'.
lf_exidv = |{ lf_exidv ALPHA = IN }|.
SELECT SINGLE * FROM vekp
INTO @DATA(ls_vekp)
WHERE exidv EQ @lf_exidv.
lf_vbeln = ls_object-objkey.
SELECT SINGLE * FROM vekp
INTO ls_vekp
WHERE exidv EQ lf_exidv.
ls_hum-venum = ls_vekp-venum.
ls_hum-top_hu_internal = ls_vekp-venum.
ls_hum-top_hu_external = lf_exidv.
ls_hum-rfbel = ls_object-objkey.
ls_hum-rfpos = '000001'.
APPEND ls_hum TO lt_hum.
SELECT SINGLE * FROM likp
INTO @DATA(ls_likp)
WHERE vbeln EQ @lf_vbeln.
MOVE-CORRESPONDING ls_likp TO ls_likp2.
CALL FUNCTION 'HU_PACKING_REFRESH'.
CALL FUNCTION 'HU_READ_DELIVERY_AND_INIT'
EXPORTING
if_delivery = ls_likp-vbeln
EXCEPTIONS
no_delivery_found = 1
posted = 2
display_only = 3
error_message = 100
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
COMMIT WORK AND WAIT.
PERFORM assign_hu_to_delivery(sapmv50a)
USING ls_likp2 lt_hum[].
COMMIT WORK AND WAIT.