Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 4 su 4

Somma ingredienti a magazzino in maschera

  1. #1
    TeteKun non è in linea Novello
    Ciao a tutti,

    Ho creato un database per gestire un magazzino ingredienti. In particolare ho una maschera che mi elenca tutti gli ingredienti e le relative informaizoni. tra queste vorrei visualizzare anche la disponibilità a magazzino.



    I valori a magazzino dovrebbero essere calcolati basandosi su una tabella in cui ci sono le movimentazioni in Entrata e in Uscita di tutti gli ingredienti.



    Per lo stesso database ho usato questo metodo (nel caso dei Prodotti):

    Function somma_prodotto(IDProdotto)
    Dim strSQL As String
    Dim GestioneMagazzino As Database, Movimenti_Magazzino As Recordset
    Dim Entra, Esce, somma, numrec As Integer
    Dim ID As Long
    strSQL = "SELECT OrdineProdottoT.IDProdotto, OrdineProdottoT.EntraProdotto, OrdineProdottoT.EsceProdotto FROM OrdineProdottoT WHERE OrdineProdottoT.IDProdotto=" & IDProdotto & ";"
    On Error GoTo 10
    'Preparo database e recordset
    Set GestioneMagazzino = CurrentDb
    Set TabellaMovimenti = GestioneMagazzino.OpenRecordset(strSQL, dbOpenDynaset)
    'contiamo quanti record ci sono nella tabella movimenti (il valore in numrecord)
    TabellaMovimenti.MoveFirst
    TabellaMovimenti.MoveLast
    numrecord = TabellaMovimenti.RecordCount
    'posizionati all'inizio del recordset
    TabellaMovimenti.MoveFirst
    'inizio ciclo seleziona righe e mettile in variabili temporanee
        For Count = 1 To numrecord
            Entra = TabellaMovimenti.Fields("EntraProdotto")
            Esce = TabellaMovimenti.Fields("EsceProdotto")
            somma = somma + Entra + Esce
    'spostati alla riga successiva
            TabellaMovimenti.MoveNext
        Next Count 'ripete il ciclo fino a raggiungere numrecord
    GoTo 20 'ha finito e può chiudere senza errori. salta all'etichetta 20
    
    10 somma = 0 'se arriva qui l'ID è vuoto, mai movimentato. Mettiamo a zero e chiudiamo
    20 'OK, chiudi
    'chiudi connessione db
    GestioneMagazzino.Close
    Set GestioneMagazzino = Nothing
    Form_ProdottoAzF.Text17.Value = somma
    End Function
    
    Richiamato con:

    Private Sub Form_Current()
    IDProdotto = Me.ID.Value
    Call somma_prodotto(IDProdotto)
    End Sub
    
    Tuttavia la soluzione non funziona per gli ingredienti e penso che il problema sia legato al fatto che la maschera ingredienti mostra i record in modo Tabulare (diversamente da quella Prodotti)

    Come posso far funzionare il codice mantenendo la disposizione tabulare?

    spero di non essermi dimenticato nulla, nel caso ditemi cosa vi può servire e posto anche quello...

    Grazie

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    2 Cose...
    Se vuoi fare una cosa simile, il Calcolo lo devi effettuare in una Query dal momento che usi le Maschere continue, altrimenti non funziona..
     SELECT *, somma_prodotto(ID) As TotaleMagazzino From TuaTabella...
    
    Attenzione che quella funzione la devi modificare... non può avere riferimenti di Form in questo caso.
    Aggiungo che ti converrebbe evitare il CICLO, e fare l'estrazione di 2 Recordset con Raggruppamento(Somma sul campo Quantità)...uno per le ENTRATE ed uno per le USCITE
    SELECT SUM(OrdineProdottoT.EntraProdotto) As TotaleEntrate FROM OrdineProdottoT WHERE OrdineProdottoT.IDProdotto=" & IDProdotto
    
    quindi
    SELECT SUM(OrdineProdottoT.EsceProdotto) As TotaleUscite FROM OrdineProdottoT WHERE OrdineProdottoT.IDProdotto=" & IDProdotto
    
    a questo punto ottieni 2 soli valori che con 1 semplice somma con segno ti restituiranno il TOTALE...

    Ci sono 2 modi per calcolare i RESIDUI... uno è il tuo... l'altro è quello di tenere aggiornato un Campo Quantità ad ogni MOVIMENTO.

    Sono 2 tecniche con pro e contro... ma con JET(Access) la tua rischia di rendere il tutto molto lento... valuta bene anche in base alla mole di dati.
    ℹ️ Leggi di più su @Alex ...

  3. #3
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Secondo me commetti l'errore (ormai diventato tipico) di disporre i campi come se stessi lavorando in Excel. Le tabelle di Access devono contenere solo valori PRIMORDIALI, quelli cioè che soltanto l'utente DEVE DIGITARE. Tutto il resto, calcoli, risultati di movimenti, ecc...sono operazioni da delegare alle query. Ma bisogna comunque cambiare la logica approcciativa all'applicazione Access.

  4. #4
    [OT] La logica "approcciativa" è bellissima ...
    ℹ️ Leggi di più su AntonioG ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Somma di un campo in una maschera
    Da dario978 nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 06-01-2014, 18:55
  2. somma totale su apertura maschera
    Da sasy_80 nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 19-10-2013, 22:52
  3. Risposte: 1
    Ultimo Post: 29-10-2008, 10:49
  4. filtro e somma con maschera
    Da stefano_ nel forum Microsoft Word
    Risposte: 16
    Ultimo Post: 14-11-2007, 10:41
  5. Somma maschera access
    Da John nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 28-09-2006, 18:28