Lineas de separacion en un Report

Lineas de separacion en un Report

Postby Rafael Clemente » Thu Aug 02, 2007 10:33 am

Utilizo FWH 2.6 + Harbour. Para separar columnas de un report mediante una linea vertical hago:

COLUM TITLE "Mi titulo 1" DATA ......... GRID 1
COLUM TITLE "Mi titulo 2" DATA ........ GRID 1

¿Cómo puedo separar las lineas con una linea horizontal? (GRID 0 y GRID 2 dan "Error de acceso a array")
¿Alguien sabe alguna forma de pintar las rows del report alternativamente con fondo gris (como SHADOW) y blanco?

Gracias,

Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Rafael Clemente » Thu Aug 02, 2007 11:40 am

Buscando en los foros he encontrado respuesta a un par de mis preguntas:
1.- GRID 0 y GRID 2 exigen definir PEN en el report
2.- Para lineas de separación horizontal: ON CHANGE oReport:Separator() (Gracias, Paul - http://fivetechsoft.com/forums/viewtopi ... +separator)

Sigue en pie la pregunta sobre lineas de colores alternados
Saludos, Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Loren » Thu Aug 02, 2007 12:07 pm

Rafael

justo despues de definir las column del report y antes del END REPORT
tecleas

oReport:CellView()

y listo!!

Un saludo
LORENZO
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Postby Loren » Thu Aug 02, 2007 12:21 pm

ups.... se me olvidó decirte que para alternar colores o sombras horizontales debes jugar con los "SHADOW" de cada columna. Es decir:

...
column title 'Mínimo' data str(minimo,6) SHADOW font 2 right grid
...
activate report infor ON STARTLINE versombra(infor)
...
...
funct versombra(infor)
Local nVeces
IF infor:aColumns[1]:lShadow
FOR nVeces := 1 TO Len(infor:aColumns)
infor:aColumns[nVeces]:lShadow := .F.
NEXT
ELSE
FOR nVeces := 1 TO Len(infor:aColumns)
infor:aColumns[nVeces]:lShadow := .T.
NEXT
ENDIF
RETURN NIL

y listo el pollo! el resultado final es bastante atractivo.
Un saludo.
LORENZO
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Postby jrestojeda » Thu Aug 02, 2007 2:03 pm

Hola Lorenzo

Estuve probando lo que recomiendas, y me funcionó perfecto, de hecho está muy bueno.
Pero como siempre uno quiere un poco más, me surgió una duda.
Si quisiera en vez de intercambiar entre fila y fila del report entre otros colores distintos al gris y el blanco?
Qué debería agregar?
Desde ya muchas gracias
Saludos, Esteban
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Postby Rafael Clemente » Thu Aug 02, 2007 2:55 pm

Lorenzo:
Lo probé y funcionó de maravilla. Muchas gracias
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Armando » Thu Aug 02, 2007 3:16 pm

Esteban, Rafael:

Para poner la sombra en color, de hecho no es una sombra se trata de pintar un rectángulo con el color que desees, yo lo hago así, si no recuerdo mal es un aporte de The Full.

oReporte:bStartLine := {|o|IF(gMarca:nCounter % 2 == 0,SHADOWROW(o),)}

y esta es la función ShadowRow()

FUNCTION ShadowRow(oRep)
LOCAL nCols := LEN(oRep:aCols)
LOCAL nLine := IF(EMPTY(oRep:nDataLine),1,oRep:nDataLine)

IF oRep:oShdBrush == NIL
DEFINE BRUSH oRep:oShdBrush COLOR oRep:nClrShadow
ENDIF

SetBkMode(oRep:oDevice:hDCOut,1)

oRep:oDevice:FillRect( {oRep:nRow + 1,;
oRep:aCols[1],;
oRep:nRow + 1 + oRep:aDataHeight[nLine],;
oRep:aCols[nCols] + oRep:aColumns[nCols]:nWidth},;
oRep:oShdBrush)
RETURN (NIL)

Aquí pueden ver una imagen de lo obtenido

http://img183.imageshack.us/my.php?image=clip2xa3.jpg
http://img183.imageshack.us/img183/926/clip2xa3.jpg
Image

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3237
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby Rafael Clemente » Thu Aug 02, 2007 5:32 pm

Armando:
Muchas gracias por tu solución. Funciona perfectamente pero ¿cómo lo haces para que el header de cada grupo no se marque en color (cuando le toque una linea par)?
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Armando » Thu Aug 02, 2007 5:42 pm

Rafael:

No me he topado con un problema así, seguramente es porque el reporte se imprime cuando el usuario elige solo una marca de repuesto entonces no hay un nuevo grupo en todo el reporte.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3237
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby jrestojeda » Thu Aug 02, 2007 5:45 pm

Armando:

Muy buena tu solución funciona perfectamente para lo que yo estoy haciendo.
Desde ya muchas gracias.
Saludos, Esteban.
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Postby Rafael Clemente » Thu Aug 02, 2007 6:07 pm

Armando:
Bueno; lo de los headers tampoco tiene demasiada importancia. Haré algunas pruebas más y veremos si saco algo en claro. Muchas gracias otra vez.
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby jrestojeda » Fri Aug 03, 2007 4:34 pm

Armando:

Me surgió una dudita más respecto a el tema de pintar las líneas de un report.
Yo cuando estoy activando el Report, en ON INIT voy a otra función donde ahí imprimo línea por línea.
He probado la función para pintar las líneas pero pinta todo, es decir no pinta línea por medio.

Code: Select all  Expand view  RUN
....

oReport:CellView()
oReport:bStartLine := {|oReport|IF(oReport:nCounter % 2 =0,PintaLi(oReport),)}

ACTIVATE REPORT oReport ON INIT ListDiaEnfer2(oReport,vMes,vAni,vDes,vHas,oDbf)
...
Return nil
//

//
Function ListDiaEnfer2(oReport,vMes,vAni,vDes,vHas,oDbf)

DO WHILE !oDbf:Eof()
   oReport:StartLine()
       oReport:Say( 1 , oDbf:NOMBRE , 1 , 1 )
   oReport:EndLine()
   oDbf:Skip()
ENDDO
Return nil
//

Pinta todo como si fuera una misma línea.
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Postby Armando » Fri Aug 03, 2007 4:58 pm

Esteban:

Ummm, no entiendo para que utilizas la función ListDiaEnfer()
si la Clase TReport ya utiliza un DO WHILE para imprimir todos los registros de la DBF activa.

Podrías mostrar más código para ver como defines las columnas ?

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3237
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby jrestojeda » Fri Aug 03, 2007 5:10 pm

Code: Select all  Expand view  RUN
REPORT oReport TITLE Titulo CENTER;
       HEADER Empresa,Titulo2,Titulo3 LEFT;
       FOOTER "Fecha:"+DTOC(Date())+" Hora:"+Time()+" Pagina:"+STR(oReport:nPage,3) RIGHT;
       FONT oFont1,oFont2,oFont3,oFont4;
       PREVIEW;
       CAPTION "Vista previa del listado"


COLUMN TITLE "Código"          DATA " " CENTER SIZE 10
COLUMN TITLE "Emplado"         DATA " " CENTER SIZE 40
COLUMN TITLE "Días Enfermo"    DATA " " CENTER SIZE 10

ENDREPORT

oReport:oTitle:aFont[1]        :={|| 4}
oReport:oHeader:aFont[1]       :={|| 3}
oReport:oHeader:aFont[2]       :={|| 3}
oReport:oHeader:aFont[3]       :={|| 3}
oReport:aColumns[ 1]:bTitleFont:={|| 3}
oReport:aColumns[ 2]:bTitleFont:={|| 3}
oReport:aColumns[ 3]:bTitleFont:={|| 3}

oReport:CellView()

ACTIVATE REPORT oReport ON INIT ListDiaEnfer2(oReport,vMes,vAni,vDes,vHas)

DBCLOSEALL()
oFont1:End()
oFont2:End()
oFont3:End()
oFont4:End()
Return nil
//


Lo hago de esta forma porque dentro del DO WHILE necesito realizar otros procesos por cada empleado.
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Postby Armando » Fri Aug 03, 2007 6:03 pm

Esteban:

Ok, podrías intentar dejando que la TReport haga su ciclo normal solo para probar si con eso se soluciona el problema del pintado, pues no veo otra razón.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3237
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 54 guests