Newsgroup: it.comp.appl.access
Titolo: Somma Quantita = 0 Archivia in storico.

Salve a tutti, ho la seguente necessita.
ho un db di prodotti con una tabella Storico e una tabella Ordini, una 
maschera di acquisto e di vendita (che moltiplica la quantità per -1).
Tramite una maschera di monitor vedo la quantità dei prodotti in carico.
è possibile fare in modo che:
Se ho in carico 30 pippo e ne vendo 30 (-30), avere una routine che se la 
somma è 0 vada ad eliminare i record dalla tabella Ordini ed ad accodarli 
alla tabella Storico, ma anche se la vendita si sviluppa su piu giorni, 
esempio ieri (-15) e oggi (-15), i tre record che formano il movimento 
vadano ad accodarsi alla tabella Storico.
Grazie 

 ha scritto nel messaggio news:XmqZg.8059$Fk1....@twister2.libero.it...

Certo che è possibile. Io questa necessità la risolverei tramite l'uso di recordsets, ovviamente 
tramite codice. Se vuoi che ti dia una dritta un pò più dritta, dovresti essere più preciso riguardo 
a nomi tabelle e nomi campi, e magari riportare un esempio nel caso ci sia l'annullamento tra carico 
e scarico e che tipo di trasporto hai la necessità di fare nella tabella storico.
Michele 

 ha scritto nel messaggio 
news:4537ab2e$0$5848$4faf...@reader3.news.tin.it...

Grazie, il discorso è questo:
Ho una tabella Ordini con i campi: IDOrdine(contatore); 
CodiceArt;Data;Quantità;Prezzo;Archivio(boolean)
Ho una tebella di Conversione:TipoOperazione(Acquisto/Vendita);Segno (+1 
e -1)
Ho una maschera Monitor: pulsanti apertura maschera acquisto e 
vendita;sottomaschera totordini
Ho una maschera acquisto: CodArticolo,data, quantità, prezzo, (in auto la 
qtà viene moltilicata per segno (+1))
Ho una maschera Vendita: CodArticolo,data, quantità, prezzo, (in auto la qtà 
viene moltilicata per segno (-1))
La sottomaschera tot ordini si appoggia ad una query in cui ho i totali 
della quantità, totali del costo (qta*prezzo);in questa maschera visualizzo 
solo gli articoli in cui la qtà è maggiore di zero
La sottomaschera calcola correttamente le operazione di carico e scarico, 
vorrei che nel momento in cui inserisco la vendita di un articolo, e la 
somma tra la quantità di carico e scario è uguale a zero(anche in piu 
giorni) i singoli record vadano ad accodarsi ad una tabella storico:
Ad oggi manualmente fleggo i record (quando la somma qta è a zero) del campo 
archivio, su un'altra maschera di dettaglio degli articoli.
Io pensavo di fare un codice (o meglio avere aiuto per farlo) nel momento in 
cui ho l'ordine di vendita, mi controlla la somma della qtà, mi flegga il 
campo archivio degli ordini (identificato il codice articolo già nella 
maschera di vendita) e poi lavorare sulle query e/o requery, im modo da 
avere un archivio unico  degli ordini
oppure direttamente da codice, fare la somma dopo l'inserimento della 
vendita, ed eseguire una query di accodamento ad storico ed eliminazione da 
ordini,
Pensi sia fattibile??
Io preferirei il primo, in quanto in caso di resi, o di problemi, posso 
manualmente entrare nella tabella e apporre il flag sul campo archivio.
Grazie

 Pensi sia fattibile??
Ciao Rob, eccomi qua, mi è servito un pò di tempo per cercare di trovare una soluzione al tuo aiuto.
Quello che ti propongo a seguire è in teoria una funzione in VBA che farebbe esettamente la stessa 
operazione che fai tu a mano (ossia se somma=0 spunta) così la puoi inserire nel tuo db senza 
stravolgere il sistema che hai già collaudato.
Essendo una funzione, la potrai lanciare da Macro con l'operazione EseguiCodice  > Nomefunzione 
"ArchiviaStorico ()". Il discorso di cancellare da Ordini e accodare ad archivio è una cosa che 
penso tu abbia già risolto per cui non l'ho sviluppata.
Se non hai mai usato VBA, crei un modulo standard, una volta aperto ti assicuri che le prime due 
righe siano (casomai aggiungi Option Explicit a mano)
-----------------------------
Option Compare Database
Option Explicit
---------------------------
Poi vai su strumenti>riferimenti e spunti "Microsoft DAO 3.6 Object Library" e dai OK
Poi incolli all'interno del modulo questa funzione e vai su Debug>Compila e poi salvi.
La funzione che ho scritto è questa:
------------------------------------------------------------------------
Function ArchiviaStorico()
On Error GoTo Errore
'dichiarazione delle variabili
'database
Dim db As DAO.Database
'recordsets per la tabella Ordini
Dim RcdOrd As DAO.Recordset
'campi per effettuare le valutazioni
Dim FldCod As DAO.Field
Dim FldQt As DAO.Field
'Variabili di supporto
Dim CodArt As Long
Dim Qt As Long
Dim Cnt As Long
Dim N As Long
'inizializzazione del database (database corrente)
Set db = CurrentDb
'inizializzazione del recordset Ordini, da notare l'ordinazione
'per codice articolo, che consentirà di raggruppare tutti
'i record con lo stesso codice articolo
Set RcdOrd = db.OpenRecordset("SELECT * FROM Ordini ORDER BY " & _
"Ordini.CodiceArt;", dbOpenDynaset, dbDenyWrite)
If RcdOrd.EOF Then GoTo Chiusura
Set FldCod = RcdOrd.Fields![CodiceArt]
Set FldQt = RcdOrd.Fields![Quantità]
Do While Not RcdOrd.EOF
    Qt = FldQt.Value
    CodArt = FldCod.Value
    Cnt = 1
    RcdOrd.MoveNext
    Do While CodArt = FldCod.Value
        Qt = Qt + FldQt.Value
        Cnt = Cnt + 1
        RcdOrd.MoveNext
        If RcdOrd.EOF Then GoTo Riga1
    Loop
Riga1:
    If Qt = 0 Then
        RcdOrd.Move -Cnt
        For N = 1 To Cnt
            RcdOrd.Edit
            RcdOrd.Fields![Archivio].Value = True
            RcdOrd.Update
            RcdOrd.MoveNext
        Next
    End If
Loop
Chiusura:
RcdOrd.Close
Set RcdOrd = Nothing
db.Close
Set db = Nothing
Exit Function
Errore:
Err.Raise Err.Number, Err.Source, Err.Description, _
Err.HelpFile, Err.HelpContext
End Function
---------------------------------------------------
Mi sono basato sul fatto che la tabella si chiami "Ordini" e che i tre campi che utilizzo 
all'interno per le varie operazioni si chiamino "CodiceArt", "Quantità" e "Archivio".
Do già per scontato che tutti i records abbiano ad OFF il campo Archivio prima del lancio funzione 
(a te il curarti di questo) e che la tabella Ordini sia chiusa (altrimenti la funzione genera errore 
in quanto apre la tabella in Accesso Esclusivo).
Io ho già fatto un pò di prove e mi sembra funzioni correttamente, ad ogni modo esegui numerose 
prove prima di utilizzarla definitivamente.
Detto questo, aspetto tue notizie per sapere se tutto funziona.
Michele