Newsgroup: it.comp.lang.visual-basic
Titolo: spero non OT

Salve a tutti spero di non essere troppo OT...
allora io ho questo problema con questa tabella che contiene i movimenti di
acquisto e di vendita della mia azienda
+ o meno così:
ID | IDarticolo | quantita | prezzo | vendita |  Data |
1      1                 10          100                     31/01/03
2      2                 10            50                     31/01/03
3      3                 10          100                     31/01/03
4      1                  -1            20      v             31/01/03
5      2                  -2            10      v             31/01/03
6      2                  10            45                    31/01/03
Come vedete ci sono movimenti in entrata ed in uscita (i negativi); questi
ultimi hanno poi un "segno" distintivo nel campo "vendita"; Ora io vorrei
stampare il magazzino ad una certa data raggruppando i totali delle quantità
che ci sono a quella data in magazzino.
Nascono quindi due problemi: raggruppare le quantità e raggruppare solo i
prezzi degli acquisti;
Devo infatti fare in modo che il risultato della query sia questo:
IDarticolo | quantita | prezzo |
1                 9            100
2                 8              50
3                10           100
2                10             45
e che quindi mi sottragga le quantità dai giusti articoli caricati e che mi
faccia vedere gli stessi articoli con prezzi differenti in righe
differenti....
Avete qualche idea?

 2                 8              50
Ciao
Alberto
--
E non so se avrò gli amici a farmi il coro,
o se avrò soltanto volti sconosciuti,
canterò le mie canzoni a tutti loro
e alla fine della strada
potrò dire che i miei giorni li ho vissuti...

 ha scritto nel messaggio
news:GsHda.24054$7y3.8...@twister1.libero.it...


 ha scritto nel messaggio


 ha scritto nel messaggio
news:b57hiv$25gdju$1...@ID-51318.news.dfncis.de...


 effettuati scarichi....
Questo è un punto importante.
Come faccio a dire che i due pezzi venduti vengono dal lotto acquistato a 50
e non dal lotto acquistato a 45?
Devo guardare l'ordine cronologico (FIFO)?


 e non dal lotto acquistato a 45?
vai alberto, sei tutti noi :)

 ha scritto nel messaggio
news:b57ji2$26t38g$1...@ID-51318.news.dfncis.de...



E' una domanda seria.
Perchè se occorre guardare l'ordine cronologico, sorge anche un altro punto:
Se io ho dieci pezzi comprati un mese fa a 100, e 5 pezzi comprati ieri a
90, e ne vendo 5, devo stornare 5 dal lotto di dieci di un mese fa o devo
'vendere' i cinque più recenti?
Esiste tutta una legislazione molto precisa sulla valorizzazione dei
magazzini, e a seconda di quale normativa fiscale si deve seguire, le cose
sono diverse.
Andare 'a caso' è non solo assurdo, ma anche complesso.
Andare in ordine cronologico è molto complesso, ma fattibile con una
matrioska di CASE che fa paura, oppure molto più semplicemente con una SP
con cursor e Update su tabelle #.
Ma se fossimo in Access, già dovremmo metterci a sacagnare con i recordset
da VB, con la più viva speranza che nessuno inizi a modificare il magazzino
mentre lo valorizzo, ecc..., e abbandonando ogni velleità di performance.


 ha scritto nel messaggio


 seguo il metodo fifo....
Allora sono cavoli acidi, se vuoi farlo con una singola query.
Verrebbe un mostro difficilmente gestibile.
Ti consiglio vivamente di crearti una piccola Stored Procedure.
Fai una select group by articolo, prezzo di ogni articolo (where not
vendita) con quantità =sum(0.0) e Data_Ultimo_Acquisto=max(data_movimento)
into una tabella #.
Poi apri un Cursor sulla tabella dei movimenti.
A questo punto inizi a scandirlo, facendo per ogni movimento un update sulla
tabella #, scegliendo, in caso di vendita, il record più vecchio con
quantità >0, eventualmente splittando su più record.
E via così fino a fine cursore.


 ha scritto nel messaggio
news:msIda.24220$7y3.8...@twister1.libero.it...


 complesse....
Ecco, se non hanno le problematiche le Lifo/Fifo che ti sono state
evidenziate, puoi ragionare su una cosa di questo tipo:
SELECT codice_articolo, Sum(quantita), valore_unitario From Movimenti
Where … Group By articolo, valore_unitario Order By codice_articolo

 Where . Group By articolo, valore_unitario Order By codice_articolo
Questa era più o meno quella che volevo postare nel mio primo reply, poi mi
sono inchiodato quando ho visto quel risultato che non mi tornava...
Dal risultato della query di Lupo, l'unico problema è che le vendite
verranno presumibilmente su record distinti dagli acquisti
(prezzo_vendita<>prezzo_acquisto, si spera), per cui occorrerà un ulteriore
passaggio per effettuare accorpamenti, che però a questo punto non avranno
più alcuna attinenza cronologica.


 ha scritto nel messaggio
news:w2Jda.25506$Lr4.8...@twister2.libero.it...


 ha scritto


 stornerebbe i valori delle vendite dagli acquisti....
T'ho messo un Where con puntini sospensivi.
Le vendite non hanno (hai detto) quantità negativa?

 ha scritto nel messaggio
news:b57sis$25u4sf$1...@ID-51318.news.dfncis.de...



