2008 Feb 06 9:14 PM
We try to create packing for a delivery using functions module
(BAPI_HU_CREATE, WS_DELIVERY_UPDATE, etc..). We are not able to do it, is there anaybody who have made that kind of think before. If you can show us some example.
Regards,
We try to create packing for a delivery using functions module
(BAPI_HU_CREATE, WS_DELIVERY_UPDATE, etc..). We are not able to do it, is there anaybody who have made that kind of think before. If you can show us some example.
Regards,
2008 Feb 06 9:15 PM
2008 Feb 06 9:20 PM
2008 Apr 04 3:18 PM
Hi!
I am having a problem to do the packing for an outbound delivery as well. Did you solve your problems?
Did any of the Bapis worked?
Thanks in advance!
Nisha
2008 Apr 07 7:27 PM
Hi,
Yes it work, look at this code:
METHOD emballer_pieces.
TYPES: BEGIN OF ty_vekp,
venum TYPE vekp-venum,
exidv TYPE vekp-exidv,
END OF ty_vekp.
DATA: lta_verko TYPE STANDARD TABLE OF verko,
lta_verpo TYPE STANDARD TABLE OF verpo,
lta_prott TYPE STANDARD TABLE OF prott,
lts_vekp TYPE SORTED TABLE OF ty_vekp
WITH UNIQUE KEY venum.
DATA: lst_zcs005 TYPE zcs005s,
lst_vbkok TYPE vbkok,
lst_verko TYPE verko,
lst_verpo TYPE verpo,
lst_bal_s_msg TYPE bal_s_msg,
lst_vekpvb TYPE vekpvb,
lst_vekp TYPE ty_vekp.
DATA: lwa_tdlnr TYPE j_3o_v07-tdlnr,
lwa_venum TYPE vepo-venum,
lwa_tabix TYPE sy-tabix.
DATA: ltpb_valide TYPE boolean,
ltpb_retrait TYPE boolean,
ltpn_bloque TYPE i.
tps_etape = text-005.
LOOP AT ta_zcs005 INTO lst_zcs005 WHERE NOT selec IS INITIAL.
IF NOT lst_zcs005-tmeng IS INITIAL.
IF lst_vbkok IS INITIAL.
lst_vbkok-vbeln_vl = st_zcs004-vbeln. "delivery number
lst_vbkok-vbtyp_vl = co_livraison. "delivery number
lst_vbkok-vbeln = st_zcs004-vbeln. "delivery number
lst_verko-exidv = '$'. "HU a creer
lst_verko-exida = 'C'.
lst_verko-vstel = st_zcs004-vstel.
lst_verko-vhilm = wa_emballage.
lst_verko-ntgew = st_zcs004-brgew.
lst_verko-laeng = st_zcs004-laeng.
lst_verko-breit = st_zcs004-breit.
lst_verko-hoehe = st_zcs004-hoehe.
lst_verko-btvol = lst_verko-laeng * lst_verko-breit * lst_verko-hoehe.
lst_verko-voleh_max = co_volume.
IF NOT lst_verko-voleh_max IS INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = lst_verko-voleh_max
IMPORTING
output = lst_verko-voleh_max.
ENDIF.
IF NOT st_zcs004-meabm IS INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = st_zcs004-meabm
IMPORTING
output = lst_verko-meabm.
ENDIF.
lst_verko-brgew = st_zcs004-brgew.
IF NOT st_zcs004-gewei IS INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = st_zcs004-gewei
IMPORTING
output = lst_verko-gewei.
ENDIF.
lst_verko-gewei_max = lst_verko-gewei.
APPEND lst_verko TO lta_verko.
ENDIF.
ELSE.
ltpb_retrait = 1.
ENDIF.
CLEAR lst_verpo.
lst_verpo-exidv_ob = '$'.
lst_verpo-velin = '1'. " 1 to pack a material in a HU
lst_verpo-vbeln = st_zcs004-vbeln.
lst_verpo-posnr = lst_zcs005-posnr.
lst_verpo-tmeng = lst_zcs005-tmeng.
lst_verpo-vrkme = lst_zcs005-vrkme.
lst_verpo-werks = lst_zcs005-werks.
lst_verpo-lgort = lst_zcs005-lgort.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = lst_zcs005-zpcsnr
IMPORTING
output = lst_verpo-matnr.
APPEND lst_verpo TO lta_verpo.
ENDLOOP.
IF NOT lst_vbkok IS INITIAL.
IF NOT st_zcs004-tknum IS INITIAL.
CALL METHOD lcl_gerer_service=>dequeue_trsp_avis
EXPORTING
i_tknum = st_zcs004-tknum
i_qmnum = ''.
ENDIF.
CALL METHOD lcl_gerer_service=>sauve_modification
EXPORTING
i_retrait = ltpb_retrait
IMPORTING
e_valide = ltpb_valide.
IF NOT ltpb_valide IS INITIAL.
IF NOT st_zcs004-laeng IS INITIAL AND
NOT st_zcs004-breit IS INITIAL AND
NOT st_zcs004-hoehe IS INITIAL AND
NOT st_zcs004-meabm IS INITIAL AND
NOT st_zcs004-brgew IS INITIAL AND
NOT st_zcs004-gewei IS INITIAL.
REFRESH ta_vekpvb.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = lst_vbkok
synchron = co_select
commit = co_select
delivery = st_zcs004-vbeln
nicht_sperren = space
TABLES
prot = lta_prott
verko_tab = lta_verko
verpo_tab = lta_verpo
et_created_hus = ta_vekpvb.
IF lta_prott IS INITIAL.
SELECT venum exidv INTO TABLE lts_vekp
FROM vekp
WHERE vpobj = '01'
AND vpobjkey = st_zcs004-vbeln.
LOOP AT ta_vekpvb INTO lst_vekpvb.
lwa_tabix = sy-tabix.
READ TABLE lts_vekp WITH KEY venum = lst_vekpvb-venum
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE ta_vekpvb INDEX lwa_tabix.
ENDIF.
ENDLOOP.
READ TABLE lts_vekp INTO lst_vekp INDEX 1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = st_zcs004-tdlnr
IMPORTING
output = lwa_tdlnr.
SELECT SINGLE tdlnr INTO lwa_tdlnr
FROM j_3o_v07
WHERE tdlnr = lwa_tdlnr
AND matnr = wa_emballage
AND spras = sy-langu.
IF sy-subrc = 0.
CALL METHOD lcl_gerer_service=>imprimer_etiquette
IMPORTING
e_valide = ltpb_valide.
ENDIF.
IF NOT ltpb_valide IS INITIAL.
*Impression bon de livraison
CALL METHOD lcl_gerer_service=>imprime_bon_livraison
EXPORTING
i_venum = lst_vekp-venum.
ENDIF.
CALL METHOD lcl_gerer_service=>valide_saisie_transport
EXPORTING
i_mode = co_select.
IF ta_zcs005 IS INITIAL AND st_zcs004-sttrg <> co_load_end.
CALL METHOD lcl_gerer_service=>modifie_statut_transport.
CALL METHOD lcl_gerer_service=>valide_saisie_transport
EXPORTING
i_mode = co_select.
ENDIF.
ELSE.
CLEAR lst_bal_s_msg.
lst_bal_s_msg-msgno = '062'.
lst_bal_s_msg-msgid = 'ZCS_GENERALE'.
CALL METHOD lcl_gerer_service=>ajout_message_erreur
EXPORTING
i_msgno = lst_bal_s_msg-msgno
i_msgid = lst_bal_s_msg-msgid
i_etape = tps_etape.
ENDIF.
REFRESH ta_vekpvb.
ELSE.
CLEAR lst_bal_s_msg.
lst_bal_s_msg-msgno = '062'.
lst_bal_s_msg-msgid = 'ZCS_GENERALE'.
CALL METHOD lcl_gerer_service=>ajout_message_erreur
EXPORTING
i_msgno = lst_bal_s_msg-msgno
i_msgid = lst_bal_s_msg-msgid
i_etape = tps_etape.
ENDIF.
ENDIF.
IF NOT st_zcs004-tknum IS INITIAL.
CALL METHOD lcl_gerer_service=>enqueue_trsp_avis
EXPORTING
i_tknum = st_zcs004-tknum
i_qmnum = ''
i_mess = ''
i_repete = 6
IMPORTING
e_verouille = ltpn_bloque.
IF NOT ltpn_bloque IS INITIAL.
MESSAGE a072(zcs_generale) WITH st_zcs004-tknum sy-msgv1.
ENDIF.
ENDIF.
ELSE.
CLEAR lst_bal_s_msg.
lst_bal_s_msg-msgno = '061'.
lst_bal_s_msg-msgid = 'ZCS_GENERALE'.
CALL METHOD lcl_gerer_service=>ajout_message_erreur
EXPORTING
i_msgno = lst_bal_s_msg-msgno
i_msgid = lst_bal_s_msg-msgid
i_etape = tps_etape.
ENDIF.
IF NOT wa_balloghndl IS INITIAL.
CALL METHOD lcl_gerer_service=>affiche_protocole.
ENDIF.
ENDMETHOD. "emballer_pieces
Regards,
Daniel Cantin
2008 Jun 27 8:32 PM
Hi Daniel/Nisha,
Here is the simple method way of doing,
DATA: ls_mm_data TYPE hum_plant_stloc,
ls_hdr_main TYPE huhdr_proposal,
ls_ref_obj TYPE hum_object,
ls_hu_items TYPE huitm_proposal,
ls_vekpvb TYPE vekpvb,
ls_lips TYPE lips.
DATA: lt_hu_items TYPE huitm_prop,
lt_lips TYPE STANDARD TABLE OF lips,
et_vekpvb TYPE STANDARD TABLE OF vekpvb.
CLEAR: ls_hdr_main, ls_ref_obj, ls_lips, ls_mm_data, ls_vekpvb.
REFRESH: lt_lips[], lt_hu_items[], et_vekpvb[].
ls_hdr_main-exidv = '$'.
ls_ref_obj-object = '01'.
ls_ref_obj-objkey = v_vbeln " Delivery number.
SELECT * FROM lips INTO TABLE lt_lips
WHERE vbeln = v_vbeln.
LOOP AT lt_lips INTO ls_lips.
CLEAR ls_hu_items.
ls_hu_items-exidv = '$'.
ls_hu_items-velin = '1'.
ls_hu_items-belnr = ls_lips-vbeln.
ls_hu_items-posnr = ls_lips-posnr.
ls_hu_items-quantity = ls_lips-lifmg.
ls_hu_items-meins = ls_lips-meins.
ls_hu_items-matnr = ls_lips-matnr.
ls_hu_items-werks = ls_lips-werks.
ls_hu_items-lgort = ls_lips-lgort.
APPEND ls_hu_items TO lt_hu_items.
ENDLOOP.
ls_mm_data-plant = ls_lips-werks.
ls_mm_data-stge_loc = ls_lips-lgort.
CALL FUNCTION 'PROCESS_HU_INBOUND_DLVRY'
EXPORTING
i_packing_activity = 'PACK'
i_pack_type = 'MAT'
i_hu_id = ' '
i_new_hu = 'X'
i_create_hu = 'X'
i_reference_object = ls_ref_obj
i_mm_data = ls_mm_data
i_hu_header_main = ls_hdr_main
i_hu_items = lt_hu_items[]
i_save_step = 'ITEM'
i_pack_activity = 'MAT'
i_delivery_type = 'J'
TABLES
et_created_hus = et_vekpvb
EXCEPTIONS
input_missing = 1
not_possible = 2
header_error = 3
item_error = 4
serial_nr_error = 5
fatal_error = 6
operation_failed = 7
delivery_update_error = 8
OTHERS = 9.
IF sy-subrc EQ 0.
ENDIF.
Thanks,
Meg
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |