FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour No mostrar ceros en Xbrowse y Report (Solucionados)
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM
No mostrar ceros en Xbrowse y Report (Solucionados)
Posted: Tue Apr 21, 2009 04:18 AM
Un saludo

Tengo un array que lo visualizo con XBrowse y mando a imprimir con Report, Hasta aqu铆 todo OK. Lo que quiero es que no se visualice en pantalla ni se imprima en el reporte las celdas que contienen valores como "ceros" o fechas vac铆as. En definitiva comprobar si es empty() a cada celda. Hay que tomar en cuenta que el n煤mero de columnas puede variar.

El siguiente es parte del c贸digo que empleo para generar cada columna en el Report y pienso que es aqu铆 donde se deber铆a preguntar sobre el valor de la celda, en su par谩metro {bdata}:
Code (fw): Select all Collapse
 聽 聽 oCol := RptAddColumn( { { || oXCol:cHeader } }, nil ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { bData }, nil, { cPic } ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 nil,.f., nil ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cAlign, .F., .t., nil )


Pero no s茅 c贸mo ir铆a la condici贸n.

lo mismo quiero hacer pero en el Xbrowse, c贸mo ser铆a en los dos casos. Por favor una ayuda

Marcelo Jingo
Marcelo Jingo
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: No mostrar ceros en Xbrowse y Report
Posted: Tue Apr 21, 2009 05:54 PM
Hola amigo...
Prueba lo siguiente:

Code (fw): Select all Collapse
// VecFec contiene fechas.
// VecImp contiene valores num茅ricos.

oBrow:AddCol():bEditValue:={||IF(EMPTY(VecFec[nItem1]),SPACE(10),DTOC(VecFec[nItem1]))} 聽

oBrow:AddCol():bEditValue:={||IF(VecImp[nItem1]=0,SPACE(10),TRAN(VecImp[nItem1],"#######.##"))}


Espero te sirva.
Saludos.
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM
Re: No mostrar ceros en Xbrowse y Report
Posted: Wed Apr 22, 2009 04:23 AM
Gracias Esteban

El c贸digo que uso para generar el Xbrowse es el siguiente:

Code (fw): Select all Collapse
   
Listr := TXBrowse():New( Dg_cro ) 
Listr:nleft:=1
Listr:ntop:=15
Listr:Setarray(acrono)
Listr:nColDividerStyle := LINESTYLE_BLACK
Listr:nRowDividerStyle := LINESTYLE_BLACK
    
for i:=1 to len(atit)
    Listr:aCols[i]:cHeader       := atit[i]
    Listr:aCols[i]:nDataStrAlign := alin[i]
    listr:aCols[i]:nHeadStrAlign := AL_CENTER
next

//Por probar, con esta linea se pone toda la columna en blanco
listr:aCols[1]:bStrData:=Listr:aCols[1]:bEditValue:={||space(10)}  

//Con esta linea intento condicionar pero obtengo error
//de acceso al array
//listr:aCols[1]:=Listr:aCols[1]:bEditValue:={|n|if(acrono[n,1]==0,space(10),)}  

Listr:nMarqueeStyle   := MARQSTYLE_HIGHLCELL
Listr:CreateFromCode()


C贸mo deber铆a hacerlo?

Gracias de Antemano

Marcelo Jingo
Marcelo Jingo
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: No mostrar ceros en Xbrowse y Report
Posted: Wed Apr 22, 2009 01:59 PM

Hola sjingo...

Te prengunto

Lo que quieres es que cuando incluyas un valor en el xbrowse si este es cero aparezca en blanco?

De ser asi puedes usar bOnPostEdit
1) llena tus array de data con espacios en blanco en las columnas respectivas
2) Puedes usar cEditPicture para que solo te acepte numeros
3) bOnPostEdit seria algo como esto oBrw:aCols[ 1 ]:bOnPostEdit := {| oCol, uValue, nKey | if( uValue == 0, space( 10 ), uValue ) }

No lo he probado... culaquier cosa comentas

Nota:
bEditValue recibe como parametro el valor en la celda, ese valor no te como indice para tu array de data

Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM
Re: No mostrar ceros en Xbrowse y Report
Posted: Thu Apr 23, 2009 04:46 AM
Luego de revisar c贸mo se crean las columnas en el c贸digo fuente del Txbrowse, pude encontrar la SOLUCION:

Modifiqu茅 la funci贸n GenArrayBlock( bBlock, nCol, lAsString ) llamada desde el m茅todo SetArray(tabla) y que devuelve el codeblock para oCol:bstrData y para oCol:bEditvalue, asignados durante la generaci贸n de las columnas con ocol:=obrw:Addcol(). Quedando finalmente la funci贸n as铆:
Code (fw): Select all Collapse
STATIC FUNCTION GenArrayBlock( bBlock, nCol, lAsString )
聽 聽local block

聽 聽if lAsString
聽 聽 聽 block:= {||if(!empty(Eval(bBlock)[nCol ]),cValToChar(Eval(bBlock)[nCol]),space(20))} //Este es el cambio
聽 聽 聽//block := 聽{|| cValToChar( Eval( bBlock )[ nCol ] ) } 聽//as铆 es la original
聽 聽else
聽 聽 聽 block := 聽{|| Eval( bBlock )[ nCol ] }
聽 聽endif

RETURN block


Para no modificar el m茅todo Setarray() de la clase Txbrowse original, la he copiado como una funci贸n con los cambios mencionados y funciona ok tanto con los campos num茅ricos como fecha. Para mejorarla quisiera en lugar de asignar espacios fijos, llenar con la cantidad de espacios dependiendo del tama帽o del campo; lo que no pude lograrlo, si alguien puede darme una mano bienbenida sea. De todas formas hace lo que necesito.

Ahora me falta hacerlo con el Report, que supongo debe tener el mismo principio, ya mismo lo reviso y les cuento.

Saludos a todos

Marcelo Jingo
Marcelo Jingo
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM
Re: No mostrar ceros en Xbrowse y Report
Posted: Fri Apr 24, 2009 03:02 AM
Les saludo s贸lo para informar que tambi茅n he solucionado lo de los ceros y fechas vac铆as en el Report, segu铆 el ejemplo del m茅todo Report() de la clase txbrowse modificando la funci贸n MakeRepCol( oRep, oXCol ) as脥:

Code (fw): Select all Collapse
static function MakeRepCol( oRep, oXCol )
聽 聽local oCol, bData, cPic //, lTotal := .F.
聽 聽local cAlign

//if ( bData := oXCol:bEditValue ) == nil //version orig de fw9.02
聽 聽 ////////bData := oXCol:bStrData
聽 聽 ///////////////////////////////////////////////////////////////////

if ( bData := oXCol:bStrData ) == nil
聽 聽 聽 bData := oXCol:bEditValue
聽 聽else
聽 聽 聽 cPic := oXCol:cEditPicture
endif

if bData != nil
聽 聽 聽 cAlign 聽 := If( oXCol:nDataStrAlign 聽== AL_RIGHT, "RIGHT", ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 If( oXCol:nDataStrAlign 聽== AL_CENTER, "CENTER", "LEFT" ))

聽 聽 聽 oCol := RptAddColumn( { { || oXCol:cHeader } }, nil ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { bData }, nil, { cPic } ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 nil,.f., nil ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 cAlign, .F., .t., nil )
endif

return oCol


Aqu铆 en lugar de preguntar primero por el bloque :bEditvalue como lo hace la original, pregunto por el :bStrData carg谩ndose primero este, y si es nil se cargara otro.

Hata pronto

Marcelo Jingo
Marcelo Jingo

Continue the discussion