Newsgroup: it.comp.lang.visual-basic
Titolo: Questioni di logica 2...

Prendendo spunto da altro post vi spiego il mio problema e sarei grato se mi
dicesse con la vostra esperienza (specie quella di chi si occupa di
cimiteri, fogne etc :-D ) come risolvereste il problema.
Ho una applicazione che gestisce la distribuzione di calzature.
L'utente ha una lista di articoli ordinati per fornitore
Articolo A01
Articolo A02
Articolo A03
Dal punto di vista database la cosa è così strutturata.
Una tabella chiamata ListaArticoli contiene
ID
CodiceArticolo
Forma
Fondo
Tacco
Pellame
Riporto
Fodera
Fornitore
PrezzoAcquisto
PrezzoVendita
Un'altra chiamata ListaFoto contiene
ID
IDArticolo
CodiceArticolo
Colore
PercorsoFoto (è il percorso della foto dell'articolo)
Per 1 anno di utilizzo non ha dato problemi.
Mi chiama il cliente e mi dice...
"Ciao... è successo questo.. il mio fornitore FaccioLeScarpe S.P.A. fa un
articolo A001 di colore Rosso, Tacco 10, Forma 234, Prezzo Acquisto 10?,
Prezzo vendita 12?. Ma fa anche un articolo A001 di colore Verde. Non cambia
nessun altro dato"
Fin qui non ci sono problemi.... gestisco i colori con la tabella ListaFoto
"Si, ma fa anche un articolo A001 di colore Giallo, Tacco 30, Forma 233,
PrezzoAcquisto 13?, Prezzo Vendita 17?"
Oh... porc!!!!
Come faccio??????????
Per come è strutturato il programma non possono esistere 2 articoli con lo
stesso codice.... Questo semplicemente perchè il mio cliente non mi ha mai
detto che poteva esserci quest'esigenza.
Ora so che potrei eliminare dalla tabella ListaArticoli tutti i dati tranne
ID e CodiceArticolo e Fornitore e potrei fare una tabella DatiArticoli con i
dati di ogni "variante"....
Ma per far questo dovrei anche MODIFICARE TUTTO il codice del software
(Circa 12 mila righe ... :-( ) che per varie ragioni che non sto qui a
spiegare funziona basandosi su quella tabella ListaArticoli per emettere
Fatture, Statistiche, Ordini, Preventivi inoltre funziona come "in rete"
ossia genera dei file che il rappresentante manda al distributore per
l'ordine, e il distributore manda al fornitore per la fabbricazione delle
scarpe, poi il fornitore manda il file al distributore per l'evasione e il
distributore fa le sue statistiche......
Io lo so già che probabilmente non c'è altra soluzione ma.... forse voglio
sentirmelo dire.... prima di mettermi quasi a riscrivere il software da
capo.
Un'altra cosa:
Se devo fare tali modifiche, considerando che il software è stato finito
dopo 10 mesi di sviluppo, testing, e bug-fixing ed è stato venduto ad euro
5.000? per 1 licenza distributore + 3 rappresentanti + 1 fornitore e che
ogni licenza aggiuntiva costa ? 700 compreso 1 anno di assistenza e che ogni
anno di assistenza successiva costa ? 300 x licenza, e che nel contratto di
assistenza sono previsti "aggiornamenti periodici atti a risolvere eventuali
errori e/o problemi e/o malfunzionamenti riscontrati nell'utilizzo del
software" e che quindi questo non può essere considerato uno di questi
interventi ma una aggiunta di funzionalità... quanto dovrei farmi pagare???
Grazie mille e scusate se sono stato logorroico....

quanto dovrei farmi pagare???
Beh se dopo UN anno ti vengono dette queste cose fai un'analisi di quanto
tempo ti porta via, fai il costo e preventiva al cliente.
Starà a lui decidere sul da farsi...Certo potri andargli incontro con no
sconto però...la modifica se deve pagà!
Alex
PS: beh sul quanto direi che non puoi andare oltre il 40-50% del valore del
software...

 detto che poteva esserci quest'esigenza.
CUT
Fagli aggiungere un carattere di definizione per ogni codice (per esempio un
blank che è invisibile in fase di stampa) per cui gli articoli :
"A001 " e
"A001  " e
"A001    "
risulteranno codici diversi
comunque è impensabile andare a modificare la logica del progetto per una
variazione di specifica.
Se lo vuoi fare ti consiglio di non farti pagare a corpo ma ad ore.
Saluti

 PrezzoVendita
E qui vedo la prima cavolata.
Hai collegato in maniera errata articolo e fornitore.
Il caso che ti si presenta adesso è solo uno dei tanti casi che ti si poteva
presentare.
Immagina se lo stesso articolo potesse essere prodotto da due o più
fornitori, ma che tale articolo debba apparire, lato vendita, con lo stesso
codice, foto, descrizione, ecc...
Dovevi fare una tabella dove codice articolo è il codice del tuo cliente,
ossia il codice che viene 'esposto' al compratore.
Poi una tabella che collega articolo a fornitore, dove per un articolo può
esserci una miriade di fornitori, con prezzi acquisto e codici-fornitore
diversi.
In questo modo, l'articolo A001 è marrone, l'A002 è giallo, ecc...
Che poi questi, nella tabella delle forniture, contengano un
codice-fornitore "A001/Marrone" perchè il fornitore ha deciso di usare una
codifica del genere, a te non cambia niente.
Per il momento puoi ovviare inserendo un campo 'codice fornitore', poco
regolamentato, in cui si possa scrivere ciò che serve al fornitore per
comprendere l'ordine.
Dal punto di vista economico:
se ti avevano garantito che questa cosa non poteva avvenire, il torto è del
tuo cliente.
Se invece, come ritengo, tu non hai presentato loro questo tipo di
problematiche, il torto è tuo. Io personalmente (ma mi rendo conto di essere
troppo buono), in un caso del genere farei un service pack gratuito.
Ciao
Alberto

E' chiaro che c'è stata comunque una omissione da parte tua
in fase di progettazione. Benchè il cliente non te lo avesse chiesto
fare una tabella in più ti avrebbe evitato oggi dover implementare
un sistema che ti costerà qualche ora di lavoro.
Quello che devi fare è implementate una struttura padre figlio,
dove hai la testata del record A001, con i dati base, quindi
chi è il produttore, quanto costa (premesso che il costo sia
legato all'articolo di per se), ecc. ecc. e una tabella secondaria
dove in join con la tabella padre per codice articolo (ti consiglio
comunque di utilizzare degli id interni e non quelli che scrive
il cliente) ti dice le varianti del prodotto, incluso colore (
il prezzo se varia in funzione del colore) e tutto quello che
devi sapere.
Dopo di che ti diverti a fare un porting dei vecchi dati nella
nuova struttura, un lavoro bello rognoso e che devi fare con
cura altrimenti non ti funziona più un tubo.
-- 
Saluti
Andrea Moro
Sito Comune : 
http://www.it-lang-vb.net

 Un'altra cosa:
....
secondo me e' a pagamento , trattandosi come di una nuova features !
(rivedete bene il contrattino e/o accordi)


E si, mi pare che sia strutturato male il database (e forse non per colpa
tua, ma per analisi errata per mancanza di informazioni)
Se ho capito bene gli articoli sono scarpe, quindi una scarpa può avere
colori, dimensioni, proprietà diverse per un singolo modello.
Quindi il codice appartiene al modello, poi le varianti vanno memorizzate
separatamente.
A questo punto, vedi se riesci a risolvere cambiando il codice con qualche
carattere ad esempio:
Spazi - "  A001", "A001"
Caratteri - "A001/T10", "A001/T30"
Ma una cosa importante: Come fa il fornitore a distinguere se hai ordinato
la scarpa col tacco 10 o col tacco 30 se il codice è uguale???
Non escluderei quindi un loro errore. Informati su come funzionano questi
codici direttamente da FaccioLeScarpe SPA
Ciao

Rispondo a tutti visto che tutti hanno detto più o meno le stesse cose:
Non posso modificare in nessun modo il codice dell'articolo... no posso far
diventare A001 come A001a A001b etc
Nella Tabella ListaArticoli è memorizzato, per ogni articoli, l'ID Fornitore
quindi per chi aveva detto di far così è già fatto da prima
Mi sa che mi tocca modificarlo...porc!

 Mi sa che mi tocca modificarlo...porc!
bene , cioe' male , pero' almeno adesso basa tutto su codici interni , non
preoccupandoti minimamente dei codici fornitori ^_^
es:
 IDTUO -  IdForn - colore - tacco ...
001 - A000 - Giallo - 33
002 - A000 - Verde - 40
per le statistiche potresti aggiungere una tabella con relazione 1 a molti
tra codice-forn e codici-tuoi insieme a tutte le varianti che il fornitore
puo' prevedere
NB non sono ferrato in materia prendi tutto rigorosamente con le scarpe di
piombo :p

 ha scritto nel messaggio
news:XK7ra.73254$iy5.2...@twister2.libero.it...

Mi viene in mente di fare questo:
Fai una nuova tabella, o espandi la seconda che hai già, la colleghi alla
prima mettendo una chiave esterna e un campo nuovo sulla prima tabella
(questo puoi farlo credo), ti crei una classe oggetto che identifica
l'articolo prendendo i campi giusti dalle due tabelle.
Come chiave a questo punto sulla prima tabella metti Codice A001 e il campo
che hai appena aggiunto.
Dovresti risolvere.
Rimane il problema che ti ho detto prima che non è da escludere:
come fa il fornitore a distinguere l'articolo se il codice è uguale?
Sei sicuro che non sia un loro errore??

 scarpe di piombo :p
...evitando accuratamente quelle di cemento... sono poco salutari! ;-)

 cliente, ossia il codice che viene 'esposto' al compratore.
Sottoscrivo...
Alex