X ghost, Calolo IPT

di il
14 risposte

X ghost, Calolo IPT

Molte grazie per il codice inviato funziona benissimo.

14 Risposte

  • Re: X ghost, Calolo IPT

    Sono contento di averti aiutato.
    Comunque, sarebbe meglio iniziare a lavorare con i database. Riusciresti ad ottenere una cosa piu' flessibile ed elegante.
  • Re: X ghost, Calolo IPT

    ghost ha scritto:


    sono contento di averti aiutato.
    Comunque, sarebbe meglio iniziare a lavorare con i database. Riusciresti ad ottenere una cosa piu' flessibile ed elegante.
    Ciao, questo programma è in funzione da circa 3 anni, sinceramente rifarlo un ex novo è un pò con database non è che mi alletta tanto,inquanto ho iniziato che di coputer non ne capivo una mazza,piano piano leggendo sui libri soro riuscito da prima a fare quel programma con excel poi sono passato in vb, di volta in volte ora si tratta di apportare alcune modifiche. Un giorno proverò a farlo con il database.
    Approfitto della tua bravura e cortesia per risolvere un ultimo problema, che, tra l'altro è già in rete.
    nella precedente richesta di aiuto propabilmente sono stato troppo lungo nella spigazione e quindi noioso,ora provo a essere più sititetico.
    Arrotondamento eccesso-difetto VB
    Oggetti
    1 Oggetto = txtRavvedimentoOperoso
    2 Oggetto = txtInteressiMoratori
    3 Oggetto = txtTotale
    esempi di arrotondamento in difetto sul totale
    -IPT = 150,81
    -RavOper = 45,24
    -InterMorat = 2,10
    Totale = 198,15

    IPT =150,81
    RavOper = 45,19 (-0,05)
    InterMorat= 2,00 (-0,10)
    Totale =198,00 (-0,15)


    Grazie dell'aiuto, spero di essere stato più chiaro e sintetico.
  • Re: X ghost, Calolo IPT

    Ciao,

    se non mi ricordo male, Vb utilizza le funzioni CInt(Espressione), cLng(Espressione) per eseguire l'arrotondamento.

    Ti allego un esempio, spero sia quello che cerchi
    
        Dim lngRisultato1 As Long
        Dim lngRisultato2 As Long
        Dim dblValore1 As Double
        Dim dblValore2 As Double
    
        dblValore1 = 3.49
        dblValore2 = 4.57
        
        lngRisultato1 = CLng(dblValore1)
        lngRisultato2 = CLng(dblValore2)
        
        'lngRisultato1 contiene 3
        'lngrisultato2 contiene 5
    
  • Re: X ghost, Calolo IPT

    ghost ha scritto:


    Ciao,

    se non mi ricordo male, Vb utilizza le funzioni CInt(Espressione), cLng(Espressione) per eseguire l'arrotondamento.

    Ti allego un esempio, spero sia quello che cerchi
    
        Dim lngRisultato1 As Long
        Dim lngRisultato2 As Long
        Dim dblValore1 As Double
        Dim dblValore2 As Double
    
        dblValore1 = 3.49
        dblValore2 = 4.57
        
        lngRisultato1 = CLng(dblValore1)
        lngRisultato2 = CLng(dblValore2)
        
        'lngRisultato1 contiene 3
        'lngrisultato2 contiene 5
    
    Ciao... grazie per la tua pazienza,come sicuramente avrai gia capito
    sono un autodidatta con manie di grandezza, pero mi appassiona il linguaggio vb.Ora provo ad adattare il tuo consiglio al programma
    poi ti farò sapere.
    Grazie di nuovo.
  • Re: X ghost, Calolo IPT

    Ciao carissimo ghost sono al corrente delle funzioni del tipo CLng – CStr – CInt ecc.,
    evidentemente per essere troppo sintetico onde evitare di essere noioso nella spiegazione,
    ho finito d’essere poco comprensibile. I valori da te citati, dblValore1 = 3.49 e dblValore2 = 4.57
    non sono numeri fissi ma gli oggetti cmIpt , txtRavvedimentoOperoso , txtInteressiMorattori, cboEmonumenti e cboImpostaDiBollo sono Variabili, come dal codice sotto menzionato

    Private Sub cboImpostaDiBollo_LostFocus()
    Frame14.Caption = \"--------TOTALE-------\"

    ‘=====Totale senza arrotondamento obbligatorio trascriverlo==
    txtTotale.Text = CStr((cmIpt.Text) * 1 + _
    (txtRavvedimentoOperoso.Text) * 1 + (txtInterMorat.Text) * 1 + _
    (cboEmonumenti.Text) * 1 + (cboImpostaDiBollo.Text) * 1)

    ‘ ==========arrotondamentoX eccesso================
    If (CStr(txtTotale.Text) <= 0.49) Then
    txtTotale.Text = Round((cmIpt.Text) * 1 + _
    (txtRavvedimentoOperoso.Text) * 1 + (txtInterMorat.Text) * 1 + _
    (cboEmonumenti.Text) * 1 + (cboImpostaDiBollo.Text) * 1)

    Else
    ‘ ==========arrotondamentoX difetto================
    If (CStr(txtTotale.Text) >= 0.49) Then
    txtTotale.Text = Round((cmIpt.Text) * 1 + _
    (txtRavvedimentoOperoso.Text) * 1 + (txtInteressiMorattori.Text) * 1 + _
    (cboEmonumenti.Text) * 1 + (cboImpostaDiBollo.Text) * 1)

    End If
    End If

    End sub
    ‘=======================================
    Nella Circolare del Ministro dei Trasporti, l’arrotondamento non deve scomparire ma dovrebbe essere conteggiato (tolto o aggiunto) negli oggetti txtRavvedimentoOperoso e txtInteressiMorattori, come da esempio qui sotto:

    Se non ci sono sanzioni 150,81 arrotondato 151,00 (questo con il codice sopra citato ci sono riuscito).

    Se ci sono sanzioni ;
    es. Per difetto
    cmIpt +150,81
    txtRavvedimentoOperoso + 45,24
    txtInteressiMorattori + 2,10
    -------------------------------------------
    txtTotale =198,15
    *****************************
    cmIpt +150,81
    txtRavvedimentoOperoso + 45,19(-0,05) non riesco
    txtInteressiMorattori + 2,00(-0,10) non riesco
    ---------------------------------------------------
    txtTotale =198,00(-0,15) arrotondamento riuscito

    Nel caso di difetto, il totale che compare nel txtTotale 198,15 è arrotondato a 198,00, l’eccesso di 0,15 cent. dovrebbe essere detratto - 0,10 cent al txtInteressiMorattori perché txtInteressiMorattori andrebbe sotto ai 2,00 Euro e, i rimanenti 0,05 cent andrebbero essere tolti al txtRavvedimentoOperoso.
    =====================

    es. Per eccesso
    cmIpt +199,35
    txtRavvedimentoOperoso + 59,80
    txtInteressiMorattori + 5,45
    -------------------------------------------
    txtTotale =264,60
    *****************************
    cmIpt +199,35
    txtRavvedimentoOperoso + 59,80
    txtInteressiMorattori + 5,45(+0.40) non riesco
    ---------------------------------------------------
    txtTotale =265,00(+0,40)arrotondamento riuscito

    Come noterai, nell’esempio per eccesso, il totale che compare nel txtTotale 264,60 è arrotondato a 265,00, l’eccesso di 0,40 cent. deve essere aggiunto al txtInteressiMorattori.

    Per quanto riguarda il databaseho provato a progettarlo ma mi sono fermato al momento di caricare il database sul form con l'oggetto CommonDialog e ViewList, ma questa è un'altra storia, se vuoi nu altro giorno ci faremo due chiacchiere.

    Spero di essere stato più chiaro e mi scuso per la noiosità della spiegazione, ti ringrazio per la gentile pazienza e per il tempo che mi dedichi.
  • Re: X ghost, Calolo IPT

    Ciao,

    allora, un consiglio, lavorare con le stringhe, per eseguire calcoli numerici puo' portare a delgi errori di elaborazione non facili da trovare.

    Ecco come potresti scrivere il tutto...
    
    
    Dim dblTotale As Double, dblTotArrotondato As Double
    Dim dblIPT As Double, dblRavvOp As Double
    Dim dblInterMorat As Double, dblEmonumenti As Double, dblImpostaDiBollo As Double
    
    On Error GoTo ErrHandle
    
    'Inserisco i valori nelle variabili
    'Se il cast fallisce allora genero un erorre
    dblIPT = CDbl(cmIpt.Text)
    dblRavvOp = CDbl(txtRavvedimentoOperoso.Text)
    dblInterMorat = CDbl(txtInterMorat.Text)
    dblEmonumenti = CDbl(cboEmonumenti.Text)
    dblImpostaDiBollo = CDbl(cboImpostaDiBollo.Text)
        
    'Calcolo il totale (non arrotondato)
    dblTotale = dblIPT + dblRavvOp + dblInterMorat + dblEmonumenti + dblImpostaDiBollo
    'Risultato arrotondato (tronco a 2 decimali dopo la virgola
    dblTotArrotondato = Round(dblToale, 2)
    
    'Ora visualizzo nel campo di testo txtTotale.Text il valore arrotondato
    ' e nelle parentesi il valore non arotondato
    txtTotale.Text = CStr(dblTotArrotondato) & \" (\" & CStr(dblTotale) & \")  \" 
    Exit Sub
    
    ErrHandle:
        MsgBox \"Un valore inserito non e' valido\"
    
    Cosi' dovrebbe andare...
  • Re: X ghost, Calolo IPT

    Ciao,

    Infatti avevo capito che dovevo lavorare con le stringhe, infatti ci avevo provato con scarsi riseltati che ovviamente non ti faccio vedere perchè non hanno un nesso logico.

    Ora le provo poi ti farò sapere. Grazie di tutto.
  • Re: X ghost, Calolo IPT

    Ciao,

    Ho trascritto il codice,che mi hai inviato,mi da errore nella stringa \"dblTotArrotondato = Round(dblToale, 2)\"(dblToale)variabile non definita.
    Ho provato aggiungendo al tuo codice \"dblTotArrotondato = CDbl(txtTotale.Text)\":
    'Inserisco i valori nelle variabili
    'Se il cast fallisce allora genero un erorre
    dblIPT = CDbl(cmIpt.Text)
    dblRavvOp = CDbl(txtRavOperoso.Text)
    dblInterMorat = CDbl(txtInterMorat.Text)
    dblEmonumenti = CDbl(cboEmonumenti.Text)
    dblImpostadDiBollo = CDbl(cboImpostadDiBollo.Text)
    dblTotArrotondato = CDbl(txtTotale.Text)
    Avendo per tutta risposta lo stesso risultato, come mai?

    Grazie.
  • Re: X ghost, Calolo IPT

    Ciao
    Correggo quanto precedentemente scritto,l'errore lo dava,per un errore di trascrizione del codice \"dblTotArrotondato = Round(dblToale, 2)ansiche dblTotArrotondato = Round(dblTotale, 2), corretta la parola \"dblTotale\" tutto funziona, però non arrotondaal centesimo superiore o inferiore il codice che attoronda è quello scritto da me:
    txtTotale.Text = Round((cmIpt.Text)+ _
    (txtRavOperoso.Text) + (txtInterMorat.Text) + _
    (cboEmonumenti.Text) + (cboImpostadDiBollo.Text) )

    Il tuo funziona ma non arrotonda al centesino e nel caso di eventuali sanzioni, i centesimi arrotondati nel Totale, non influiscono come dovrebbero, nelle sanzioni.
  • Re: X ghost, Calolo IPT

    Ciao,

    scusa la mia ignoranza, ma non capisco dove e' il problema. Sai come deve essere la formula del calcolo. Hai le condizioni, parti da quello no...

    Una precisione, NON devi lavorare con le stringhe ma casomai il contrario, ovvero trasformare il contenuto di una text box o combo box (che sono valori stringa) in valori numerici onde evitare casini, difficili da trovare.

    Nel codice che ho postato ci saranno senz'altro dei errori di sintassi perche' non ho utilizzato VB per scriverlo.
  • Re: X ghost, Calolo IPT

    ghost ha scritto:


    Ciao,

    scusa la mia ignoranza, ma non capisco dove e' il problema. Sai come deve essere la formula del calcolo. Hai le condizioni, parti da quello no...

    Una precisione, NON devi lavorare con le stringhe ma casomai il contrario, ovvero trasformare il contenuto di una text box o combo box (che sono valori stringa) in valori numerici onde evitare casini, difficili da trovare.

    Nel codice che ho postato ci saranno senz'altro dei errori di sintassi perche' non ho utilizzato VB per scriverlo.

    Ciao,

    Non volevo stuzzicare la tua suscettibilità, lungi da me la presunzione di esse un esperto in vb e poi se qui c’è un ignorante quello sono io, non certo tu, mi scuso se ti ho dato questa impressione.
    Venendo all’argomento, capisco bene che hai ragione tu nel trattare il programma nel modo in cui suggerisci, il codice che cortesemente hai inviato l’ho trascritto e funziona perfettamente. Quello che manca e che non riesco a fare sia con il mio, O con il tuo codice è, nel caso di ravvedimento operoso, l’arrotondamento del totale “es. 228,64 arrotondato a 229,00 Euro”, i 0,64Cent., devono essere aggiunti e quindi comparire nell’oggetto Ravvedimento Operoso, “es.54,24 +0,64 =54,88”. Questo perché? Perché quando devo inserire al terminale i dati del passaggio di proprietà di un autoveicolo, se le cifre sono discordanti con il terminale, lui mi da errore, pertanto devo fare i conteggi a mano facendo perdere tempo all’utenza. Ecco il moti per cui mi sono imbarcato in questa avventura.

    Grazie di nuovo, e scusa del malinteso.
  • Re: X ghost, Calolo IPT

    Ciao,

    non volevo essere polemico... sta il fatto che non ho capito il tuo problema...

    se posso aiutarti in qualche modo lo faccio piu' che volentieri... basta chiedere

    nel codice avevco scritto:

    dblTotArrotondato = Round(dblTotale, 2)
    cosi' facendo arrotondo solo il totale, nella formaula dovresti scrivere

    dblTotArrotondato = Round(dblIpt) + dbl.... (il resto delle variabili)
    cosi' arrotondi solo l'ipt poi esegui tutti i calcoli...
  • Re: X ghost, Calolo IPT

    Ciao al ghost il grande:D

    Ho sostituito il mio con il Tuo codice e funziona correttamente, in effetti il Tuo è più tecnico e esteticamente più bello.
    Però il problema insormontabile rimane lo stesso,ora provo a spiegami meglio sperando di essre chiaro.
    Tuo codice;
    "Calcolo il totale (non arrotondato)
    dblTotale = dblIPT + dblRavvOp + dblInterMorat + dblEmonumenti + dblImpostaDiBollo"
    Con la formula qui sopra enunciata avrei nel totale ad esempi euro 229,24.

    "Risultato arrotondato (tronco a 2 decimali dopo la virgola
    dblTotArrotondato = Round(dblToale, 2) "
    Grazie alla finzione Round nel totale avrò 229,00 (d’accordo?), i 24 centesimi non devono sparire ma devono essere aggiunti al l’oggetto txtInterMorat o alla stringa dblInterMorat. Come fare?
    Grazie di nuovo per la tua paziente cortesia.
  • Re: X ghost, Calolo IPT

    O finalmente sei stato chiaro

    non mi ricordo se esistono funzioni per il ritorno del resto. Si ci sarebbe la funzione MOD che ritorna il resto intero di una divisione, ma credo questo non sia il tuo caso.

    Una soluzione che mi viene in meste e' la seguente:

    Supponiamo che nella variabile dblTotale hai una valore pari a 3,67

    Ora te serve il totale arrotondato. Dunque hai una variabile dblTotArr = Round(dblTotale) e ottieni il 4.

    A te serve anche i 67 centesimi.

    dunque in una variabile di tipo integer intCentesimi eseguo il calcolo

    intCentesimi = dblTotale - Int(dblTotale)

    la funzione Int ritorna il valore Intero non arrotondato:)

    Se ti serve qualche consiglio e hai a disposizione ICQ il mio ID e' 100492622 (Sono online dalla 8:00 alle 16:00 dal lunedi' al venerdi')
Devi accedere o registrarti per scrivere nel forum
14 risposte