Funzione DLookup su campo calcolato.

di il
7 risposte

Funzione DLookup su campo calcolato.

Buongiorno, chiedo di poter essere aiutato su questo problemino che non riesco a risolvere.

1) ho una maschera Fatture realizzata da una maschera con i dati del cliente ed una sottomaschera con il dettaglio dei prodotti
2) nella maschera principale ho dei campi calcolati che mi danno i totali della fattura (i calcoli sono fatti nella sottomaschera e richiamati nella
maschera. In questo modo: casella di testo Origine Controllo =miasottomaschera.Form!Totale_imponibile;
3) Vorrei richiamare il valore di Origine Controllo in un'altra maschera dove devo visualizzare la lista delle fattura con una casella di testo che
contenga il valore di Totale:Imponibile.

Spero di essere stato chiaro e di ricevere aiuto da qualcuno, grazie
Lino

7 Risposte

  • Re: Funzione DLookup su campo calcolato.

    Lino Fornaro ha scritto:


    ...
    2) nella maschera principale ho dei campi calcolati che mi danno i totali della fattura (i calcoli sono fatti nella sottomaschera e richiamati nella
    maschera. In questo modo: casella di testo Origine Controllo =miasottomaschera.Form!Totale_imponibile;
    In questo caso specifico, più ancora che in altri, è fondamentale capire che è un controllo calcolato, non campo calcolato.

    Lino Fornaro ha scritto:


    ...
    3) Vorrei richiamare il valore di Origine Controllo in un'altra maschera dove devo visualizzare la lista delle fattura con una casella di testo che contenga il valore di Totale:Imponibile.
    La risposta alla domanda è semplice ma forse alla base c'è qualcosa da rivedere: il fatto che tu abbia bisogno di richiamare quel valore dalla maschera e non da una tabella, che potrebbe essere la tabella "Fatture" dove potresti avere un campo Totale_Imponibile, ad esempio, valorizzato dall'operazione di cui al tuo punto 2, debitamente modificata.
    In generale, per prendere il valore di un controllo contenuto in un'altra maschera si usa la sintassi
    =Forms!NomeMaschera!NomeControllo.Value
    con il probabile intervento del correttore che potrebbe modificare Forms in Maschere.
    A questo punto però ti troverai di fronte al fatto che, per funzionare, la maschera da cui prendere il valore deve essere aperta.
    Problema nr. 2 (volendo considerare la riga sopra come problema nr. 1): scrivi che vuoi usare questo richiamo in una maschera dove si visualizza una lista di fatture, quindi dovresti avere per ogni maschera presente in quella lista una maschera aperta (anche se nascosta) a cui riferirti. E' possibile creare diverse istanze ad una stessa maschera ma allora il riferimento ad ognuna di essere non può più essere semplicemente
    =Forms!NomeMaschera!NomeControllo.Value
    Il tutto per tornare a dire che c'è qualcosa sotto da rivedere: il [Totale_Imponibile] va salvato da qualche parte, in qualche tabella, non preso da una maschera come valore calcolato "al volo".
  • Re: Funzione DLookup su campo calcolato.

    Phil Ti ringrazio per la risposta, anche se mi preoccupa il tuo pseudonimo,
    La procedura che mi esponi è sicuramente quella giusta, ma il problema è che nei non ho capito come fare per salvare nella tabella "fatture" il valore dei vari controlli calcolati (io li ho chiamati campi).
    Vorrei, se ti è possibile ed in maniera "elementare", che mi spiegassi la procedura per i calcoli.

    Siccome nella sottomaschera, in realtà, ho nei campi testo il totale della colonna ad es. l'imponibile della fattura (campo chiamato Tot_Imp) - mettendo nell'Origine Controllo il seguente calcolo: =Somma([Tot_Imp]).
    Il valore presente è relativo alla somma di tutti gli imponibili presenti nei campi Tot_Imp e che fanno riferimento al numero della fattura

    nella maschera principale ho il campo testo IMPONIBILE che riporta il valore del controllo calcolato SOMMA_IMPONIBILE, come faccio a popolare il capo Totale_Imponibile che ho nella tabella? (che attualmente è vuoto)

    Sbaglio ma non so come correggere, spero che tu o qualcun'altro si armi di un pò di pazienza per aiutarmi a capire ed a risolvere una volta per tutte questo problema.
    Grazie
  • Re: Funzione DLookup su campo calcolato.

    Salve Lino
    Premesso che per campo viene inteso il campo presente nella tabella (per intenderci il tuo "Imponibile") nella maschera invece di solito viene fatta una distinzione, lo stesso campo inserito nel corpo della maschera viene distinto attribuendo un "nome controllo" allo stesso, per cui nella maschera di solito avremmo Nome Controllo "TxtImponibile" ed origine controllo il campo "imponibile" (questo è un modo di operare ricorrente) ora quando il campo viene trascinato all'interno della maschera i due nome controllo e origine controllo coincidono.
    Quando tu dici
    ma il problema è che nei non ho capito come fare per salvare nella tabella "fatture" il valore dei vari controlli calcolati (io li ho chiamati campi).
    devi capire che ogni volta che nomini il termine "Campo" per noi vuole dire che nella tabella fattura esiste un campo con nome "TotImponibile" mentre il tuo "controllo" che preleva il dato dalla sottomaschera non riporta nulla in tabella...però se tu fai la distinzione tra le due cose è possibile farlo. ecco come:
    TabFattura contiene il "CAMPO" >"TotImponibile"
    La maschera Fattura ha il "CONTROLLO" che ha il nome "CtlTotImponibile" ed origine controllo =Forms!subform.....etc quello che hai scritto tu.
    per fare assumere al campo il valore del controllo inserisci in un pulsante su clic (è solo un esempio)
    Me!TotImponibile=Me!CtlTotImponibile
    se usi le macro
    imposta valore [TotImponibile]
    Maschera![Fattura]![CtlTotImponibile].
    Da cio potrai capire quanto sia importante esprimersi con termini corretti.
    Saluti
  • Re: Funzione DLookup su campo calcolato.

    Gianni ti ringrazio per la risposta.
    In effetti (essendo poco esperto), forse e sicuramente, a parte tutti i problemi che ho sulla programmazione che sto cercando di imparare, ho dei problemi con la terminologia, mi scuso e spero di migliorare per farmi comprendere meglio.

    Da quello che ho capito nel tuo post è che per avere il calcolo riportato anche nella tabella dovrei fare un casella che prende il valore dalla sottomaschera (e la rendo invisibile) ed una casella dove imposto il codice VBA che mi ha suggerito (e sarà la casella che vedrò nella maschera), giusto?
    Ti ringrazio ancora, proverò subito a mettere in pratica il tuo consiglio e spero di imparare presto ad usare i termini giusti.
    Buona serata e buona domenica.
    Lino
  • Re: Funzione DLookup su campo calcolato.

    No non ci siamo rileggi il mio post.
    non c'entra nulla la visibilità, mi pare che tu vedi già il dato nella maschera preso dal controllo della sottomaschera.
    Quindi devi trasferire quanto appare nel controllo al campo esistente in tabella in un pulsante su clic inserisci quel codice
    Me!NomedelCampoInTabella = Me!NomeDelControlloDellaMaschera
    Ti dico di inserirlo in un bottone per renderti conto poi è chiaro che l'azione la scegli tu
    saluti
  • Re: Funzione DLookup su campo calcolato.

    Ciao Gianni, ho provato il codice e creando un pulsante di comando ed all'evento clic funziona perfettamente.
    Per evitare di cliccare ogni volta per aggiornare il totale ho provato ad inserire il codice nell'evento Su Corrente della maschera ma non funziona.
    Domanda: ci può essere un'altro "sistema" per aggiornare automaticamente il campo o mi devo accontentare del Click?
    Scusa il disturbo (ma sono già felice così)
    Lino
  • Re: Funzione DLookup su campo calcolato.

    Beh di solito non è uno solo il campo che deve subire questo trattamento per cui nella fase dell'inserimento di solito si disabilita il pulsante di chiusura e si inserisce un pulsante "Salva" che al quale si deputano una serie di controlli e verifiche varie e tante righe quanti sono i campi da aggiornare.
    esempio:
    CampoTotImponibile = CtlTotImponibile
    CampoTotImposte=CtlTotImposte...etc.
    Non farei scatenare l'azione sull'evento "su corrente"
    E' chiaro che la questione poteva anche essere risolto anche con una query ma questa è un'altra questione ed io mi attengo senza alle domande.
Devi accedere o registrarti per scrivere nel forum
7 risposte