Stringa riepilogativa di record a pie di report

martedì 14 marzo 2006 - 12.47

misterwolf Profilo | Newbie

come convertire una serie di record in una stringa da utilizzare in page footer in un campo note del report?

freeteo Profilo | Guru

ciao,
mi sa che quello che vuoi fare tu non è molto facile con "drag&drop" ovvero non ci sono funzioni o componenti gia di standard per farlo.
Pero' puoi lavorare con le varibili del report, ad esempio:
- nella sezione dettagli metti giu 1a formula (che sopprimerai per evitare di veder 1 valore che non ti serve" dove dichiari 1a variabile che ti mostra i campi che stamperai infondo:

shared stringvar xRiepilogo := shared stringvar xRiepilogo + "," + {miocampo};
xRiepilogo

cosi' lui ogni record elabora questa variabile e crea 1a string asempre piu lunga.Ovviamente tu farai i controlli che vuoi etc.. qeusto è 1 esempio senza senso anche perche quanto lunga diventa

e poi nel footer del report non la sopprimi e quindi hai la concatenazione dei valori dei record che vuoi, ovviamente puoi fare degli split etc...per presentarli meglio

cosi è 1po laborioso ma funziona

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

misterwolf Profilo | Newbie

bene...ci provo e ti fo sapere..

misterwolf Profilo | Newbie

ciao,
la soluzione che mi hai proposto va benissimo ..ho solu un piccolo problema:
come posso fare ad azzerare la variabile ad esempio al cambio di numero documenti in testata?
ora continua a sommaare stringhe all'infinito..
sempre grazie

freeteo Profilo | Guru

ciao,
se ti basta azzerare la variabile puoi tranquillamente controllare se nel record precedente il campo "documento" è diverso da quello corrente (quindi cambio di numero documento)
cioe' controlli :

If Previuos({miodb.ndocumento}) <> {miodb.ndocumento} then
shared numbervar.....

e quindi diciamo che la "rigeneri"...

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

misterwolf Profilo | Newbie

ciao,
la soluzione non sembra funzinare:
la prima pagina (n. documenti1) non stampa piu nulla e le successive continuano a raggruppare i documenti senza interrompersial cambio di numero doc.
ti posto il codice...

shared stringvar x;
x:=replace ({MG_MOVMAGT.des_articolo_riga},"Da DDT ","");
shared stringvar y;
y:=replace (x," del ","");
shared stringvar z;
z:= Right(y,10);
shared numbervar w;
w:= Val((Replace (y,z,"")));
If Previous ({MG_MOVMAGT.des_num_doc}) <> {MG_MOVMAGT.des_num_doc} Then
shared stringvar xRiepilogo := shared stringvar xRiepilogo + IIF((Left ({MG_MOVMAGT.des_articolo_riga},2))="Da",CStr(w,"00000")+" "+z+ space(3),"");
xRiepilogo;


ti ringrazio sempre...

freeteo Profilo | Guru

ciao,
per il problema della 1ma pagina puoi controllare anche se IsNull(previous({campo})) perche questo è 1a classica "scocciatura" edl fatto che nullo non viene controllato automaticamente...
Ed hai provato a mettere giu qualche campo formula nel report, con dentro i valori delle diverse variabili in modo ti funga da "console.Writeline" ? giusto per capire dove sbaglia...

è sempre 1piacere, non occorre che mi ringrazi
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

misterwolf Profilo | Newbie

ciao,
ho risolto il problema della prima pagina come mi hai consigliato.
resta purtroppo quello del mancato azzeramento della variabile al cambio di numero di documento....

freeteo Profilo | Guru

ciao,
ma questa formula l'hai messa nei dettagli o nel campo raggruppamento? perche' solo cosi' lui elabora anche quando c'è l'effettivo cambio di valore, altrimenti se cambia in 1altra sezione lui elabora solo nel momento in cui viene visualizzata la formula...

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

misterwolf Profilo | Newbie

l'ho messa sia nel dettaglio che nel page footer...
devo forse creare due formule diverse?

freeteo Profilo | Guru

si se deve cambiare a 2da del valore del campo che cambia nella sezione dettagli., la parte relativa a quella variabile la devi aggiungere in 1altro campo formula, e poi metterlo nei dettagli, cosi viene elaborato ad ogni record e quindi anche nel momento del cambio valore da 1record all'altro (percio' resetta la variabile...)


ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

misterwolf Profilo | Newbie

il numero di documento è nell'header del report..
non credo di aver compreso bene il tuo ultimo consiglio

semplificando la formula sulla base dei tuoi primi consigli:

shared stringvar xRiepilogo := shared stringvar xRiepilogo + "," + {miocampo};
xRiepilogo



If Previuos({miodb.ndocumento}) <> {miodb.ndocumento} then
va messa anche nei dettagli o solo nel footer?

freeteo Profilo | Guru

>il numero di documento è nell'header del report..
ok, allora nell'header metti l'asegnazione della varibile controllando il previous:

If Previuos({miodb.ndocumento}) <> {miodb.ndocumento} then
shared stringvar xRiepilogo := shared stringvar xRiepilogo + "," + {miocampo};
...
else
shared stringvar xRiepilogo := ""; dovevi azzerarla giusto? non ricordo bene il giro...

e poi nel footer del report la visualzzi insieme ad altri dati.
cmq il problema sta nel posto dove lui fa i confronti, ti suggerivo i dettagli perche non sapevo che variasse ogni pagina ma pensavo che all'unterno della pagina variasse di record in record...

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

misterwolf Profilo | Newbie

come la dichiaro nel footer?

freeteo Profilo | Guru

ciao,
intendevo dire che nell'header fai 1 formula dove conffronti con il previuos e dai il valore giusto alla variabile (azzerandola oppure no) senza visualizzare niente, ovvero 1a formula di soli calcoli all'interno.
Poi nel footer metti 1'ulteriore formula dove visualizzi il valore della variabile, insieme all'altro testo ovviamente se ti serve...

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

misterwolf Profilo | Newbie

ciao,
vediamo se ho capito:

header:

If Previuos({miodb.ndocumento}) <> {miodb.ndocumento} then
shared stringvar xRiepilogo := shared stringvar xRiepilogo + "," + {miocampo}
else
shared stringvar xRiepilogo := "";


footer:

shared stringvar xtotale := xRiepilogo


cosi?

ciao...

freeteo Profilo | Guru

si è proprio quello che intendevo, se il campo varia nell'inizio della pagina il controllo va nell'header e poi la visualizzazione invece va a pie pagina quindi ti riprendi il valore della variabile, poi se devi aggiungerci del testo lo fai cmq nel footer dove lo visualizzi...


ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

misterwolf Profilo | Newbie

evviva...funziona..

if previous ({MG_MOVMAGT.des_num_doc}) <> {MG_MOVMAGT.des_num_doc} then
shared stringvar xRiepilogo := ""
else
shared stringvar xRiepilogo := IIF((Left ({MG_MOVMAGT.des_articolo_riga},6))="Da DDT",CStr(w,"00000")+" "+z+ space(3),"");

ti ringrazio per tutto..

freeteo Profilo | Guru

bene! alla fine era questione di posizione header e footer della variabile allora?
se hai risolto accetta 1a risposta cosi' marchiamo il thread come risolto....
grazie

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5