Restituzione data fine mese

di il
12 risposte

Restituzione data fine mese

Ciao,
sono un principiante della programmazione.
Vi espongo il mio problema:
stò creando un programmino in Access x la fatturazione, ma ho trovato un intoppo.
partendo da una data iniziale (data emissione fattura) devo far sì che in un altro campo mi venga restituita la data di scadenza della fattura.
il problema non sussiste quando i giorni da calcolare sono 30, 60 etc ma non riesco a trovare il modo di effettuare il calcolo quando la data di scadenza deve essere spostata a FINE MESE.
Come posso fare?
Mi hanno suggerito di utilizzare la funzione FINE.MESE ma il programma non me lo consente (forse ho qualche problema nelle librerie?)
Vi ringrazio sin d'ora per l'aiuto che vorrete darmi

12 Risposte

  • Re: Restituzione data fine mese

    Calcola la data del primo giorno del mese successivo e sottrai 1. Se lo devi fare dalla query, scrivi:

    SELECT * FROM TABLE WHERE CLNG(SCADENZA)=CLNG(DATEADD('d', -1, DATESERIAL(YEAR(DATEADD('m', 1, SCADENZA)), MONTH(DATEADD('m', 1, SCADENZA)), 1)))

    Quindi, questa query seleziona tutti i record dalla tabella TABLE che hanno il campo SCADENZA a fine mese, togliendo inoltre la parte dell'ora/minuti/secondi che a volte è presente nei campi data.

    Se lo fai da codice, estrai la formulina, converti le singole virgolette in doppie et voilà hai la funzione FINE.MESE che credo sia di Excel. La query funziona anche su SQL Server.

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Restituzione data fine mese

    Funziona!!!!
    sei un vero genio.
    Ho dovuto effettuare alcune modifiche tipo sostituire le "," con ";" e la "d" con "g".
    Ti ringrazio ancora tantissimo
    Pedro
  • Re: Restituzione data fine mese

    Di niente. Molte volte guardiamo le cose da un punto di vista troppo complicato. L'altro approccio sarebbe stato di calcolare il fine mese volta per volta, con problemi relativi all'anno bisestile ecc.

    Comunque, con questa formulina puoi anche selezionare le altre scadenze, a bi/trimestre, settimanale ecc. senza trovare altre soluzioni.

    Per curiosità, che Access usi? La sintassi di dateadd() funziona sul mio così come l'ho descritto. Non è che per caso usi Excel che richiede una sintassi diversa?

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Restituzione data fine mese

    Sto usando Access XP
    ....grazie ancora
    Pedro
  • Re: Restituzione data fine mese

    Ciao,
    ho provato ad adattare questa query anzichè per una select ad un update ma non ci sono riuscito!
    Potreste gentilmente darmi un aiuto?

    Io ho fatto così ma è sbagliato
    -----------------------------------------------------
    UPDATE scadenziario SET scadenziario.DATASCADENZA = ((CLng([DATAEMISSIONE]))=CLng(DateAdd('d',-1,DateSerial(Year(DateAdd('m',1,[scadenziario].[DATAEMISSIONE])),Month(DateAdd('m',1,[scadenziario].[DATAEMISSIONE])),1))))
    WHERE (((scadenziario.TIPOFATTURA)='30 GG FM'));
    -------------------------------------------------------

    Praticamente devo dire al DB di aggiornare tutti i campi DATASCADENZA dove il valore del campo TIPOFATTURA='30 GG FM' (fine mese), per quelli 30 GG senza fine mese non ho avuto problemi, però non riesco a capire come dire al campo DATASCADENZA di portarsi all afine del mese (e quindi calcolarla!).
    Spero in un vostro aiuto perchè mi son proprio bloccato su sta cosa

    Ciao e grazie
    Fabio
  • Re: Restituzione data fine mese

    La SELECT funziona?

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Restituzione data fine mese

    Uhmm non so scritta così
    -----------------------------------------------------
    SELECT * FROM Scadenziario WHERE CLNG(DATAEMISSIONE)=CLNG(DATEADD('d', -1, DATESERIAL(YEAR(DATEADD('m', 1, DATAEMISSIONE)), MONTH(DATEADD('m', 1, DATAEMISSIONE)), 1)))
    -----------------------------------------------------
    Ho visto che mi seleziona tutti i record con DATAEMISSIONE 31/10/2005!
    Non capisco perchè...


    per l'UPDATE invece ricevo errore di sintassi.
  • Re: Restituzione data fine mese

    UPDATE Scadenziario
    SET DATASCADENZA=CLNG(DATAEMISSIONE)=CLNG(DATEADD('d', -1, DATESERIAL(YEAR(DATEADD('m', 1, DATAEMISSIONE)), MONTH(DATEADD('m', 1, DATAEMISSIONE)), 1)))
    WHERE TIPOFATTURA='30 GG FM'

    Probabilmente è stato un errore di parentesi. Così dovrebbe funzionare.

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Restituzione data fine mese

    Uhmm niente da fare non dà errore ma neanche funziona... nel campo DATASCADENZA scrive questo: 0.00.00

    Cosa può essere?
    Grazie per l'aiuto e la pazienza!
    Ciao :)
  • Re: Restituzione data fine mese

    Ciao, grazie all'aiuto di una mia amica che ha lo stesso problema sono giunto a questo:

    UPDATE Scadenziario SET Scadenziario.DATASCADENZA = CLng(DateAdd('d',-1,DateSerial(Year(DateAdd('m',1,Scadenziario.DATAEMISSIONE)),Month(DateAdd('m',1,Scadenziario.DATAEMISSIONE)),1)))
    WHERE (((Scadenziario.TIPOFATTURA)='30 GG FM'));

    Praticamente era leggermente sbagliata la sintassi!
    Ora per fare un esempio se la data emissione è 20/10/2005 la datascadenza viene aggiornata al 31/10/2005 quasi giusto perchè calcola la fine del mese ma non calcola che i 30 giorni fine mese, dovrei forse aggiungere un mese in più, dove glielo devo dire di non aggiornare alla fine del mese corrente ma alla fine del mese successivo?
    Grazie ancora per l'aiuto e la pazienza!
    Ciao
  • Re: Restituzione data fine mese

    Ciao,
    ho modificato come segue:
    UPDATE Scadenziario SET Scadenziario.DATASCADENZA = CLng(DateAdd('d',-1,DateSerial(Year(DateAdd('m',1,Scadenziario.DATAEMISSIONE)),Month(DateAdd('m',2,Scadenziario.DATAEMISSIONE)),1)))
    WHERE (((Scadenziario.TIPOFATTURA)='30 GG FM'));

    La modifica sta qua:
    Month(DateAdd('m',2,
    ho tolto 1 ed ho messo 2 supponendo che quelli sono i mesi! Giusto?
    Il problema ora però si sposta sull'anno infatti una data emissione al 03/11/2005 la datascadenza viene messa al 31/12/2004
    ossia giorno e mese ok ma l'anno scala e diventa 2004!
    Come faccio a gestire questa cosa?
    Ciao e grazie ancora
  • Re: Restituzione data fine mese

    I valori dopo 'd' ed 'm' si riferiscono alla quantità di unità da aggiungere. Se metti 2, il calcolo è sicuramente errato.

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
Devi accedere o registrarti per scrivere nel forum
12 risposte