mercoledì 22 febbraio 2017

Lancio massivo MRP per una selezione di materiali.

Nella maschera di lancio dell'MRP massivo non è possibile inserire una selezione di materiali.

SAP però mette a disposizione l'ampliamento M61X0001, per definire dei filtri personalizzati, in modo che l'elaborazione MRP possa lavorare solo su alcuni codici materiale.

Nel nostro caso abbiamo un MRP massivo che gira esternamente a SAP (su uno schedulatore a capacità finita: J-Flex), ma abbiamo anche dei materiali, gestiti a scorta minima, per i quali vogliamo che l'MRP venga elaborato in SAP.

Per il lancio massivo ci sono queste 2 transazioni

MD01 esecuzione on-line
MDBT esecuzione in background e schedulazione dei job

i campi di input sono gli stessi, vediamo la pagina di lancio nella MD01


non c'è una selezione di codici, ma la possibilità di attivare la User-Exit tramite una chiave.

Io ho creato queste 2 differenti modi di selezione dei codici:


Tramite il gruppo di pianificazione oppure per Responsabile MRP, sono attributi dell'anagrafica materiale che potete trovare nella view Pianificazione MRP 1:


per inserire le voci della Exit si deve lavorare a livello di customizing:


queste le mie definizioni:


per definire le Exit transazione SMOD



Per motivi tecnici ci sono due differenti FM (le User-exit possono fare riferimento ad un solo programma principale) ma che dovrebbero puntare allo stesso codice, altrimenti si avrebbero comportamenti differenti a seconda del tipo di lancio:

EXIT_SAPMM61X_001 - per la pianificazione senza l'esecuzione parallela
EXIT_SAPLM61C_001 - per la pianificazione con l'esecuzione parallela

Parametri di ingresso:

USER_KEY

La chiave di controllo della Exit

USER_PARAMETER

Il valore del parametro passato dall'utente

Parametri di ritorno:

NO_PLANNING -

se NO_PLANNING = 'X' il materiale in elaborazione non viene pianificato


STOP_PLANNING

se STOP_PLANNING = 'X', il materiale in elaborazione non viene pianificato e l'elaborazione si ferma.

Per attivare il codice:

Doppio click su una delle due righe, per esempio EXIT_SAPMM61X_001, si apre la definizione della relativa funzione:


quindi doppio click sul nome dell'include.

A questo punto, se non è ancora stata creata, viene chiesto conferma per la creazione:



altrimenti, se già è stata creata, si viene portati direttamente alla sua definizione:


questo il codice contenuto nella include:

*&---------------------------------------------------------------------*
*&  Include           ZXM61U01
*&---------------------------------------------------------------------*
* Autore     : Fabio Giacobbe - 18/10/2013
* Descrizione: Exit per elaborazione MRP massiva per:
*                  GPP : gruppo di pianificazione
*                  MRP : responsabile MRP
*&---------------------------------------------------------------------*
  DATA: ZDISPO LIKE MT61D-DISPO,
        ZDISGR LIKE MT61D-DISGR,
        UXPAR LIKE USER_PAR.
  CLEAR: NO_PLANNING, STOP_PLANNING,
         ZDISPO, UXPAR, ZDISGR.
  CASE USER_KEY.
*----------------------------------------------------------------------*
* Selezione dei materiali per responsabile MRP (passato come parametro)
*----------------------------------------------------------------------*
    WHEN 'MRP'.
      UXPAR = USER_PAR.
      CONDENSE UXPAR.
      WRITE UXPAR+0(3) TO ZDISPO.
      IF ZDISPO IS INITIAL.
        EXIT.
      ENDIF.
      IF MT61D-DISPO <> ZDISPO.
        NO_PLANNING = 'X'.
      ENDIF.
*----------------------------------------------------------------------*
Selezione dei materiali per Gruppo di Pianificazione
*----------------------------------------------------------------------*
    when 'GPP'.
      UXPAR = USER_PAR.
      CONDENSE UXPAR.
      WRITE UXPAR+0(4) TO ZDISGR.
      IF ZDISGR IS INITIAL.
        EXIT.
      ENDIF.
      IF MT61D-DISGR <> ZDISGR.
        NO_PLANNING = 'X'.
      ENDIF.
  ENDCASE.

La funzione EXIT_SAPLM61C_001 punta invece all'include ZXM61U02, dove io ho inserito nuovamente il richiamo alla include iniziale (ZXM61U01) che contiene il codice vero e proprio.

Note:
  1. Si possono trovare degli esempi di codice nel programma LXM61F01.
  2. I parametri passati per filtrare i codici non vengono, in nessun modo, usati come chiavi di selezione nel database. Questo significa che l'elaborazione si passa comunque tutti i codici materiali della divisione, non pianificando quelli che non soddisfano i criteri inseriti. Non aspettatevi quindi, sebbene magari i codici da elaborare siano pochi, una esecuzione rapidissima; stiamo parlando comunque di qualche minuto su un totale di oltre 100.000 materiali di cui qualche centinaio da pianificare.

Nessun commento:

Posta un commento