sabato 26 maggio 2018

Imballo materiali in consegne di spedizione.

Per effettuare l'imballo dei materiali nei documenti di spedizione è disponibile la transazione standard VL02N, tuttavia il processo è abbastanza "macchinoso" e complicato, si deve :
  • entrare nella sezione imballo
  • creare la cassa (HU) scegliendo il materiale di imballo
  • selezionare il materiale e la cassa, correggendo eventualmente la quantità da imballare.
  • procedere con l'imballo
  • salvare
Volevo creare una transazione facilitata in modo che l'operatore legga il barcode della consegna, legga il barcode dall'ordine di produzione (etichetta che viene applicata alla scatola), proporre la quantità di imballo e poi si deve solo confermare.

Mi sono però "scontrato" con l'utilizzo del Function Module PROCESS_HU_INBOUND_DLVRY (di cui non ho ancora ben capito l'utilizzo).

Infatti dovrebbe essere possibile creare gli imballi, assegnarli alla consegna e imballare il materiale in una unica operazione, ma ricevo sempre il messaggio:


Ho quindi cercato di lavorare su un imballo già esistente: l'operazione va a buon fine, ma poi non risulta imballato nessun materiale! e nessun messaggio di errore viene segnalato!

Dopo innumerevoli tentativi ho risolto inserendo il numero di imballo nella struttura hu_header_prop!

La sequenza è questa:
  • creo la HU.
  • la assegno alla consegna.
  • Imballo il materiale con la PROCESS_HU_INBOUND_DLVRY
  • stampo il messaggio associato alla HU
In questo modo funziona correttamente.

Questi i vari passaggi (in corsivo e verde i parametri da cambiare):

Creazione HU:

  ls_headerproposal-plant    = <plant>.
  ls_headerproposal-stge_loc = <magazzino>.    
  ls_headerproposal-pack_mat = <materiale_imballo>.

* Creazione Imballo
  CALL FUNCTION 'BAPI_HU_CREATE'
    EXPORTING
      headerproposal = ls_headerproposal
    IMPORTING
      huheader       = ls_huheader
      hukey          = lv_hukey
    TABLES
      itemsproposal  = lt_itemproposal
      return         = lt_return.

  IF lt_return[] IS INITIAL.
    CLEAR ls_return.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait   = 'X'
      IMPORTING
        return = ls_return.
  ELSE.
    PERFORM get_bapi_error USING lt_return.
  ENDIF.

Assegnazione HU alla consegna:

* Imposto il collegamento al documento di spedizione
  ls_huheader-pack_mat_object  = '01'.                 " tipo consegna
  ls_huheader-pack_mat_obj_key = <consegna>.
  ls_huheader-salesorg         = <salesorg>.

  REFRESH lt_return.

  CALL FUNCTION 'BAPI_HU_CHANGE_HEADER'
    EXPORTING
      hukey     = ls_huheader-hu_exid
      huchanged = ls_huheader
    IMPORTING
      huheader  = ls_huheader
    TABLES
      return    = lt_return.
  IF lt_return[] IS INITIAL.
    CLEAR ls_return.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait   = 'X'
      IMPORTING
        return = ls_return.
  ELSE.
    PERFORM get_bapi_error USING lt_return.
  ENDIF.

Imballo del materiale:

REFRESH hu_items_proposal.

CLEAR is_item_proposal.
CLEAR hu_items_proposal.

mm_data-plant    = <plant>.
mm_data-stge_loc = <magazzino>.

hu_id = ls_huheader-hu_id.

hu_activity_type = 'PACK'.
pack_type        = 'MAT'.
update_db        = 'X'.
create_hu        = ' '.
new_hu           = ' '.
save_step        = 'HEAD'.
int_dlvry_type   = 'J'.

is_item_proposal-venum = ls_huheader-hu_id.
is_item_proposal-exidv = lv_hukey.
is_item_proposal-velin = 1.
is_item_proposal-belnr = <consegna>.
is_item_proposal-posnr = <posizione>.
is_item_proposal-quantity = <quantità>.
is_item_proposal-meins = <UM>.
is_item_proposal-matnr = <materiale da imballare>.
is_item_proposal-werks = <plant>.
is_item_proposal-lgort = <magazzino>.

DATA: lt_created_hus TYPE STANDARD TABLE OF vekpvb.

CALL FUNCTION 'PROCESS_HU_INBOUND_DLVRY'
  EXPORTING
    i_packing_activity    = hu_activity_type
    i_pack_type           = pack_type
    i_hu_id               = hu_id
    i_new_hu              = new_hu
    i_update_db           = update_db
    i_create_hu           = create_hu
    i_reference_object    = hu_ref_doc
    i_mm_data             = mm_data
    i_hu_header_main      = hu_header_prop
    i_hu_items            = hu_items_proposal[]
    i_hu_serial_nr        = hu_serial_nr_list[]
    i_save_step           = save_step
    i_pack_activity       = pack_type
    i_hu_external         = unpack_hu_ext[]
    i_hu_internal         = unpack_hu_int[]
    i_delivery_type       = int_dlvry_type
    is_item_proposal      = is_item_proposal
    i_unpack_items        = hu_unpack_items
    i_from_hu             = from_hu_id
  IMPORTING
    o_hu_ref_id           = hu_ref_id
    o_hu_header           = hu_work_header[]
    o_hu_items            = hu_work_items[]
    o_hu_messages         = hu_messages[]
  TABLES
    et_created_hus        = lt_created_hus
  EXCEPTIONS
    input_missing         = 01
    not_possible          = 02
    fatal_error           = 03
    operation_failed      = 04
    delivery_update_error = 05
    error_message         = 99.

Stampa del messaggio:

  REFRESH: l_it_hukey.
  MOVE lv_hukey TO l_it_hukey-hu_exid.
  APPEND l_it_hukey.

  REFRESH l_it_outputtype.
  MOVE '1'    TO l_it_outputtype-trans_medium.
  MOVE <tipo> TO l_it_outputtype-output_type. 
  APPEND l_it_outputtype.

  CALL FUNCTION 'BAPI_HU_PROCESS_MSG_DIRECT'
    TABLES
      hukey                     = l_it_hukey
      outputtype                = l_it_outputtype
      return                    = l_it_return.

per la dichiarazione delle strutture è sufficiente vedere come sono dichiarate nei Function Module.

Nessun commento:

Posta un commento