Newsgroup: it.comp.appl.access
Titolo: Aggiornare controllo giacenza.

Buonasera ai partecipanti,
sto creando una form in cui fare la movimentazione di magazzino.
La maschera si chiama M_Prodotti_Movimento
in cui ho i seguenti controlli:
CasellaCombinata98 (dove seleziono la causale del movimento)
sDescrizione
lCodiceBarreProdotto
nQuantita
BottConferma (Pulsante che mi servirą in seguito)
-------------------------------------------
Nella Maschera M_Prodotti_Movimento
ho la Sottomaschera SM_Prodotti_Movimento
in cui ho il seguente controllo:
nGiacMag5
che mi riporta la giacenza attuale del prodotto in questione
----------------------------------
Preciso a titolo d'informazione che le movimentazioni
vengono memorizzate nella tabella
Tb_Movimenti_Magazzino
----------------------------------------
Preciso che le causali di movimento possono essere:
USO (in questo caso il valore va sottratto alla giacenza)
VEN (in questo caso il valore va sottratto alla giacenza)
RIN (in questo caso il valore va sottratto oppure aggiunto alla giacenza)
ACQ (in questo caso il valore va aggiunto alla giacenza)
OMG (in questo caso il valore va sottratto alla giacenza)
--------------------------------------
Volevo un vostro consiglio su come aggiornare la giacenza
(controllo nGiacMag5 nella mia sottomaschera)
attuale del prodotto dopo la movimentazione che avviene
col click del pulsante BottConferma
stavo pensando che potrebbe avvenire in due modi:
1) aggiungendo o sottraendo la quantita movimentata
(controllo nQuantita) alla giacenza,
2) Fare la fifferenza di tutte le operazioni memorizzate nella tabella
Tb_Movimenti_Magazzino e aggiungere o sottrare la risultante al valore
contenuto in nGiacMag5 nella mia sottomaschera
(o addiririttura intervenire direttamente nella tabella per l'aggiornamento)
Confido in Vostro contributo.
Napoleone

 BottConferma (Pulsante che mi servirà in seguito)

Creati una subquery dove dividi le quantità per le diverse motivazioni e
calcolatela di nuovo.
In una mia applicazione molto corposa in realtà affido ad una funzione
tramite i rst.
E' immediata, se ti va ne parliamo
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa1 - I° Conferenza Italiana per Sviluppatori Access Arezzo 4+5
Giugno 2005 Sono aperte le iscrizioni  Info:  
www.donkarl.com/it

 MAssimiliano Amendola
Certo che mi va, il magazzino è una cosa importanete, e se i conti non 
tornano.. sono soldi!
Napoleone 


Ovvio che lo faccio per due motivazioni ma non sarà difficile farlo per le
altre
Function AggiornaGiac(codx as string)
Dim rstAcq as dao.recordset
Dim rstVen as dao.recordset
Dim rstArt as dao.recodset
Dim Filt As string
Dim TotAcq as single
Filt = "codice = '" & codx & "'"
if rstAcq.count>0 then _
set rstAcq = currentdb.openrecordset("Select dsum(quantità) as Q from
tuatabella where " & filt & "motivazione = 'Acq')
TotAcq = rstAcq!Q
set rstven = currentdb.openrecordset("Select dsum(quantità) as Q from
tuatabella where " & filt & "motivazione = 'Ven')
TotVen = rstAcq!Q
set rstArt = currentdb.Openrecordset("Select * from Aricoli where " & filt)
with rstArt
    .edit
    !giacenza = TotAcq-TotVen
    .update
end with
Dopo scariccati tutte le variabili


 MAssimiliano Amendola
Per il momento, basta questo.
Napoleone 

 Napoleone
-- 


 MAssimiliano Amendola
Napoleone 

 Napoleone
-- 


 MAssimiliano Amendola
Quindi, prima ancora di andare avanti (dopo il pranzo)
quanto andremo a fare, sarà valido anche, quando caricherò un ordine?
Verrà richiamato lo stesso modulo?
Buon Appetito
Napoleone 

 Napoleone
-- 
_ _
Ciao


 ha scritto nel messaggio 
news:O2Eke.12017$TR5....@news.edisontel.com...

Scusami, non sono sparito. Ho installato un modem Wireless e mi ha bloccato 
due computer!
Ho creato un modulo chiamato AggiornaGiac
cosi redatto:
Function AggiornaGiac(codx As String)
Dim rstAcq As dao.Recordset
Dim rstVen As dao.Recordset
Dim rstArt As dao.recodset
Dim Filt As String
Dim TotAcq As Single
Filt = "lCodiceBarreProdotto = '" & codx & "'"
if rstAcq.count>0 then _
set rstACQ = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'Acq') TotAcq = rstAcq!Q
set rstVen = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'Ven') TotVEN = rstVen!Q
set rstRIN = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'RIN') TotRIN = rstRIN!Q
set rstUSO = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'USO') TotUSO = rstUSO!Q
set rstOMG = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'OMG') TotOMG = rstOMG!Q
Set rstArt = CurrentDb.openrecordset("Select * from ARTICOLI where " & Filt)
With rstArt
    .edit
    !giacenza = TotAcq - TotVEN - TotOMG + TotRIN - TotUSO
    .Update
End With
però gia in fase di compilazione mi segnala errore:
Previsto: Separatore di elenco oppure)
Speriamo domani di riattivare il tutto cosi continuiamo tranquillamente la 
discussione.
Ciao Napoleone

 Ciao Napoleone
-- 
_ _
Ciao


Ciao Massimiliano,
sarà il raffreddore ma ho l'impressione che continuo non aver afferrato 
l'idea di quello che stiamo facendo.
Intando per provare il codice, ho creato una query di cui ti allego l'SQL:
SELECT Tb_Prodotti.sDescrizione, Tb_Prodotti.lCodiceBarreProdotto, 
Tb_Prodotti.lCodiceBarreFornitore, Tb_Prodotti.nGiacMag5
FROM Tb_Prodotti
WHERE (((Tb_Prodotti.nGiacMag5)="Call AggiornaGiac"));
e mi da questo errore
Tipi di dati non corrispondenti nell'espressione criteri
---------------------
poi anzi ancora prima
.....
Function AggiornaGiac(codx As String)
Dim rstMov As dao.Recordset
Dim strMov As String
Dim Filt As String
Dim TotACQ As Single
Filt = "lCodiceBarreProdotto = '" & codx & "'"
strMov = "Select dsum(nQuantità) as Q from tb_movimenti_magazzino where " & 
Filt & " AND sCausale = 'Acq')"
If rstACQ.Count > 0 Then _
Set rstMov = CurrentDb.openrecordset(strMov)
If rstMov.RecordCount > 0 Then
    TotACQ = rstMov!q
Else
    TotACQ = 0
End If
----il codice che segue---
set rstACQ = currentdb.openrecordset("Select dsum(nQuantità) as Q from AND 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'Acq') TotACQ = rstACQ!Q
----fino a qui, deve andare su una sola riga o rimane su più righe
NB quando scrivo il codice questa riga ma anche le quattro di sotto, me la 
segnala in rosso, accompagnate dal msg che ti avevo segnalato ieri.
'set rstVEN = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'Ven') TotVEN = rstVen!Q
'set rstRIN = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'RIN') TotRIN = rstRIN!Q
'set rstUSO = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'USO') TotUSO = rstUSO!Q
'set rstOMG = currentdb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & filt & "sCausale = 'OMG') TotOMG = rstOMG!Q
Set rstArt = CurrentDb.openrecordset("Select * from ARTICOLI where " & Filt)
With rstArt
    .edit
    !giacenza = TotACQ - TotVEN - TotOMG + TotRIN - TotUSO
    .Update
End With
Rivedilo adesso, altrimenti appena attivo l'DSL potrei mandarti un file 
zippato?
Napoleone

 Napoleone
-- 


 ha scritto nel messaggio 
news:75Xke.12198$TR5....@news.edisontel.com...

Scusa dove va? mettilo grande anzi GRANDE cosi lo vedo!

Ciao
Napoleone 

>> from tb_Movimenti_Magazzino where " & filt & "
Yor are Here
***************AND *****************************************
 "sCausale = 'Ven')


CUT
adesso il modulo è cosi scritto
----------------------
AggiornaGiac()
---------------------
Function AggiornaGiac(codx As String)
Dim rstMov As dao.Recordset
Dim strMov As String
Dim Filt As String
Dim TotACQ As Single
Filt = "lCodiceBarreProdotto = '" & codx & "'"
strMov = "Select dsum(nQuantità) as Q from tb_movimenti_magazzino where " & 
Filt & " AND sCausale = 'Acq')"
If rstACQ.Count > 0 Then _
Set rstMov = CurrentDb.openrecordset(strMov)
If rstMov.RecordCount > 0 Then
    TotACQ = rstMov!Q
Else
    TotACQ = 0
End If
Set rstACQ = CurrentDb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & Filt & " and sCausale = 'Acq'")
TotACQ = rstACQ!Q
Set rstVEN = CurrentDb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & Filt & " and sCausale = 'Ven'")
TotVEN = rstVEN!Q
Set rstRIN = CurrentDb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & Filt & " and sCausale = 'RIN'")
TotRIN = rstRIN!Q
Set rstUSO = CurrentDb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & Filt & " and sCausale = 'USO'")
TotUSO = rstUSO!Q
Set rstOMG = CurrentDb.openrecordset("Select dsum(nQuantità) as Q from 
tb_Movimenti_Magazzino where " & Filt & " and sCausale = 'OMG'")
TotOMG = rstOMG!Q
Set rstArt = CurrentDb.openrecordset("Select * from ARTICOLI where " & Filt)
With rstArt
    .edit
    !giacenza = TotACQ - TotVEN - TotOMG + TotRIN - TotUSO
    .Update
End With
-------------------------------
La chiamo con
Call AggiornaGiac
ma niente,
L'ho chiamata in una query e niente.
Come vorrebbe essere chiamata?
Ciao Napoleone

 Call AggiornaGiac
Ci devi mettere il codice di riferimento
tipo
call AggornaGiac(me.codice)
sarebbe quel parametro codex che prevediamo nel nome della funzione


 ha scritto nel messaggio 
news:xR1le.12312$TR5...@news.edisontel.com...

La query di cui ti allego sql
SELECT Tb_Prodotti.sDescrizione, Tb_Prodotti.lCodiceBarreProdotto, 
Tb_Prodotti.lCodiceBarreFornitore, Tb_Prodotti.nGiacMag5
FROM Tb_Prodotti
WHERE (((Tb_Prodotti.nGiacMag5)="call AggornaGiac(me.codice"));
tipo di dati non corrispondenti nell'espresione criterio
Napoleone

 Napoleone
NON è un crietrio di una query.
E' un'istruzione da chiamare su di un evento tipo
qtà_afterupdate


 MAssimiliano Amendola
Napoleone 

 Napoleone
Ho chiamato la funzione
Private Sub nQuantita_AfterUpdate()
Call AggornaGiac(Me.codice)
End Sub
Mi segnala errrìore di compilazione
impossibile trovare il metodo o il membro dei dati
Napoleone


Ho realizzato a volo e inviato una demo di quello  che ti dicevo.
funziona.
