Newsgroup: it.comp.appl.access
Titolo: Ancora problemi con calcolo giorni lavorativi

Ho sviluppato un DB (access97) con il quale gestisco la programmazione della
produzione di un reparto.
Il db è così strutturato:
Una maschera che prende i record dalla tabella macchine,
ora questa maschera principale contiene una sottomaschera dove vengono
filtrati tutti i lotti da produrre per ogni macchina questa sottomaschera
contiene tutti i dati relativi alla programmazione:
- articolo
- quantità
- carico in giorni
- data inizio lavoro
- data fine lavolo
il problema che non riesco a risolvere è fare in modo che il campo calcolato
"data fine lavoro" tenga conto solo dei giorni lavorativi.
Ho provato a vedere la funzione sul Sito Comune "ContaLavorativi" ma non
riesco ad applicarla alla sottomaschera basata su un query.
Grazie per ogni eventuale consiglio!



 ha scritto nel messaggio
news:41f7c6bc$0$8204$5fc...@news.tiscali.it...

Tutto dipende da come ti calcoli la [data fine lavoro] e da quale FAQ del
Sito Comune stai usando.
Se stai usando la FAQ di G. Paolo Bizzaro, Roberto e Silvio Mazzetto
intitolata "Conteggio dei giorni lavorativi tra due date", in essa trovi
come calcolare i giorni lavorativi che intercorrono tra due date e penso che
non faccia al caso tuo.
Se invece, come penso, devi calcolarti la [data fine lavoro] sommanndo n
giorni lavorativi a [data fine lavoro], allora devi leggere sempre sulla
Sezione General del Sito Comune la FAq di Enrico Virginio intitolata
"Sommare giorni lavorativi ad una data": questa FAQ fa riferimento alle
funzioni della FAQ di cui sopra ma parte da presupposti opposti visto che
non fa la differenza tra due date ma somma giorni ad una data.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 non fa la differenza tra due date ma somma giorni ad una data.
Ciao Roberto, mi inserisco e ti sottopongo una cosa che non riesco a
risolvere, adattando il demo qui sopra da te suggerito.
HO una query che fa da record source ad una maschera con visualizzazione
maschere continue.
Ho provato a scrivere nelle query un campo calcolato come questo :
dfinelav:
ContaLavorativi([data_lancio];[data_fine];-1;Round([tempo]*[quantità]/28800;1))
modificando la funzione contalavorativi, per passargli anche
Round([tempo]*[quantità]/28800;1 che rappresenta i giorni necessari per
effettuare una determinata lavorazione.
Eseguendo la query mi da #errore.
Questa è la function modificata :
Public Function ContaLavorativi(ByVal DataIniziale As Date, DataFinale
As Date, Settimanacorta As Boolean, giornidalav As Integer) As Integer
Dim datainizio As Date
Dim datafine As Date
     giorni = giornidalav
     giorni_ver = giorni + 1
     datainizio = DataIniziale
     datafine = datainizio + giorni
Do Until 1 = 2
     If ContaLavorativi(datainizio, datafine, True, giornidalav) =
giorni_ver Then
         Exit Do
     End If
     datafine = datafine + 1
Loop
    ' 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
poi ho provato diversamente :
inserendo una text box non associata nel form per calcolare la data di
fine lavorazione, mettendo questo su apertura del form :
Dim datainizio As Date
Dim datafine As Date
     giorni = Me.gglav
     giorni_ver = giorni + 1
     datainizio = Me.data_lancio
     datafine = datainizio + giorni
Do Until 1 = 2
     If ContaLavorativi(datainizio, datafine, True, gglav) = giorni_ver Then
         Exit Do
     End If
     datafine = datafine + 1
Loop
Me.datafine = datafine
e variando solo questo nella funzione:
Public Function ContaLavorativi(ByVal DataIniziale As Date, DataFinale 
As Date, Settimanacorta As Boolean, giornidalav As Integer) As Integer
Dim datainizio As Date
Dim datafine As Date
(giornidalavorare è passato come gglav che è presente nella form),
il risultato è che solo il campo data finale del primo record viene 
aggiornato, e gli altri riportano la data di questo primo record.
Cioè se la data lancio è 19/05/2004,  gglav è 1, data finale sarà 
20/05/2004 su tutti i record della form anche quelli che hanno data 
iniziale e gglav diversi dal primo record che ti ho citato.
Mi daresti una mano ??
Ti ringrazio e saluto.
Sandro.