Problema Calcolo Data

di il
32 risposte

Problema Calcolo Data

Buongiorno,
Ho un grosso problema con Access ora elenco ciò che mi servirebbe e grazie per l'aiuto.
Praticamente ho un gestionale di Fatture con scadenze a 30 giorni 60 90 e così via, e scadenze a 30 giorni fine mese ecc...
In base alla data della fattura emessa vorrei far uscire nella scadenza dei 30 giorni se seleziono la cella "Si'/No" oppure dei 30 giorni fine mese se selezione la cella 30 giorni Fine mese la data.
Esempio :Data Fattura 12/12/2015 30 Data che risulta 12/01/2016 - qua ci sono arrivato
Esempio 2: "Data Fattura 12/12/2015" Data che risulta "Scadenza 31/01/2015" - qua non capisco come fare
Esempio 3: Vorrei che se non seleziono nessuna cella "Sì/No" mi rimanesse nella maschera la possibilità di visualizzare il calendario a destra della cella "Scadenza" che invece inserendo la formula mi fa sparire questa cella.
Posto la formula che uso:
=IIf([30]=Sì;IIf(Month([Data])=12;DateSerial(Year([Data]+1);Month([Data])+1;(Day([Data])));DateSerial(Year([Data]);Month([Data])+1;Day([Data])));IIf([30fm]=Sì;
IIf(Month([Data])=12;DateSerial(Year([Data])+1;Month([Data])+1;Day([Data])+30));DateSerial(Year([Data]);Month([Data])+1;Day([Data])+30)))
Ho selezionato in rosso i problemi
Grazie

32 Risposte

  • Re: Problema Calcolo Data

    Io non ho capito esattamente il problema...ma ho la sensazione che ti fastidia oppure vuoi avere pieno controllo del fatto che da una data si passi esattamente allo stesso numero data del mese successivo: è così che stanno le cose?
    Vado lo stesso avanti a ruota libera. Invece di fare rocamboleschi calcoli sui singoli giorni, le espressioni sulle date danno facilmente questa possibilità, lavorando sul solo campo mese.
  • Re: Problema Calcolo Data

    Ciao,
    Praticamente ho creato una maschera access dove il problema che mi assilla è trovare una formula per farmi risultare nel campo "Scadenze" la fine del mese successivo dalla data di data di emissione Fattura (quest'ultimo è un campo variabile).
    In sostanza faccio un esempio per spiegarmi meglio:

    Data Fattura: 12/12/2015 - 30 gg - Scadenza: 12/01/2016 (fino qua riesco nella formula con iff)
    =IIf([30]=Sì;IIf(Month([Data])=12;DateSerial(Year([Data]+1);Month([Data])+1;(Day([Data])));DateSerial(Year([Data]);Month([Data])+1;Day([Data])))

    Problema 1:

    Data Fattura: 12/12/2015 - 30 gg fine mese - Scadenza: 31/01/2016 (ho messo i punti di domanda nella formula perchè non so come farla riguardo ai giorni per far risultare 30 o 31.
    IIf([30fm]=Sì;IIf(Month([Data])=12;DateSerial(Year([Data])+1;Month([Data])+1;Day([Data])?));
    DateSerial(Year([Data]);Month([Data])+1;Day([Data])?)))

    Problema 2:
    Fatto questo vorrei che non selezionando 30gg e 30giorni fine mese nella cella di (scadenza) la formula non esistesse cosi' che io possa immettere una data qualsiasi a mio piacimento. esempio:
    Data fattura 12/12/2015 - Scadenza 16/12/2015
  • Re: Problema Calcolo Data

    Mi sa che non ci ho visto tanto lontanto. Leggi qui
    https://support.office.com/it-it/article/Esempi-di-criteri-di-query-3197228c-8684-4552-ac03-aba746fb29d8#bm4
    in particolare potrebbe interessarti dove dice "Contengono una data degli ultimi 30 o 31 giorni" sfruttando DateAdd. Ovviamente devi personalizzare l'espressione per il caso tuo.

    Riguardo la gestione dell'intero giochetto se:
    - mettere DataScadenza in base a EspressioneX
    - mettere DataScadenza in base a EspressioneY
    - mettere DataScadenza libera
    trovo il tutto un po' farraginoso. Io penserei a un "gruppo opzioni" oppure una "casella combinata"...poi però dovresti fare in modo che, una volta assegnata la DataScadenza, tutto il marchingegno per crearla, dovrebbe disabilitarsi.
  • Re: Problema Calcolo Data

    Grazie mille!!!!
    Ora provo
  • Re: Problema Calcolo Data

    Salve, la questione che ho posto io con il titolo " calcolo ultimo giorno mese" é molto simile alla tua. Io ho risolto con un codice abbastanza semplice, riportato nella discussione, puoi provare ad usarlo cambiando il mio +1 in +2. In sostanza se hai 10/12/15 sostituisci il 10 con 01 e aggiungi 2 mesi ottenendo 01/02/16, togliendo un giorno hai 31/01/16.

    ultimo giorno mese successivo=(DateSerial((Format$([Data];"aaaa"));(Format$([Data];"mm"))+2;1-1))

    Non capisco l'IF sul mese 12, visto che la funzione DateSerial opera sulle singole parti della data ma le aggiorna tutte, cioè se fai +1 a dicembre scatta anche l'anno.
  • Re: Problema Calcolo Data

    Ciao,
    hai ragione l'anno si sposta in automatico e per la data fine mese sucessivo ho usato questa formula che funziona:
    =dateserial(year([data]);month([data])+2;0)
    praticamente impostando il giorno con valore "0" mi risulta l'ultimo giorno del mese. PERFETTO!!!!
    Ora mi sto assillando sull'ultimo problema....
    Questa formula l'ho immessa in una casella di testo di una maschera, il problema è che funziona solamente se la scrivo in "finestra delle proprietà"/"dati"/"origine controllo"
    ma io vorrei che questa casella di testo della maschera fosse collegata alla tabella dati di origine; così che i dati che vengono immessi mi risultino anche nella tabella, ma mi è impossibile farlo perchè la formula la scrivo in "origine controllo" dove dovrei mettere invece la casella della tabella di riferimento; come posso fare?
  • Re: Problema Calcolo Data

    Raffaele91 ha scritto:


    Ciao,
    hai ragione l'anno si sposta in automatico e per la data fine mese sucessivo ho usato questa formula che funziona:
    =dateserial(year([date]);month([data])+2;0)
    praticamente impostando il giorno con valore "0" mi risulta l'ultimo giorno del mese. PERFETTO!!!!
    Ora mi sto assillando sull'ultimo problema....
    Questa formula l'ho immessa in una casella di testo di una maschera, il problema è che funziona solamente se la scrivo in "finestra delle proprietà"/"dati"/"origine controllo"
    ma io vorrei che questa casella di testo della maschera fosse collegata alla tabella dati di origine; così che i dati che vengono immessi mi risultino anche nella tabella, ma mi è impossibile farlo perchè la formula la scrivo in "origine controllo" dove dovrei mettere invece la casella della tabella di riferimento; come posso fare?
    Metti la funzione nell'evento AfterUpdate (Dopo Aggiornamento, nelle proprietà) del controllo che ha come origine la data della fattura. Occhio che VBA capisce solo l'inglese, quindi il separatore che sei abituato ad usare nelle varie interfacce grafiche in italiano, il puntoevirgola, in VBA è virgola, ma l'intellisense ti aiuterà suggerendoti cosa scrivere
    Me!txtDataScadenza.Value = DateSerial(year(Me!txtDataFattura.Value),month(Me!txtDataFattura.Value)+2,0)
    (scritta a memoria, non l'ho provata)
    Nel tuo esempio usi [date] e [data] però sono pessimi, da dove spuntano? Spero non siano campi o controlli. Puoi cambiarli con qualcosa di meno ambiguo (nel senso che non corrisponde a qualche funzione o a qualche parola riservata, [Date] lo è sicuramente), tipo Dtaxxxx, già nelle tabelle?
  • Re: Problema Calcolo Data

    Data è la casella di riferimento della tabella, ovvero sarebbe la data di emissione fattura ma la rinomino ora in Data Fattura che come dici tu è meno incasinato il tutto.
    Ora provo e ti faccio sapere
    Grazie per la dritta
  • Re: Problema Calcolo Data

    Non capisco dove sbaglio; questo è ciò che scrivo


    Private Sub Scadenza_AfterUpdate()
    Me!txtScadenza.Value = DateSerial(Year(Me!txtData.Value), Month(Me!txtData.Value) + 2, 0)
    End Sub


    "Scadenza" è la casella di testo dove deve esserci la formula magica e "Data" la casella di riferimento per i calcoli.
    Ho selezionato in rosso quello che cambio sostanzialmente
  • Re: Problema Calcolo Data

    Raffaele91 ha scritto:


    Non capisco dove sbaglio; questo è ciò che scrivo

    Private Sub Scadenza_AfterUpdate()
    Me!txtScadenza.Value = DateSerial(Year(Me!txtData.Value), Month(Me!txtData.Value) + 2, 0)
    End Sub
    "Scadenza" è la casella di testo dove deve esserci la formula magica e "Data" la casella di riferimento per i calcoli.
    Ho selezionato in rosso quello che cambio sostanzialmente
    Devi indicare il nome vero dei controlli. Se si chiamano [Scadenza] e [Data] non devi mettere txtScadenza e txtData ma solo Scadenza e Data. Il prefisso txt l'ho messo io a titolo d'esempio per far riferimento ad una ipotetica casella di testo
  • Re: Problema Calcolo Data

    Grazie ancora ma non mi succede nulla
    Questo è ciò che scrivo:

    Option Compare Database

    Private Sub Scadenza_AfterUpdate()
    Me!Scadenza.Value = DateSerial(Year(Me!Data.Value), Month(Me!Data.Value) + 2, 0)
    End Sub
  • Re: Problema Calcolo Data

    Raffaele91 ha scritto:


    Grazie ancora ma non mi succede nulla
    Questo è ciò che scrivo:
    Option Compare Database
    
    Private Sub Scadenza_AfterUpdate()
    Me!Scadenza.Value = DateSerial(Year(Me!Data.Value), Month(Me!Data.Value) + 2, 0)
    End Sub
    L'evento AfterUpdate, però, prevede che tu modifichi il contenuto del controllo Scadenza. In un record già presente con "Data" già compilata ma che non ha Scadenza, il solo fatto di visualizzare il record non popola il controllo scadenza. Qual è la tua situazione. Hai fatture già inserite di cui calcolare massivamente la scadenza? in questo caso ti conviene farlo con una query di aggiornamento e poi, a regime, quando inserisci le fatture da maschera, il sistema illustrato dovrebbe funzionare.
    Intuisco giusto se dico che non mastichi molto VBA?
  • Re: Problema Calcolo Data

    E' da poco che ho iniziato ad usare Access perchè con excell era troppo disordinato il tutto, fino ad una settimana fa non sapevo creare nemmeno una maschera ma pian piano ho iniziato a capire un pò, ho visto che esiste anche la funzione macro ma non so utilizzarla e vorrei riuscirci.
    ora spiego un pò com'è il mio gestionale.
    ho una tabella divisa in [Data](data fattura) [nome] ecc e [Scadenza](fattura al 30 del mese dopo)
    -[Scadenza1](fattura al 30 due mesi) e così via e poi ho delle celle nominate [30]-[30fm]-[60]-[60fm] con formato "Si/No", riportata tutta in una maschera, la formula che io dovrei inserire nella maschera è: se scrivo "Sì" in [30] calcoli la data in [Scadenza] al mese dopo mantenendo il giorno della data di fatturazione, mentre se metto "Sì" in [30fm] calcoli la data in [Scadenza] all'ultimo giorno del mese successivo e se non metto "Sì" in nessuno dei due campi vorrei che fosse personalizzabile da me, esempio:

    [Data] 21/12/2015 [30] Sì [Scadenza]21/01/2016
    [Data] 21/12/2015 [30fm] Sì [Scadenza]31/01/2016
    =iif([30]=Sì;dateserial(year([data]);month([data])+2;day([data]));iif([30fm]=Sì;dateserial(year([data]);month([data])+2;0)))

    non so come non scriverla in origine controllo e riuscire anche a far si che se le celle [30][30fm] se sono "no" io possa immettere una data qualsiasi.
    Non so usare il Generatore di macro e Generatore di codice e quindi ti prego di avere pazienza nello spiegarmi i procedimenti passo passo.
    Grazie ancora
  • Re: Problema Calcolo Data

    https://plus.google.com/u/0/photos/100463866565715162390/albums/6048607853980786305/6192826710974140962?pid=6192826710974140962&oid=100463866565715162390 ecco la foto
Devi accedere o registrarti per scrivere nel forum
32 risposte