Record

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Record

    Ciao silene, non voglio ergermi a difensore di Osvaldo, non ne ho le competenze e Lui non ne ha necessità. Cosidera solo che la soluzione prospettata è quella di Osvaldo con l'aggiunta del campo calcolato [letturagasold].
    Considera, inoltre, che i dati saranno registrati nella Query e non nella tabella , che quindi potrebbe contenere solo i campi [Id] e [letturagasnew].

    Per la stampa mi affiderei ad un Report riferito alla Query; nel report, a piè di pagina, puoi ottenere il totale dei consumi in automatico.

    A disposizione.

    Cordiali saluti e buon lavoro.
  • Re: Record

    Io avevo già creato una query e su quella si poteva costruire il report. Ma siccome quella query non somiglia alla maschera, ne ripropongo un'altra.

    1) Crea una query importando la tabella LettureGas
    2) Trascina nella griglia il campo IDLettura e imposta Ordinamento Crescente
    3) Nella 2a colonna griglia scrivi così:
    LetturaGasOld: DLookUp("[Lettura]";"LettureGas";"[IDLettura]=" & [IDLettura]-1)
    [Lettura] è il campo preso dalla tabella, mentre in maschera è etichettato come LetturaGasNew.
    4) Nella 3a colonna scrivi così:
    LetturaGasNew: [Lettura]
    5) Nella 4a colonna scrivi così:
    Differenza: [LetturaGasNew]-[LetturaGasOld]
    6) Salva con nome la query

    Adesso crea un report che poggia su questa query.
  • Re: Record

    silene ha scritto:


    OPERAZIONE RIUSCITA!...
    Per il discorso sul DLast mi pare che esso funzioni ma sull'identico campo del record successivo.
    ...
    Secondo me nell'insieme c'è solo molta confusione.

    Il DLAST è una funzione di AGGREGAZIONE e come sai supporta anche una CONDIZIONE equiparabile alla WHERE conditions delle Queries, questo è usabile o meno... e puoi scegliere tra l'ultimo relativo all'ID oppure l'ultimo tra tutti...!
    Anche il DMAX è equivalente visto che le letture dei Contatori a meno di "TAROCCATURE" sono progressive crescenti...!!

    Il Vantaggio di usare il VALORE DEFAULT è che non viene generato il Record quando premi NUOVO per l'inserimento e non serve nemmeno 1 riga di codice in quanto la funzione DLAST è supportata dalla proprietà VALORE DI DEFAULT scritta manualmente.

    Poi la questione della Differenza, deve essere gestite su un controllo NON ASSOCIATO da valorizzare sempre con una funzione scritta nella proprietà ORIGINE CONTROLLO.
    Eventualmente da valutare il RECALC su AfterUpdate del Controllo della lettura mensile in modo che la Formula nella TextBox(di differenza) venga rieseguita.
    Il tutto a ZERO CODICE o 1 sola riga.

    Saluti
  • Re: Record

    Ok Alex...ma qui andiamo sul difficile.
    Del resto il DB funziona e il report ,considerati i suggerimenti di Osvaldo, anche.
    Nasce un altro problema.
    Nella maschera ho un campo(calcolato) che mi dà il prodotto della differenza gas per il costo di quest'ultimo e questo per un discorso di rimborso spese.
    Inserendo tutti i dati a partire dal secondo semestre del 2011 non ho tenuto conto della variazione del costo dell'energia(a partire dal mese di aprile 2012) che evidentemente devo aggiornare e che presumibilmente( visti i continui rincari) dovrò più o meno a breve ripetere.
    Una soluzione semplice sarebbe quella di chiudere il DB e aprirne un altro ad ogni variazione di costo ma mi sembra una soluzione alquanto elementare.
    Quale suggerimento mi potete dare a tal proposito?
    Vi ringrazio sin d'ora.
  • Re: Record

    Il modo più semplice ed efficace è quello di aggiungere un campo alla tabella PrezzoUnitario. Solo che, a mio avviso, essendo strettamente legato a variazioni nel tempo:
    Come fai a ritrovare il punto di cambio prezzo senza l'uso di un campo Data?
    Io ti consiglio vivamente di aggiungere il campo Data, con valore predefinito
    =Date()
    corrispondente alla data in corso, così non hai il fastidio di doverla digitare ogni volta.
    Quanto al campo PrezzoUnitario (di tipo Valuta), anche qui puoi stabilire un valore predefinito che non devi digitare in tabella, ma soltanto cambiare nella proprietà "Valore predefinito" ogni qualvolta vige un cambio di prezzo.
    Poi, per quanto riguarda il campo Prodotto in maschera, immagino non troverai difficoltà a ricostruire la formula.

    silene ha scritto:


    Una soluzione semplice sarebbe quella di chiudere il DB e aprirne un altro ad ogni variazione di costo ma mi sembra una soluzione alquanto elementare.
    Sbagliato concettualmente.
  • Re: Record

    Non ho messo il campo data ma il periodo di osservazione per il calcolo del consumo:
    Periodo dal [campo1] al [campo2].
    Per quanto riguarda il calcolo se io vario il "valore predefinito" qualora voglia stampare un rimborso precedente a questa variazione il calcolo vien fatto inevitabilmente con la nuova tariffa.
    Non è possibile bloccare i record precedenti ad ogni aggiornamento della tariffa?
    Grazie dei suggerimenti.
  • Re: Record

    Vorrei ricordarti che stai usando un programma che si chiama Access. Esso funziona in base a dati tracciati in tabelle, voglio dire che da qualche parte devi memorizzare una volta per tutte valori che abbiano corrispondenza con altri, che siano sulla stessa riga di tabella o relazionati. E' in questa ottica che devi ragionare.
    E' ovvio che un valore predefinito in una sola area di memorizzazione ti fa sballare i dati precedenti. Questo quello che devi fare:
    1) Apri la tabella in Visualizzazione struttura
    2) Aggiungi il campo PrezzoUnitario, tipo Valuta, guarda sotto le proprietà e a Valore predefinito scrivi il valore attuale (sia ben chiaro che questo valore vale per i record dal nuovo in poi)
    3) Aggiungi un campo Data, guarda sotto le proprietà, scegli un Formato a te più conveniente, a Valore predefinito: =Date()
    4) Salva la tabella
    5) Apri la tabella, troverai a tutti i record precedentemente già digitati, tutti campi vuoti (Data e PrezzoUnitario), allora:
    1. Al campo Data dovrai inserire le date storiche, se non te le ricordi inventane tu in maniera coerente.
    2. Al campo PrezzoUnitario scrivi a tutti i record con il prezzo antecedente la data 1/7/2011 il vecchio prezzo, dal 1/7/2011 in poi il nuovo prezzo.

    Con un po' di pazienza DEVI FARE COSI', Access ragiona così. Singole caselle hanno tanti pregi, ma evidentemente anche tanti limiti.

    P.S.: Se per caso in data 1/1/2013 dovesse cambiare il PrezzoUnitario, quel giorno dovrai aprire in visualizzazione struttura la tabella, posizionarti sul campo PrezzoUnitario e modificare il Valore predefinito che avrà validità da quel momento in poi.........così dovrai fare ad ogni variazione di prezzo nel tempo. Se ti dimentichi di farlo, poco male, il Valore predefinito è solo una comodità momentanea, puoi sempre cliccare dentro la cella errata e cambiare a mano.
  • Re: Record

    Ok Osvaldo,
    il tuo suggerimento è un pò laborioso ma funziona.
    Siccome mi interessa il periodo della lettura(ho inserito nella tabella due campi (formato data) che memorizzano rispettivamente la data della lettura iniziale e quella della lettura finale.
    Vorrei che, al pari delle letture dell'energia, la seconda data di un record divenisse la prima del record successivo mediante l'impostazione della funzione DlookUp a livello di query.
    Ed è ciò che ho fatto tuttavia manca qualcosa ( il cancelletto?)poichè mi restituisce un numero anzichè la data.
    Come fare?
    Ringrazio in anticipo
  • Re: Record

    Risolto il problema relativo al DlookUp delle date:dopo qualche tentativo ho trovato la giusta espressione.
    Saluti a tutti
Devi accedere o registrarti per scrivere nel forum
23 risposte