Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Access

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Access

Postdi pino61 » 09/01/08 19:52

ciao,
premetto che non sono un grande esperto.
Sto creando un database con access per la gestione delle ore di lavoro per un gruppo di dipendenti.
Bene ho creato i vari record: Cognome, nome, qualifica, data a cui fa riferimento il giorno di lavoro, ora di inizio e ora di fine. Sono riuscito a calcolare il totale delle ore mensili e anche l'eventuale straordinario.
Quello che vorrei riuscire a calcolare le ore lavorate suddivise per settimana: dal lunedì alla domenica, che tipo di formula devo inserire?
Chi può darmi una mano?
grazie
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Sponsor
 

Re: Access

Postdi archimede » 10/01/08 10:02

Dovresti spiegare esattamente come è fatta la tabella (nomi e tipi di campo, di tutte le tabelle se i dati non sono in una sola) e descrivere un esempio che dimostra qualche record con valori reali e il risultato che da questi vorresti ottenere.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi pino61 » 14/01/08 19:55

Nel mio database ho creato 3 tabelle: Dipendenti; Orario di lavoro; Qualifica.
Ho creato inoltre 5 maschere: Dipendenti; Orario di lavoro; Qualifica;
La tabella Dipendenti composta dai campi: IdDipendenti; Cognome; Nome; IdQualifica.
La tabella Orario di lavoro: IdOrarioDiLavoro;IdDipendenti; Data; OraInizio; OraFine; AltroTurno.
La Tabella Qualifica: IdQualifica; Qualifica.
Nella maschera Orario di lavoro ho inserito: Cognome; Nome; Qualifica; Una sottomaschera: Data; Ora Inizio; Ora Fine; Altro Turno. Inoltre ho creato una casella di testo dove ci sono: 2 caselle combinate: anni; mesi; 6 caselle di testo dove vorrei che mi venisse il calcolo su ognuna relative alla prima settimana, 2 settimana etc; ed in una il conteggio dello straordinario mensile calcolando che ogni turno lavorativo è di 6 ore.
Grazie per l'aiuto.
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi archimede » 15/01/08 00:46

pino61 ha scritto:La tabella Orario di lavoro: IdOrarioDiLavoro;IdDipendenti; Data; OraInizio; OraFine; AltroTurno.
Che tipo di campi sono Data; OraInizio; OraFine; AltroTurno? Lo stesso dipendente può avere più di un record in questa tabella per lo stesso giorno? Supponiamo il caso di un dipendente assunto il 25/1/2008: puoi illustrare cosa troveremmo scritto nella tabella Orario di lavoro per questo dipendente nel mese di gennaio 2008 e cosa vorresti ottenere da tali dati?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi pino61 » 15/01/08 19:26

Ciao,
I cami Data; OraInizio; OraFine sono campi data/ora cui fa riferimento il giorno, l'ora di inizio turno di lavoro e l'ora di fine turno di lavoro. Mentre AltroTurno si riferisce a giorni cui non viene conteggiato l'orario ma bensì si giustifica con riposo, ferie, malattia etc.
Lo stesso dipendente non può avere più di un record nella tabella per lo stesso giorno.
lo scopo di questo database è la registrazione giornaliera dei turni di lavoro o assenza a qualsiasi titolo dei dipendenti.
E questo mi aspetto venga in automatico inserendo i dati con i campi che ho creato. l'aiuto che chiedo è per riuscire a calcolare le ore settimanalmente dal lunedì alla domenica, e non dall'1 al 7, sapendo che il dipendente deve effettuare 36 ore settimanali alla scadenza, questo può capitare in qualsiasi giorno della settimana, vorrei inserire un messaggio che mi avvisa di dargli un riposo.Dopo di che si rinizia il conteggio delle 36 ore. Alla fine del mese viene effettuato il conteggio delle ore di straordinario.
Spero di averti dato delle indicazioni chiare.
Ancora grazie per l'aiuto.
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi archimede » 17/01/08 09:32

pino61 ha scritto:l'aiuto che chiedo è per riuscire a calcolare le ore settimanalmente dal lunedì alla domenica, e non dall'1 al 7, sapendo che il dipendente deve effettuare 36 ore settimanali alla scadenza, questo può capitare in qualsiasi giorno della settimana, vorrei inserire un messaggio che mi avvisa di dargli un riposo.
Purtroppo non riesco ancora a inquadrare completamente il problema, per cui sono costretto a ripetermi:
archimede ha scritto:Supponiamo il caso di un dipendente assunto il 21/1/2008: puoi illustrare cosa troveremmo scritto nella tabella Orario di lavoro per questo dipendente nel mese di gennaio 2008 e cosa vorresti ottenere da tali dati?
Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi pino61 » 19/01/08 11:37

Nella tabella appariranno tutti i giorni con la registrazione dell'ora di inizio e ora di fine turno o altro.
quello che io vorrei fare è richiamare questi dati con una query dove mi calcoli le ore lavorate nel mese da ogni singolo dipendente ma potendole suddividere anche per settimana. Non so se è possibile fare questo con access o con excell. Oppure cosa mi suggerisci di fare?
grazie
ciao Pino61
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi archimede » 19/01/08 23:18

In mancanza di un esempio concreto proverò a indovinare.

Puoi iniziare con una query di questo tipo (chiamata, ad esempio, OreLavorate):
Codice: Seleziona tutto
SELECT IdOrarioDiLavoro, IdDipendenti, Data, OraInizio, OraFine, DateDiff('h',[OraInizio],[OraFine]) AS Ore, DatePart("ww",data) AS Settimana
FROM Orariodilavoro;
Che dovrebbe calcolarti le ore per ciascun giorno e la settimana di riferimento.

A questo punto puoi ottenere il totale ore di ogni dipendente diviso per settimana con una quyery di questo tipo:
Codice: Seleziona tutto
SELECT IdDipendenti, Settimana, SUM(Ore) AS OreTotali
FROM OreLavorate GROUP BY IdDipendenti, Settimana;
Naturalmente la cosa non finisce qui: non ho idea di cosa fare con il campo AltroTurno, non so se hai turni che vanno a cavallo di due giorni, non so perché hai un campo data e due campi ora (anziché solo due campi ora), se devi gestire i dati di anni diversi dovrai modificare le query di cui sopra, ecc.

Comunque dovrebbe essere sufficiente come punto di partenza.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi pino61 » 21/01/08 19:30

Grazie,qualcosa comincia a funzionare.
Ho creato le query come consigliato. Per provare il programma ho registrato ad un dipendente 4 giornate:
data Ora_Inizio Ora_Fine Altro_Turno
01/01/2008 08,00 16,00
02/01/2008 riposo
03/01/2008 08,00 16,00
04/01/2008 08,00 16,00
La query all'apertura mi chiede di inserire l'ora d'inizio e l'ora di fine. Ho inserito 08,00 e 16,00 nel campo ORE mi calcola 192 e nel campo SETTIMANA 1. Subito ho capito che non sta calcolando le ore perchè il risultato sarebbe stato 8. Inoltre ho fatto la prova a digitare un orari diverso: 10,00 / 21,00 il risultato è stato 264. Lo stesso importo lo segna anche nel giorno di riposodove dovrebbe essere 0.
Cosa mi consigli di modificare?
Ciao Pino
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi pino61 » 21/01/08 19:53

Stavo riflettendo, ho notato che il calcolo che mi restituisce se lo divido per 24 mi darebbe il risultato giusto. Ho provato ad inserire le divisione nel codice ('h',[OraInizio],[OraFine]/24) AS Ore, DatePart("ww",data) AS Settimana;
ma il risultato è negativo. Come devo procedere? Inoltre chiedo non sarebbe più corretto che all'apertura della query mi chieda il periodo di riferimento ovvero la data e che lui calcoli automaticamente le ore lavorate già registrate?
Ciao Pino
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi archimede » 22/01/08 00:17

pino61 ha scritto:La query all'apertura mi chiede di inserire l'ora d'inizio e l'ora di fine.
Probabilmente questo perché i nomi dei campi nella query non corrispondono ai nomi dei campi della tabella: OraInizio oppure Ora_Inizio?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi pino61 » 22/01/08 18:28

Hai ragione ora sembra che funziona :) Ho inserito anche l'espressione "DatePart("m";[Data ])" e nella voce criteri ho inserito "[inserisci mese]" così all'apertura mi chiede il mese in cifre ed io mettendo "1" mi da il resoconto di gennaio. Sembra perfetto. :D
Se posso aproffittare della tua disponibilità e cortesia, ora vorrei un aiuto a sistemare la maschera che ho creato per l'immissione dei dati.
Ho creato una maschera composta da: Cognome; Nome e Qualifica.
Inoltre ho aggiunto una sottomaschera con: Data; Ora inizio; Ora Fine e Altro Turno, fino quì sembra che funzioni tutto i dati vengono regolarmente registrati nella tabella turno di lavoro.
In questa maschera ho creato una casella dove all'interno ho inserito 2 caselle combinate chiamate rispettivamente: elenco anni e elenco mesi. Nella prima appaiono a tendina gli anni fino al 2020 e nell'altra tutti i mesi dell'anno.
Sempre dentro questa tabella inoltre ho inserito 6 caselle di testo chiamate: 1^ settimana, 2^ settimana, 3^ settimana 4^ settimana, 5^ settimana e ore di straordinario. Questo per permettere all'operatore di vedere subito, selezionando l'anno ed il mese le ore lavorate nelle rispettive settimane e in quella dello straordinario la somma delle ore eccedenti le 36 di ogni settimana.
Puoi dirmi come procedere?
Grazie
Pino
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi archimede » 23/01/08 08:40

pino61 ha scritto:In questa maschera ho creato una casella dove all'interno ho inserito 2 caselle combinate chiamate rispettivamente: elenco anni e elenco mesi. Nella prima appaiono a tendina gli anni fino al 2020 e nell'altra tutti i mesi dell'anno.
Sempre dentro questa tabella inoltre ho inserito 6 caselle di testo chiamate: 1^ settimana, 2^ settimana, 3^ settimana 4^ settimana, 5^ settimana e ore di straordinario. Questo per permettere all'operatore di vedere subito, selezionando l'anno ed il mese le ore lavorate nelle rispettive settimane e in quella dello straordinario la somma delle ore eccedenti le 36 di ogni settimana.
Puoi dirmi come procedere?
Come dicevo, per gestire anni diversi le query andranno un po' modificate.

Puoi provare, ad esempio:
Codice: Seleziona tutto
SELECT IdOrarioDiLavoro, IdDipendenti, Data, OraInizio, OraFine,
       DateDiff('h',[OraInizio],[OraFine]) AS Ore,
       DatePart("ww",data) AS Settimana,
       Month(data) AS MeseComp,
       Year(data) AS AnnoComp
       FROM Orariodilavoro;

A questo punto avrai:

Ore totali per Anno/Mese/Settimana
Codice: Seleziona tutto
SELECT IdDipendenti, Settimana, AnnoComp, MeseComp, SUM(Ore) AS OreTotali
FROM OreLavorate GROUP BY IdDipendenti, Settimana, AnnoComp, MeseComp;

Ore totali per Anno/Mese
Codice: Seleziona tutto
SELECT IdDipendenti, AnnoComp, MeseComp, SUM(Ore) AS OreTotali
FROM OreLavorate GROUP BY IdDipendenti, AnnoComp, MeseComp;

Ore totali per Anno/Settimana
Codice: Seleziona tutto
SELECT IdDipendenti, Settimana, AnnoComp, SUM(Ore) AS OreTotali
FROM OreLavorate GROUP BY IdDipendenti, Settimana, AnnoComp;

Ore totali per Anno
Codice: Seleziona tutto
SELECT IdDipendenti, AnnoComp, SUM(Ore) AS OreTotali
FROM OreLavorate GROUP BY IdDipendenti, AnnoComp;
HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi pino61 » 23/01/08 18:12

Si così è meglio. Però se cambia l'anno appaiono tutti i precedenti, come bisogna fare per filtrarli. Come avevo fatto io all'apertura della query mi chiedeva di scegliere l'anno. Poi mi sembra che sia perfetto per quanto riguarda le query.

Ti avevo posto il quesito sulle maschere, forse non sono stato chiaro?
Pino
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi archimede » 24/01/08 09:35

pino61 ha scritto:Però se cambia l'anno appaiono tutti i precedenti, come bisogna fare per filtrarli.
Supponendo che tu abbia salvato le query di cui sopra in Access, potrai leggerne i dati come fossero normali tabelle:
Codice: Seleziona tutto
SELECT * FROM nomeQuery WHERE AnnoComp = 2008;
pino61 ha scritto:Ti avevo posto il quesito sulle maschere, forse non sono stato chiaro?
Ormai da anni non lavoro più con Access, per cui su Maschere e Reports temo di poter essere di scarso aiuto. Comunque, come dicevo sopra, se sai visualizzare in una form i dati di una tabella, puoi usare lo stesso metodo per i dati di una query.

Inoltre la storia delle ore straordinarie non mi è del tutto chiara: ore eccedenti le 36 di ogni settimana, ma se io un giorno lavoro 11 ore e gli altri giorni lavoro 4 ore, non ho comunque fatto dello straordinario?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi pino61 » 24/01/08 09:56

No . Le ore di straordinario cominciano ad essere conteggiate dopo aver lavorato 36, ecco perchè mi è importante conteggiare per settimana. Supponiamo che un dipendente lavori 12 ore al giorno, il lunedì, martedì e mercoledì, bene questi il giovedì deve fare riposo. Se non lo fa comincia a conteggiare lo straordinario. E quì che ci vorrebbe un messaggio che indichi a chi programma i turni che il dipendente ha superato le 36 ore. Ammettiamo che venga fatto il riposo il giorno successivo comincia la settimana nuova si ricomincia a conteggiare per le 36 ore. Alla fine del mese, dopo la 5^ settimana viene calcolato lo straordinario complessivo. Con questo metodo la settimana del mese successivo potrebbe iniziare in qualsiasi giorno: lun. mar. mer. ecc.
Mi sono spiegato bene?
Ciao Pino
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi archimede » 24/01/08 10:22

Allora puoi forse provare:
Codice: Seleziona tutto
SELECT IdDipendenti, Settimana, AnnoComp, MeseComp, SUM(Ore) AS OreTotali,
       DMax(SUM(Ore) - 36, 0) AS OreStraord
       FROM OreLavorate GROUP BY IdDipendenti, Settimana, AnnoComp, MeseComp;
HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi archimede » 24/01/08 10:50

Mi sa che ho scritto una stupidata:
Codice: Seleziona tutto
SELECT IdDipendenti, Settimana, AnnoComp, MeseComp, SUM(Ore) AS OreTotali,
       IIf(SUM(Ore) > 36, SUM(Ore) - 36, 0) AS OreStraord
       FROM OreLavorate GROUP BY IdDipendenti, Settimana, AnnoComp, MeseComp;
Non sono sicuro neanche di questa sintassi, a dire il vero. Inoltre non è da escludere che, anche se corretta, dia problemi di performance: se così fosse puoi spostare il controllo all'interno della form.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access

Postdi pino61 » 28/01/08 17:21

Ciao, scusa per il silenzio ma in questi giorni non ho potuto lavorare.
Ho provato la seconda opzione che mi hai suggerito, sembrerebbe che funzioni. Ma il mio problema ora è dividere le settimane nel mese. Come devo fare a portarle in evidenzia nella maschera?
Inoltre mi sono accorto che access non mi accetta ore 24,00 forse devo fare qualche modifica alle proprietà.
Ciao Pino
pino61
Utente Junior
 
Post: 10
Iscritto il: 09/01/08 19:16

Re: Access

Postdi archimede » 28/01/08 17:41

pino61 ha scritto:il mio problema ora è dividere le settimane nel mese. Come devo fare a portarle in evidenzia nella maschera?
Non ho capito: l'ultima query che ti ho dato dovrebbe calcolare il totale di ciascuna settimana per ogni mese (ogni settimana identificata da un numero progressivo all'interno dell'anno). Se fai
Codice: Seleziona tutto
SELECT FROM NomeVista WHERE AnnoComp=2008 AND MeseComp=4 ORDER BY Settimana;
dovresti avere i dati che ti servono. Portarli in evidenza nella maschera non so esattamente cosa significhi, un po' perché non so com'è fatta la maschera, un po' perché, come dicevo, delle maschere ho un ricordo vago.
pino61 ha scritto:Inoltre mi sono accorto che access non mi accetta ore 24,00 forse devo fare qualche modifica alle proprietà.
Anche questa non l'ho capita: nel db i campi data ovviamente supportano le 24 ore: forse il tuo problema è il formato con cui le visualizzi o quello usato per inserire i dati.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova


Torna a Applicazioni Office Windows


Topic correlati a "Access":


Chi c’è in linea

Visitano il forum: Nessuno e 18 ospiti