Si vuole aggiornare in modo semplice la data-ora di inizio e di fine carico nella gestione trasporti di SAP.
L'idea è quella di costruire una nuova transazione molto semplice, da utilizzare nei terminali in radio frequenza, in modo che l'operatore possa registrare facilmente l'inizio dell'operazione di carico del camion e la fine dell'operazione; in questo modo si può avere evidenza del tempo effettivo di carico nei trasporti.
Esiste una BAPI di aggiornamento dei trasporti BAPI_SHIPMENT_CHANGE, non è molto ben documentata e si trovano pochi esempi on-line, per cui sono stati necessari diversi tentativi e test, ma alla fine ho trovato il modo di usarla.
Bisogna anche precisare che la nota OSS 1083509 - FAQ : LE-TRA specifica che la BAPI in questione non sarebbe rilasciata per i clienti:
5. BAPI "BAPI_SHIPMENT_CHANGE" is not released for Customers.
per cui la cosa funziona, ma se dovessero nascere problemi, magari dopo qualche aggiornamento di release, si dovrà cercare qualche altra soluzione (per esempio tramite CALL TRANSACTION o altro).
Questi i campi nella testata trasporto che si vogliono gestire, da VT02N:
Se si vuole solo cambiare lo stato, prendendo la data-ora attuale del sistema, è sufficiente impostare i dati nelle strutture di testata:
headerdata-STATUS_LOAD_START = 'X'.
headerdataaction-STATUS_LOAD_START = 'C'.
headerdata-STATUS_LOAD_END = 'X'.
headerdataaction-STATUS_LOAD_END = 'C'.
Se invece si vuole impostare una data e ora ben precisa allora si devono usare anche le tabelle HEADERDEADLINE e HEADERDEADLINEACTION con una codifica particolare dei campi data da aggiornare.
Questa la codifica dei campi
HDRSTPLDT = Status planned
HDRSTCIPDT = Status checkin plan
HDRSTCIADT = Status checkin act
HDRSTLSPDT = Status load start plan
HDRSTLSADT = Status load start act
HDRSTLEPDT = Status load end plan
HDRSTLEADT = Status load end act
HDRSTCPDT = Status complete plan
HDRSTCADT = Status copmlete act
HDRSTSSPDT = Status ship start plan
HDRSTSSADT = Status ship start act
HDRSTSEPDT = Status ship end plan
HDRSTSEADT = Status shipmnt end act
HDRTNDEPDT = Tender earliest pick
HDRTNDLPDT = Tendering latest pick
HDRTNDEDDT = Tender early delivery
HDRTNDLDDT = Tender latest delivery
STLSTPDT = Stage start plan
STLSTADT = Stage start act
STLENDPT = Stage end plan
STLENADT = Stage end act
Esempio per impostare la data di inizio carico:
headerdeadline-time_type = 'HDRSTLSADT'.
CONCATENATE <data> <time> INTO headerdeadline-time_stamp_utc.
headerdeadline-time_zone = sy-zonlo.
APPEND headerdeadline.
headerdeadlineaction-time_type = 'C'.
headerdeadlineaction-time_stamp_utc = 'C'.
headerdeadlineaction-time_zone = 'C'.
APPEND headerdeadlineaction.
Esempio di programma per aggiornamento (prende data-ora del sistema):
REPORT nnnn.
*----------------------------------------------------------------------*
* Parametri di selezione
*----------------------------------------------------------------------*
PARAMETERS: i_tknum LIKE vttk-tknum.
DATA: headerdata LIKE bapishipmentheader,
headerdataaction LIKE bapishipmentheaderaction,
headerdeadline LIKE bapishipmentheaderdeadline
OCCURS 0 WITH HEADER LINE,
headerdeadlineaction LIKE bapishipmentheaderdeadlineact
OCCURS 0 WITH HEADER LINE,
return LIKE bapiret2
OCCURS 0 WITH HEADER LINE.
*----------------------------------------------------------------------*
* Inizio programma
*----------------------------------------------------------------------*
START-OF-SELECTION.
* verifico se esiste il trasporto
DATA: wa_vttk LIKE vttk,
wa_ts(40).
SELECT SINGLE * FROM vttk INTO wa_vttk
WHERE tknum = i_tknum.
IF sy-subrc <> 0.
MESSAGE 'Non trovo trasporto' TYPE 'S'.
STOP.
ENDIF.
headerdata-shipment_num = wa_vttk-tknum.
* Verifico se non è ancora iniziato il carico.
IF wa_VTTK-DALBG IS INITIAL.
HEADERDATA-STATUS_LOAD_START = 'X'.
headerdataaction-STATUS_LOAD_START = 'C'.
* Verifico se il carico non è terminato.
ELSEIF wa_VTTK-DALEN IS INITIAL.
HEADERDATA-STATUS_LOAD_END = 'X'.
headerdataaction-STATUS_LOAD_END = 'C'.
ELSE.
MESSAGE 'Tempo carico già impostato!' TYPE 'S'.
STOP.
ENDIF.
CALL FUNCTION 'BAPI_SHIPMENT_CHANGE'
EXPORTING
headerdata = headerdata
headerdataaction = headerdataaction
TABLES
HEADERDEADLINE = headerdeadline
HEADERDEADLINEACTION = headerdeadlineaction
return = return
.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = abap_true.
ENDIF.
Nessun commento:
Posta un commento