Gestione Festività e Pasqua

di il
8 risposte

Gestione Festività e Pasqua

Ciao a tutti, come al mio solito, chiedo un ulteriore consiglio a qualche altro guru disposto ad aiutarmi.

Su un DB ho un campo denominato "DATA_RIS" da valorizzare; dopo averlo valorizzato, nel caso la data corrisponda ad un giorno di festa, mi dovrebbe restituire in un ulteriore campo denominato "FESTA" di che tipo di festa parliamo (Capodanno, Natale, Ferragosto etc); inoltre, se trattasi di domenica, un campo Sì/No deniminato "Festivo" che mi dovrebbe dare il flag positivo.
Se qualcuno si chiede il perché, mi serve per delle statistiche sugli incidenti stradali (lavoro per un reparto di ... Forze dell'Ordine)

Per quanto riguarda la Domenica, ho semplicemente inserito
Me.G_SETT = WeekdayName(DatePart("w", Me.DATA_RIS))

If left(me.G_SETT,8 )="domenica" then
me.Festivo=1
Else

If Left(Me.G_SETT, 8 ) <> "domenica" Then
Me.FESTIVO = 0
End If
End If

E funziona!

Adesso, per il resto delle festività, dopo aver googlato un poco, mi sono imbattuto in questo sorgente che ho così modificato:
Option Compare Database
Option Explicit

' VERIFICA SE LA DATA E' UN GIORNO FESTIVO IN ITALIA
Public Function Festivo(myDate As Date) As Boolean
Select Case myDate
'1. GENNAIO NUOVO ANNO
Case DateSerial(year(myDate), 1, 1)
me.Festivo = True
me.FESTA = "Capodanno"

'6.GENNAIO - EPIFANIA
Case DateSerial(year(myDate), 1, 6)
me.Festivo = True
me.FESTA="EPIFANIA"

'25. APRILE - LIBERAZIONE
Case DateSerial(year(myDate), 4, 25)
me.Festivo = True
me.FESTA="LIBERAZIONE"

'1. MAGGIO FESTA LAVORATORI
Case DateSerial(year(myDate), 5, 1)
me.Festivo = True
me.FESTA="Festa Lavoratori"

'2. GIUGNO FESTA DELLA REPUBBLICA
Case DateSerial(year(myDate), 6, 2)
me.Festivo = True
me.FESTA="Festa Repubblica"

'PASQUA
Case Easter(year(myDate))
me.Festivo = True
me.FESTA="PASQUA"

'LUNEDI DI PASQUA
Case Easter(year(myDate)) + 1
me.Festivo = True
me.FESTA="Lunedì dell'Angelo"

'15. AGOSTO
Case DateSerial(year(myDate), 8, 15)
me.Festivo = True
me.FESTA="Ferragosto"

'1. NOVEMBRE - TUTTI I SANTI
Case DateSerial(year(myDate), 11, 1)
me.Festivo = True
me.FESTA="Ognissanti"

'8. DICEMBRE - IMMACOLATA CONCEZIONE
Case DateSerial(year(myDate), 12,
me.Festivo = True
me.FESTA="Immacolata"

'25. DICEMBRE - NATALE
Case DateSerial(year(myDate), 12, 25)
me.Festivo = True
me.FESTA="NATALE"

'26. DICEMBRE - SANTO STEFANO
Case DateSerial(year(myDate), 12, 26)
me.Festivo = True
me.FESTA="Santo Stefano"
Inoltre, per il calcolo della Pasqua, avrei anche questo:
' CALCOLO DELLA PASQUA
Function Easter(year As Integer) As Date
Dim d As Integer
d = (((255 - 11 * (year Mod 19)) - 21) Mod 30) + 21
Easter = DateSerial(year, 3, 1) + d + (d > 48) + 6 - _
((year + year \ 4 + d + (d > 48) + 1) Mod 7)
End Function
... che però non ho idea di come e dove implementare il tutto.

Qualche suggerimento in merito?

8 Risposte

  • Re: Gestione Festività e Pasqua

    Non hai googolto molto lontano... quel codice mi pare di conoscerlo bene...


    Se metti il codice in un Modulo e richiami la funzione Festivo, passando la data restituisce True/False...

    Quì trovi un Esempio più completo:
    http://forum.masterdrive.it/microsoft-office-access-vba-23/calcolo-giorni-lavorativi-45763/
  • Re: Gestione Festività e Pasqua

    Anche se ci lavoro da un pò, fondamentalmente sono un principiante; puoi spiegarmi meglio?

    Nel frattempo ho aperto un Modulo (chiamato Modulo1) e ho copiato tutto il sorgente.
    Adesso cosa dovrei inserire nel codice VBA relativo a Private Sub DATA_RIS_AfterUpdate()?

    Ma volendo evitare l'apertura del modulo ed inserire il tutto in VBA all'interno della Private Sub DATA_RIS_AfterUpdate(), non è possibile?
  • Re: Gestione Festività e Pasqua

    carlo pots ha scritto:


    Anche se ci lavoro da un pò, fondamentalmente sono un principiante; puoi spiegarmi meglio?
    Nel frattempo ho aperto un Modulo (chiamato Modulo1) e ho copiato tutto il sorgente.
    Adesso cosa dovrei inserire nel codice VBA relativo a Private Sub DATA_RIS_AfterUpdate()?
    
    me.Festivo.Value=Festivo(TuaData)

    carlo pots ha scritto:


    Ma volendo evitare l'apertura del modulo ed inserire il tutto in VBA all'interno della Private Sub DATA_RIS_AfterUpdate(), non è possibile?
    Non si fanno queste cose... questa Routine potrebbe essere riutilizzata anche in altri contesti... cosa vorresti poi moltiplicare il codice...?

    Poi ti basta implementare 1 condizione nel codice per includere la Domenica... il modo in cui hai realizzato la verifica della domenica non si può vedere...!
    
    Option Compare Database
    Option Explicit
    
    ' VERIFICA SE LA DATA E' UN GIORNO FESTIVO IN ITALIA
    Public Function Festivo(myDate As Date) As Boolean
    If Weekday(myDate, vbMonday) = 7 then
       Festivo=True
       Exit Function
    End if
    Select Case myDate
    '1. GENNAIO NUOVO ANNO
    Case DateSerial(year(myDate), 1, 1)
    me.Festivo = True
    me.FESTA = "Capodanno"
    .....
    La funzione andrebbe rivista in quanto contiene riferimenti al controllo [Festa]... nel tuo caso Non serve...
    Ti suggerisco di usare la Funzione del DEMO che ho allegato...
  • Re: Gestione Festività e Pasqua

    @Alex ha scritto:


    Non si fanno queste cose... questa Routine potrebbe essere riutilizzata anche in altri contesti... cosa vorresti poi moltiplicare il codice...?
    Sono d'accordo con te, ma il problema è solo nell'inserimento, dopodiché non ho bisogno più di utilizzare la subroutine

    Provo e vediamo.

    P.s: per l'algoritmo della Pasqua (e quindi della pasquetta)?
    Altro modulo?
  • Re: Gestione Festività e Pasqua

    Niente da fare

    Il Modulo l'ho chiamato "Festivo"

    Ora, mettendo la riga che mi hai indicato mi dice "Tipo non corrispondente" Err.Run time 13

    I campi me li valorizza così:
    "me.Festivo.Value" mi dà 0 (zero)
    "Festivo(DATA_RIS)" (perché il mio campo data si chiama DATA_RIS) mi dà "<Tipo non corrispondente>"
    "DATA_RIS" mi segna la data che inserisco (nel caso specifico provo ad inserire nella maschera, ovvero 01/01/2016 - Capodanno)

    Cosa sto sbagliando?
    A proposito: al modulo ho aggiunto le righe relative alla domenica che mi hai indicato; inoltre ho verificato la DEMO che mi hai gentilmente mandato, ma non ci ho capito granché, anche perché il problema che sto affrontando io serve solo per segnalare se, in un determinato giorno, cade una festività (domeniche o feste nazionali/religiose) particolare o meno, dal momento che le statistiche richieste vogliono sapere se è festa e quale (per esempio per verificare la quantità di incidenti durante i "sabato sera")
  • Re: Gestione Festività e Pasqua

    Mi sa che servirebbe qualche approfondimento dei fondamenti della programmazione di VBA...

    Ma perchè non guardi l'esempio che ti ho suggerito che puoi studiarlo usando l'esecuzione passo - passo...?
    Perchè dobbiamo fare una lezione Online per le basi di VBA...?
  • Re: Gestione Festività e Pasqua

    Non vorrei essere sgarbato, però vorrei farti notare che, per me, è un impegno serio quello che mi sto prendendo col mio ufficio di appartenenza, sebbene in Access ho poca praticità.

    Tu mi dirai "Allora chi te l'ha fatto fare"?
    Il problema è che io sono abituato a "scrivere" programmi in Business Advantage Language (linguaggio francese per PC Bull, molto affine al Basic, ma più performante), un linguaggio che, purtroppo, adesso non posso più implementare in nessun PC.
    Motivo per cui mi sono cimentato in VBA; quindi, ho delle obiettive difficoltà dovute per lo più all'inesperienza per un profano (io NON nasco programmatore, ma lo sono diventato per ... necessità).

    Quindi, alla luce di tutto: io cerco di non dare troppo fastidio e, nei limiti del possibile, a riuscire a fare qualcosa di utile per me e per il mio ufficio; se ho dei dubbi (come nel caso in esame), alzo bandiera bianca e chiedo aiuto.
    Adesso, l'aiuto puoi darmelo se ti va (se non ti va, non fa niente), con un'indicazione o con una riga di codice (non pretendo quello che, a Napoli, chiamiamo "il cocco mondato e buono", per carità!!!), però credimi, per uno che esce da un tipo di programmazione ed è costretto non solo ad affrontare un mondo tutto diverso, ma anche a sentirsi dire "approfondimento dei fondamenti della programmazione di VBA", ... beh, credimi, non è carino.
    Mettiti nei miei panni....

    Detto questo, ti ringrazio comunque delle dritte datemi e cercherò comunque di metterle a frutto.
    Grazie ancora.
  • Re: Gestione Festività e Pasqua

    Ti assicuro che quello che ti ho dato è ben oltre un semplice aiuto dal momento che il codice che usi è mio e dal momento che ti ho indicato un demo che mostra come usare il codice....
    Io penso che ora tu possa tranquillamente studiare un minimo per comprendere quanto meno i suggerimenti.

    Buona lavoro.
Devi accedere o registrarti per scrivere nel forum
8 risposte