Condividi tramite

ESEGUIRE CONTROLLI E CALCOLI IN SOTTOMASCHERA

Anonimo
2016-09-25T12:50:50+00:00

Buona sera a tutti,

sono sempre alle prese con il mio Dbase per la gestione magazzino. Ho realizzato una maschera con sottomaschera per la gestione dei movimenti di carico e scarico..

La funzione della maschera dovrebbe servire a selezionare il fornitore/cliente e la sottomaschera per l'immissioni dei movimenti.

Fin qui sono riuscito a fare il tutto mediante una casella combinata seleziono il fonitore/cliente ed ho collegato la sottomaschera a mezzo del campo ID_Fornitore (in comune fra le due tabelle).

Riesco ad inserire anche i dati relativi alla movimentazione (carico/scarico) ma non riesco a trovare il metodo giusto per far si che, se il movimento è un carico si esegua la somma della giacenza con la quantità movimentata, viceversa se il movimento è uno scarico mi esegua la differenza tra la giacenza e la quantità movimentata. Questo, naturalmente, per aggiornare il campo giacenza che si trova nella tabella articoli.

Infine vorrei mettere un controllo in modo tale da impedire la movimentazione qualora la quantità movimentata sia maggiore della giacenza e far comparire un msgbox di avviso che avvisi della impossibilità di eseguire l'operazione.

Ho provato in diversi modi ma non sono riuscito nell'intento.

Grato per l'aiuto che mi vorrete dare

Luca

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

7 risposte

Ordina per: Più utili
  1. Anonimo
    2016-09-29T16:04:25+00:00

    Ciao Sandro

    ho provato a seguire le tue istruzioni, ma il risultato è stato davvero molto deludente e non per colpa tua, piuttosto della mia ignoranza in materia. In alternativa, dopo aver tanto girato e pensato ho provato questo codice che però non funziona correttamente e non riesco a capire il motivo (e sono sicuro che anche in questo potrai essere il mio mentore).

    Ho girato in lungo e in largo per capire dove sbaglio, ma non sono riuscito a capirne il motivo.

    Il codice è questo, su evento Dopo Inserimento:

    Private Sub Form_AfterInsert()

     If [IDMovimento] = 1 Then

           If [Giacenza] < [Qta_Movimento] Then

              MsgBox "Movimentazione non possibile, quantità non disponibile"

              Exit Sub

        End If

       If [IDMovimento] = 1 Then

        [Giacenza] = [Giacenza] - [Qta_Movimento]

       End If

       If [IDMovimento] <> 1 Then

           [Giacenza] = [Giacenza] + [Qta_Movimento]

        End If

       End If

    End Sub

    Naturalmente il codice è sulla sottomaschera e non sulla maschera master

    Ciao

    Luca

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-09-26T20:31:28+00:00

    ciao Luca,

    ok, lascia tutto così come hai impostato e prova ad eseguire questo test.

    nella form master crea una textBox, chiamala txtStock,

    crea due query, la prima q_sommaArtC che calcola la somma di tutti i carichi in base al movimento ( in base al movimento intendo dire tutti i tipi di movimento in a seguito ai quali lo stock cresce), passando il parametro dell'articolo selezionato.

    crea la seconda query q_sommaArtS che calcola la somma di tutti gli scarichi in base al movimento.

    dopo aggiornamento della combo che ti permette di selezionare l'articolo esegui una dlookup sui valori dei campi che contengono le somme delle queries precedenti e calcola la differenza tra gli stessi. Questa è la giacenza che assegnerai a txtStock in modo da visualizzare la qta in stock per quell'articolo

    ora....prima di aggiornare la qta che vai a movimentare per quell'articolo esegui un confronto tra la qta movimentata e lo stock: se il tipo di movimento è uno di quelli che hai previsto per lo scarico, un messaggio di avvisa che la qta in stock è inferiore alla qta movimentata e ti impedisce di proseguire.

    Se tutto ti torna, credo converrai con me che denormalizzare il db memorizzando un campo calcolato è improprio.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-09-26T17:12:10+00:00

    Ciao Sandro

    ho provato a seguire il tuo consiglio ma non riesco a immaginare il calcolo del carico/scarico senza avere il campo giacenza.

    Ti voglio precisare che questo Dbase parte da un magazzino con dati già presenti, che in un primo momento ho chiamato Qta_Inventario ed ho assegnato la quantità inventario uguale alla giacenza.Mi sono bloccato e non riesco ad andare avanti

    Ciao

    Luca

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-09-26T12:35:47+00:00

    Ciao Sandro

    non ho ben compreso il tuo suggerimento!

    Ciao

    Luca

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2016-09-26T11:43:01+00:00

    ciao Luca,

    come già consigliato in precedenza, elimina la giacenza come dato fisico dalla tabella, calcolala al volo in base all'articolo che selezioni ed esegui i controlli che ti servono di conseguenza prima di scrivere il  movimento  nella tabella.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento