Tempo lungo per elaborazione report di stampa

di il
9 risposte

Tempo lungo per elaborazione report di stampa

Buongiorno,
vengo a voi con un problema di tempistica di elaborazione di un report di stampa relativo alle ore mensili dei dipendenti della mia azienda. Attualmente impiega circa 8 secondi a visualizzare l'anteprima da quando premo il pulsante. Mi chiedevo se e' un tempo consono o se il metodo che ho utilizzato per estrapolare i dati e dare la veste grafica al report e' troppo macchinoso e magari si puo' semplificare.
Il report ha questa veste grafica che vorrei mantenere:

Il report si autocompila in funzione delle festivita' nazionali e tiene conto anche dei giorni del mese, per esempio a febbraio assume il seguente aspetto:

Inoltre le ore giornaliere compaiono nere se il lavoratore ha fatto 8 ore, rosse se ne ha fatte meno e blu se ne ha fatte di piu'.

Il report lo vado a popolare con il seguente codice:
Private Sub Report_Open(Cancel As Integer)
DoCmd.Maximize
Me.RecordSource = "QryOreMese"
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim rst As DAO.Recordset
Dim IntConteggio As Integer
Set qdf = CurrentDb().QueryDefs("QryOreMese")
'qdf.Parameters![Campo] = valore 'inserire eventuali parametri per la query
Set rst = qdf.OpenRecordset
IntConteggio = 0
For Each fld In rst.Fields
    Me("rptOMTXT" & IntConteggio).ControlSource = fld.Name
    Me("rptOMTXT" & IntConteggio).Visible = True
    IntConteggio = IntConteggio + 1
Next
rst.Close
qdf.Close
Set rst = Nothing
Set qdf = Nothing
Set fld = Nothing
End Sub
Segue ulteriore post con link a tabelle e query

9 Risposte

  • Re: Tempo lungo per elaborazione report di stampa

    I dati del report sono presi da una serie di tabelle di cui allego screenshoots (cosi' anche osvaldo e' contento ):



  • Re: Tempo lungo per elaborazione report di stampa

    Il report si appoggia a questa query a campi incrociati:
    QryOreMese


    Che a sua volta si appoggia alla seguente query:
    QryRiepilogooreMese


    E a sua volta seguono le due query:
    QryOreMeseDipenenti


    QryGIorniMese
  • Re: Tempo lungo per elaborazione report di stampa

    La struttura è un poco contorta da seguire... la prima cosa che butto li, è se i campi oggeto di JOIN sono tutti Indicizzati..., ad esempio il campo Data è Indice nelle Tabelle...?
  • Re: Tempo lungo per elaborazione report di stampa

    Vedo delle query che hanno tabelle che NON sono messe in join questo sicuramente aumenta a dismisura il numero di righe (che poi magari dopo sono filtrate). Oltre agli indici suggeriti da Alex devi trovare il modo di migliorare le query.
  • Re: Tempo lungo per elaborazione report di stampa

    Chiedo scusa del ritardo nella risposta (meeting...). Non ho premesso che il DB e' diviso back-end su server di rete e front-end su PC locale (Access 2010). Ho controllato tutti i campi interessati dai joint delle query e sono indicizzati.
    Spiego come mi sono mosso per arrivare al report:
    Ho una tabella in cui memorizzo il primo giorno del mese interessato dal report ed il giorno della Pasqua.
    Poi ho un'altra tabella in cui ho memorizzato i numeri da 1 a 31.
    Con la QryGiorniMese mi creo le date del mese analizzato e che mi servira' per la query a campi incrociati.
    Con la QryOreMeseDipendenti ricavo l'elenco dei dipendenti con la somma delle ore giornaliere per il mese richiesto.
    Con la QryriepilogooreMese compilo il calendario con tutti i giorni del mese (quindi anche quei giorni in cui non compaiono ore dei dipendenti, per esempio i festivi o i sabati non lavorativi).
    Infine ho creato la query a campi incrociati QryOremese con cui vado a popolare il report.
    Non so pero' se quello che rallenta e' l'elaborazione di tutte queste query o se e' invece la formattazione condizionale del report quando vado a colorare i campi per igorni festivi e prefestivi con le seguenti condizioni:

    ..o forse l'insieme di questi "accrocchi"...
  • Re: Tempo lungo per elaborazione report di stampa

    In generale non uso la F.C. nei Report, trovo più efficiente gestire da codice su FORMAT della sezione... puoi provare.
    Credo il problema possa dipendere dall'uso di Query un po pesanti.

    Io avrei creato una Query con i Dipendenti da visualizzare nel Mese.
    Poi su OPEN del report rendevi visibile solo i gg del mese definito, sai che Marzo ha 30gg quindi tutti i controlli fino a 28 Visibili, da 29÷31 non visibili, quindi cicli da 29÷FineMese e visualizzi quello che serve.

    In realtà sarebbe utile applicare la Colorazione dei GG proprio su OPEN tanto il mese è solo 1 quindi fatta 1 Volta non la devi ripetere per ogni dipendente, quindi su OPEN cicla da 1÷FineMese ed in base al WeekDay colori il BackColor e ForeColor...

    Quì trovi una classe per i Giorni FEstivi:
    https://www.iprogrammatori.it/forum-programmazione/access/calcolo-giorni-lavorativi-t50227.html

    Su Format del Corpo fai il resto, ricavi le ore di presenza del Giorno per ogni dipendente, se le hai nella Query Raggruppata per Dipendente/Giorno(Filtrata per Mese) direi che è semplice cicli e compili i controlli Unbound, se ti serve altra F.C. aggiunta la applichi quì... sempre da VBA.

    Credo che sia tutto più veloce se operi cosi piuttosto che usare Query pesanti e relazionarle.
  • Re: Tempo lungo per elaborazione report di stampa

    @Alex ha scritto:


    In generale non uso la F.C. nei Report, trovo più efficiente gestire da codice su FORMAT della sezione... puoi provare.
    Credo il problema possa dipendere dall'uso di Query un po pesanti.
    Se lancio l'ultima query (quella a campi incrociati per la compilazione del report) si apre praticamente in tempo immediato, ho provato ad eliminare tutte le FC nel report e si guadagnano circa 4 secondi. Quindi dovrebbero occorrere circa 4 secondi per popolare il report ed altrettanti per le formattazioni.

    @Alex ha scritto:


    Io avrei creato una Query con i Dipendenti da visualizzare nel Mese.
    Poi su OPEN del report rendevi visibile solo i gg del mese definito, sai che Marzo ha 30gg quindi tutti i controlli fino a 28 Visibili, da 29÷31 non visibili, quindi cicli da 29÷FineMese e visualizzi quello che serve.

    In realtà sarebbe utile applicare la Colorazione dei GG proprio su OPEN tanto il mese è solo 1 quindi fatta 1 Volta non la devi ripetere per ogni dipendente, quindi su OPEN cicla da 1÷FineMese ed in base al WeekDay colori il BackColor e ForeColor...

    Quì trovi una classe per i Giorni FEstivi:
    access/calcolo-giorni-lavorativi-t50227.html

    Su Format del Corpo fai il resto, ricavi le ore di presenza del Giorno per ogni dipendente, se le hai nella Query Raggruppata per Dipendente/Giorno(Filtrata per Mese) direi che è semplice cicli e compili i controlli Unbound, se ti serve altra F.C. aggiunta la applichi quì... sempre da VBA.
    Faccio un po' di prove, mi ci vorra' un po perche' la mia conoscenza di VBA e' un po' limitata... Ci sentiremo presto per ulteriori consigli
    Vi aggiorno
  • Re: Tempo lungo per elaborazione report di stampa

    Spannometricamente
    in un'applicazione con interfaccia utente di qualunque tipo
    tempi di risposta maggiori di 1 secondo sono un problema/non sono accettabili.

    Come si risolve?
    Tutto dipende da, perche' sta' così tanto tempo.
    Il numero di possibili motivi e' pari se non superiore al numero di atomi nell'universo conosciuto
  • Re: Tempo lungo per elaborazione report di stampa

    Hm..
    Io avrei creato una tabella con i campi nome dipendente, anno, mese, e 31 campi (denominati giorno1, giorno2.... giorno31)
    Poi le label le avrei gestite a livello vb. Sia per l immissione che per il report.
    Ora potete insultarmi
Devi accedere o registrarti per scrivere nel forum
9 risposte