1
UNIVERSITÀ DI PISA
Facoltà di Ingegneria
Laurea Specialistica in Ingegneria dell’Automazione
Tesi di laurea
GESTIONE AUTOMATICA DEL
MAGAZZINO MERCI DI UNA PMI
Candidato:
Iacopo Nucci Quagliano Balducci__________Firma______________
Relatore:
Aldo Balestrino_________________________Firma______________
Sessione di Laurea del 05/03/2007
Archivio tesi Laurea Specialistica in Ingegneria dell’Automazione: etd-12122006-160401
Anno accademico 2006/2007
2
RINGRAZIAMENTI
Dedico questa tesi a tutta la mia famiglia che durante tutto il percorso accademico mi ha
supportato e aiutato. Un ringraziamento speciale va a mia madre perché nei momenti più bui e
difficili mi ha sempre saputo consigliare e sostenere ricordandomi che Per aspera ad astra…
3
SOMMARIO
Il pacchetto software realizzato in questo lavoro è denominato Automa dei prelievi. Tale
pacchetto automatizza il processo decisionale relativo alla generazione delle liste di prelievo
all’interno del magazzino di una PMI calzaturiera. L’automa esamina una serie di ordini
cliente e decide quali siano idonei all’imballaggio, in base ad alcuni criteri predeterminati: la
data di scadenza dell’ordine, la disponibilità degli articoli nei vari magazzini, ecc. Identificati
quelli idonei per ciascuno ordine cliente, genera una lista di prelievo che specifica gli articoli
che i magazzinieri devono recuperare per preparare i colli per la spedizione.
Il presente lavoro di tesi è stato svolto in due fasi. Nella prima fase, si è analizzata la realtà
aziendale e, parallelamente, è stata effettuata anche una ricerca degli strumenti per lo sviluppo
dell’applicazione, aumentando e perfezionando la nostra necessaria formazione personale.
Nella seconda fase, è stata fatta l’attività di sviluppo vera e propria, con i relativi test per il
corretto funzionamento dell’automa.
Il motore logico che guida l’evoluzione del processo decisionale automatizzato è composto
da una rete di Petri ad alto livello. L’interfaccia grafica che si presenta all’operatore è stata
realizzata in linguaggio Java.
Nella fase finale del nostro lavoro di tesi, abbiamo messo a punto il corretto funzionamento
del pacchetto, effettuando vari test in collaborazione con una PMI calzaturiera toscana.
In quest’ultimo contesto specifico, l’introduzione dell’automa dei prelievi ha permesso di
aumentare la produttività del reparto magazzino, consentendo di ridurre gli errori di gestione e
di migliorare l’analisi della situazione degli ordini ancora da evadere.
ABSTRACT
This specific software is called Automa dei prelievi. This application automates the
decision process concerning picking lists for the warehouse of a medium Italian footwear
industry. This automaton examines a series of customer orders and decides which are suitable
for boxing, following certain predetermined criteria: expiration order date, articles availability
in various depots etc… After a careful analysis of different orders, the software generates a
picking list for the suitable ones and, therefore, gives warehouse workers precise instructions
for localizing goods and organizing expeditions.
The present thesis about Automa dei prelievi has been developed in two phases. During the
first, a specific industrial reality has been analyzed. At the same time, we did careful research
on the necessary instruments for expressing the possibilities of this software at their best. The
second phase concerns software development, through specific functioning tests.
The program logic flow, which guides the automated decision process evolution, consists
of a high level Petri net. The user graphical interface is in Java language.
In the final phase of the present thesis research, we proceeded with a practical test of our
original software in collaboration with a Italian footwear industry, located in Tuscany. Once
applied to a specific real context, Automa dei prelievi succeeded in increasing warehouse
productivity, reducing managing errors and improving customer orders analysis.
4
INDICE
RINGRAZIAMENTI... 2 SOMMARIO ... 3 ABSTRACT ... 3 INDICE ... 4INDICE DELLE FIGURE ... 8
INDICE DEI LISTATI ... 10
INTRODUZIONE ... 11
1. ANALISI DELLA REALTÀ AZIENDALE ... 12
1.1 PANORAMICA DELL’AZIENDA... 12
1.2 LE CINQUE CARATTERISTICHE IDENTIFICATIVE PER UNA CALZATURA... 12
1.3 ANAGRAFICA CLIENTI E CODIFICA ORDINI CLIENTI... 14
1.4 STRUTTURA DEI MAGAZZINI MERCI... 14
1.4.1 Magazzini produzione interna... 15
1.4.1.1 Magazzino P1 ... 16
1.4.1.2 Magazzino P2 ... 16
1.4.1.3 Magazzino P3 ... 16
1.4.2 Magazzini prodotto commercializzato ... 16
1.5 PREPARAZIONE DELLE SPEDIZIONI... 16
1.5.1 Liste di prelievo... 17
1.5.2 Generazione della liste di prelievo... 18
1.5.3 Criterio di scelta del cliente da evadere ... 19
1.5.3.1 Portafoglio ordini... 19
1.5.3.1.1 Elevato numero di informazioni da valutare... 21
1.5.3.1.1.1 Controllo di morosità... 21
1.5.3.1.1.2 Saturazione della capienza ubicazione magazzino P2 ... 21
1.5.3.1.1.3 Controllo se l’ordine è spedibile a saldo... 21
1.5.3.1.2 Valore della disponibilità delle paia del magazzino P1 fuorviante... 22
1.6 ANALISI DELL’INFRASTRUTTURA GESTIONALE E INFORMATICA... 22
1.6.1 Risorse umane ... 22
1.6.2 Infrastruttura informatica ... 22
2. IL GESTIONALE BMS... 23
2.1 TIME S.R.L: PROFILO AZIENDALE... 23
2.2 ARCHITETTURA DELL’ERP ESISTENTE... 24
2.3 DESCRIZIONE DEGLI STANDARD DI NOMENCLATURA UTILIZZATI... 26
2.3.1 Nomenclatura tabelle del database... 26
2.3.2 Nomenclatura dati... 27
2.3.3 Nomenclatura dei vincoli sulla tabella ... 28
2.3.4 Nomenclatura procedure e funzioni... 28
2.4 DESCRIZIONE DEL SISTEMA DI GESTIONE E MEMORIZZAZIONE DEL BMS... 29
2.4.1 Convenzione descrizione delle tabelle dati ... 29
2.4.2 Storicità di un dato... 29
2.4.3 Oid o chiave surrogata... 29
2.4.4 Gestione delle liste di prelievo ... 30
2.4.4.1 T_BLEVAO01: informazioni della lista di prelievo... 30
2.4.4.1.1 Stato della lista di prelievo ... 31
2.4.4.2 T_BLEVAO02: informazioni sulle calzature imballate... 32
2.4.5 Gestione generale dei documenti ... 33
2.4.6 Gestione ordini cliente ... 36
5
3. IL DATABASE ORACLE... 43
3.1 PREPARAZIONE DELL’AMBIENTE DI TEST... 43
3.1.1 Creazione del database e dell’istanza... 43
3.1.1.1 Prerequisiti ... 43
3.1.1.2 Procedura di creazione del database assistita... 43
3.1.1.3 Configurazione per il supporto al gestionale BMS ... 44
3.1.2 Importazione dei dati ... 45
3.2 LINGUAGGIO PL/SQL... 46
3.2.1 L’unità base: il blocco... 46
3.2.2 Blocchi con nome ... 47
3.2.2.1 Store procedure ... 47
3.2.2.2 Funzioni ... 48
3.2.2.3 Parametri di default... 49
3.2.2.4 Eliminazione di procedure e funzioni ... 49
3.2.3 Package ... 49
3.2.3.1 Specifica di un package ... 49
3.2.3.2 Corpo del package... 50
3.2.4 Cursori ... 51
3.2.4.1 Dichiarazione di un cursore ... 51
3.2.4.2 Apertura e chiusura di un cursore ... 51
3.2.4.3 Recupero di record dal cursore ... 51
3.2.4.4 Attributi di un cursore... 52
3.2.4.5 Scorrimento nei cursori con i cicli ... 52
3.2.4.5.1 Ciclo semplice ... 52
3.2.4.5.2 Ciclo while... 53
3.2.4.5.3 Ciclo for... 53
4. PANORAMICA DELL’AUTOMA DEI PRELIEVI ... 54
4.1 OBBIETTIVI... 54
4.1.1 Solvibilità del cliente... 54
4.1.2 Priorità di consegna clienti importanti... 54
4.1.3 Aumentare la produttività del reparto magazzino ... 54
4.1.4 Ridurre i tempi di spedizione ... 54
4.1.5 Eliminare l’errore nella scelta dell’ordine cliente da imballare ... 55
4.1.6 Aumentare l’efficienza delle spedizioni... 55
4.1.7 Eliminare ordini clienti “abbandonati”... 55
4.2 SCHEMA GENERALE DELL’ARCHITETTURA SOFTWARE... 55
5. RETI DI PETRI ... 57 5.1 RETI DI PETRI P/T ... 57 5.1.1 Concetti di base... 57 5.1.1.1 Sequenza ... 58 5.1.1.2 Conflitto... 58 5.1.1.3 Concorrenza ... 59
5.2 RETI DI PETRI AD ALTO LIVELLO O “COLORATE”... 59
5.3 TOOL DI SVILUPPO RENEW (REFERENCE NET WORKSHOP) ... 60
5.3.1 Lo stato dell’arte e la scelta del tool di sviluppo ... 60
5.3.2 Presentazione del tool ... 60
5.3.3 Installazione del tool ... 61
5.3.3.1 Prerequisiti ... 61
5.3.3.2 Installazione di base... 61
5.3.4 Reference Nets... 61
5.3.4.1 Gli elementi base di una rete... 61
5.3.4.1.1 Archi ... 62
5.3.4.1.2 Posti ... 62
6
5.3.5.1 Espressioni di inizializzazione e tipizzazione di un posto ... 62
5.3.5.2 Blocco dichiarazione... 62
5.3.5.3 Inscrizioni delle transizioni... 63
5.3.5.3.1 Inscrizione di guardia ... 63
5.3.5.3.2 Inscrizione di azione ... 63
5.3.5.4 Invocazione di funzioni... 63
5.3.5.5 Tuple e liste... 64
5.3.5.6 Transizioni manuali ... 64
5.3.5.7 Creare oggetti net reference ... 64
5.3.5.8 Canali di comunicazione... 65
5.3.6 Configurazioni e trucchi di sviluppo... 67
5.3.6.1 Configurazione a tempo di esecuzione ... 67
5.3.6.2 Configurazione permanente ... 67
6. IMPLEMENTAZIONE DELL’AUTOMA DEI PRELIEVI ... 68
6.1 FASI DELL’EVOLUZIONE DELL’AUTOMA DEI PRELIEVI... 68
6.2 FASE 1:IMPOSTAZIONE DEI PARAMETRI E INIZIALIZZAZIONE... 68
6.2.1 Panoramica interfaccia Java ... 68
6.2.1.1 Convenzioni per il codice Java ... 69
6.2.1.2 Struttura base della interfaccia grafica... 69
6.2.1.3 Documentazione interattiva ... 70
6.2.2 Schermata inserimento dei parametri ... 71
6.2.2.1 Classe Query ... 72
6.2.2.1.1 Query() ... 73
6.2.2.1.2 ArrayList eseguiQuery(String ps_query)... 73
6.2.2.1.3 ArrayList preparaRisultato(ResultSet rs)... 74
6.2.2.1.4 Vector getNextRow( ResultSet rs,ResultSetMetaData rsmd )... 74
6.2.2.2 Classe Connect... 75
6.2.2.2.1 Connect(String ps_dbUrl,String ps_User, String ps_Passwd)... 75
6.2.2.3 Gestione dell’eccezioni... 75
6.2.2.3.1 Eccezione... 76
6.2.2.3.2 FormEccezione ... 76
6.2.2.4 Evento click sul pulsante Genera ... 77
6.2.2.4.1 Recupero input utente e controllo di correttezza ... 79
6.2.2.4.2 Inizializzazione delle struttura dati ... 79
6.2.2.4.3 Salvataggio dei parametri di dialogo ... 80
6.2.2.4.4 Lancio dell’ambiente Renew ... 81
6.2.2.5 Dettagli sull’inizializzazione delle strutture dati... 81
6.3 FASE 2:ELABORAZIONE E GENERAZIONE DELLE LISTE DI PRELIEVO... 83
6.3.1 Sezione di inizializzazione... 83
6.3.2 Sezione logiche di controllo ... 85
6.3.2.1 Controllo della saturazione della capienza dell’ubicazione del cliente... 85
6.3.2.1.1 Native Dynamic SQL ... 87
6.3.2.2 Controllo se l’ordine è a saldo ... 88
6.3.2.2.1 Disponibilità magazzino P1 ... 90
6.3.2.2.1.1 Gestione delle priorità delle spedizioni ... 90
6.3.2.2.1.2 Implementazione dell’attribuzione articoli “classici”... 91
6.3.2.2.1.3 SP_DISP_P1_RIGA: calcolo della quantità ancora da evadere ... 93
6.3.2.2.2 Disponibilità magazzino P3 ... 94
6.3.3 Sezione creazione liste di prelievo ... 96
6.3.4 Sezione fine elaborazione... 99
6.4 FASE 3:VISUALIZZAZIONE E ANALISI DEI RISULTATI... 100
6.4.1 Scheda Risultati della finestra Generazione liste di prelievo ... 100
6.4.1.1 Ordini rifiutati con informazioni sul saldo... 102
6.4.1.2 Ordini rifiutati con informazioni saturazione... 103
6.4.1.3 Attribuzione del “classico” ... 103
6.4.1.4 La classe IFrameTabella ... 105
6.4.1.4.1 Ordinamento del contenuto delle colonne ... 106
7
6.4.1.4.1.2 Costruttore SortFilterModel(TableModel m) ... 107
6.4.1.4.1.3 void sort(int c) ... 108
6.4.1.4.1.4 public Object getValueAt(int r, int c) ... 109
6.4.1.4.1.5 boolean isCellEditable(int r, int c)... 110
6.4.1.4.1.6 void setValueAt(Object aValue, int r, int c) ... 110
6.4.1.4.2 Colorazione alternata delle righe per una migliore leggibilità... 111
6.4.1.4.3 Formattazione dei dati in maniera corretta ... 112
6.4.2 La finestra Liste di prelievo generate... 113
6.4.3 Eliminazione dei dati dell’elaborazione corrente ... 113
CONCLUSIONI ... 115
8
INDICE DELLE FIGURE
Fig. 1 Veduta esterna della Balducci s.p.a... 12
Fig. 2 Esempi di modelli di calzature ... 13
Fig. 3 Una forma per calzature ... 13
Fig. 4 Numerata cartone 6A ... 14
Fig. 5 Esempi di suole ... 14
Fig. 6 Schema dei magazzini produzione interna... 15
Fig. 7 Un’ubicazione del magazzino P2... 16
Fig. 8 Fasi del magazzino merci... 17
Fig. 9 Codice a barre della calzatura ... 17
Fig. 10 Esempio di lista di prelievo... 18
Fig. 11 Generazione di una lista di prelievo tramite BMS ... 18
Fig. 12 Portafoglio ordini: schermata di lancio ... 19
Fig. 13 Portafoglio ordini: schermata risultato ... 20
Fig. 14 Logo BMS... 24
Fig. 15 Architettura BMS... 25
Fig. 16 Esempio di storicità... 30
Fig. 17 Campi tabella T_BLEVAO01... 31
Fig. 18 Tabella T_BLEVAO02 ... 33
Fig. 19 Esempio di memorizzazioni delle letture ottiche ... 33
Fig. 20 Tabella LGMOVMAG... 35
Fig. 21 Schema tabelle per la gestione degli ordini cliente ... 36
Fig. 22 Tabella LGORCLRI... 37
Fig. 23 Esempio di associazione a un movimento di magazzino ... 37
Fig. 24 Tabella BLMOVMAG ... 38
Fig. 25 Esempio di ordine di produzione OP ... 39
Fig. 26 Schema tabelle per la gestione ordini produzione... 40
Fig. 27 Tabella PRORPRRI ... 41
Fig. 28 Tabella PROPXORC... 42
Fig. 29 Assistente alla configurazione del database ... 43
Fig. 30 Parametri di inizializzazione ... 44
Fig. 31 Enterprise manager console ... 45
Fig. 32 Creazione di un utente... 46
Fig. 33 Architettura software automa dei prelievi ... 56
Fig. 34 Elementi costitutivi di un rete di petri ... 57
Fig. 35 Esempio di una rete di petri... 57
Fig. 36 Postset e preset ... 58
Fig. 37 Esempio di evoluzione di una rete di Petri... 58
Fig. 38 Sequenza ... 58
Fig. 39 Conflitto ... 58
Fig. 40 Concorrenza ... 59
Fig. 41 Esempio di rete ad alto livello... 59
Fig. 42 Renew Toolbox ... 61
Fig. 43 Elementi di un rete ... 62
Fig. 44 Inizializzazione di un posto... 62
Fig. 45 Blocco dichiarazione... 63
Fig. 46 Inscrizione di azione ... 63
9
Fig. 48 Rete che crea un’istanza di un'altra rete ... 64
Fig. 49 Rete othernet allocata... 64
Fig. 50 Canale sincrono all’interno di una rete... 65
Fig. 51 Rete mittente ... 65
Fig. 52 Rete destinatario bag ... 65
Fig. 53 Configurazione a tempo di esecuzione... 66
Fig. 54 Struttura di una applicazione MDI ... 69
Fig. 55 Documentazione interattiva del codice Java ... 70
Fig. 56 Finestra inserimento parametri... 71
Fig. 57 Esempio di un form per le eccezioni ... 77
Fig. 58 Controllo correttezza parametri... 79
Fig. 59 Tabella LGGALP... 83
Fig. 60 Rete di Petri dell’automa dei prelievi... 84
Fig. 61 Tabella LGGALPIMPE ... 93
Fig. 62 Tabella LGGALPCRE ... 99
Fig. 63 Finestra di dialogo fine elaborazione rete diPetri... 99
Fig. 64 Schermata di riepilogo dei risultati di una elaborazione ... 100
Fig. 65 Dettaglio ordini che hanno saturato l’ubicazione... 101
Fig. 66 Dettagli sugli ordini a saldo ... 101
Fig. 67 Ordini rifiutati con dettagli sul saldo... 102
Fig. 68 Ordini rifiutati con dettaglio sulla saturazione dell’ubicazione... 103
Fig. 69 Dettagli sull’attribuzione del “classico”... 103
Fig. 70 Esempio di JTable... 106
Fig. 71 Valori dopo l’ordinamento ... 109
10
INDICE DEI LISTATI
Listato 1 Blocco PL/SQL minimo ... 47
Listato 2 Blocco PL/SQL completo... 47
Listato 3 Dichiarazione store procedure... 48
Listato 4 Dichiarazione funzione PL/SQL ... 48
Listato 5 Esempio specifica di un package... 50
Listato 6 Esempio di un corpo di un package... 50
Listato 7 Esempio dichiarazione di un cursore... 51
Listato 8 Esempio di ciclo semplice ... 52
Listato 9 Esempio di ciclo while ... 53
Listato 10 Esempio di ciclo for ... 53
Listato 11 Funzione iniz_jcb_pcstag() ... 72
Listato 12 Query() ... 73
Listato 13 ArrayList eseguiQuery(String ps_query) ... 73
Listato 14 ArrayList preparaRisultato(ResultSet rs) ... 74
Listato 15 Vector getNextRow( ResultSet rs,ResultSetMetaData rsmd) ... 75
Listato 16 Connect(String ps_dbUrl,String ps_User, String ps_Passwd)... 75
Listato 17 Classe Eccezione ... 76
Listato 18 Costruttore FormEccezione ... 76
Listato 19 Pressione sul pulsante genera: jb_generaActionPerformed... 79
Listato 20 Store procedure sp_main ... 82
Listato 21 Esempio di una Native Dynamic SQL ... 88
Listato 22 Cursore degli ordini per l’attribuzione del classico ... 91
Listato 23 Query per codice vettore di spedizione ... 97
Listato 24 Query per riepilogo dell’attribuzione del commercializzato ... 105
Listato 25 Creazione di una JTable ... 106
Listato 26 Impostazione del modello della Jtable... 107
Listato 27 SortFilterModel(TableModel m) ... 108
Listato 28 Void sort(int c) ... 108
Listato 29 Oggetto Row ... 109
Listato 30 GetValueAt(int r, int c)... 109
Listato 31 Boolean isCellEditable(int r, int c) ... 110
Listato 32 Void setValueAt(Object aValue, int r, int c) ... 110
Listato 33 Listener degli eventi del mouse... 110
Listato 34 Render per la colorazione alternata delle celle ... 111
Listato 35 Formattazione dei numero decimali ... 112