Newsgroup: it.comp.appl.access
Titolo: manipolazione di date

se io ho una data iniziale ed il numero di giorni
posso ottenere la data finale addizionando solo i giorni lavorativi 
(domenica escluso)
12.05.05+5= 18.05.2005 

 ha scritto nel messaggio
news:_GLge.888113$b5.39...@news3.tin.it...

Per sommare ad una data iniziale solo i giorni lavorativi, vai sul Sito
Comune (link qui sotto) e nella Sezione General leggi la FAQ di Enrico
Virginio intitolata "6.138 Sommare giorni lavorativi ad una data".
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
---------------------------------------------------- 

 ha scritto nel messaggio 
news:xJMge.94471$IN.15...@twister2.libero.it...

Public Function Festivo(D As Date) As Boolean
   'Restituisce: True se è un giorno festivo
   'Eventualmente inserire anche il Santo Patrono della città
   'Modificato da Roberto
   Dim Anno As Integer, DayMax As Date, DayMin As Date
   Anno = Year(D)
   If Weekday(D) = 1 Then
      Festivo = True
      Exit Function
   End If
   If Day(D) = 1 And (Month(D) = 1 Or Month(D) = 5 Or Month(D) = 11) Or _
         Day(D) = 6 And Month(D) = 1 Or Day(D) = 25 And (Month(D) = 4 Or _
         Month(D) = 12) Or Day(D) = 15 And Month(D) = 8 Or (Day(D) = 8 Or _
         Day(D) = 26) And Month(D) = 12 Then
      Festivo = True
      Exit Function
   End If
   'intervallo in cui può cadere il Lunedì di Pasqua
   DayMax = DateValue("21/4/" & Anno)
   DayMin = DateValue("20/3/" & Anno)
   If Weekday(D) = 2 And D <= DayMax And D >= DayMin Then
      If D = (Pasqua(Anno) + 1) Then
         Festivo = True
         Exit Function
      End If
   End If
   Festivo = False
End Function
Questa è la parte della funzione che mi interessa- se non sbaglio -
Io sono un pò a digiuno di codici, variabili e funzioni.
Come faccio ad utilizzarla nel mio database?
io ho una sottomaschera basata su una query in cui ci sono:
TipoAssenza, DataIniziale,GiorniAssenza (Ed attualmente), DataFinale
Vorrei che quel campo DataFinale fosse automatico, credo si possa fare 
richiamando questa funzione. Ma come???
Secondo problema e terzo problema
io devo aggiungere anche il santo patrono e soprattutto devo fare in modo 
che nella somma, siano considerati i giorni lavorativi solo quando il campo
TipoAssenza assume un partcilare valore p.e. "congedo", in tutti gli altri 
casi infatti la somma deve avvenire normalmente, considerando cioè tutti i 
giorni.
E' possibile questo?. il santo patrono dovrebbe tenere in considerazione il 
comune in cui lavora il personale.
Aggiungo che questa sottomaschera Assenze è legata ad una tabella principale 
in cui vi sono i dati del personale???
Spero di essere stato chiaro.
La mia applicazione sta assumendo una veste sempre più efficace grazie a voi 
e l'introduzione di queste piccole ma gradi funzioni la renderebbe ancora di 
puù
spettacolare.
Grazie

 Grazie


 ha scritto nel messaggio 
news:ZK%ge.95779$IN.16...@twister2.libero.it...

sei stato simpaticissimo e per il momento molto efficace
grazie 

 ha scritto nel messaggio 
news:ZK%ge.95779$IN.16...@twister2.libero.it...

sono sempre io,


 ha scritto nel messaggio 
news:ZK%ge.95779$IN.16...@twister2.libero.it...

sei stato simpaticissimo e per il momento molto efficace
grazie 

 grazie
ragazzi quotate un pň per i soli ringraziamenti.
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa1 - I° Conferenza Italiana per Sviluppatori Access Arezzo 4+5
Giugno 2005 Sono aperte le iscrizioni  Info:  
www.donkarl.com/it

 dal campo calcolato della query.
[cut]
 
Mi riallaccio a questa vecchia discussione che ho trovato a forza di cercare soluzione al mio problema, ci ho lavorato parecchio, ma non riesco ad uscirne e quindi eccomi a chiedere aiuto al NG:
 
Sto cercando di richiamare in una query la funzione che ho dichiarato in un modulo. Questo modulo ho scritto quanto ho trovato nel SC alla FAQ 6.28, aggiungendo nella parte finale il codice del pulsante della maschera della faq 6.138 modificato per ottenere in ogni record la data finale che deve essere la data iniziale (Data_Ordine) + i giorni lavorativi risultanti con GL della query eseguita:
 
Public Function ContaLavorativi(DataIniziale As Date, DataFinale As Date, Settimanacorta As Boolean) As Integer
   'Autore: Silvio Mazzetto
   'Accetta:
   ' DataIniziale = data iniziale del periodo scelto
   ' DataFinale = data finale del periodo scelto
   ' Settimanacorta = True se bisogna considerare la settimana corta
   'Restituisce: numero di giorni lavorativi del periodo
   'La funzione utilizza Festivo() e Pasqua() usabili anche separatamente
   Dim DataDaContare As Date, Conto As Integer
   If Not IsDate(DataIniziale) Or Not IsDate(DataFinale) Or DataIniziale > DataFinale Then
      ContaLavorativi = 0
      Exit Function
   End If
   DataDaContare = DataIniziale - 1
   If Settimanacorta Then
      Do
         DataDaContare = DataDaContare + 1
         If Not Festivo(DataDaContare) And Weekday(DataDaContare) <> 7 Then
            Conto = Conto + 1
         End If
      Loop Until DataDaContare = DataFinale
   Else
      Do
         DataDaContare = DataDaContare + 1
         If Not Festivo(DataDaContare) Then Conto = Conto + 1
         Loop Until DataDaContare = DataFinale
   End If
   ContaLavorativi = Conto
 
End Function
Public Function Festivo(D As Date) As Boolean
   'Autore: Silvio Mazzetto
   'Accetta: una data

Public Function Pasqua(Anno As Integer) As Date
   'Autore: G.Paolo Bizzaro
   'Accetta: anno (4 cifre)
   'Restituisce: giorno di Pasqua dell'anno scelto
   'Il metodo è valido per tutti gli anni nel Calendario Gregoriano,
   'ossia dal 1583 in poi
   Dim a%, b%, c%, p%, q%, r%
   a = Anno% Mod 19: b = Anno% \ 100: c = Anno% Mod 100
   p = (19 * a + b - (b \ 4) - ((b - ((b + 8) \ 25) + 1) \ 3) + 15) Mod 30
   q = (32 + 2 * ((b Mod 4) + (c \ 4)) - p - (c Mod 4)) Mod 7
   r = (p + q - 7 * ((a + 11 * p + 22 * q) \ 451) + 114)
   Pasqua = DateSerial(Anno%, r \ 31, (r Mod 31) + 1)
End Function
 
Public Function DataFine(DataInizio As Date, Giorni As Integer) As Date
 
    Giorni = GL 'GL è un campo calcolato nella query che restituisce un valore intero di giorni lavorativi che dovranno essere sommati a DataInizio 
    If GL > 0 Then
        Giorni_ver = Abs(Giorni + 1)
    Else
        Giorni_ver = Abs(Giorni - 1)
    End If
 
    DataInizio = Data_Ordine 'Data_Ordine è un campo della tabella usata nella query
    DataFine = DataInizio + Giorni
 
Do Until 1 = 2
If GL > 0 Then
    If ContaLavorativi(DataInizio, DataFine, True) = Giorni_ver Then
        Exit Do
    End If
Else
    If ContaLavorativi(DataFine, DataInizio, True) = Giorni_ver Then
        Exit Do
    End If
End If
   If GL > 0 Then
        DataFine = DataFine + 1
    Else
        DataFine = DataFine - 1
    End If
Loop
 
Data_Ordine = DataFine
End Function
 
Nel campo calcolato della query dove richiamo la funzione ho scritto:
Espr1: DataFine([Data_Ordine];[GL])
 
e all'esecuzione della query ottengo come risultato su ogni record il valore 29/12/1899 
 
grazie per l'aiuto.