CODICE VBA PER CONTROLLO INSERIMENTO DATI

Anonimo
2018-08-24T11:19:22+00:00

Ciao a tutti,

sono di nuovo qua, dopo una breve vacanza, per riprendere e portare a teermine il mio progetto Dbase per la gestione della programmazione di interventi.

Al momento, grazie al prezioso aiuto di Vladimiro, il dbase  funziona correttamente eseguendo i controlli necessari per evitare errori. La fasi di primo inserimento avviene in modo lineare e preciso, purtroppo, quando Vladimiro ha scritto il codce VBA non ho tenuto conto e quindi riportato allo stesso Vladimiro, che la programmazione si rietiene conclusa quando un finanziamento è completamente utilizzato.

Ciò avviene, di solito, quando tutti i progetti programmati e finanziati arrivano alla loro conclusione con l'esattezza dell'importo speso per la loro realizzazione (consuntivo).

Nello stato dell'arte in cui è il mio dbase adesso, grazie ai controlli inseriti mediante codice VBA da Vladimiro, non riesco a completare questa fare si inserimento dati a consuntivo.

In pratica quando il progetto è giunto alla sua ultimazione devo inserire l'importo complessivamente speso per la realizzazione del progetto e apporre una spunta di progetto collaudato, questo fa si, mediante query, di determinare la programmazione complessiva dei finanziamenti.

Faccio un esempio:

se ho un finanziamento di € 50.000,00 che finanzia un progetto (o più progetti) ed a termine del progetto (o più di uno) ho speso meno di quanto preventivato (esempio € 49.900,00) avrei a disposizione sul finanziamento di € 50.00,00 ancora 100 da utilizzare per il finanziamento o cofinanziamento di un nuovo progetto non compreso nella programmazione iniziale.

Il codice scritto da Vladimiro (come detto per mia disattenzione nel valutare eventuali problemi) esegue dei controlli in sede di programmazione iniziale dei progetti finanziati con quelle determinate risorse (fase di programmazione e non di consuntivo) per cui il codice, giustamente, mi restituisce il seguente messaggio (vedi figure sotto)

Non riesco e non sono in grado di scrivere un codice VBA che possa saltare i controlli che esegue in fase di predisposizione del programma.

Chi può darmi una mano in tal senso?

Grazie

Luca

PS: Anche in fase di inserimento dei dati a consuntivo il codice VBA dovrebbe fare dei controlli per la correttezza dei dati inseriti e per far si che alcuni parametri non vengano violati.

Grazie mille in anticipo

Luca

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
Anonimo
2018-09-01T21:12:38+00:00

Ciao Luca,

in qiesto momento sono fuori casa e non posso scaricare il db.

La routine proposta funziona eccome, l'importante è inserirla "Su corrente" della maschera principale.

Fai così, metti il segno di spunta, chiudi la maschera e poi riaprila nuovamente, vedrai le caselle di testo disattivate.

Comunque se vuoi vederle subito disattivate nel momento in cui inserisci il segno di spunta, dopo "End If" della routine aggiungi:

Me.Refresh

Serve a salvare il record ed ottenerne la sua modifica.

Vladimiro

Ciao Vladimiro,

sempre mille grazie ... non sei obbligato a rispondermi anche quando non sei a casa o non puoi, comunque il codice che ho inserito è questo:

Private Sub Form_Current()

    If COLLAUDATO = True Then

        IMPORTO_COLLAUDO.Enabled = True

        DETERMINA_COLLAUDO.Enabled = True

     Else

        IMPORTO_COLLAUDO.Enabled = False

        DETERMINA_COLLAUDO.Enabled = False

    End If

Me.Refresh

End Sub

ma sembra che il me.refresh non funzioni. Nella maschera avevo già predisposto un pulsante di refresh e con quello riesco ad ottenere il risultato sperato....comunque ha poca importanza ... semmai non dovessimo saltarci fuori adotto .locked

Per ora ti saluto e grazie ancora della tua immensa disponibilità

Luca

Ciao Luca,

mi didpiace non poterlo provare.

In genere, prima di postare una soluzione, la provo sempre prima.

Se non va con Me.Refresh, prova con Me.Requery sicuramente funzionerà.

Vladimiro

Ciao Luca,

da casa è tutta un'altra cosa! :-)

La soluzione è la seguente.

Oltre ad avere la routine "Su corrente" della maschera, devi inserirla anche ed aggiungerei soprattutto "Su click" del controllo "COLLAUDATO"... come ho fatto a non pensarci prima non lo so!

Private Sub COLLAUDATO_Click()

    If COLLAUDATO = False Then

        IMPORTO_COLLAUDO.Enabled = True

        DETERMINA_COLLAUDO.Enabled = True

     Else

        IMPORTO_COLLAUDO.Enabled = False

        DETERMINA_COLLAUDO.Enabled = False

    End If

End Sub

Private Sub Form_Current()

    If COLLAUDATO = False Then

        IMPORTO_COLLAUDO.Enabled = True

        DETERMINA_COLLAUDO.Enabled = True

     Else

        IMPORTO_COLLAUDO.Enabled = False

        DETERMINA_COLLAUDO.Enabled = False

    End If

End Sub

Un consiglio,

per vedere o meno il segno di spunta a seconda della scelta nella maschera "NEW_PROGETTO" anche nella maschera "HOME_PROGETTI", conviene:

che chiudi "HOME_PROGETTI"quando apri "NEW_PROGETTO"

Private Sub ID_PROG_Click()

    DoCmd.OpenForm "NEW_PROGETTO", , , "[ID_PROG] = " & Me!ID_PROG

    DoCmd.Close acForm, "HOME_PROGETTI"

End Sub

riapri "HOME_PROGETTI"quando chiudi "NEW_PROGETTO"

Private Sub Form_Close()

DoCmd.OpenForm "HOME_PROGETTI"

End Sub

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-09-01T16:50:45+00:00

Ciao Luca,

in qiesto momento sono fuori casa e non posso scaricare il db.

La routine proposta funziona eccome, l'importante è inserirla "Su corrente" della maschera principale.

Fai così, metti il segno di spunta, chiudi la maschera e poi riaprila nuovamente, vedrai le caselle di testo disattivate.

Comunque se vuoi vederle subito disattivate nel momento in cui inserisci il segno di spunta, dopo "End If" della routine aggiungi:

Me.Refresh

Serve a salvare il record ed ottenerne la sua modifica.

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-09-01T15:16:03+00:00

Ciao Vladimiro,

grazie per aver sistemato il codice sul dbase 1.4 che ho scaricato questa mattina.

Ho provato anche ad aggiungere il codice per disabilitare i campi testo "DETERMINA_COLLAUDO" e "IMPORTO_COLLAUDO", ma in tutta sincerità non sono riuscito nella modifica.

C'è qualcosa che mi sfugge e non riesco a capire dove sbaglio.

Ho inserito il seguente codice su entrami le caselle:

Private Sub IMPORTO_COLLAUDO_Change()

    If COLLAUDATO = False Then

    IMPORTO_COLLAUDO.Enabled = True

Else

    IMPORTO_COLLAUDO.Enabled = False

    End If

End Sub

Private Sub DETERMINA_COLLAUDO_Change()

    If COLLAUDATO = False Then

    DETERMINA_COLLAUDO.Enabled = True

Else

    DETERMINA_COLLAUDO.Enabled = False

    End If

End Sub

Ti chiedo AIUTO e scusa ma ieri sera sono rientrato molto tardi a casa.

Ti allego il dbase vers. 1.4.1

Ciao

Luca

https://1drv.ms/u/s!AtAJ5hV8tzhMjka04qsDg3LrzY87

Ciao Luca,

non funziona e mi pare pure abbastanza logico nel senso che l'azione "Su modifica" determina l'attivazione della casella di testo per l'eventuale modifica.

Come può essere attivo un focus su una casella di testo disattivata?

Per ottenere ciò, l'evento lo devi spostare "Su corrente" della maschera principale:

Private Sub Form_Current()

If COLLAUDATO = False Then

    IMPORTO_FINALE_COLLAUDO.Enabled = True

    DETERMINA_COLLAUDO.Enabled = True

Else

    IMPORTO_FINALE_COLLAUDO.Enabled = False

    DETERMINA_COLLAUDO.Enabled = False

End If

End Sub

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-31T22:11:03+00:00

Ciao Vladimiro

Anche io oggi pomeriggio non sono a casa per cui posso provare con qualche tentativo al mio rietro.

Ci aggiorniamo a più tardi con le eventuali modifiche.

Luca

Ciao Luca,

visto che ancora non fai vedere nulla, la modifica di cui ti parlavo oggi l'ho fatta io.

Usando l'ultimo db che ho scaricato questa sera, per quanto riguarda la parte iniziale, ho ripreso tutto il codice della versione 1.2 mentre per la parte a consuntivo ho lasciato quella scritta da te.

Attenzione a non tralasciare il codice per inibire le due caselle di testo inserito "Su attivato".

Qui puoi scaricare la nuova versione del tuo db.

Fammi sapere.

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-31T13:34:43+00:00

Ciao Luca,

siccome non sono a casa e non potendo mettermi con comodo a fare un copia-incolla delle cose che hai scritto, provero' ad andare a naso.

Tu dici che non serve fare la somma dell'intera colonna in quanto basta verificare l'importo del singolo record.

Questo sta a significare che per ogni importo iniziale di ogni specifico finanziamento su uno specifico record corrisponde l'importo a consuntivo dello stesso finanziamento e dello stesso record?

Riguardo poi la mia idea di semplificare al massimo servendomi del controllo "COLLAUDATO" , è presto fatto e te lo spiego in maniera ancora più semplice di come l'ho buttata giù ieri.

Se il controllo è privo di segno di spunta (False) 

  1. la casella di testo a consuntivo è inibita
  2. vale solo il codice (funzionante 1.1) riguardante l'inserimento iniziale.

(Come si inibisce tale casella? 

Semplice: "Su attivato")

If Parent!COLLAUDATO = False Then

    Me!IMPORTO_FINAN_CONS.Locked = True

Else

    Me!IMPORTO_FINAN_CONS.Locked = False

End If

Altrimenti, se il controllo ha il segno di spunta (True)

  1. la casella di testo iniziale è inibita
  2. vale solo il codice riguardante il consuntivo.

Comunque stasera mi scarichero' il tuo db, tu intanto prova a fare qualche altro tentativo.

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-30T21:26:59+00:00

Ciao Vladimiro

infatti proprio la casella di controllo COLLAUDATO mi ha fatto accendere la lampadina e, forse (dico forse) ho risolto il problema grazie all'utilizzo nel codice VBA proprio della casella di controllo di cui parlo.

Ho modificato il dbase PROGRAMMAZIONE 1.1 (con il codice che funzionava egregiamente) ed ho inserito nei vari controlli l'istruzione Parent!COLLAUDATO = 0 quando trattiamo i dati ed i controlli della casella IMPORTO_FINAN_PROG mentre Parent!COLLAUDATO = -1 per la casella IMPORTO_FINAN_CONS.

Infine ho inserito la variabile m = Me!IMPORTO_FINAN_PROG - Me!IMPORTO_FINAN_CONS per determinare l'economia sul finanziamento.

Comunque ti allego il link per scaricare questa versione ed eventualmente fare aggiustamenti che ritieni opportuni.

questo il nuovo dbase https://1drv.ms/u/s!AtAJ5hV8tzhMjkQay8FiCKXWn-oN

Però prima di metterci le mani, mi serve chiarire un aspetto e cioè:

non essendoci il segno di spunta e l'importo del collaudo il codice si deve occupare esclusivamente dell'inserimento del o dei vari importi iniziali e non deve dare la possibilità nel frattempo di inserire nessun importo riguardante il collaudo, giusto?

Viceversa, una volta inserito il segno di spunta e l'importo del collaudo, il codice si deve occupare esclusivamente dell'inserimento del o dei vari importi a collaudo e non deve dare più la possibilità di modificare gli importi iniziali, giusto?

quello che hai scritto era proprio ciò che volevo facesse il codice e che spero di aver risolto, salvo, naturalmente eventuali tuoi suggerimenti che sono sempre autorevoli e ben accettati.

Fammi sapere

Luca

Ciao Luca,

mi fa piacere sapere che apprendi e che ti stai impegnando affinché i consigli dati non restino vani.

Ho scaricato la demo e mentre faccio delle prove vorrei segnalarti man mano che scrivo lo stato dell'arte.

La prima cosa che noto è che ti è sfuggito un codice inserito (versione 1.2) nelle due caselle di testo "IMPORTO_FINAN_PROG" e "IMPORTO_FINAN_CONS"

Potrebbe succedere, soprattutto in modo involontario, di andare ad inserire un importo nelle suddette caselle di testo prima di aver scelto un finanziamento nella casella combinata "ID_PROG" :

per evitare che questo accada, avevo predisposto il seguente codice inserito in ognuna delle due caselle di testo "Su modifica" :

If Len(ID_FINAN & "") = 0 Then

    Beep

    Me.Undo

End If

Ho notato che si può inserire l'importo a consuntivo prima dell'importo iniziale:

va bene lo stesso?

Proseguendo, ho già incontrato un errore:

Il codice da te scritto è il seguente:

If Me!IMPORTO_FINAN_CONS > Me!IMPORTO_FINAN_PROG And Parent.COLLAUDATO = -1 Then

    MsgBox "L'importo a consuntivo del finanziamento non può essere maggiore dell'importo del finanziamento programmato", vbInformation

    Cancel = True

    Me.Undo

Else

    MsgBox "L'economia registrata sul finanziamento scelto è di " & Format$(m, "€ " & "#,###.00"), vbInformation

End If

Non va bene l'espressione evidenziata in grassetto in quanto, così come è scritta, il programma vede solo i dati delle due caselle di testo nel solo record attivo:

If € 50,00 > € 0,00 And Parent.COLLAUDATO = -1 Then

allo stesso modo non va bene neanche la variabile "m":

m = Me!IMPORTO_FINAN_PROG - Me!IMPORTO_FINAN_CONS

=================================================================

per fare una prova, inserisci dopo la variabile "m" un msgbox per vedere il risultato che ti dà:

MsgBox m = Me!IMPORTO_FINAN_PROG - Me!IMPORTO_FINAN_CONS

=================================================================

Per risolvere devi fare la somma dell'intera colonna di entrambi i campi delle tabella FINANZIAMENTO_PROGETTI:

m = Nz(DSum("IMP_FINAN_PROGETTO", "FINANZIAMENTO_PROGETTI", "ID_PROG=" & Me!ID_PROG)) + Me.IMP_FINAN_PROGETTO _

  • Nz(DSum("IMP_FINAN_CONSUNTIVO", "FINANZIAMENTO_PROGETTI", "ID_PROG=" & Me!ID_PROG)) + Me!IMP_FINAN_CONSUNTIVO

If Nz(DSum("IMP_FINAN_CONSUNTIVO", "FINANZIAMENTO_PROGETTI", "ID_PROG=" & Me!ID_PROG)) + Me!IMP_FINAN_CONSUNTIVO > _

    Nz(DSum("IMP_FINAN_PROGETTO", "FINANZIAMENTO_PROGETTI", "ID_PROG=" & Me!ID_PROG)) + Me.IMP_FINAN_PROGETTO _

    And Parent!COLLAUDATO = True Then

    MsgBox "L'importo a consuntivo del finanziamento non può essere maggiore dell'importo del finanziamento programmato", vbInformation

    Cancel = True

    Me.Undo

Else

    MsgBox "L'economia registrata sul finanziamento scelto è di " & Format$(m, "€ " & "#,###.00"), vbInformation

End If

La mia idea comunque sarebbe stata quella, una volta entrato in ballo il segno di spunta, di dividere in due fasi l'esecuzione delle routine, cioè:

If Parent!COLLAUDATO = False Then

      usa il codice iniziale che funzionava  

Else

      usa il codice solo per il collaudo

End If

Per il momento mi fermerei qui.

Fai le dovute modifiche e verifiche e ci fai sapere.

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-30T16:55:22+00:00

Ciao Luca,

nei tuoi ragionamenti mi era sempre sfuggita la parte in cui inserisci nella casella di controllo "COLLAUDATO" della maschera "NEW_PROGETTO" il segno di spunta, magari perché l'hai chiamata sempre in maniera diversa? Boh!

Comunque, a prescindere, anche perché sinceramente non me la sento di rileggere tutti i post, credo di aver capito finalmente la tua esigenza.

Però prima di metterci le mani, mi serve chiarire un aspetto e cioè:

non essendoci il segno di spunta e l'importo del collaudo il codice si deve occupare esclusivamente dell'inserimento del o dei vari importi iniziali e non deve dare la possibilità nel frattempo di inserire nessun importo riguardante il collaudo, giusto?

Viceversa, una volta inserito il segno di spunta e l'importo del collaudo, il codice si deve occupare esclusivamente dell'inserimento del o dei vari importi a collaudo e non deve dare più la possibilità di modificare gli importi iniziali, giusto?

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-30T00:28:41+00:00

Ciao Luca,

Ciao Vladimiro

ho dato una occhiata al codice ed ho notato che hai inserito della altre variabili, in particolare y e n.

L'uso delle variabili inserite nel codice della versione 1.1 del Dbase (i e j) io le avevo interpretate in questo modo (vediamo se avevo ed ho capito!!!):

Variabile i

se RESIDUO_FINANZIAMENTO >0

i = RESIDUO_FINANZIAMENTO - IMPORTO_FINAN_PROG

altrimenti

i= IMPORTO_ASSEGNATO - IMPORTO_FINAN_PROG

Variabile j

se IMPORTO_TOT_PROGETTI >0

i = IMPORTO_PROGETTO - (IMPORTO_TOT_PROGETTI+IMPORTO_FINAN_PROG)

altrimenti

i= IMPORTO_PROGETTO - IMPORTO_FINAN_PROG

adesso io non ho ben capito come hai utilizzato le variabili yen 

Le variabili che ho inserito servono solo a snellire il codice; io le ho chiamate con una sola lettera, tu potresti dargli qualsiasi altro nome.

Ad esempio,

per sapere il valore del campo "IMPORTO_TOT_PROGETTI" della query "QRY_TOTALI_PER_PROGETTO" sapendo che la chiave esterna della query "ID_PROG" è uguale allo stesso controllo "ID_PROG" che si trova nel record della maschera in cui eseguo il codice di ricerca, mi servo della funzione Dlookup:

DLookup("IMPORTO_TOT_PROGETTI", "QRY_TOTALI_PER_PROGETTO", "ID_PROG=" & Me!ID_PROG)

A questo punto, dichiarando una variabile Long gli "consegno" la funzione Dlookup.

Dim MiaVariabile As Long

MiaVariabile=DLookup("IMPORTO_TOT_PROGETTI", "QRY_TOTALI_PER_PROGETTO", "ID_PROG=" & Me!ID_PROG)

La funzione Dlookup a differenza della funzione DCount, ricerca la prima occorrenza in tabella e se non trova nulla esce l'errore.

Purtroppo ho dimenticato di prevenire il seguente errore.

Che ho recuperato con la condizione "If" rinunciando alle variabili:

If DLookup("IMPORTO_TOT_PROGETTI", "QRY_TOTALI_PER_PROGETTO", "ID_PROG=" & Me!ID_PROG) = Parent!IMPORTO_PROGETTO And _

    Nz(DSum("IMP_FINAN_CONSUNTIVO", "FINANZIAMENTO_PROGETTI", "ID_PROG=" & Me!ID_PROG)) + _

    Me!IMP_FINAN_CONSUNTIVO = DLookup("IMPORTO_TOT_PROGETTI", "QRY_TOTALI_PER_PROGETTO", "ID_PROG=" & Me!ID_PROG) Then

    MsgBox "Il progetto corrente non necessità più di alcun finanziamento.", vbInformation

    Cancel = True

    Me.Undo

    Exit Sub

End If

If DLookup("RESIDUO_FINANZIAMENTO", "QRY_RESIDUO_DA_PROGRAMMARE", "ID_FINAN=" & Me!ID_FINAN) = 0 Then

    MsgBox "Attenzione, il finanziamento scelto è stato tutto impegnato." & _

    vbCrLf & "I dati inseriti verranno annullati.", vbInformation

    Parent!RESIDUO_FINANZIAMENTO = Null

    Cancel = True

    Me.Undo

    Exit Sub

End If

Adesso se partiamo dal presupposto che i controlli più importanti (quelli che non ci permettono di sfondare il finanziamento scelto e di coprire per intero il costo del progetto) a mio parere quando inserisco i dati a Collaudo non è necessario che si facciano tutti i controlli previsti per la fase di inserimento del progetto ma solo alcuni di cui:

1 - che l' IMPORTO_FINAN_CONS deve essere minone dell' IMPORTO_FINAN_PROG;

2 - che la somma dell' IMPORTO_FINAN_CONS per il progetto in esame deve essere uguale all' IMPORTO_COLLAUDO della tabella PROGETTI

Prima di ridurre le comodità esistenti, guarda alcune immagini:

Ahhh , giusto per la cronaca, ho provato a mettere giù una modifica al codice scritto da te ... il risultato è stato quasi un "disastro".

Ciao

Luca

Hai due possibilità:

  1. eliminare dal tuo database originale la maschera "NEW_PROGETTO" e la sottomaschera "Sottomaschera FINANZIAMENTO_PROGETTI" ed importarle prelevandole dalla demo
  2. copiarti l'intero codice della maschera e della sottomaschera della demo: Modifica/Seleziona tutto/Copia;

spostarti in ogni stessa singola maschera del database originale: Modifica/Seleziona tutto/Incolla.

PS: per le prove ho utilizzato il DB Programmazione 1.2

Sarà, ma a parte l'errore iniziale che adesso ho eliminato, non ho avuto mai nessun tipo di problema.

Ho sostituito la demo che puoi scaricare qui dallo stesso percorso.

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-29T13:38:45+00:00

Ciao Luca, è molto strano quello che mi dici.

Su un progetto nuovo è vero in quanto ho dimenticato, per la parte consuntiva, di mettere lo stesso codice che hai detto di aver capito, andando a modificare naturalmente la casella di testo pertinente.

Per il resto mi pare strano in quanto a me non dava assolutamente errore.

Purtroppo ora non posso aiutarti in quanto non mi trovo a casa e probabilmente neanche stasera per via di un impegno.

Speriamo domani, tu intanto lavora sempre con l'ultima demo 1.2

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-29T06:52:25+00:00

Ciao e buongiorno Vladimiro

Purtroppo qui si danno, più che altro, delle brevi risposte e non ci si può certo addentrare in un progetto vero e proprio altrimenti certo che si poteva fare e sarebbe stato certamente un lavoro più pulito e soprattutto più sicuro in termini di errori dovuti ad inserimenti manuali.

Lo credo bene Vladimiro, diciamo che potrebbe essere oggetto di futura discussione quando avrò pensato e capito come strutturare e implemenatare questo DB con anche i dati finanziari proveniente dal DB Oracle.

Un ultima cosa, perché li vuoi tenere insieme nella stessa maschera  "IMP_FINAN_PROGETTO"  e***"IMP_FINAN_CONSUNTIVO" ?***

non è stata una scelta voluta e studiata se non fosse solo per il fatto che posso avere a controndo i due dati per una lettura a video più immediata. Se ritieni e pensi che sia meglio dividere questi due elementi non ci sono problemi!!!

Se ritieni che non si debba toccare nulla penserei di quantificare sempre il tutto a video lasciandoti però la possibilità, nel momento in cui a consuntivo mancano ancora delle somme, di inserire i valori solo nella caselle di testo***"IMP_FINAN_CONSUNTIVO".***

in merito a questo puntoi, sinceramente, non ho ben capito cosa intendi nel caso in cui la maschera dovesse essere quella attuale. In fondo quando si collauda il progetto io devo inserire la quota di finanziamento utilizzato e questo, se scartiamo l'ipotesi di collegare il DB di Oracle, lo devo fare a mano appunto a video, così come inserisco i dati di "IMP_FINAN_PROGETTO" in sede di previsione progettuale.

Spero di averti dato le risposte che cercavi

Luca

Ciao Luca,

ho fatto in tempo a prepararti una demo che puoi scaricare qui

Attenzione alle modifiche apportate.

Spero di aver centrato l'obiettivo :-)

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-28T21:07:53+00:00

Ciao Luca,

come già ricordato da te, io non ho mai preso in considerazione l'altra casella di testo riguardante il consuntivo per cui è normale quello che accade.

Dunque, entra in ballo la somma della casella di testo "IMP_FINAN_CONSUNTIVO" dove tu inserisci man mano la spesa reale sostenuta che può differire dalla somma della casella di testo "IMP_FINAN_PROGETTO" preventivata man mano.

Domanda,

  1. non sarebbe giusto che in "IMP_FINAN_CONSUNTIVO" ci andasse automaticamente la spesa sostenuta senza il bisogno di aggiungerla manualmente?

Iniziamo da qui, altrimenti mi perdo.

Vladimiro

ciao Vladimiro,

vedo che hai colto nel segno del problema.

In realtà ti avevo accennato che volevo una tua consulenza per la realizzazione di un dbase più complesso. 

Si tratta infatti di un progetto che volevo implementare affinchè potessi avere sotto controllo ogni singola spesa di ogni progetto inserito nel dbase che stiamo discutendo.

Il problema stà nel fatto che la gestione dei pagamenti nella struttura della mia azienda la gestiste un altro ufficio con software diversi su base dati di oracle. 

In modo semplificato posso avere la somma delle spese di ogni  singolo progetto, però questi dati vengono aggregati non per IDProgetto ma per Capitolo e Anno, per impegni e sub-impegni e per mandati di pagamento (Vedi immagine).

  • ogni progetto ha un suo capitolo (a volte anche più di uno)
  • ogni capitolo ha più impegni (difficilmente solo uno)
  • ogni impegno ha più sub-impegni
  • e ogni impegno e sub-impegno ha un o più mandati

La somma di tutti i mandati rappresenta il valore del campo "IMPORTO_COLLAUDO" della tabella Progetto.

Mentre il valore "IMP_FINAN_CONSUNTIVO" potrebbe non essere uguale qualora ci siano più finanziamenti per lo stesso progetto per cui è necessario suddividere l' "IMPORTO_COLLAUDO" indicando quanto incide su di un finanziamento e quanto incide sugli altri finanziamenti che hanno concorso alla realizzazione del progetto mediante, appunto la compilazione del campo "IMP_FINAN_CONSUNTIVO"

La cosa diventerebbe interessante ma molto complessa, per cui ho optato di inserire manualmente l'ammontare complessivo delle spese sostenute a collaudo del progetto (a spese concluse e progetto collaudato).

Questa ultima soluzione mi è sembrata la strada più veloce per utilizzare il Dbase che ho (abbiamo) sviluppato per avere sotto controllo i finanziamenti.

Spero di averti fornito i chiarimenti che mi hai chiesto

Ciao Luca

Ciao Luca,

ok, ho capito.

Purtroppo qui si danno, più che altro, delle brevi risposte e non ci si può certo addentrare in un progetto vero e proprio altrimenti certo che si poteva fare e sarebbe stato certamente un lavoro più pulito e soprattutto più sicuro in termini di errori dovuti ad inserimenti manuali. 

Un ultima cosa, perché li vuoi tenere insieme nella stessa maschera  "IMP_FINAN_PROGETTO"  e  "IMP_FINAN_CONSUNTIVO" ?

Se ritieni che non si debba toccare nulla penserei di quantificare sempre il tutto a video lasciandoti però la possibilità, nel momento in cui a consuntivo mancano ancora delle somme, di inserire i valori solo nella caselle di testo "IMP_FINAN_CONSUNTIVO".

Fammi sapere.

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-28T16:10:47+00:00

Faccio un esempio:

se ho un finanziamento di € 50.000,00 che finanzia un progetto (o più progetti) ed a termine del progetto (o più di uno) ho speso meno di quanto preventivato (esempio € 49.900,00) avrei a disposizione sul finanziamento di € 50.00,00 ancora 100 da utilizzare per il finanziamento o cofinanziamento di un nuovo progetto non compreso nella programmazione iniziale.

Il codice scritto da Vladimiro (come detto per mia disattenzione nel valutare eventuali problemi) esegue dei controlli in sede di programmazione iniziale dei progetti finanziati con quelle determinate risorse (fase di programmazione e non di consuntivo) per cui il codice, giustamente, mi restituisce il seguente messaggio (vedi figure sotto)

Ciao Luca,

come già ricordato da te, io non ho mai preso in considerazione l'altra casella di testo riguardante il consuntivo per cui è normale quello che accade.

Dunque, entra in ballo la somma della casella di testo "IMP_FINAN_CONSUNTIVO" dove tu inserisci man mano la spesa reale sostenuta che può differire dalla somma della casella di testo "IMP_FINAN_PROGETTO" preventivata man mano.

Domanda,

  1. non sarebbe giusto che in "IMP_FINAN_CONSUNTIVO" ci andasse automaticamente la spesa sostenuta senza il bisogno di aggiungerla manualmente?

Iniziamo da qui, altrimenti mi perdo.

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-08-27T16:43:25+00:00

Ciao a tutti,

sono di nuovo qua, dopo una breve vacanza, per riprendere e portare a teermine il mio progetto Dbase per la gestione della programmazione di interventi.

Al momento, grazie al prezioso aiuto di Vladimiro, il dbase  funziona correttamente eseguendo i controlli necessari per evitare errori. La fasi di primo inserimento avviene in modo lineare e preciso, purtroppo, quando Vladimiro ha scritto il codce VBA non ho tenuto conto e quindi riportato allo stesso Vladimiro, che la programmazione si rietiene conclusa quando un finanziamento è completamente utilizzato.

Ciò avviene, di solito, quando tutti i progetti programmati e finanziati arrivano alla loro conclusione con l'esattezza dell'importo speso per la loro realizzazione (consuntivo).

Nello stato dell'arte in cui è il mio dbase adesso, grazie ai controlli inseriti mediante codice VBA da Vladimiro, non riesco a completare questa fare si inserimento dati a consuntivo.

In pratica quando il progetto è giunto alla sua ultimazione devo inserire l'importo complessivamente speso per la realizzazione del progetto e apporre una spunta di progetto collaudato, questo fa si, mediante query, di determinare la programmazione complessiva dei finanziamenti.

Faccio un esempio:

se ho un finanziamento di € 50.000,00 che finanzia un progetto (o più progetti) ed a termine del progetto (o più di uno) ho speso meno di quanto preventivato (esempio € 49.900,00) avrei a disposizione sul finanziamento di € 50.00,00 ancora 100 da utilizzare per il finanziamento o cofinanziamento di un nuovo progetto non compreso nella programmazione iniziale.

Il codice scritto da Vladimiro (come detto per mia disattenzione nel valutare eventuali problemi) esegue dei controlli in sede di programmazione iniziale dei progetti finanziati con quelle determinate risorse (fase di programmazione e non di consuntivo) per cui il codice, giustamente, mi restituisce il seguente messaggio (vedi figure sotto)

Non riesco e non sono in grado di scrivere un codice VBA che possa saltare i controlli che esegue in fase di predisposizione del programma.

Chi può darmi una mano in tal senso?

Grazie

Luca

PS: Anche in fase di inserimento dei dati a consuntivo il codice VBA dovrebbe fare dei controlli per la correttezza dei dati inseriti e per far si che alcuni parametri non vengano violati.

Grazie mille in anticipo

Luca

Ciao Luca,

ho scaricato la demo però non ho capito bene la tua esigenza.

A questo punto anche il finanziamento può essere ampliato allora?

Forse è meglio che poni una domanda la volta continuando ad inserire sia l'esempio che la risposta :-)

Vladimiro

La risposta è stata utile?

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

25 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-08-24T16:46:03+00:00

    Ciao Luca,

    colgo l'occasione per dirti che all'ultimo tuo thread avevo aggiunto una riflessione sperando in una tua risposta che non è arrivata :-)

    Purtroppo io fino a Lunedì non ci sono, se non ricevi risposta da nessuno provero' a farlo io.

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento