Newsgroup: it.comp.appl.access
Titolo: ??? Struttura gerarchica ricorsiva ???

ciao a tutti sono nuovo nel newsgroup :)
ho un problema con un DB in access che, nonostante ripetuti tentativi non 
sono riuscito a risolvere.
Devo realizzare un database in grado di calcolare il costo di fabbricazione 
di alcuni oggetti, nello specifico porte blindate.
ad es:
partiamo da una ipotetica vite
per montare un telaio servono 10 viti
per montare una porta serve 1 telaio + 4 viti
nello scatolone della porta viene inserita una confezione per la posa della 
stessa, contenente 6 viti
la ditta per cui devo realizzare tutto questo vende sia i telai 
semilavorati, sia le porte sfuse, sia le porte confezionate.
per risolvere la cosa ho pensato ad una struttura ricorsiva. Utilizzando una 
tabella ausiliaria lego con una relazione molti-a-molti l' ID a se stesso
      TblOggetti  TblRelazioni
      ID Oggetto  ID1 ID2 N Note
      1 vite  2 1 10 un telaio contiene 10 viti
      2 telaio semilavorato  3 1 4 una porta sciolta contiene 4 viti
      3 porta sciolta  4 1 6 un kit contiene 6 viti
      4 kit montaggio  3 2 1 una porta sciolta contiene un kit
      5 porta confezionata  3 2 1 una porta sciolta contiene un telaio
      .    5 3 1 una porta confezionata contiene una porta sciolta
       5 4 1 una porta confezionata contiene un kit di montaggio
Ho fatto la scelta corretta??
esistono modi + semplici ma ugualmente efficaci??
PS: Purtroppo non riesco a conoscere a priori il numero massimo di 
ricorsioni
Vi ringrazio in anticipo :)

 ha scritto nel messaggio
news:e0gptp$mfl$1...@nnrp.ngi.it...

Ciao ricciolibiondi...
si tratta del classico problema della distinta Base prova a guardarti questi
due esempi:
di Giorgio Rancati: 
http://www.riolab.org/viewrisorsa.asp?id=44
di Lorenzo (pyx):  
http://www.riolab.org/viewrisorsa.asp?id=39
saluti
-- 
Cinzia
---------------------------------------
|  
http://www.riolab.org
  |
---------------------------------------


va bene ma lo farei al contrario
id   desc           idrif  qta
----------------------------
1 Oggetto complesso  null  1
2 oggetto sub 11      1    5
3 oggetto sub 12      1   183
4 oggetto complesso  null  1
5 subogg      21      4    5
6 subsubogg           5    2
non serve sapere quante ricorsivita' ci sono. Ce ne sono tante finche' 
le metto (a scendere) e finche' non trovo "null" a salire
la desc di fatto dovrebbe essere il codice di un articolo che viene 
definito nella apposita tabella (articoli)
--
ac

 di Lorenzo (pyx):  
http://www.riolab.org/viewrisorsa.asp?id=39
I_Am_Too_Sorry
non avevo visto la tua risposta
--
ac

 ha scritto nel messaggio
news:FVTWf.41639$nz4....@tornado.fastwebnet.it...

Don't worry ...
-- 
Cinzia


The pen is on the table
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

 ha scritto nel messaggio 
news:442bfcc7$0$29104$5fc...@news.tiscali.it...

grazie della risp, adesso ci capisco qualcosa di + :)
mi sorge però il problema del calcolo dei costi....
ogni articolo ha il prezzo composto da un fisso e da un'aumento percentuale
con l'operazione fisso*% risalgo al prezzo netto dell'articolo
ad ogni relazione possono corrispondere 2 aumenti (uno fisso ed uno
percentuale)
a seconda dell'impiego posso avere diverse maggiorazioni (una vite applicata
automaticamente al telaio mi costa di meno di quella applicata col
cacciavite)
come posso riuscire a calcolare i prezzi usando una semplice query SQL?


Ciao "I_Am_ToO_SeXy",
dovresti specificare come pensi di organizzare le tabelle xchè non è chiaro
quali informazioni di costo hai nelle tue tabelle.
Mi pare di aver capito che ciascun elemento ha un costo base e 2 possibili
aumenti uno fisso e uno percentuale.
questi aumenti si applicano però in  funzione del semilavorato.
Mi immagino una tabella Prodotti in cui avrò x le materie prime il costo
base e una tabella Distinta in cui ad ogni
riga oltre ad avere la quantità impiegata avrò l'aumento fisso e quello in
percentuale.
Rimane il fatto che per calcolare il costo di un prodotto finito se stai
usando un MDB è impossibile farlo con una semplice query ma dovrai
implementare una funzione ricorsiva che si calcoli il costo, se invece stai
usando SQL Server allora non dovresti avere difficoltà gurdandoti bene
l'esempio di Giorgio a modificarlo per gestire anche gli aumenti .
Ciao
Cinzia

 ha scritto nel messaggio 
news:442ce1a7$0$29096$5fc...@news.tiscali.it...

esattamente :)
volevo calcolare il tutto usando una singola query per rendermi + semplice 
la realizzazione dei vari report :)
non sono pratico di SQL Server.... cercherò di inventarmi un'escamotage per 
aggirare la cosa :\

 The pen is on the table
Be careful(l). I guess the stink
--
ac

Ho studiato sugli esempi da voi gentilmente proposti... ma non ho risolto 
nulla :\
online ho trovato esempi "semplici", ovvero dove un componente può far parte 
di un solo "Kit", mentre io cercavo di realizzare una relazione 
molti-a-molti
avete nessun link che mi possa tornare utile? 

 ha scritto nel messaggio
news:e0rebg$mg$1...@nnrp.ngi.it...

mi sa che non hai guardato bene,  sia nell'esempio di Lorenzo che in quello
di Giorgio la stessa Vite può far parte di diversi prodotti.
Magari nei dati di esempio questo non succede ma solo perchè ci sono pochi
dati, prova ad aggiungere  un nuovo prodotto e ad usare un semilavorato o un
componente  già esistente e vedrai che è possibile.
Es. di Giorgio:
Tabella Prodotti
 1 ART001 Articolo 1 Pz 0
 2 ART002 Articolo 2 Pz 0
 3 MAT001 Mat Prima 1 Pz 10
 4 MAT002 Mat Prima 2 Pz 20
 5 SEM001 Semilavotato1 Pz 0
 6 SEM002 Semilavorato2 Pz 0
 7 SEM003 Semilavorato3 Pz 0
Tab Distinta
 1 ART001 SEM001 1
 2 ART001 SEM003 2
 3 ART002 SEM001 1
 4 ART002 SEM002 2
 5 SEM001 MAT001 1
 6 SEM001 MAT002 2
 7 SEM002 MAT001 3
 8 SEM002 MAT002 4
 9 SEM003 MAT001 5
 10 SEM003 MAT002 6
 11 SEM003 SEM001 1
 12 SEM003 SEM002 2
Da cui si può dedurre che il prodotto Articolo 1  è costituito da:
1 Semilavorato 1 e 2 Semilavorati 3
il Semilavorato 1 a sua volta è costituito da
Materia prima1 (1pz) e Materia Prima2  (2pz)
il Semilavorato3  è costituito da Materia Prima2 (6pz) e da 1 Semilavorato1
e 2 Semilavorati 2 .....
mi fermo qui ma come vedi la materia prima 2 fa parte di 2 Semilavorati
diversi...
Ciao
