Progetti ADP e distinta base PDF Stampa E-mail
Scritto da Giorgio Rancati   
Mercoledì 29 Marzo 2006 01:00

Proseguendo nell'argomento distinta base vorrei sottoporvi un esempio di progetto ADP (Access 2000) che può collegarsi a due soluzioni lato server, una con Sql Server 2000 e l'altra con Sql Server 2005.

 

Sul progetto ADP c'è poco da dire, è composto da una maschera principale che contiene due sottomaschere, la prima consente l'inserimento dei  componenti della distinta al primo livello e la seconda mostra l'esplosione completa di tutti i livelli. Il codice VBA è poco, serve a sincronizzare le caselle combinate quando si cancella o si aggiunge un nuovo prodotto.

L'esempio utilizza tre tabelle, una per le unità di misura, una per i prodotti e una per la composizione della distinta base, la loro struttura è semplice e con pochi campi, non intendo trattare tutta la problematica di magazzino ma solo la struttura per implementare la distinta base.

In allegato al progetto ADP ci sono 2 file "TestDistintaSql2000.sql" e "TestDistintaSql2005.sql", servono a generare gli oggetti del database, il primo file è da utilizzare con Sql Server 2000 e perché no, anche con Sql Server 2005, mentre il secondo si può usare solo con Sql Server 2005.

 

TestDistintaSql2000.sql

Dopo il codice che genera le tabelle si incontra la prima funzione ricorsiva ufn_CKRicorsione, serve a controllare che non vengano inseriti componenti che possano generare ricorsione, ovvero un loop infinito (o quasi in quanto c'è un limite al numero di ricorsioni) tra codice Padre e codice Figlio della distinta.
Due Trigger INSTEAD OF, uno per l'inserimento e uno per la variazione, richiamano la funzione e rendono un errore in caso di ricorsione.
I trigger di Sql server sono strore procedure speciali che vengono eseguite automaticamente quando viene eseguita un'istruzione Insert,Update o Delete sulla tabella. Il manuale di Sql Server 2000 è molto dettagliato e ricco di esempi, potete approfondire l'argomento qui http://msdn.microsoft.com/library/default.asp?url=/library/en-us/architec/8_ar_da_1tup.asp il link è in lingua inglese se volete potete scaricare il manuale in italiano qui http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=a6f79cb1-a420-445f-8a4b-bd77a7da194b

Proseguendo nel codice si incontra un'altra funzione ricorsiva ufn_CalcolaCostoProdotto, questa, scorrendo in avanti la distinta, calcola il costo del prodotto passato nel primo parametro, se il prodotto non ha distinta viene reso il costo inserito nell' anagrafica prodotto.

L'output dell'esplosione della distinta è affidato a una stored procedure ricorsiva usp_EsplodiDistinta che memorizza in una tabella temporanea locale i vari componenti e il loro costo, il risultato finale viene reso al progetto ADP sottoforma di recordset, questo ci permette di formattare come meglio crediamo i controlli della sottomaschera o dell'eventuale sottoreport.
Sql Server 2000 ha per le funzioni o le sp ricorsive il limite di 32 ricorsioni, quindi possiamo avere distinte base con al massimo 32 livelli.

 

TestDistintaSql2005.sql

Tutta le struttura è identica a quella del database per Sql Server 2000.
La grossa novità è quella di non utilizzare funzioni o stored procedure ricorsive perché Sql Server 2005 implementa le Query Ricorsive, basta uno sguardo alle due funzioni e alla stored procedure per notare che contengono poco più di una semplice Select.
Per maggiori informazioni sulle query ricorsive vi rimando alla versione italiana del manuale di Sql Server 20005 che è approfondito e ricco di esempi  http://msdn2.microsoft.com/it-it/library/ms186243(SQL.90).aspx
Ho lasciato il limite di default di 100 ricorsioni quindi ho dimensionato la colonna Sortcol nella stored procedure usp_EsplodiDistinta a 1515 caratteri,  corrispondenti alla dimensione del codice prodotto (15 caratteri) + 100 ricorsioni (15*100).
Volendo si può innalzare questo limite aggiungendo l'hint MAXRECURSION.

 

Istruzioni per Sql Server 2000

Aprite Query Analyzer o il mitico DbaMgr di Andrea Montanari http://www.asql.biz/DbaMgr.shtm create un nuovo database, dategli il nome testDistinta, aprite ed eseguite lo script contenuto nel file TestDistintaSql2000.sql. Aprite il progetto ADP con una versione di Access uguale o maggiore alla 2000, collegatelo al db creato e aprite la maschera Prodotti.

 

Istruzioni per Sql Server 2005

Aprite il favoloso SQL Server Management Studio Express, create un nuovo database, dategli il nome testDistinta, aprite ed eseguite lo script contenuto nel file TestDistintaSql2005.sql. Aprite il progetto ADP con una versione di Access uguale o maggiore alla 2000, collegatelo al db creato e aprite la maschera Prodotti.

Entrambe le versioni hanno le tabelle già popolate con alcuni dati di esempio.
L'aspetto grafico non è molto curato, lo lascio al vostro gusto.

 

 


Sistema operativo: Win32
Applicazioni: Access 2000, Access 2002/XP, Access 2003

 

Allegati:
FileDescrizioneDimensione del File
Scarica questo file (DistintaADP.zip)DistintaADP.zip 30 Kb
Ultimo aggiornamento Mercoledì 01 Luglio 2009 17:47