Esecuzione calcoli a seguito di scelta con casella combinata

Anonimo
2022-01-07T09:59:21+00:00

Buongiorno

stò realizzando un piccolo dbase con access 2016 e windows 2010, il cui scopo è quello di eseguire dei calcoli per la corresponsione di incentivi al personale.

Il dbase consta di 4 tabelle

  1. ANAGRAFICA_INCENTIVI (anagrafica dipendenti)
  2. INCENTIVI_PESI_RUP (tabella con l'indicazione di pesi che vengono apllicati in base alla figura professionale)
  3. TAB_RIPARTIZIONE_RUP (tabella di ripatizione della percentuale destinata per quella fase e calcolo delle quote spettanti in base alla figura professionale)
  4. TIPO_FIGURA_PROFESSIONALE (tabelle delle figure professionali)

Ho costruito una maschera RIPARTIZIONE_RUP basata sulla tabella TAB_RIPARTIZIONE_RUP dove ho inserito due caselle combinate legate fra loro. La prima ID_TIPO_FIGURA e la seconda ID_ANAGRAFE. Quest'ultima è legata al valore della prima (ID_TIPO_FIGURA) in modo da limitare alle persone che ricoprono un determinato ruolo.

Sulla seconda cbo ho poi impostato codice vba, su evento "dopo aggiornamento", in modo che mi vengano eseguiti dei calcoli e scritti nella tabella di riferimento (TAB_RIPATIZIONE_RUP).

All'apparenza sembra che tutto funzioni correttamente, ma analizzando i risultati mi sono accorto che sono sbagliati.

Infatti se inserisco delle figure e relativi nominativi, alla primo calcolo, questo è del tutto sbagliato come da schermata allegata:

come potete notare se inserisco le prime due riche il calcolo della prima riga non viene riportato, per cui sono costretto a ritornare sul primo record.

completaneto l'inserimento anche delle altre figure previste, mi ritrovo con il risultato di cui alla tabella qui sotto riportata con il totale delle quote errato (€ 2.174,63)

Se riprendo dall'inizio a ripassare l'inserimento dati, a quel punto il tolare delle quote è quello corretto, come si evince dall'immagine qui riportata (totale quote esatto € 1.512,16)

Voglio precisare che il calcolo delle quote è direttamente dipendente dalla percentule calcolata (PESO_PONDERATO) per cui ogni qualvolta viene inserito una figura professionale il calcolo dell'intera tabella dovrà essere rideterminato.

Per questo motivo chiedo aiuto a qualche anima buona che abbia voglia di aiutarmi, non essendo da solo riuscito a risolvere questo problema.

Ringrazio in anticipo chiunque voglia aiutarmi e ringrazio sin da ora.

Di seguito il link per scaricare una demo del database.

https://1drv.ms/u/s!AtAJ5hV8tzhMmTlvcm73nItmfWxu?e=QglThE

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

domenico laurenza 9,900 Punti di reputazione Moderatore volontario
2022-01-09T17:43:11+00:00

Ciao,

prova con l'aggiunta dell'istruzione in grassetto

Private Sub CBO_ANAGRAFE_AfterUpdate()

TXT\_PESI\_rup = DLookup("PESI\_RUP", "INCENTIVI\_PESI\_RUP", "ID\_TIPO\_FIGURA=" & Me!ID\_TIPO\_FIGURA) 

PERCENTUALE\_ESTERNO = DLookup("PERCENTUALE\_ESTERNO", "INCENTIVI\_PESI\_RUP", "ID\_TIPO\_FIGURA=" & Me!ID\_TIPO\_FIGURA) 

**Me.Dirty = False** 

End Sub

Ad ogni modifica di cbo_anagrafe, l'inserimento viene finalizzato e quindi viene effettuato il ricalcolo.

Mimmo

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

domenico laurenza 9,900 Punti di reputazione Moderatore volontario
2022-01-09T13:12:41+00:00

Ciao,

spero di aver azzeccato i calcoli, prova a cambiare:

Private Sub CBO_ANAGRAFE_AfterUpdate()

TXT\_PESI\_rup = DLookup("PESI\_RUP", "INCENTIVI\_PESI\_RUP", "ID\_TIPO\_FIGURA=" & Me!ID\_TIPO\_FIGURA) 

PERCENTUALE\_ESTERNO = DLookup("PERCENTUALE\_ESTERNO", "INCENTIVI\_PESI\_RUP", "ID\_TIPO\_FIGURA=" & Me!ID\_TIPO\_FIGURA) 

End Sub

e ad aggiungere nell'evento dopo eliminazione della Form

Private Sub Form_AfterDelConfirm(Status As Integer)

RicalcolaRipartizioni 

End Sub

e ad aggiungere nell'evento dopo aggiornamento della Form

Private Sub Form_AfterUpdate()

RicalcolaRipartizioni 

End Sub

e aggiungere la seguente Sub

Private Sub RicalcolaRipartizioni()

Dim SommaPesi As Double 

Dim myRst As Recordset 

Set myRst = CurrentDb.OpenRecordset("TAB\_RIPARTIZIONE\_RUP") 

'-> Ricalcolo Somma Pesi

myRst.MoveFirst 

SommaPesi = 0 

Do While Not myRst.EOF 

   SommaPesi = SommaPesi + myRst("PESI\_rup") 

   myRst.MoveNext 

Loop 

If SommaPesi < 10 Then SommaPesi = 10 

'-> Ricalcolo generale

myRst.MoveFirst 

Do While Not myRst.EOF 

   myRst.Edit 

   myRst("PESO\_PONDERATO") = myRst("PESI\_rup") / SommaPesi 

   myRst("PERCENTUALE\_TEORICA") = myRst("PESO\_PONDERATO") \* (5 / 100) 

   myRst("PERCENTUALE\_EFFETTIVA") = myRst("PERCENTUALE\_TEORICA") \* (1 - myRst("PERCENTUALE\_ESTERNO")) 

   myRst("QUOTA\_SPETTANTE") = 30243.21 \* myRst("PERCENTUALE\_EFFETTIVA") 

   myRst.Update 

   myRst.MoveNext 

Loop 

Me.Requery 

Set myRst = Nothing 

End Sub

in fase di inserimento/modifica devi finalizzare l'operazione e quindi il sistema effettua il ricalcolo.

Potresti, in alternativa, prevedere un pulsante di ricalcolo delle ripartizioni.

Facci sapere

Ciao Mimmo

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

8 risposte aggiuntive

Ordina per: Più utili
  1. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-01-09T17:06:06+00:00

    Devi spostarti su un altro record non necessariamente su uno vuoto.

    La filosofia di Access è proprio questa per finalizzare un inserimento o modifica devi abbandonare il record corrente altrimenti come capire che hai finito?

    Se nella maschera imposti la proprietà selettori record a Si, per finalizzare l'operazione, basta un click sul simbolo della matita che viene impostato su ciascun record.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2022-01-09T16:42:36+00:00

    Ciao Mimmo

    in effetti ho notato che muovendo il cursore sul nuovo record il ricalcolo avviene. Ma anche in questo caso

    devo ricordarmi di spostarmi con il mouse sul record vuoto.

    Comunque ho notato che con il tasto elimina il ricalcolo viene effettuato.

    Potrebbe essere un'idea posizionare una msgbox con la richiesta se è l'ultimo inserimento??

    Cosa ne pensi?

    Ciao

    Luca

    La risposta è stata utile?

    0 commenti Nessun commento
  3. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-01-09T16:35:12+00:00

    Ciao,

    In realtà il ricalcolo viene effettuato dopo lo spostamento del cursore dal record corrente cioè quando si finalizza l'inserimento o la modifica. Questo indica l'intenzione di finalizzare l'operazione.

    Utilizzando un pulsante di ricalcolo superi il problema ma se dimentichi di cliccare il pulsante?

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento