Funzione per il calcolo ricorsivo di un prezzo

martedì 02 maggio 2006 - 13.15

ricky Profilo | Junior Member

Ciao, qualcuno potrebbe darmi uno spunto per la strutturazione di una funzione che determini il costo di un prodotto in base a questa logica:

tabella articoli con

ID - Codice - Descrizione - Prezzo - Tipologia (A: acquistato, P: prodotto) - IDFigli

per definizione i prodotti che non hanno figli sono acquistati (in quando non sono composti da altri prodotti)
i prodotti con figli sono generati da un lavoro di produzione (quindi prodotti internamente)

io vorrei che dato un ID alla funzione, calcoli il costo totale, sommando i prezzi di tutti i componenti... in questo modo

se il componente è prodotto acquistato (A), viene recuperato il prezzo
se il componente è un prodotto lavorato (P) devo sommare i prezzi dei figli ... procedendo ricorsivamente se l'elemento ha, a sua volta, altri figli (e alla fine devo sommare solo le foglie)

quindi se il prodotto

Macchina Fiat è composta da:
Volante (A) ... acquistato
Ruote (A) ... acquistato
Sedile (P) ... prodotto
.... il Sedile è composto da
.... Tessuto (A)
.... Plastica (A)

per determinare il costo della Macchina FIAT, dovrei sommare Volante + Ruote + Tessuto + Plastica, procedendo ricorsivamente; se per ipotesi plastica avesse avuto altri componenti, non avrei sommato Plastica, ma gli elementi che ne facevano parte!

Scusate il post lungo ma è un po' complicato da spiegare e, per me, da implementare

... in questo modo, se la mia logica non è sbagliata, dovrei riuscire a determinare il costo totale di un prodotto

Grazie a tutti per l'aiuto... e scusate per il post particolarmente lungo!!!

Cteniza Profilo | Guru

Insomma, se ho ben capito, tu vuoi fare il calcolo costi della distinta base.
In pseudocodice:
- si parte dal livello più alto con quantità (ti consiglio 1000) di prodotto finito
- si realizza un metodo ricorsivo a che crea una struttura di dati (es tabella di appoggio) che arriva ai materiali di base.
- Per ogni elemento della tabella si memorizza la sua quantità di utilizzo, il codice, e il suo prezzo e il livello.
- si realizza una funzione ricorsiva che prende in input il codice del padre e restituisce il valore dei figli (ricondotti ciascuno secondo la quantità di contribuzione di ciascun elemento)
Se poi devi tenere conto anche delle fasi e dei materiali utilizzati nelle fasi la vedo un pò dura e complessa.

ricky Profilo | Junior Member

Grazie mille, quindi dovrei, partendo da un ID, verificare se è A o P, se è P ha sicuramente dei componenti, che possono, a loro, volta essere componenti.

Non capisco come creare la funzione ricorsiva che arriva fino all'elemento finale... , verificando che siano A o P

Grazie 1k

Cteniza Profilo | Guru

Su questo mio articolo trovi un esempio di funzione ricorsiva di estrazione dati di distinta base.
http://community.visual-basic.it/lucianob/archive/2006/04/25/17107.aspx
Non nego che sia abbastanza complesso come codice ma, dopo averci fatto il callo (due o tre anni) vedrai che ti sembrerà uno scherzo .

ricky Profilo | Junior Member

Il effetti il tuo articolo l'avevo già guardato in seguito ad una tua risposta sul forum per la strutturazione gerarchica.... nel mio caso la situazione "mi sembra" differente... io devo, praticamente, recuperare le foglie di un ID

Riscrivendomi su carta un esempio, mi sembra di aver capito che recuperando le foglie di ogni ID, basterebbe recuperare il prezzo ... dato che si tratta sicuramente di TUTTI prodotti acquistati... ora detto così "sembra" OK, ma trasformarlo in una funziona ricorsiva è un po' piu complicato per me

Cteniza Profilo | Guru

Putroppo non ho tempo e non ho una soluzione di calcolo costi da distinta base su .NET (per me è work in progress sull'erp che sto costruendo) ma con altri linguaggi ti assicuro che ho già realizzato questa cosa e installata presso aziende che la usano da anni.

ricky Profilo | Junior Member

Non pretendo il codice ... ma in pseudo linguaggio, come dovrebbe essere la funzione???

Grazie ancora

ricky Profilo | Junior Member

Nessun suggerimento

Cteniza Profilo | Guru

Sei capitato in un momento in cui non ho tempo distrazioni dal lavoro e per qualche giorno non ti posso aiutare, magari lo potrà fare sicuramente qualche altro.

ricky Profilo | Junior Member

Figurati!!! mi hai già dato qualche prezioso spunto.

Sono io che sono inchiodato
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5