Lineas de separacion en un Report
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Lineas de separacion en un Report
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
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
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
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
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
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
...
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
- jrestojeda
- Posts: 543
- Joined: Wed Jul 04, 2007 3:51 pm
- Location: Buenos Aires - Argentina
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
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
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
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
Saludos
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
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
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
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- jrestojeda
- Posts: 543
- Joined: Wed Jul 04, 2007 3:51 pm
- Location: Buenos Aires - Argentina
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
- jrestojeda
- Posts: 543
- Joined: Wed Jul 04, 2007 3:51 pm
- Location: Buenos Aires - Argentina
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.
Pinta todo como si fuera una misma línea.
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
....
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
//
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
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- jrestojeda
- Posts: 543
- Joined: Wed Jul 04, 2007 3:51 pm
- Location: Buenos Aires - Argentina
Code: Select all
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
//
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
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero