Inserimento da sottomaschera ma il Campo non si aggiorna...

di
Anonimizzato10097
il
4 risposte

Inserimento da sottomaschera ma il Campo non si aggiorna...

Ciao ho una sottomaschera che fa riferimento ad una tabella.. alcuni campi di questa tabella hanno un codice vb per far si che vengano fatte delle semplici operazioni matematiche (+ e -), il problema e' che quando inserisco i dati tutti i campi vengono aggiornati in tabella tranne quelli sul quale c'e' il codice e quindi devono dare il risultato....
Il codice in questione nel campo e' =CDbl([Affidate])-CDbl([Consegnate])
In sottomaschera funziona il dato esce fuori pero' poi in tabella questo non si vede e tutti i record sono vuoti.. AIUTO

4 Risposte

  • Re: Inserimento da sottomaschera ma il Campo non si aggiorna...

    Vorrei avere un riscontro da chi ne sa più di me al riguardo, ma, come ti ho già spiegato in un'altro post precedente, in un campo di Tabella è impossibile impostare un codice.
    Se ci sei riuscito nella maschera (anzi sottomaschera), perchè la maschera può avere dei controlli. I controlli delle maschere hanno molte proprietà, tra cui anche quella di accogliere codici come quello che hai costruito tu. I dati-risultato che vedi nella maschera sono lì perchè hai impostato il codice (nel controllo della maschera), ma quel controllo non ha nussuna corrispondenza con il campo della tabella, anche se porta lo stesso nome di campo.
    Se vuoi rivedere questi valori-risultato nella tabella, penso che dovresti creare una routine di VBA che vada poi a inserire questi dati nei campi della tabella, ma si tratta di un passaggio indiretto che devi costruire poi.
    Io, volgarmente, creerei un'altra maschera2 con gli stessi campi della tabella. Con una macro, apri entrambe la tua maschera1 e maschera2. Esiste l'azione macro ImpostaValore (controllo per controllo) che potresti sfruttare per esportare tutto ciò che vedi in maschera1 nei vari record della maschera2 che di conseguenza li trasmette alla tua tabella.
    Il tutto è un po' macchinoso, ma una macro così congeniata dovrebbe farlo rapidamente.
  • Re: Inserimento da sottomaschera ma il Campo non si aggiorna...

    Ciao Osvaldo e grazie, la macro di cui mi parli comunque non la vedo tra le opzioni! Forse si chiama diversamente?
  • Re: Inserimento da sottomaschera ma il Campo non si aggiorna...

    La macro la devi costruire tu di sana pianta...Ma...

    Provo a ricostruire il tuo scenario:
    Tu hai maschera principale Dipendenti, sottomaschera TNTPadova dove ci sono, fra i tanti campi, Affidate, Consegnate, NonConsegnate, Prese, TotServizi. Se non ho capito male, tu sei riuscito a mettere un codice nei controlli NonConsegnate=Affidate-Consegnate e TotServizi=Consegnate+Prese (adesso la sintassi precisa non la so), che ti danno i risultati che volevi vedere.
    NonConsegnate e TotServizi quindi li vedi nella maschera/sottomaschera ma non nella tabella TNTPadova che risulta con questi campi attualmente vuoti. Giusto?

    Prima di venire al discorso macro, io creerei una query.
    1) Crea una nuova query Calcoli
    2) In visualizzazione struttura, importa la tabella TNTPadova, trascina i campi Affidate, Consegnate, Prese.
    3) Nelle successive 2 colonne della griglia, scrivi rispettivamente:
    NonConsegnate: [Affidate] - [Consegnate]
    TotServizi: [Consegnate] + [Prese]
    4) Salva e apri la query Calcoli, vedrai i risultati che volevi listati nelle 2 colonne NonConsegnate e TotServizi
    5) Assicurati che tutti i record siano nello stesso ordine di come stanno nella tabella TNTPadova (se non lo sono abbi cura di aggiungere alla griglia della query un ulteriore campo che ti garantisca questo ordine, immagino il campo Contatore...). Quindi seleziona tutta la colonna NonConsegnate, Copia, apri la tabella TNTPadova, seleziona tutta la colonna NonConsegnate e Incolla. Fai la stessa operazione per TotServizi.
    6) In questo modo hai aggiornato rapidamente tutto il tuo passato.

    Veniamo ora alla costruzione della macro:
    1) Prima di creare la macro, crea un'altra maschera (di passaggio) che chiamerei TNTPadovaBis avente gli stessi campi della tabella TNTPadova.
    2) Vai alle macro e crea una nuova macro che chiamerei Passaggio
    3) In visualizzazione struttura macro, scrivi le seguenti azioni:
    ApriMaschera: Dipendenti (si aprirà automaticamente anche TNTPadova essendo sottomaschera)
    VaiAControllo: TNTPadova (forse questa azione è superflua)
    ApriMaschera: TNTPadovaBis
    ImpostaValore...
    ...Elemento: Maschere![TNTPadovaBis]![Affidate]
    ...Espressione: Maschere![Dipendenti]![TNTPadova]![Affidate]
    ImpostaValore...
    ...Elemento: Maschere![TNTPadovaBis]![Consegnate]
    ...Espressione: Maschere![Dipendenti]![TNTPadova]![Consegnate]
    ImpostaValore...
    ...Elemento: Maschere![TNTPadovaBis]![NonConsegnate]
    ...Espressione: Maschere![Dipendenti]![TNTPadova]![NonConsegnate]
    ImpostaValore...
    ...Elemento: Maschere![TNTPadovaBis]![Prese]
    ...Espressione: Maschere![Dipendenti]![TNTPadova]![Prese]
    ImpostaValore...
    ...Elemento: Maschere![TNTPadovaBis]![TotServizi]
    ...Espressione: Maschere![Dipendenti]![TNTPadova]![TotServizi]

    ...ecc...nel senso che questo sarà il cuore della tua macro che puoi migliorare secondo i tuoi gusti. Ad esempio, se tutto va bene, avrebbe senso aggiungere altre due azioni macro
    Chiudi: Maschera Dipendenti
    Chiudi: Maschera TNTPadovaBis

    In sostanza questa macro dice di trasferire i dati che vedi in TNTPadova in TNTPadovaBis, quest'ultima avendo gli stessi campi della omonima tabella, li aggiornerà automaticamente. Attento che questo set di istruzioni serve per un solo record, cioè io mi immagino che tu inserisca i dati in TNTPadova (sottomaschera) e poi con un evento deve partire la macro che aggiornerà tutto di conseguenza un record alla volta...ecc...ecc...ecc...

    Non so, spero di non confonderti le idee, ma io il Visual Basic non lo so usare e, in mancanza d'altro mi verrebbe di fare così...ovviamente va tutto testato e poi...non lo so!!!
  • Re: Inserimento da sottomaschera ma il Campo non si aggiorna...

    Sei certo che un campo CALCOLATO debba essere memorizzato nella tabella...?

    Spero la risposta sia che ti sei sbagliato.... di solito i campi calcolati NON SI MEMORIZZANO, ma si calcolano(preferibilmente nelle query se hai visualizzazione maschera Continua).
    Gli unici dati che richiedono la memorizzazione sono quelli affetti da parametri che nel tempo possono subire modifiche...!
    Ad esempio i calcoli delle fatture si memorizzano in quanto l'IVA di oggi è 21% ma domani potrebbe essere 23% quindi se non li memorizzassi il calcolo applicherebbe l'IVA del momento e non la reale... a questo punto avrei 2 soluzioni:
    1) Memorizzare i CONTRIBUENTI FISCALI in uno storico... la cosa tuttavia complicherebbe i ricalcoli con recupero dei contribuenti con le date...
    2) Memorizzo il calcolo finale e pace...!

    Se non sei in un caso concettualmente assimilabile ti suggerisco di ripensarci.

    In tutti i modi per salvare il dato devi andare ad intercettare un'evento significante che ti consenta di effettuare il CALCOLO dopo la VLAIDAZIONE dei contribuenti... quindi potresti usare AFTERUPDATE di maschera, ma fai attenzione a non generare riferimenti circolari...!
Devi accedere o registrarti per scrivere nel forum
4 risposte