Rartizione importo di dettaglio sulle altre righe

martedì 27 marzo 2012 - 12.25
Tag Elenco Tags  Windows Server 2003  |  Windows Server 2000  |  Windows 7  |  Windows XP  |  Visual Studio 2005  |  SQL Server 2005  |  Oracle 10g  |  Oracle 9g  |  Oracle 8g  |  Access (.mdb)  |  Office 2010  |  Office 2007  |  Office 2003  |  Office XP  |  Office 2000  |  Internet explorer 8.0  |  Internet Explorer 7.0  |  Internet Explorer 6.0  |  Chrome  |  Opera  |  Safari  |  Firefox  |  Crystal Reports 8.5

elnath11 Profilo | Newbie

Buongiorno, su report di stampa ordine , quindi testata + dettagli di riga avrei la necessità di prendere un importo di dettaglio e sommarlo agli importi presenti sulle altre righe proporzionalmente alla quantità di riga, il problema è che dovrei poter utilizzare un'istruzione SQL all'interno del campo formula ma, a quanto ne so (cioè molto poco), non è supportato, l'help non è stato installato e io non so proprio che soluzione alternativa adottare.

Qualche idea ?

DomA Profilo | Expert

Non ho capito bene, magari postando un esempio...
Comunque hai la possibilita di utilizzare un'istruzione IF.

Esempio
If [Campo Report] = "quello che vuoi tu" Then...

N.B. puoi utilizzare sia i Campi report che i campi tabella (cioè quei campi che pur presenti in una tabella del DB non sono stati inseriti nel report).


http://www.infomidia.it

Domenico

elnath11 Profilo | Newbie

Uhhm si ho provato ad utilizzare l'istruzione IF nella formula ma mi spiego meglio:

Ho un ordine a cliente sul quale inserisco N righe articolo + 1 riga di spese aggiuntive, le spese non devono essere visibili (e questo non è un problema) ma essere ripartite proporzionalmente
alla quantità presente su ciascuna riga articolo, per cui l'importo degli articoli dovrà essere pari a importo_articolo + (riga_spese/tot_qta_articoli) * qta_riga_articolo.

Se uso l'istruzione IF nel dettaglio il sistema mi calcola l'importo per la singola riga, in pratica dovrei memorizzare il risultato del campo formula calcolato sul campo spesa per poterlo utilizzare in
somma sui campi articolo. Probabilemente è una scemenza ma non riesco propro ad arrivarci.

Sarebbe comodo poter utilizzare una select per memorizzare il dato in una variabile.
Dimenticavo la versione di CR è 8.5.0.217

DomA Profilo | Expert

Ciao,

Prova a procedere cosi:

1) Imposta una formula chiamandola, ad esempio, riparto_spese. Imposta la formula così: riga_spese/tot_qta_articoli

2) Imposta una formula seconda formula chiamandola, ad esempio, importo_lordo. Imposta la formula così:
importo_articolo + (riparto_spese* qta_riga_articolo)
Utilizza questa formula nel reportal posto di importo_articolo

3) Per il totale ti basterà impostare una terza formula che chiameremo, ad esempio, Tot_articoli
Imposta la formula così: sum(importo_lordo)

Fammi sapere




http://www.infomidia.it

Domenico

elnath11 Profilo | Newbie

Ciao grazie delle dritte ma questo calcolo lo avevo già fatto, il problema è che quando cerco di impostare questa formula

{DO30_DOCCORPO.DO30_IMPORTO} + (@Importo_spese * {DO30_DOCCORPO.DO30_QTA1})

crystal mi restituisce un errore e continua a dirmi che ho dimenticato la parentesi )
La formula di importo spese è questa e banalmente restituisce un numero (suppongo)

if {DO30_DOCCORPO.DO30_CODART_MG66} = "TR" then

({DO30_DOCCORPO.DO30_IMPORTO}/{DO14_DOCDATIACC.DO14_TOTCOLLI})

else

0
ma se provo ad impostare questa formula
{DO30_DOCCORPO.DO30_IMPORTO} + @Importo_spese

la verifica mi dice che si aspetta un numero, un booleano etc etc, se provo a trasformare in numero la formula CR insiste a dirmi che manca la parentesi ).....non ne esco viva!

freeteo Profilo | Guru

Ciao,
se non ricordo male il nome di una formula va cmq tra graffe, quindi prova ad usare:
{DO30_DOCCORPO.DO30_IMPORTO} + ({@Importo_spese} * {DO30_DOCCORPO.DO30_QTA1})
se è così, torna anche il motivo per cui ti dice l'errore della parentesi, in realtà non è la parentesi ma lui interpreta quel nome come una variabile o un valore scritti dritti...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

elnath11 Profilo | Newbie

Si in effetti ora non restituisce più l'errore.
Scusa se insisto a rompere ma continuo a non venirne a capo, il problema è il seguente:
Il dato che vado a rintracciare si trova nel corpo del documento ed è un articolo chiamato TR, infatti nella formula @Importo_spese

NumberVar Spese ;
(
If {DO30_DOCCORPO.DO30_CODART_MG66} = "TR" Then

Spese := ({DO30_DOCCORPO.DO30_IMPORTO}/{DO14_DOCDATIACC.DO14_TOTCOLLI})
);
Spese

Ho provato a dichiarare la variabile Spese per poi utilizzarla in somma all'importo delle righe con codice <> da TR così
({DO30_DOCCORPO.DO30_IMPORTO}) + ({@Importo_spese} * {DO30_DOCCORPO.DO30_QTA1})

ma sembra che il mio tentativo di dichiarazione di variabile sia miseramente fallito

freeteo Profilo | Guru

>Si in effetti ora non restituisce più l'errore.
ok


>Scusa se insisto a rompere ma continuo a non venirne a capo,
figurati, il forum serve proprio a questo

io cmq farei così la formula:
If {DO30_DOCCORPO.DO30_CODART_MG66} = 'TR' Then {DO30_DOCCORPO.DO30_IMPORTO}/{DO14_DOCDATIACC.DO14_TOTCOLLI} else 0

praticamente controllo altrimenti torno zero, non serve chiamare return e non è obbligatorio usare la variabile.
Un'ulteriore cosa ti dico, se hai dei nulli devi controllare il campo con
... IsNull({campo})...

perchè altrimenti sbaglia...Crystal ha un codice un po' particolare

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

elnath11 Profilo | Newbie

Scuss ma se metto che se il codice articolo è diverso da TR allora il valora è zero questo significa che sugli articoli con codice <> da TR non potro' mai sommare il risultato di quanto ottenuto sulla riga con codice TR... o sbaglio ?

freeteo Profilo | Guru

>Scuss ma se metto che se il codice articolo è diverso da TR allora
>il valora è zero questo significa che sugli articoli con codice
><> da TR non potro' mai sommare il risultato di quanto
>ottenuto sulla riga con codice TR... o sbaglio ?
sì, ma pensavo volessi questo.
Se vuoi tornare qualcos'altro, tipo ad esempio il valore senza dividerlo, allora puoi fare così:
If {DO30_DOCCORPO.DO30_CODART_MG66} = 'TR' Then {DO30_DOCCORPO.DO30_IMPORTO}/{DO14_DOCDATIACC.DO14_TOTCOLLI} else {DO30_DOCCORPO.DO30_IMPORTO}
o cose di questo genere...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
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