mercoledì 22 aprile 2015

crystal report sum field string

Se vogliamo fare la somma di un campo che sul database è impostato come string,  dobbiamo seguire una particolare procedura.

Il primo step, o meglio passaggio è quello di trasformare il campo string in numero, per questo dobbiamo creare un campo formula.

Dalla finestra esplora campo, facciamo click sulla voce di menu "Campi Formula" e si crea un campo (es. Totale o importo ). (figura 1)
Figura 1


A questo punto si crea la funzione che trasformi il campo in numerico, tasto destro sul nome del campo e click sulla voce "Modifica".
Nella finestra delle formule scriviamo la seguente formula


if not isnull({NomeTabella.Campo}) then
     ToNumber({NomeTabella.Campo})
else
0

In questo modo se non è null tramite la funzione ToNumber trasforma il valore in numero, altrimenti restituisce 0.

Salviamo il tutto.

Nella sezione di raggruppamento facciamo click con il tasto destro e nella voce di menu, selezioniamo la voce "Inserisci" e poi riepilogo.
A questo punto nella finestra che viene aperta, selezioniamo come campo quello della formula (Totale) mentre come formula quello relativo alla Somma (figura 2).
Figura 2

A questo punto nel report avremmo un campo di tipo formula, su un campo di testo trasformato in numerico.

2 commenti:

  1. Ciao come sempre ti faccio i complimenti per i tuoi articoli
    che spaziano dai diversi linguaggi di programmazione a strumenti di reportistica come crystal reports.
    Se posso permettermi ti riporto come con la sintassi basic
    anni fa avevo fatto la formula a mio parere per
    chi utilizza vb e Crystal più flessibile in quanto alla formula
    puoi aggiungere ulteriori operazioni per modificare il dato

    dim nNumero as double
    dim nCoefficiente as double

    nCoefficiente = 1.05
    if not isnull({NomeCampoTesto}) then
    nNumero=ToNumber({NomeCampoTesto})
    else
    nNumero=0
    end if
    formula = nNumero * nCoefficiente

    RispondiElimina
  2. Ottimo spunto.
    Grazie per aver condiviso il frammento di codice.

    RispondiElimina