In sintesi
Continua la costruzione della procedura che crea la picking list per un ordine.
Nota: questo video corso è stato realizzato con la versione 4 di Instant Developer. Anche se i contenuti sono ancora attuali e sono utili per imparare ad utilizzare Instant Developer, alcune affermazioni sono di fatto superate. Per i dettagli e le ultime novità sulle funzionalità illustrate vi rimandiamo alla sezione di reference che viene tenuta aggiornata giornalmente.
Se il tipo di movimenti è di uscita, dobbiamo controllare che la giacenza di magazzino sia sufficente.
Per fare ciò abbiamo innanzitutto bisogno di una variabile locale che contenga il risultato del controllo.
Prima di creare la variabile, aggiungiamo una nuova lista valori e la chiamiamo Order OK. Selezioniamo il flag Auto Increment per indicare che i valori delle costanti saranno automaticamente decisi dal sistema.
All'interno della lista valori introduciamo la costante OK e la costante ERROR.
Aggiungiamo ora una nuova variabile locale, con nome Order OK. Questa è la variabile che ci indicherà se la merce in magazzino è sufficiente. Inizializziamo la variabile al valore OK, tirandola sul corpo della procedura per aggiungere una assegnazione, ed impostando la costante OK come espressione.
Il controllo sulla giacenza deve essere fatto solo se i movimenti sono di uscita. Aggiungiamo allora un blocco IF ed impostiamo la condizione.
In questo caso dobbiamo controllare la giacenza di ogni articolo dell'ordine. Aggiungiamo un ciclo FOR-EACH-ROW tenendo premuto il tasto SHIFT in modo che esso sia aggiunto dentro al blocco IF.
Tiriamo la tabella Order Details, con shift e control, nella query in modo da aggiungere tutti i campi alla select list. Tiriamo anche il parametro Order To Prepare con lo SHIFT in modo da aggiungere una condizione di filtro per estrarre solo le righe dell'ordine da preparare.
Ora dobbiamo vedere quale è la quantità da spedire, tenendo conto anche delle spedizioni parziali. Aggiungiamo alla query una nuova espressione calcolata che chiamiamo Quantity to Ship e impostiamo la seguente espressione:. La funzione NULL VALUE ritorna il secondo parametro se il primo è nullo, altrimenti ritorna il primo parametro.
All'interno del ciclo controlliamo la giacenza dell'articolo specificato sulla singola riga. Per fare ciò, prepariamo una variabile locale per memorizzare la giacenza dell'articolo, tirando il campo quantity della vista stock sulla procedura.
Aggiungiamo ora uno statement di tipo select into variables e tiriamo la variabile Stock Quantity nella query, poi tiriamo la variabile Product ID della riga in fase di elaborazione nella query con lo SHIFT premuto in modo da selezionare proprio la giacenza di quel prodotto.
Aggiugiamo quindi un blocco IF al ciclo, e ne impostiamo l'espressione in modo da verificare la giacenza..
Nel caso in cui la giacenza sia insufficiente, vogliamo memorizzare la quantità massima spedibile nel campo Shipped Qty della riga d'ordine. Tiriamo allora la variabile Shipped Qty sul blocco IF per aggiungere uno statement di assegnazione, poi editiamo l'espressione.
Siccome la variabile shipped quantity deriva da una colonna della query del ciclo FOR-EACH-ROW, assegnandole un valore si determina anche l'aggiornamento del database sottostante.
Infine indichiamo che in questo caso l'ordine non potrà essere considerato preparato, aggiungendo la seguente assegnazione.
Salviamo il lavoro svolto finora.