Report griglia presenze

di il
10 risposte

Report griglia presenze

Salve, vi chiedo aiuto per la stampa di un report presenze.
Ho una tabella con i seguenti campi:
TABELLA 1 (PERSONALE)

TABELLA 2 (PRESENZE)
ID
data
tipo presenza (Ferie - Permesso - Presenza - ecc)
ore presenza
ore assenza
IDDIPENDENTE (Collegato alla tabella personale)

Avrei la necessità di stampare un report come segue:
---------------------------------------------------------------------------------------------------------
cognome e nome | 1/10 | 2/10 | 3/10 | ecc...... tot.ore
---------------------------------------------------------------------------------------------------------
| 8 | 4/F |(Permesso) |...................12
---------------------------------------------------------------------------------------------------------
Grazie e scusate la mia ignoranza.
Gianni

10 Risposte

  • Re: Report griglia presenze

    ggvb10 ha scritto:


    cognome e nome | 1/10 | 2/10 | 3/10 | ecc...... tot.ore
    Questo mi fa pensare a una "query a campi incrociati". Prova la procedura guidata che ti suggerisce la suddivisione giornaliera.
    Di conseguenza fai poggiare il report su questa query.

    ggvb10 ha scritto:


    | 8 | 4/F |(Permesso) |...................12
    Questo non l'ho capito...corrispondentemente alle colonne che hai esposto sopra.
  • Re: Report griglia presenze

    OsvaldoLaviosa ha scritto:


    ggvb10 ha scritto:


    cognome e nome | 1/10 | 2/10 | 3/10 | ecc...... tot.ore
    Questo mi fa pensare a una "query a campi incrociati". Prova la procedura guidata che ti suggerisce la suddivisione giornaliera.
    Di conseguenza fai poggiare il report su questa query.

    ggvb10 ha scritto:


    | 8 | 4/F |(Permesso) |...................12
    Questo non l'ho capito...corrispondentemente alle colonne che hai esposto sopra.
    Grazie della tua attenzione, allora per quanto riguarda il doppio dato (4/f) significa che un giorno può accadere che lavora 4 ore e le altre 4 sono considerate ferie o permesso.
    Quindi io inserisco ad esempio per il giorno 01/10
    TIPO PRESENZA: Presente
    ORE PRESENZA: 4
    poi siccome deve effettuare 8 ore
    Sempre per lo stesso giorno:
    TIPO PRESENZA: Ferie
    ORE ASSENZA: 4
    Di conseguenza quando stampo il report, il giorno 01/10 per il dipendente 1 devo avere 4/F e di conseguenza.
    Spero di essere stato chiaro e spero che si possa fare così come ho strutturato le tabelle.
    Grazie ancora per la tua attenzione.
  • Re: Report griglia presenze

    La query a campi incrociati potrebbe andare ma in realtà non va usata per popolare il report in modo associato in quanto il numero di campi restituiti è dinamico, cosa che renderebbe improbabile gestire i controlli... potresti avere poche colonne o tutte... a seconda della presenza e dell'eventuale filtro.
    Esempio un reparto chiude 15gg ad Agosto avresti 15 colonne...
    Magari Osvaldo che lo ha proposto ha pensato anche alla soluzione.

    Io di norma uso un sistema misto in cui popolo da codice i 31 controlli relativi ai giorni del mese inseriri nel Corpo filtrando la query, li poi sta a te scegliere se campi incrociati o meno.
    Ovviamente ogni ripetizione del corpo è il Mese/Persona

    La cosa è semplice ma non banale, se non hai discreta dimestichezza con il VBA non sarà affatto gestibile.
  • Re: Report griglia presenze

    @Alex ha scritto:


    La query a campi incrociati potrebbe andare ma in realtà non va usata per popolare il report in modo associato in quanto il numero di campi restituiti è dinamico, cosa che renderebbe improbabile gestire i controlli... potresti avere poche colonne o tutte... a seconda della presenza e dell'eventuale filtro.
    Esempio un reparto chiude 15gg ad Agosto avresti 15 colonne...
    Si certo è così.
    Magari Osvaldo che lo ha proposto ha pensato anche alla soluzione.
    Speriamo..
    Ovviamente ogni ripetizione del corpo è il Mese/Persona
    Si perfetto.
    La cosa è semplice ma non banale, se non hai discreta dimestichezza con il VBA non sarà affatto gestibile.
    Sicuramente è la soluzione migliore, ma io purtroppo non ho molta dimestichezza con il VBA, spero che qualcuno possa essermi d'aiuto.
    Grazie per avermi risposto.
  • Re: Report griglia presenze

    @Alex ha scritto:


    La query a campi incrociati potrebbe andare ma in realtà non va usata per popolare il report in modo associato in quanto il numero di campi restituiti è dinamico, cosa che renderebbe improbabile gestire i controlli... potresti avere poche colonne o tutte... a seconda della presenza e dell'eventuale filtro.
    Esempio un reparto chiude 15gg ad Agosto avresti 15 colonne...
    Si certo è così.
    Magari Osvaldo che lo ha proposto ha pensato anche alla soluzione.
    Speriamo..
    Ovviamente ogni ripetizione del corpo è il Mese/Persona
    Si perfetto.
    La cosa è semplice ma non banale, se non hai discreta dimestichezza con il VBA non sarà affatto gestibile.
    Sicuramente è la soluzione migliore, ma io purtroppo non ho molta dimestichezza con il VBA, spero che qualcuno possa essermi d'aiuto.
    Grazie per avermi risposto.
  • Re: Report griglia presenze

    La questione colonne variabili è un problema in realtà più grande di quanto possa sembrare... e questo dipende anche dall'estensione temporale che pensi di opzionare.
    Se ad esempio ipotizziamo 2 mesi, sempre in relazione a quanto detto sopra 1 mese avrebbe 15 colonne mentre quello dopo 30... ma tu devi vedere sempre tutto allineato come un calendario... quindi devi gestire l'assenza dei dati... che non è nemmeno detto siano consecutivi se le presenze non lo sono...

    Siccome questo deve poter funzionare sempre a prescindere dall'estensione temporale questo è anche il motivo per cui la soluzione di Osvaldo non è in realtà praticabile.

    È complicato se non hai dimestichezza... e francamente temo troppo per affrontarlo così...
    Se in base a quanto ti ho accennato vuoi provare a cimentarti mostrandoci qualche pezzo, lo possiamo verificare in caso di problemi, ma se non hai gli strumenti significa che qualcuno deve farlo per te...

    Prova a rifletterci bene
  • Re: Report griglia presenze

    @Alex ha scritto:


    La questione colonne variabili è un problema in realtà più grande di quanto possa sembrare... e questo dipende anche dall'estensione temporale che pensi di opzionare.
    Se ad esempio ipotizziamo 2 mesi, sempre in relazione a quanto detto sopra 1 mese avrebbe 15 colonne mentre quello dopo 30... ma tu devi vedere sempre tutto allineato come un calendario... quindi devi gestire l'assenza dei dati... che non è nemmeno detto siano consecutivi se le presenze non lo sono...

    Siccome questo deve poter funzionare sempre a prescindere dall'estensione temporale questo è anche il motivo per cui la soluzione di Osvaldo non è in realtà praticabile.

    È complicato se non hai dimestichezza... e francamente temo troppo per affrontarlo così...
    Se in base a quanto ti ho accennato vuoi provare a cimentarti mostrandoci qualche pezzo, lo possiamo verificare in caso di problemi, ma se non hai gli strumenti significa che qualcuno deve farlo per te...

    Prova a rifletterci bene
    Ok grazie faccio delle prove e magari cerco di trovare altre soluzioni per risolvere il problema in modo più semplice.
    Grazie ancora
  • Re: Report griglia presenze

    ggvb10 ha scritto:


    @Alex ha scritto:


    La questione colonne variabili è un problema in realtà più grande di quanto possa sembrare... e questo dipende anche dall'estensione temporale che pensi di opzionare.
    Se ad esempio ipotizziamo 2 mesi, sempre in relazione a quanto detto sopra 1 mese avrebbe 15 colonne mentre quello dopo 30... ma tu devi vedere sempre tutto allineato come un calendario... quindi devi gestire l'assenza dei dati... che non è nemmeno detto siano consecutivi se le presenze non lo sono...

    Siccome questo deve poter funzionare sempre a prescindere dall'estensione temporale questo è anche il motivo per cui la soluzione di Osvaldo non è in realtà praticabile.

    È complicato se non hai dimestichezza... e francamente temo troppo per affrontarlo così...
    Se in base a quanto ti ho accennato vuoi provare a cimentarti mostrandoci qualche pezzo, lo possiamo verificare in caso di problemi, ma se non hai gli strumenti significa che qualcuno deve farlo per te...

    Prova a rifletterci bene
    Ok grazie faccio delle prove e magari cerco di trovare altre soluzioni per risolvere il problema in modo più semplice.
    Grazie ancora
    Salve, scusami ancora, dopo alcune prove sono riuscito a trovare la soluzione, questo è il codice che utilizzo:

    Private Sub Report_Open(Cancel As Integer)
    DoCmd.Maximize
    Me.RecordSource = "Qry_PresenzeDipendentiCampiIncrociati"
    Dim qdf As DAO.QueryDef
    Dim fld As DAO.Field
    Dim rst As DAO.Recordset
    Dim Conta As Integer
    Set qdf = CurrentDb().QueryDefs("Qry_PresenzeDipendentiCampiIncrociati")
    qdf.Parameters![Forms!Frm_maschera_iniziale!Anno] = Forms!Frm_maschera_iniziale!Anno
    qdf.Parameters![Forms!Frm_maschera_iniziale!Mese] = Forms!Frm_maschera_iniziale!Mese
    Set rst = qdf.OpenRecordset


    Conta = 1
    For Each fld In rst.Fields
    Me("Etichetta" & Trim(Conta)).Caption = fld.Name
    Me("Etichetta" & Trim(Conta)).Visible = True
    Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
    Me("Controllo" & Trim(Conta)).Visible = True
    Conta = Conta + 1
    Next
    Set rst = Nothing
    Set qdf = Nothing
    Set fld = Nothing

    End Sub

    L'intenzione era quella di recuperare i criteri MESE e ANNO dalla maschera FRM_MASCHERA_INIZIALE, ma mi da il seguente errore riferito a questa riga:

    qdf.Parameters![Forms!Frm_maschera_iniziale!Anno] = Forms!Frm_maschera_iniziale!Anno


    errore.png
    errore.png

    Come posso fare per risolvere il problema?
    Grazie in anticipo dell'attenzione.
    gianni
  • Re: Report griglia presenze

    I parametri non possono chiamarsi con i Riferimenti della Maschera... hanno un NOME, se non pubblichi il predicato SQL non possiamo aiutarti, di certo non può essere così:
    
    qdf.Parameters![Forms!Frm_maschera_iniziale!Anno] = Forms!Frm_maschera_iniziale!Anno
    ma così:
    
    qdf.Parameters![NomeParametroAnno] = Forms!Frm_maschera_iniziale!Anno
    P.S. in ogni caso la Query PARAMETRICA non serve... o meglio può essere usata alla stessa stregua della WHERE CONDITION, quindi non è LA SOLUZIONE che invece risiede nel codice successivo nel CICLO.
    Non vorrei tu avessi confuso la Soluzione in quella parte di codice, se usi la Normale WHERE su OPENREPORT ottieni la medesima cosa senza quel codice.
  • Re: Report griglia presenze

    @Alex ha scritto:


    I parametri non possono chiamarsi con i Riferimenti della Maschera... hanno un NOME, se non pubblichi il predicato SQL non possiamo aiutarti, di certo non può essere così:
    
    qdf.Parameters![Forms!Frm_maschera_iniziale!Anno] = Forms!Frm_maschera_iniziale!Anno
    ma così:
    
    qdf.Parameters![NomeParametroAnno] = Forms!Frm_maschera_iniziale!Anno
    P.S. in ogni caso la Query PARAMETRICA non serve... o meglio può essere usata alla stessa stregua della WHERE CONDITION, quindi non è LA SOLUZIONE che invece risiede nel codice successivo nel CICLO.
    Non vorrei tu avessi confuso la Soluzione in quella parte di codice, se usi la Normale WHERE su OPENREPORT ottieni la medesima cosa senza quel codice.
    Ciao ancora grazie per la tua pazienza, la query ed il report funzionano correttamente eliminando le due line incriminate, questo SQL:

    TRANSFORM Sum([Presenze Dipendenti].OrePresenzaDipendente) AS SommaDiOrePresenzaDipendente
    SELECT Dipendenti.Cognome, Dipendenti.Nome, TipoPresenzaDipendente.TipoPresenza AS Descrizione, Sum([Presenze Dipendenti].OrePresenzaDipendente) AS [Ore Totali]
    FROM Dipendenti INNER JOIN (TipoPresenzaDipendente INNER JOIN [Presenze Dipendenti] ON TipoPresenzaDipendente.IdTipoPresenze = [Presenze Dipendenti].TipoPresenzaDipendente) ON Dipendenti.ID_Dipendente = [Presenze Dipendenti].ID_DIPENDENTE
    GROUP BY Dipendenti.Cognome, Dipendenti.Nome, TipoPresenzaDipendente.TipoPresenza
    ORDER BY Dipendenti.Cognome, Dipendenti.Nome, TipoPresenzaDipendente.TipoPresenza DESC , Format([DataPresenzaDipendente],"dd")
    PIVOT Format([DataPresenzaDipendente],"dd");

    Questo è il risultato del report:

    report.png
    report.png

    Quando poi inserisco i parametri per selezionare il periodo:

    PARAMETERS datainizio DateTime, datafine DateTime;
    TRANSFORM Sum([Presenze Dipendenti].OrePresenzaDipendente) AS SommaDiOrePresenzaDipendente
    SELECT Dipendenti.Cognome, Dipendenti.Nome, TipoPresenzaDipendente.TipoPresenza AS Descrizione, Sum([Presenze Dipendenti].OrePresenzaDipendente) AS [Ore Totali]
    FROM Dipendenti INNER JOIN (TipoPresenzaDipendente INNER JOIN [Presenze Dipendenti] ON TipoPresenzaDipendente.IdTipoPresenze = [Presenze Dipendenti].TipoPresenzaDipendente) ON Dipendenti.ID_Dipendente = [Presenze Dipendenti].ID_DIPENDENTE
    WHERE ((([Presenze Dipendenti].DataPresenzaDipendente) Between [datainizio] And [datafine]))
    GROUP BY Dipendenti.Cognome, Dipendenti.Nome, TipoPresenzaDipendente.TipoPresenza
    ORDER BY Dipendenti.Cognome, Dipendenti.Nome, TipoPresenzaDipendente.TipoPresenza DESC , Format([DataPresenzaDipendente],"dd")
    PIVOT Format([DataPresenzaDipendente],"dd");

    Ho questo errore:
    errore.png
    errore.png


    codicerep.png
    codicerep.png

    Tu come risolveresti il problema.
    Grazie ancora
    gianni
Devi accedere o registrarti per scrivere nel forum
10 risposte