Página 1 de 1

TOTAL condicionado en report

Publicado: Mié Jul 12, 2006 9:45 pm
por Francisco Sanchez
En fw podia totalizar un columna en funcion de algo, es decir y sirviendo de
ejemplo podia hacer esto :
COLUMN TITLE "DEBE" ;
DATA ( cAliasTEMP )->debe ;
PICTURE "@E 999,999,999.99" ;
TOTAL FOR Len( Alltrim( ( cAliasTEMP )->idsubcta ) ) == 8 ;
........
pero al poner esto en xailer marca error al compilar. claro revisando en el
report.ch vi que no exite el TOTAL FOR, aunque ya no se si esto venia por
defecto en fw o simplemente retoque yo la clase, bueno da igual, como
tendria que hacerlo ahora en xailer ????.
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 11:00 am
por ignacio
Francisco,
Efectivamente estaba en Fw pero se ha quitado por considerarlo un poco
extraño que la suma de una columna no coincidiese con la suma de todos los
valores numéricos de la misma. Y ha decir verdad, esperaba que nadie
utilizase esa cláusula, pero veo que no es así.
Acabo de crear un nuevo evento TRptColumn:OnAddToTotal( oSender, nLine,
Value ) que permite cambiar el valor a sumar en el total de la columna.
Un saludo,
"FRANCISCO SANCHEZ" <francisco@softwaretotal.biz> escribió en el mensaje
news:[email=44b55165@news.xailer.com...]44b55165@news.xailer.com...[/email]
> En fw podia totalizar un columna en funcion de algo, es decir y sirviendo
> de ejemplo podia hacer esto :
>
> COLUMN TITLE "DEBE" ;
> DATA ( cAliasTEMP )->debe ;
> PICTURE "@E 999,999,999.99" ;
> TOTAL FOR Len( Alltrim( ( cAliasTEMP )->idsubcta ) ) == 8 ;
> .......
>
> pero al poner esto en xailer marca error al compilar. claro revisando en
> el report.ch vi que no exite el TOTAL FOR, aunque ya no se si esto venia
> por defecto en fw o simplemente retoque yo la clase, bueno da igual, como
> tendria que hacerlo ahora en xailer ????.
>
> Un saludo
>

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 11:14 am
por Francisco Sanchez
Ups debo estar algo espeso como siempre pero no veo como con este nuevo
evento podria controlar que registros totalizar y cuales no. Creo que no
pretendo cambiar el total, sino que simplemente unos registros se totalicen
y otros no.
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 12:58 pm
por ignacio
Francisco,
Te entiendo, pero me resisto a usar bloques de código que se estén evaluando
constantemente por velocidad. Y además este sistema te ofrece muchísima más
potencia ya que incluso puedes cambiar el valor, que por ejemplo puede ser
muy cómodo cuando sumas tiempo (HH:MM:SS)
Antes:
TOTAL FOR Len( Alltrim( ( cAliasTEMP )->idsubcta ) ) == 8 ;
Ahora:
FUNCTION oCo:OnAddToTotal( nLine, Value )
IF Len( Alltrim( ( cAliasTEMP )->idsubcta ) ) == 8
RETURN Value
ENDIF
RETURN 0
Además fíjate que incluso recibes como parámetro la línea que se esta
evaluando, lo que te permite que si estás mostrando más de un valor numérico
en varias líneas hacer que sólo se totalicen algunas de ellas.
Saludos
"FRANCISCO SANCHEZ" <francisco@softwaretotal.biz> escribió en el mensaje
news:44b60ee6$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ups debo estar algo espeso como siempre pero no veo como con este nuevo
> evento podria controlar que registros totalizar y cuales no. Creo que no
> pretendo cambiar el total, sino que simplemente unos registros se
> totalicen y otros no.
>
> Un saludo
>

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 7:41 pm
por Francisco Sanchez
Bueno actualice con la nueva version 1.0 e hice lo siguiente :
COLUMN aCols[4] TITLE "Saldo Acreedor" ;
DATA ( ::cAliasTEMP )->saldoa ;
PICTURE "@E 999,999,999.99" ;
FONT 3 ;
TOTAL ;
OF oReport
aCols[4]:OnAddToTotal := { |oSender,nLine,value| If( (
::cAliasTEMP )->l_total == .F., value := 0, value := value ) }
PUES tengo un campo que me indica si esa linea se totaliza o no, y asi son 4
columnas totalizadas : Debe, Haber, Saldo Deudor y Saldo Acreedor, pero al
hacerlo asi, lo hace bien en la 1ª, la 2ª la deja a 0, la 3ª bien y la 4ª a
0 tambien, que estoy haciendo mal ? lo he probado tambien llamado a un
metodo que hace lo siguiente :
METHOD TotalColumn( value ) CLASS Miclase
If ( ::cAliasTEMP )->l_total == .T.
RETURN value
Endif
RETURN 0
Quedando todo de esta forma :
aCols[4]:OnAddToTotal := { |oSender,nLine,value| value := ::TotalColumn(
value ) }
y asi con las cuatro columnas que totalizan : acols[1], aCols[2], aCols[3]
y aCols[4] pero tiene el comportamiento que te comento mas arriba.
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 8:10 pm
por ignacio
Francisco,
Value no se pasa por referencia. Es el valor de retorno el que marca el
valor a sumar.
aCols[4]:OnAddToTotal := { |oSender,nLine,value| If( (
::cAliasTEMP )->l_total, value, 0 ) }
Saludos
"FRANCISCO SANCHEZ" <francisco@softwaretotal.biz> escribió en el mensaje
news:[email=44b685b8@news.xailer.com...]44b685b8@news.xailer.com...[/email]
> Bueno actualice con la nueva version 1.0 e hice lo siguiente :
>
> COLUMN aCols[4] TITLE "Saldo Acreedor" ;
> DATA ( ::cAliasTEMP )->saldoa ;
> PICTURE "@E 999,999,999.99" ;
> FONT 3 ;
> TOTAL ;
> OF oReport
>
> aCols[4]:OnAddToTotal := { |oSender,nLine,value| If( (
> ::cAliasTEMP )->l_total == .F., value := 0, value := value ) }
>
> PUES tengo un campo que me indica si esa linea se totaliza o no, y asi son
> 4 columnas totalizadas : Debe, Haber, Saldo Deudor y Saldo Acreedor, pero
> al hacerlo asi, lo hace bien en la 1ª, la 2ª la deja a 0, la 3ª bien y la
> 4ª a 0 tambien, que estoy haciendo mal ? lo he probado tambien llamado a
> un metodo que hace lo siguiente :
>
> METHOD TotalColumn( value ) CLASS Miclase
>
> If ( ::cAliasTEMP )->l_total == .T.
> RETURN value
> Endif
>
> RETURN 0
>
> Quedando todo de esta forma :
>
> aCols[4]:OnAddToTotal := { |oSender,nLine,value| value := ::TotalColumn(
> value ) }
>
> y asi con las cuatro columnas que totalizan : acols[1], aCols[2],
> aCols[3] y aCols[4] pero tiene el comportamiento que te comento mas
> arriba.
>
> Un saludo
>
>

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 8:22 pm
por Francisco Sanchez
Pasa lo mismo
COLUMN aCols[1] TITLE "Debe" ;
DATA ( ::cAliasTEMP )->debe ;
PICTURE ....... ;
TOTAL ;
OF oReport
aCols[1]:OnAddtototal := {|oSender,nLine,value| If( (
::cAliasTEMP )->l_total == .T., value, 0 ) }
y asi hasta COLUMN aCols[4] TITLE ......
con lo que tendria 4 columnas aCols[1]:Onaddtototal, aCols[2]:OnAddtototal,
aCols[3]:OnAddtototal y aCols[4]:OnAddtototal y tiene el comportamiento que
te dije : bien la columna aCols[1], aCols[2] la deja a 0, aCols[3] bien y
aCols[4] la deja a 0.
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 8:23 pm
por Francisco Sanchez
Por si sirve de algo es el total de informe que no de pagina eh! que el
total de pagina lo tengo lPagetotal := .F. pues se trata de un balance de
sumas y saldos.
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 8:32 pm
por ignacio
Francisco,
Prueba lo siguiente:
oCol:OnAddtototal := {|| 1 }
Esto debería darte como total el número registros procesados. Dime si
también te salen ceros.
Gracias
"FRANCISCO SANCHEZ" <francisco@softwaretotal.biz> escribió en el mensaje
news:44b68fa3$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Por si sirve de algo es el total de informe que no de pagina eh! que el
> total de pagina lo tengo lPagetotal := .F. pues se trata de un balance de
> sumas y saldos.
>
> Un saludo
>

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 8:58 pm
por Francisco Sanchez
Lo he probado y en las 4 columnas sale el nº de registros que esta
procesando.
Un saludo
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:44b691c6$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Francisco,
>
> Prueba lo siguiente:
>
> oCol:OnAddtototal := {|| 1 }
>
> Esto debería darte como total el número registros procesados. Dime si
> también te salen ceros.
>
> Gracias
>
> "FRANCISCO SANCHEZ" <francisco@softwaretotal.biz> escribió en el mensaje
> news:44b68fa3$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Por si sirve de algo es el total de informe que no de pagina eh! que el
>> total de pagina lo tengo lPagetotal := .F. pues se trata de un balance de
>> sumas y saldos.
>>
>> Un saludo
>>
>
>

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 9:02 pm
por Francisco Sanchez
He probado tambien a poner :
aCols[1]:OnAddtoTotal := { |oSender,nLine,value| If( (
::cAliasTEMP )->l_total, value, 0 ) }
aCols[2]:OnAddtoTotal := { |oSender,nLine,value| If( (
::cAliasTEMP )->l_total, value, 0 ) }
aCols[3]:OnAddtoTotal := { || 1 }
aCols[4]:OnAddtoTotal := { ||1 }
y en la 1ª sale bien el total, en la 2ª sale 0, y en la 3ª y 4ª el nº de
registros que ha procesado.
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 9:18 pm
por ignacio
Francisco,
Pues por lo que parece el evento funciona bien. Soy incapaz de ni siquiera
imaginar que es lo que puede estar pasando.
Con un ejemplo podría ayudarte mejor, pero así es complicado. Sólo se me
ocurre que intentes hacer una prueba más:
oCol:OnAddToTotal := {|o,n,v| v}
De esta forma se retorna el mismo valor que se recibe y por lo tanto debería
coincidir el informe con evento y sin evento. Si esto fuese así, entonces
estariamos casi seguros de que el evento hace su función perfectamente y por
lo tanto el error está en otro sitio.
Siento marearte tanto con este problema. Sino puedes hacer el ejemplo
intentaré hacerlo yo modicando cualquier informe del ejemplo de impresión.
Un saludo,
"FRANCISCO SANCHEZ" <francisco@softwaretotal.biz> wrote in message
news:[email=44b698c1@news.xailer.com...]44b698c1@news.xailer.com...[/email]
> He probado tambien a poner :
>
> aCols[1]:OnAddtoTotal := { |oSender,nLine,value| If( (
> ::cAliasTEMP )->l_total, value, 0 ) }
> aCols[2]:OnAddtoTotal := { |oSender,nLine,value| If( (
> ::cAliasTEMP )->l_total, value, 0 ) }
> aCols[3]:OnAddtoTotal := { || 1 }
> aCols[4]:OnAddtoTotal := { ||1 }
>
> y en la 1ª sale bien el total, en la 2ª sale 0, y en la 3ª y 4ª el nº de
> registros que ha procesado.
>
> Un saludo
>

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 9:21 pm
por Francisco Sanchez
He hecho lo que me has dicho y efectivamente salen los totales no los que yo
busco condicionandolos al valor del campo l_total, pero totales si salen.
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 9:38 pm
por Francisco Sanchez
Uff sigo probando y probando pero no encuentro tampoco que es lo que puede
estar fallando, el evento parece que funciona, pero por el motivo que sea,
cuando se trata de 2 columnas numericas correlativas, una despues de la
otra, la 2ª la deja a 0.
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 9:45 pm
por Francisco Sanchez
Nada he probado tambien intercalando entre aCols[1] y aCols[2] un COLUMN
TITLE "" DATA "" por comprobar a ver si tenia algo que ver el que las 2
columnas numericas de totales estuviesen correlativas, pero pasa lo mismo,
la 2ª columna que lleva total lo deja a 0, igualmente si se trata de las 4
columnas con total.
1ª bien, 2ª = 0, 3ª bien, 4ª = 0
Un saludo

TOTAL condicionado en report

Publicado: Jue Jul 13, 2006 9:59 pm
por Francisco Sanchez
ARREGLADOOOOOOO ruego aceptes mis disculpas por todo el tiempo que te hice
perder, era error mio, no tenia igualmente escritos los eventos de todas las
columnas y de ahi el error. Estoy profundamente apesadumbrado por todo el
tiempo que te hice perder, procurare romperme mas la cabeza con cosas como
esta para evitar hacerte perder el tiempo.
Ahora esta funcionando 100%
Un saludo