ARROTONDAMENTO e FORMATTAZIONE CAMPO

di il
8 risposte

ARROTONDAMENTO e FORMATTAZIONE CAMPO

Buongiorno a tutti sono un nuovo icritto neofita di Access e vi stresso subito con un problema che non so assolutamente come risolvere.
Ho realizzato un DB e non riesco a capire come devo impostare un campo perchè mi restituisca un importo arrotondato all'unità superiore.
Mi spiego meglio: Il conteggio di due campi di una tabella mi riporta come totale esempio € 100,15 ed io ho necessità che il campo divenga € 116,00 sia, cioè, attotondato all'unità prossima superiore.
Ho provato con Round ma questa funzione arrotonda in base ai decimali ( 100,15 = 100,00 - 100,51 = 101,00) e non va bene.
Ho letto vari articoli su diversi forum ma non sono riuscito a capirne niente.
Inoltre mi sapete spiegare perchè il formato di un campo la cui origine è data da una condizione Iif, pur essendo impostato come Euro mi restituisce un valore numerico?
Origine controllo= Iif(IsError[NOMECAMPO];"0";[NOMECAMPO])
formato = Euro; Posizioni decimali = Automatiche
Se sul campo vi è un errore mi restituisce 0 (zero) anzichè € 0,00, mentre se il valore del campo è corretto mi restituisce l'importo in Euro.
Potete aiutarmi?
Grazie

8 Risposte

  • Re: ARROTONDAMENTO e FORMATTAZIONE CAMPO

    Io uso questa mia Funzione per gestire gli arrotondamenti:
    Function Arrotonda(ByVal NumIn As Variant, _
                       Optional AlDecimale As Integer = 2, _
                       Optional Eccesso As Boolean = True) As Variant
        
         ' [NumIn]           Numero in ingresso
         ' [AlDecimale]      Numero di decimali al quale arrotondare.
         ' [Eccesso]         True=Eccesso / False=Difetto
         Dim varNum      As Variant  'Variabile
         Dim varIn       As Variant  'Numero valutato
         Dim sgnInc      As Single   'Numero di incremento per l'ECCESSO
              'Controllo la validità del Numero
         If IsNumeric(NumIn) Then
               ' Converto in DECIMAL per la precisione(14Byte)
               varIn = CDec(NumIn)
         Else
               varIn = 0
         End If
    
         ' Il 5° decimale è per assicurare l'arrotondamento commerciale(4° decimale)
         ' Se ECCESSO=True  --->(+ 0.99999)
         ' Se ECCESSO=False --->(0)
         sgnInc = Abs(Eccesso) * 0.99999
         varNum = Abs(varIn)
             'Arrotondo e recupero il segno dopo l'arrotondamento
         varNum = (Fix(varNum * (10 ^ AlDecimale) + sgnInc) / (10 ^ AlDecimale))
         Arrotonda = Sgn(varIn) * varNum
    End Function
    Ora se quel 100.15 deve diventare 101.00 allora ti basta chiamarla mettendo ZERO come numero di DECIMALI... di DEFAULT arrotonda per Eccesso...
    Ovviamente la devi usare su BEFOREUPDATE dei dati e lo dovrai gestire nelle maschere di interfaccia...!
  • Re: ARROTONDAMENTO e FORMATTAZIONE CAMPO

    Inoltre mi sapete spiegare perchè il formato di un campo la cui origine è data da una condizione Iif, pur essendo impostato come Euro mi restituisce un valore numerico?
    Origine controllo= Iif(IsError[NOMECAMPO];"0";[NOMECAMPO])
    Devi togliere gli apici vicino allo zero
  • Re: ARROTONDAMENTO e FORMATTAZIONE CAMPO

    bogus ha scritto:


    Inoltre mi sapete spiegare perchè il formato di un campo la cui origine è data da una condizione Iif, pur essendo impostato come Euro mi restituisce un valore numerico?
    Origine controllo= Iif(IsError[NOMECAMPO];"0";[NOMECAMPO])
    Devi togliere gli apici vicino allo zero
    Elementare Watson!
    grazie tante
  • Re: ARROTONDAMENTO e FORMATTAZIONE CAMPO

    @Alex ha scritto:


    Ora se quel 100.15 deve diventare 101.00 allora ti basta chiamarla mettendo ZERO come numero di DECIMALI... di DEFAULT arrotonda per Eccesso...
    Ovviamente la devi usare su BEFOREUPDATE dei dati e lo dovrai gestire nelle maschere di interfaccia...!
    Grazie per la risposta, ma non ti mettere a ridere per quello che leggerai di seguito.
    Quel poco che so l'ho imparato navigando in rete, non sono all'A B C ma sono ancora alla A
    Ti riepilogo, in breve, cosa dovrei fare.
    sono un commercialista e mi sto preparando un DB per poter fare le fatture.
    Ho creato una maschera chiamata "CLIENTI" che prende i valori di "NOMINATIVO" e "ONORARIO" dalla tabella "CLIENTI"
    A questa maschera ho associata una sotto maschera chiamata "SPESE" che attinge i valori "SPESA" e ONORARIO" dall'omonima tabella "SPESE"
    Per poter fare la fattura è necessario calcolare l'IVA ed altre cose.
    Quindi nel piè di pagina della maschera "CLIENTI" ho inserito una casella di testo chiamata "IMPONIBILE" che prende il valore dalla somma dei campi "ONORARIO" della tabella CLIENTI e "SPESE" e "ONORARIO" della sotto maschera "SPESE".
    Fin qui tutto bene.
    Tramite un'altra casella di testo aggiungo l'IVA e quindi determino il valore della fattura.
    Per esigenze di pagamento, dovrei fare in modo che il totale della fattura risulti sempre di cifra pari ad esempio se il tot. fattura è 101,15, creo un'altra casella di testo che chiamo "TOTALE_FATTURA" la quale, tramite la funzione che mi hai gentilmente inviato, dovrebbe dare come risultato 102,00 (quindi il valore arrotondato) e quindi creo una nuova casella "ARROTONDAMENTO" di 0.85 (102,00-101.15) per far in modo che, sul documento venga visualizzata l'intera procedura di calcolo.
    Come ti ho detto sono ancora alla "A" e quindi quello che per te è normale amministrazione per me è arabo.
    Ho inserito il codice che mi hai inviato direttamente in Visual Basic come funzione in before update della casella "TOTALE_FATTURA" ed ho inserito il seguente codice (sicuramente sbagliato perché non so quali parametri indicare)
    Private Sub TOTALE_FATTURA_BeforeUpdate(Cancel As Integer)
    arrotonda
    End Sub
    sono andato nell'origine di controllo digitando = arrotonda([TOTALE_FATTURA[), ma anche qui nulla.
    In altre parole non riesco a capire come utilizzare il codice che mi hai inviato.
    Scusa se ti rompo e capisco se non vorrai rispondermi.
    In ogni caso grazie ugualmente
    Giorgio
  • Re: ARROTONDAMENTO e FORMATTAZIONE CAMPO

    Come si chiama il tuo campo che ti da 101,15 e che vuoi arrotondare
  • Re: ARROTONDAMENTO e FORMATTAZIONE CAMPO

    TOTALE = onorario+spese+Iva (totale 100.15)
    TOTALE_ARROTONDATO è il campo che deve arrotondare il valore di TOTALE e che deve diventare 102.00
    A questo punto creo la casella ARROTONDAMENTO che è uguale A TOTALE_ARROTONDATO meno TOTALE quindi 0.85
    nel repot FATTURA faccio stampare i campi IMPONIBILE, IVA, ARROTONDAMENTO E TOTALE_ARROTONDATO
    Ti ringrazio ancora per la disponibilità
    Giorgio
  • Re: ARROTONDAMENTO e FORMATTAZIONE CAMPO

    Ce ne hai messo di tempo per rispondere.
    Se non sai ancora usare l'ottima soluzione di Alex, per il tuo caso potrebbe bastare questa formula:
    = iif([TOTALE] > int([TOTALE]); int([TOTALE]) +1; [TOTALE]) 
    da mettere in origine controllo di [TOTALE_ARROTONDATO], se non è un controllo associato.
    Fai sapere.
  • Re: ARROTONDAMENTO e FORMATTAZIONE CAMPO

    bogus ha scritto:


    Ce ne hai messo di tempo per rispondere.
    Se non sai ancora usare l'ottima soluzione di Alex, per il tuo caso potrebbe bastare questa formula:
    = iif([TOTALE] > int([TOTALE]); int([TOTALE]) +1; [TOTALE]) 
    da mettere in origine controllo di [TOTALE_ARROTONDATO], se non è un controllo associato.
    Fai sapere.
    Come avrai certamente visto ho un'attività che mi occupa gran parte della giornata e, quindi, dedico alla realizzazione del DB i ritagli di tempo.
    Potessi vivere di rendita.
    Ti ringrazio per l'istruzione che mi hai mandato che funziona alla grande.
    Ciao e grazie di nuovo
Devi accedere o registrarti per scrivere nel forum
8 risposte