[RISOLTO] Somma colonna calcolata in sottomaschera

di il
10 risposte

[RISOLTO] Somma colonna calcolata in sottomaschera

Salve a tutti,
ho una maschera contenente una sottomaschera in visualizzazione maschere continue, la sottomaschera ha i seguenti campi:
CODICE , DESCRIZIONE , PREZZO , QUANTITA , SCONTO
Dalla progettazione maschera ho aggiunto alla sottomaschera il campo calcolato IMPORTO che è il risultato di (Prezzo * Quantita) - ((Prezzo * Quantita * Sconto) /100)
fin qui tutto ok, il problema mi si pone quando voglio ricavare dalla maschera principale il totale della colonna calcola IMPORTO.
se provo ad usare il generatore di espressioni, e scrivo =Somma([DETTLAVORO]..Scheda![IMPORTO]) mi da errore
Operando o operatore mancante, carattere o virgola non valida oppure testo immesso non racchiuso tra virgolette
L'espressione è stata ricavata andando a selezionare maschere caricate -> maschera padre -> sottomaschera -> Importo -> valore

se invece metto la textbox nella sottomaschera con espressione
=Somma([IMPORTO]) 
non ottengo nessun errore ma poi quando apro la maschera nella textbox compare #errore
Qualcuno sa darmi un mano?

10 Risposte

  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    2 osserazioni:
    1) IMPORTO=(Prezzo * Quantita)*(1-Sconto)
    Dove lo sconto è un numero decimale 0,2=20% quindi non servirebbe dividere per 100 come nella tua formula.
    La rappresentazione % è solo visuale.
    Quindi se hai lo sconto del 20%
    PrezzoFinale=Prezzo*Quantità*(1-0.2)=Prezzo*Quantità*0.8
    Valuta anche il numero di operazioni coinvolte...

    2) devi realizzare il TOTALE_IMPORTO=Somma(IMPORTO) Nel pie di maschera della sottomaschera... se non lonvuoi vedere rendilo non visibile.
    Quindi nella Form fai riferimento a quel controllo.
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Buongiorno,
    ho provato a mettere il campo nel pie di maschera, (ed anche in pie di pagina) con la formula =Somma([IMPORTO]) ma non funziona, quando apro la maschera nel campo c'è scritto sempre #errore

    Ho risolto associando alla maschera non la tabella ma una query con il campo calcolato IMPORTO in quest'ultima e non dalla maschera. ora funziona ma non riesco a recuperare il valore dalla maschera principale.

    se provo con il generatore di espressioni mi viene fuori sempre la stringa =[DETTLAVORO]..Scheda![Imponibile] e poi nel generatore quando do ok mi diche che c'è un problema.

    altra cosa fastidiosa, ho aggiunto a PREZZO, QTA, SCONTO un evento di requery dopo aggiornamento in modo da avere sempre il totale aggiornato non appena modifico un valore, ma ad ogni requery il focus mi si sposta sempre alla prima colonna del primo record. come faccio ad individuare il numero del record(nella maschera non il numero del record nella tabella) per poi riposizionarmi allo stesso record nella colonna successiva?
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Vedo nell'elenco delle notifiche una risposta di OsvaldoLaviosa ma non compare, qui. Considerate quindi che scrivo senza aver letto quello che eventualmente arriverà con calma

    Calida ha scritto:


    ho provato a mettere il campo nel pie di maschera, (ed anche in pie di pagina) con la formula =Somma([IMPORTO]) ma non funziona, quando apro la maschera nel campo c'è scritto sempre #errore
    NB che di solito si mette alla fine ma che io metto all'inizio: non usare il generatore di espressioni. O almeno non farci affidamento. Scrivi tu a mano, senza avvalerti dei suoi suggerimenti. Ecco da dove deriva la mia "ostilità" verso quello che ho chiamato il genERRatore: https://www.iprogrammatori.it/forum-programmazione/access/somma-sottoreport-report-t26211.html
    In generale: per fare un totale generale in una maschera è sufficiente scrivere nel pié di maschera =Somma([nomedelcampo]). Attenzione al fatto che ho scritto [Nomedelcampo], non [nomedelcontrollo]. Perché in realtà sta leggendo i valori dal recordset, non dai controlli.
    Quindi se hai già nella query un campo calcolato il gioco è fatto.
    Se invece usi un controllo della maschera per fare il calcolo, non puoi limitarti a scrivere =Somma([nomecontrollocalcolato]) ma devi ripetere la formula inserita nel controllo calcolato quindi ipotizzano che nell'orgine dati di [controllocalcolato] tu abbia scritto =[campo1]+[campo2]*[campo3], nel pié di maschera dovrei creare un controllo e mettere come origine dati =Somma([campo1]+[campo2]*[campo3])
    Nel tuo caso specifico stiamo parlando di una sottomaschera. Tutto questo quindi sta avvenendo in struttura della sottomaschera, considerata in questo momento come maschera autonoma.
    Fino a quando non ottieni questo totale senza considerare che si tratta di una sottomaschera significa che ci sono altri problemi e non si passa nemmeno all'aspetto riguardante la visualizzazione di quello stesso valore della maschera principale.
    Dicci come è la situazione. Campo calcolato o controllo calcolato? Il totale nella sottomaschera considerata però autonomamente viene calcolato?
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Ciao, si mi sono accorto che per far funzionare =somma([IMPORTO]) il campo deve essere presente in origine dati altrimenti non va.
    Ho quindi inserito il calcolo direttamente nella query della sottomaschera in modo da avere l'origine e farlo funzionare con =Somma([IMPORTO]).

    la somma a questo punto funziona, intendevo pero tenerla nascosta in sottomaschera e riportarla nella maschera principale dove mi serve per calcolare l'iva e il totale (il campo totale è un campo del record della maschera padre).

    pero non riesco a recuperalo.

    l'altro problema è che voglio che il totale si aggiorni ad ogni modifica di prezzo quantita e sconto, e riesco a farlo con requery ad ogni modifica di tali campi, solo che ad ogni requery il focus mi si sposta sempre nella prima colonna del primo record della sottomaschera e questo mi scoccia.
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Calida ha scritto:


    l'altro problema è che voglio che il totale si aggiorni ad ogni modifica di prezzo quantita e sconto, e riesco a farlo con requery ....
    Un requery? addirittura? Lo teniamo per ultimo però. Non è difficile tornare sul record modificato, se è per quello ma mi interessa di più l'altro aspetto.

    Calida ha scritto:


    la somma a questo punto funziona,
    Ottimo, partiamo da una cosa certa.

    Calida ha scritto:


    intendevo pero tenerla nascosta in sottomaschera
    questo sai come farlo, basta nascondere il controllo, renderlo non visibile.

    Calida ha scritto:


    riportarla nella maschera principale
    Ok. Cosa hai scritto nell'orgine dati del controllo (casella di testo sicuramente) della maschera principale per andare a "pescare" il totale nascosto della sottomaschera? Fai molta attenzione al nome del container, cioè del controllo che ospita la sottomaschera. Prendi questa pagina come guida per orientarti:
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Calida ha scritto:


    Ciao, si mi sono accorto che per far funzionare =somma([IMPORTO]) il campo deve essere presente in origine dati altrimenti non va.
    Ho quindi inserito il calcolo direttamente nella query della sottomaschera in modo da avere l'origine e farlo funzionare con =Somma([IMPORTO]).

    la somma a questo punto funziona, intendevo pero tenerla nascosta in sottomaschera e riportarla nella maschera principale dove mi serve per calcolare l'iva e il totale (il campo totale è un campo del record della maschera padre).

    pero non riesco a recuperalo.

    l'altro problema è che voglio che il totale si aggiorni ad ogni modifica di prezzo quantita e sconto, e riesco a farlo con requery ad ogni modifica di tali campi, solo che ad ogni requery il focus mi si sposta sempre nella prima colonna del primo record della sottomaschera e questo mi scoccia.
    Ma se crei un Controllo NON VISIBILE, chiamiamolo [PIPPO]. nella Maschera che come Origine Controllo ha =Importo*Quantità...?
    E nel PieDipagine metti =Somma([PIPPO])

    Meglio così che nella query in questo caso... così basta un RECALC del Record e non un Requery dell'intero Recordset.
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Per portare la somma dalla sottomaschera alla maschera principale con questa espressione
    =[Maschere]![LAVORI]![DETTLAVORO].[Form]![imponibile]
    Mi si presenta un'altro problema nella maschera principale ho il campo TOTALE che è un campo della tabella, poi ho il controllo imponibile e il controllo iva che sono delle textbox. In imponibile e in iva l'origine dei dati è una formula, mentre in TOTALE l'origine è il campo della tabella sottostante. Modificando la sottomaschera tramite le formule si aggiornano sia l'imponibile che l'iva, ma non riesco a far aggiornare il totale. in origine dati non posso fare nulla altrimenti non mi viene salvato il valore della tabella, quindi non posso usare una formula, così pensavo di provare da codice in questo modo
    Private Sub Imponibile_Change()
        TOTALE.Value = Imponibile.Value + Iva.Value
    End Sub
    ma il totale non si aggiorna...
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Calida ha scritto:


    Modificando la sottomaschera tramite le formule si aggiornano sia l'imponibile che l'iva, ma non riesco a far aggiornare il totale. in origine dati non posso fare nulla altrimenti non mi viene salvato il valore della tabella
    Prova con l'evento AfterUpdate dei due controlli Imponibile ed IVA (non quello della maschera).
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Ho provato anche con after Update ma niente da fare non funziona....
  • Re: [RISOLTO] Somma colonna calcolata in sottomaschera

    Allora, sono riuscito a trovare un piccolo escamotage per avere un totale dinamico della mia maschera aggiornato ad ogni variazione dei campi PREZZO QUANTITA e SCONTO senza dover aspettare di cambiare record per avere il totale aggiornato o senza dover usare requery o recalc per forzare il totale ad ogni variazione con conseguenti scritture e interrogazioni del db anche quando si modificano i valori di uno stesso record.
    Bastava solo ragionarci un pò...
    Sbagliavo dall'inizio cercando di ottenere cio che volevo dai "soli" controlli calcolati forniti di serie =Somma([Valore])
    Io ho fatto cosi ho creato una textbox non associata(Importo_dinamico) che fungera da totale dinamico, al Load del form gli passo il valore di un'altra textbox questa volta calcolata con =Somma([Importo]) (la colonna importo è una colonna calcola dalla query sotto la maschera che il è prezzo per la quantita meno lo sconto) che utilizzo solo ed esclusivamente per inizzializzare la mia textbox non associata all'apertura della maschera.
    ad ogni cambio record con l'evento current calcolo manuamente il valore dell'importo del record e lo salvo in una variabile old_value in modo da avere il valore dell'importo prima di qualsiasi modifica.
    negli eventi afterUpdate dei campi PREZZO QUANTITA e SCONTO ho inserito
    Importo_dinamico.value = Importo_dinamico.value - old_value + Importo.value
    old_value = importo.value
    
    in questo modo dal totale tolgo il vecchio importo prima della modifica e ci aggiungo il nuovo dopo la modifica, poi assegno alla variabile old_value il nuovo valore dell'importo del record.
    cosi quando modifico i campi prezzo quantita e sconto ho subito il totale aggiornato non appena modifico il valore.
Devi accedere o registrarti per scrivere nel forum
10 risposte