Newsgroup: it.comp.appl.access
Titolo: sincronizzare tabelle "quasi uguali"

C'era una volta una tabella articoli, di cui non sipuò modificare la 
struttura perchè fa parte di un mdb esterno...
Con una query di accodamento ho "ricopiato" tutti i dati di articoli 
nella tabella "inventario" dove oltre alla descrizione e vita morte e 
miracoli degli articoli, ci sono anche la giacenza iniziale al 1 
gennaio, una sottomaschera relativa ai movimenti, e altre belle cosine 
relative al magazzino.
A questo punto si crea una discrepanza che non riesco a gestire quando, 
ad esempio, il produttore mi comunica delle variazioni di prezzo, che 
vanno a modificare alcuni record della tabella articoli.
come faccio a tenere aggiornata (periodicamente) la tabella inventario 
sulla base delle variazioni effettuate nella tabella "articoli" dal 
programma esterno(utilizzato da un'altra persona, non dal magazziniere)?

(.....)

A parte una certa confusione nell'esposizione (per es. parli della taella inventario e poi della sottomaschera movimenti
come se fossero due oggetti della stessa natura), secondo me hai commesso fin dall'inizio vari errori.
Comunque non è mai troppo tardi per rimediare.
Io non avrei copiato proprio niente, ma avrei collegato la tabella articoli al tuo db.
Poi nella tabella "Inventario" avrei definito un campo per contenere i valori della chiave primaria della tabella
articoli collegata, in modo da poter correlare ad ogni articolo le informazioni del suo inventario.
Fra l'altro, non avrei memorizzato la giacenza al primo gennaio, dato che basta questa query per ricavarla dinamicamente
per ogni articolo:
SELECT ID_Articolo, Magazzino, Sum(Quantita) FROM MOVIMENTI WHERE year(DT_Movimento) < year(Date) GROUP BY ID_Articolo,
Magazzino
dove suppongo che ogni movimento registri la quantità movimentata con il segno positivo se entrata, negativo se uscita e
che ID_Articolo sia la chiave primaria dell'anagrafica articoli.
In questo modo i prezzi sarebbero rimasti nell'anagrafica articoli "originale" e quindi non avresti avuto bisogno di
aggiornarli nel tuo db dato che ti sarebbe bastato leggerli !
Tutto questo puoi farlo anche adesso: alleghi l'anagrafica articoli esterna, togli dalla tabella inventario tutti i
campi che sono già presenti nell'anagrafica articoli esterna.
Ovviamente dovrai rivedere query, maschere e report; se questo ti sembra un lavoro inaccettabile, pensa a tutti i
problemi che ti evita per il futuro !
Vincenzo Turturro
Certificato Eucip Core Level
ITA 0000-002299 del 14/05/2007
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
risorse Access:
http://www.accessgroup.it
---------------------------------------------
Il sito comune di it.comp.as400
http://www.faq400.com
---------------------------------------------

 Vincenzo Turturro
Ti ringrazio per la pazienza, in effetti postando mi sono reso conto che 
la copia dei dati è sempre da evitare!
E' certamente preferibile cambiare ora tutte le query ed avere un 
database più normalizzato.
Ti chiedo la cortesia di correggermi se sbaglio:
TblArticoli		   TblInventario
-------------              -----------
IDArticolo      <----->    IDcorrispondente
CodiceProd                 ID
DescrProdotto              giacenzainiziale (facoltativa :)
Prezzo                     Settore
...                        ...
E fin qua penso che ci siamo
L'unico problema che ho ora è questo: nell'mdb esterno (tblArticoli) 
possono esserci articoli ripetuti (perchè in categorie diverse): a 
questo punto avrei il paradosso di più articoli uguali in magazzino.
Chiarisco meglio(ci provo)
IDArticolo   CodiceProd   DescrProd          categ  <--tblArticoli
1            aa001        pasta coi funghi   cat01
2            bb002        pizza margherita   cat01
3            bb002        pizza margherita   cat02
4            cc003	  polenta e osei     cat02
Non è colpa mia, se il db esterno fosse "normale" non ti avrei più 
disturbato; e ripensandoci è stato anche il motivo dell'iniziale 
"accodamento" (infatti i titoli con codice uguale mi hanno dato errore 
di accodamento e non sono stati incollati.
mi piacerebbe tanto linkare  CodiceProd <---> IdCorrispondente ma 
CodiceProd non è una chiave primaria, ed è spesso ripetuto. Che succede? 
Una casella di ricerca prenderà sempre il primo?
Se gli articoli che sono sul db esterno per qualche motivo vengono 
cancellati (è un db che aggiorna il sito, quindi può accadere che si 
vogliano eliminare dal sito) si cancella anche il dato e il prodotto di 
magazzino rimane "orfano"...

magazzino rimane "orfano"...
Vincenzo Turturro


 
(ps il sito di cui parlo è libriscientifici dot com, se per caso 
servisse.. non è un sito di cucina...:) )
Allego una query che uso per effettuare una richiesta di libri presenti 
sul sito: come vedi è arzigogolata, data la struttura
Esist è a sua volta una query che interroga i dati di magazzino dalla 
tabella inventario
SELECT articoli.codice, articoli.sottotitolo, articoli.titolo, 
articoli.prezzo, articoli.immagine0, articoli.offertaprezzo, 
articoli.immagine1, 
Esist.giacenza+nz(Esist.movimento,0)+Esist.prenotatiLS, Esist.Set FROM 
articoli INNER JOIN Esist ON articoli.codice=Esist.Cod ORDER BY 
articoli.codice;
NB
ho postato principalmente per riuscire a capire come, richiamando un 
dato articoli.codice dalla combobox con questo sql potessi andare a 
modificare inventario.prenotatiLS , dovrei impostare prenotatiLS = 
prenotatiLS +1 (non è detto che il libro sia presente a magazzino) 
sull'articolo che sto prendendo
solo che non mi piace postare indicando il mio problema specifico, ma 
essere un po' più generico per dare la possibilità a tutti di trovare 
l'argomento più interessante
Per come ho impostato la cosa ho due vantaggi: richiamando direttamente 
dalla tabella articoli ho l'esatta corrispondenza tra quello che c'è sul 
sito e la fattura...
Scusa se approfitto, ma già che ci sono ti ringrazio per l'attenzione.

Scusa se approfitto, ma già che ci sono ti ringrazio per l'attenzione.
Vincenzo Turturro
