Giorni di lavoro nel mese in base ad un calendario

di il
11 risposte

Giorni di lavoro nel mese in base ad un calendario

Buonasera a tutti. 

Potrei avere un aiuto?

Ho una tabella strutturata così

ID (Chiave primaria, numerico lungo)
NomeCognome (Stringa)
DataImpiego (GG/MM/AAAAA)
OreIMpiego (numerico)

Vorrei poter 

1) Sommare le ore di impiego di ogni mese
2) Sapere quanti giorni al mese ha lavorato NomeCognome

Mi dareste una mano?

Grazie mille!

Marco

11 Risposte

  • Re: Giorni di lavoro nel mese in base ad un calendario

    Prima cosa il campo Nome/Cognome tienilo separato non unico, oreimpiego... cosa sarebbe

    Se tu avessi le timbrature quella tabella non va bene e nemmeno la struttura... mancano molti pezzi e, come già capitato con chi approccia ad access provenendo da excel... questo non è excel.

    Secondo, quello che chiedi necessita di basi solide non si può ricavare quel dato in modo automatico se non scrivendo del codice ben strutturato.

    Non conosciamo il tuo livello di preparazione ma ti espongo una serie di considerazioni:

    1. Parliamo di giornaliero ondi turnisti
    2. Sperando sia giornaliero il lavoro è soggetto a ccnl da cui ricavare la gestione dei gg lavorati, ad esempio chi lavora 6gg su 7 da contratto il calcolo deve considerare 6gg e non 5, chi pa partime orizzontale o verticale...
    3. I giorni feriali, qualcuno non ha il riposo sabato/domenica quindi la gestione dei gg festivi nazionali non serve

    Insomma quello che hai abbozzato va bene se lo fai a mano, ma se devi strutturarlo ed automatizzare il controllo devi consentire al tuo sw di avere le regole di contabilizzazione... regole che nemmeno hai esposto, immagino per sottostima della difficoltà dell'elaborato richiesto.

  • Re: Giorni di lavoro nel mese in base ad un calendario

    Dovrei fare una ricerca del dato (condizione where) con between tra inizio e fine mese (esempio 01/03/2024 al 31/03/2024), la somma del compo oreimpiego, e raggruppi per tutti che hanno nomecognome .

  • Re: Giorni di lavoro nel mese in base ad un calendario

    03/12/2024 - lele2006 ha scritto:

    Dovrei fare una ricerca del dato (condizione where) con between tra inizio e fine mese (esempio 01/03/2024 al 31/03/2024), la somma del compo oreimpiego, e raggruppi per tutti che hanno nomecognome .

    Sei sicuro di aver letto e capito bene...? che ricerca deve fare...? Deve fare un conteggio, ma con senso... non cercare. 

    Non si usa un campo NomeCognome che non è PK per queste cose... riflettiamo prima di rispondere.

  • Re: Giorni di lavoro nel mese in base ad un calendario

    CREATE TABLE presenze (
      Id INTEGER PRIMARY KEY,
      nomecognome TEXT NOT NULL,
      presenzadata date NOT NULL,
      ore INTEGER not null
    );
    
    
    INSERT INTO presenze VALUES (0001, 'pippo', '2024-01-01', 8);
    INSERT INTO presenze VALUES (0002, 'pluto', '2024-01-01', 8);
    INSERT INTO presenze VALUES (0003, 'pippo', '2024-01-02', 8);
    INSERT INTO presenze VALUES (0004, 'pluto', '2024-01-02', 3);
    INSERT INTO presenze VALUES (0005, 'pippo', '2024-01-03', 1);
    INSERT INTO presenze VALUES (0006, 'pluto', '2024-01-03', 8);
    INSERT INTO presenze VALUES (0007, 'pluto', '2024-01-04', 3);
    
    +----+-------------+--------------+-----+
    | Id | nomecognome | presenzadata | ore |
    +----+-------------+--------------+-----+
    |  1 | pippo       | 2024-01-01   |   8 |
    |  2 | pluto       | 2024-01-01   |   8 |
    |  3 | pippo       | 2024-01-02   |   8 |
    |  4 | pluto       | 2024-01-02   |   3 |
    |  5 | pippo       | 2024-01-03   |   1 |
    |  6 | pluto       | 2024-01-03   |   8 |
    |  7 | pluto       | 2024-01-04   |   3 |
    +----+-------------+--------------+-----+
    
    
    SELECT sum(ore) FROM presenze where nomecognome='pippo' and (presenzadata>'2023-12-31' and presenzadata<'2024-01-03');
    select count(nomecognome) from presenze where nomecognome='pippo' and (presenzadata>'2023-12-31' and presenzadata<'2024-01-03');

    risultati per pippo dal 01/01/2024 al 02/01/2024

    +----------+
    | sum(ore) |
    +----------+
    |       16 |
    +----------+
    +--------------------+
    | count(nomecognome) |
    +--------------------+
    |                  2 |
    +--------------------+

    easy... but you have a bug!

  • Re: Giorni di lavoro nel mese in base ad un calendario

    Speriamo non prenda permessi a minuti...!

    Approccio sbagliato.

  • Re: Giorni di lavoro nel mese in base ad un calendario

    04/12/2024 - @Alex ha scritto:

    Speriamo non prenda permessi a minuti...!

    Approccio sbagliato.

    Speriamo non siano iscritti a qualche sindacato...

  • Re: Giorni di lavoro nel mese in base ad un calendario

    04/12/2024 - @Alex ha scritto:

    .

    Sei sicuro di aver letto e capito bene...? che ricerca deve fare...? Deve fare un conteggio, ma con senso... non cercare. 

    Non si usa un campo NomeCognome che non è PK per queste cose... riflettiamo prima di rispondere.

    Era un approccio semantico :-) di query SQL, naturalmente tutta da sviluppare con tabelle e dati da gestire. Come poteva essere fatta tramite Linq, oppure query di Ado.Net, che però nel post non sapevo come voleva estrapolare i dati. Quindi a domanda generica avevo dato una risposta generica :-) 

  • Re: Giorni di lavoro nel mese in base ad un calendario

    Buonasera, 

    sto visionando le risposte e vi ringrazio infinitamente per la disponibilità.

    03/12/2024 - lele2006 ha scritto:

    Dovrei fare una ricerca del dato (condizione where) con between tra inizio e fine mese (esempio 01/03/2024 al 31/03/2024), la somma del compo oreimpiego, e raggruppi per tutti che hanno nomecognome .

    Una query o con codice?

  • Re: Giorni di lavoro nel mese in base ad un calendario

    +----+-------------+--------------+-----+
    | ID | Cognome     | presenzadata | ore |
    +----+-------------+--------------+-----+
    |  1 | ABC         | 2024-10-01   |   4 |
    |  2 | ABC         | 2024-10-15   |   3 |
    |  3 | CBA         | 2024-11-01   |   2 |
    |  4 | CBA         | 2024-12-01   |   6 |
    |  5 | XYZ         | 2024-09-01   |   2 |
    |  6 | ZYX         | 2024-08-01   |   2 |
    |  7 | ZYX         | 2024-08-10   |   1 |
    +----+-------------+--------------+-----+
    
    Ecco, così è la mia tabella.
    Posso, con una query
    
    1) Determinare quanti giorni ogni persona ha lavorato in un mese
    2) Sommare le ore lavorate in ogni mese da ciascuna persona
    
    ?
    
    Ancora mille volte grazie
  • Re: Giorni di lavoro nel mese in base ad un calendario

    No e si.

    Il trucco c'e' ma non si vede ;-)

    1. per contare, si usa "SELECT COUNT(1) ..."
    2. per sommare si usa "SELECT SUM(column)"
    3. per fare le cose "per mese" devi usare una "SELECT ... GROUP BY"

    Il problema e' che "presenzadata " e' del tipo <anno, mese, giorno>, NON <anno mese>, quindi quello che ti serve e' convertire <anno, mese, giorno> in <anno mese>. Una volta fatta questa conversione, tutto il resto diventa facile.

    Spulcia la documentazione di Access per vedere quale funzione usare.

  • Re: Giorni di lavoro nel mese in base ad un calendario

    03/12/2024 - lele2006 ha scritto:

    Dovrei fare una ricerca del dato (condizione where) con between tra inizio e fine mese (esempio 01/03/2024 al 31/03/2024), la somma del compo oreimpiego, e raggruppi per tutti che hanno nomecognome .

    03/12/2024 - Marco195 ha scritto:

    Vorrei poter 

    1) Sommare le ore di impiego di ogni mese
    2) Sapere quanti giorni al mese ha lavorato NomeCognome

    non sono la stessa cosa...

    la tabella che hai rappresentato somiglia ad una tabella estrapolata da un sistema di badge al netto di ora ingresso e ora uscita e dove nomecognome sia l'id del badge.

    questi dati servono solo per estrapolare ore e giorni di presenza. mancano dati del tipo festivo, ore straordinarie, ecc...

    trattandola per quello che è, ossia un controllo ingressi, la parte da elaborare devi farla da codice.

    non penso ti sia utile una tabella riassuntiva per mese e per dipendente per elaborare una busta paga (supponendo sia questo lo scopo finale).

    dagli accessi a suon di sql estrapoli gli elementi della busta paga:

    giorni lavorativi (la x sulla tabellina esposta in busta paga conforme inps/inail) ai quali vanno aggiunti, in funzione delle ore e giorni pattuite da contratto, i giorni di riposo, le ore eccedenti il contratto come straordinario, i festivi.

    trovati i giorni e le ore effettive al netto di permessi (estrapolabili da una tabella "permessi" per usare lafantasia), procedi al calcolo in base ai parametri contrattuali del singolo impiegato nonchè la verifica che a calendario non dia segnato come festivo (considera anche il santo patrono).

    Già solo per lo stralcio di elaborazioni citate, non ti serve a nulla trasformare una tabella in un'altra tabella con una sql, devi andare di codice.

    elaborazione:

    clessidra progressbar e messaggio "elaborazione busta del dott.... in corso".

    segni il dipendente: elabDip='Pippo' o lo prendi dalla tabella impiegati where dimesso=false (o qualcosa di simile)

    segni il mese da elaborare datainizo='2023-12-31'    datafine='2024-01-03'

    estrapoli le sue ore: 

    ElabSql='SELECT sum(ore) FROM presenze where nomecognome='' & elabDip &'' and (presenzadata>' & datainizo & ' and presenzadata<' &datafine);

    TotOre=il risultato della query questo per chi ha paga oraria (operaio)

    idem per i giorni per chi ha paga giornaliera (amministrativi e impiegati) la seconda queryi che estrapola i giorni.

    poi da paga giornaliera o paghecontrattuali elabori gli importi in busta...

    per ogni voce inserisci una rigabusta legata 1 a m a bustepaga (basta che dai uno sguardo ala tua busta per capire che le voci sono a sviluppo verticale, trattenute incluse.

    mi fermo qui.. il resto lo fai tu.

Devi accedere o registrarti per scrivere nel forum
11 risposte