REPORTE CON COLUMNAS DINAMICAS

REPORTE CON COLUMNAS DINAMICAS

Postby joseluisysturiz » Mon Jul 04, 2016 5:00 pm

Buen dia, necesito hacer un reporte, preferiblemente con FAST REPORT, si no es posible entonces con REPORT o lo mas recomendado, donde pueda hacer lo siguiente: voy tener un xbrowse con X cantidad de columnas, el usuario eligira cuales son las columnas que quiere en el reporte, eliminando del xbrowse las que no quiera, con xBrw;report() basico lo hace, peros resulta que el reporte lleva logo de la empresa y otros detalles..y luego es que vendran las columnas y hasta alguns totalizadores...

Espero haber sido claro y espero sus sugerencias y observaciones para el reporte que necesito, si alguien ha hecho algo parecido o si tiene idea de como pasarle los array de titulos y el master en fast report seria de gran ayuda, gracias..saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: REPORTE CON COLUMNAS DINAMICAS

Postby cnavarro » Mon Jul 04, 2016 5:12 pm

Una forma sencilla que puedes ir probando, y te puede servir de inspiración

Haz un pequeño programa que abra la base de datos y utiliza la funcion XBROWSE( cAlias )
Pulsa con el boton derecho del raton sobre una de las cabeceras ( header ), y marca / desmarca las columnas que desees, y pulsa sobre el boton de imprimir
El estudio de esas funciones, creo que te pueden servir de punto de partida
Algo asi
Image
Last edited by cnavarro on Mon Jul 04, 2016 5:36 pm, edited 1 time in total.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: REPORTE CON COLUMNAS DINAMICAS

Postby joseluisysturiz » Mon Jul 04, 2016 5:34 pm

cnavarro wrote:Una forma sencilla que puedes ir probando, y te puede servir de inspiración

Haz un pequeño programa que abra la base de datos y utiliza la funcion XBROWSE( cAlias )
Pulsa con el boton derecho del raton sobre una de las cabeceras ( header ), y marca / desmarca las columnas que desees, y pulsa sobre el boton de imprimir
El estudio de esas funciones, creo que te pueden servir de punto de partida


Navarro, gracias por la rapida respuesta, disculpa, olvide decir que uso MySql y lo de ocultar las columnas es la parte facil, y el reporte oBrw:report() es muy sencillo y basico, necesito el reporte mas elaborado, con logos y titulos con tipos de letras especificos, por eso pense en REPORT o Fast Report, uso es Fast Report. Gracias, saludos... :shock:

PostData: Navarro, no habia visto la imagen, hare lo que me dices para ver lo de Report()...gracias, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: REPORTE CON COLUMNAS DINAMICAS

Postby cnavarro » Mon Jul 04, 2016 6:38 pm

Algo asi? ( esto es un xbrowse, evidentemente )

Image
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: REPORTE CON COLUMNAS DINAMICAS

Postby joseluisysturiz » Mon Jul 04, 2016 7:23 pm

cnavarro wrote:Algo asi? ( esto es un xbrowse, evidentemente )

Image


Woaooo. algo asi es lo q debo hacer, tengo ya varios hechos con Fast Report, la diferencia ahora es que el usuario jugara con las columnas...hare un frezee a algunas que van siempre y le dare la libertad de quitar o mover las restantes...y no se como hacerlo con FR, he leido en los foros de Delphi que usan mucho FR y no veo nada parecido, tendria que pasar array con los titulos y al master un array con las columnas y determinar cuales totalizare y cuales no...alo trabajoso porque no tengo ni idea de como hacerlo...por eso pense en REPORT ya que veo que hace lo de las columnas desde el xbrowse que es lo mas importante...

Hay algun sample, algo parecido o puedes compartir el reporte que me enseñas.? gracias...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: REPORTE CON COLUMNAS DINAMICAS

Postby cnavarro » Mon Jul 04, 2016 7:57 pm

Qué version de Fwh utilizas?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: REPORTE CON COLUMNAS DINAMICAS

Postby joseluisysturiz » Mon Jul 04, 2016 8:58 pm

cnavarro wrote:Qué version de Fwh utilizas?


Estoy usando la 15.12, espero sea compatible con ese trabajo, una consulta, de esa misma manera se veria el informe o solamente se ve asi el xbrowse.? recuerda que lo mas importante es lo de las columnas dinamicas...gracias...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: REPORTE CON COLUMNAS DINAMICAS

Postby cnavarro » Mon Jul 04, 2016 9:28 pm

joseluisysturiz wrote:
cnavarro wrote:Qué version de Fwh utilizas?


Estoy usando la 15.12, espero sea compatible con ese trabajo, una consulta, de esa misma manera se veria el informe o solamente se ve asi el xbrowse.? recuerda que lo mas importante es lo de las columnas dinamicas...gracias...saludos... :shock:


Jose Luis, es un ejemplo de Rao
Voy a ver en qué punto está el tema y te comento, pero sobre todo creo que las modificaciones para poder realizar esto están implementadas en la versión 16.04, pero te lo confirmaré
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: REPORTE CON COLUMNAS DINAMICAS

Postby joseluisysturiz » Mon Jul 04, 2016 11:30 pm

cnavarro wrote:
joseluisysturiz wrote:
cnavarro wrote:Qué version de Fwh utilizas?


Estoy usando la 15.12, espero sea compatible con ese trabajo, una consulta, de esa misma manera se veria el informe o solamente se ve asi el xbrowse.? recuerda que lo mas importante es lo de las columnas dinamicas...gracias...saludos... :shock:


Jose Luis, es un ejemplo de Rao
Voy a ver en qué punto está el tema y te comento, pero sobre todo creo que las modificaciones para poder realizar esto están implementadas en la versión 16.04, pero te lo confirmaré


Navarro, en realidad lo que necesito es que se vea de esa manera es el reporte si es posible con REPORT, no importa si el xbrowse se ve de forma normal, crei que si usaba xBrw:Report() con alguos parametros podia hacer algo como lo que muestras, ya que la parte mas importante la haria el xBrw que es la seleccion de columnas y luego esa data enviarla al REPORT, no se si me explico, el xBrw me permitiria hacer la opcion de columnas dinamicas, ya las demas cosas creo las puedo hacer con el REPORT, no se si es posible, gracias, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: REPORTE CON COLUMNAS DINAMICAS

Postby cmsoft » Tue Jul 05, 2016 1:29 am

Teniendo la consulta armada, lo que puedes hacer es permitir que los campos de la consultas sean o no elegibles de la siguiente manera:
Code: Select all  Expand view  RUN

FOR i := 1 TO LEN(oQry:aStructure)
    AADD(aEst,{.f.,oQry:FieldName(i)})
NEXT i
DEFINE DIALOG oDlg1 TITLE "Listado" FROM 03,15 TO 35,90
   @ 10, 10 SAY "Campos a incluir" OF oDlg1 PIXEL
    @ 25, 10 XBROWSE oBrw SIZE 105,80 pixel OF oDlg1 ARRAY aEst ;
      HEADERS "Muestra", "Campo";
      COLUMNS 1, 2 ;
      CELL LINES NOBORDER FASTEDIT
   WITH OBJECT oBrw
      :nEdittYPEs := 1
      :aCols[ 1 ]:SetCheck()
      :CreateFromCode()
   END  
   @ 45,10 BUTTON oBot1 PROMPT "&Imprimir" OF oDlg1 SIZE 30,10  ACTION ((mrta := .t.), oDlg1:End() ) PIXEL
   @ 45,20 BUTTON oBot2 PROMPT "&Cancelar" OF oDlg1 SIZE 30,10  ACTION ((mrta := .f.), oDlg1:End() ) PIXEL
ACTIVATE DIALOG oDlg1 CENTER
IF !mrta
   RETURN  NIL
ENDIF
REPORT oRep TITLE "Listado" FONT  oFont1,oFont2,oFont3 HEADER "Encabezado" RIGHT;
       FOOTER "Hoja:" + STR(oRep:npage,3) + SPACE(40)+"Fecha:"+DTOC(DATE())  PREVIEW
FOR i := 1 TO LEN(aEst)
    IF aEst[i,1]
       oCol := MakeRepCol( oRep, i, oQry )
    ENDIF
NEXT i

oRep:oTitle:aFont[1] := {|| 3 }
oRep:bInit := {|| oQry:GoTop() }
oRep:bSkip := {|| oQry:Skip() }
END REPORT
ACTIVATE REPORT oRep WHILE !oQry:EOF() ON STARTPAGE oRep:SayBitmap(.1,.1,"LOGO.BMP",.5,.5)
oQry:End()
RETURN NIL

static function MakeRepCol( oRep, i , oQry)

   local oCol, bData, cPic, nSize
   local cAlign

   
   bData := { || oQry:FieldGet(i) }
   
   nSize       := oQry:FieldLen(i)
   cPic        := IF(oQry:FieldType(i)=="N",;
                       REPLICATE("9",oQry:FieldLen( i ))+"."+REPLICATE("9",oQry:FieldDec( i )),NIL)
   cPic        := IF(RIGHT(cPic,1)=".",LEFT(cPic,LEN(cPic)-1),cPic)
   if bData != nil

      cAlign   := If( oQry:FieldType(i) == "C", "LEFT", "RIGHT" )
      oCol := RptAddColumn( { { || oQry:FieldName(i) } }, nil ,;
                            { bData }, nSize, { cPic } ,;
                            nil, .f., nil ,;
                            cAlign, .F., .F., nil, ;
                            .f.,.f., ;
                            nil, nil, nil, nil )

   endif

return oCol
 


Tambien podrías llenar con .t. los campos que quieres por defecto que el listado incluya, en incluso agregar si quieres totalizar o no un campo.
Espero que al menos te sirva como guia.
Saludos
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: REPORTE CON COLUMNAS DINAMICAS

Postby joseluisysturiz » Tue Jul 05, 2016 3:07 am

cmsoft wrote:Teniendo la consulta armada, lo que puedes hacer es permitir que los campos de la consultas sean o no elegibles de la siguiente manera:
Code: Select all  Expand view  RUN

FOR i := 1 TO LEN(oQry:aStructure)
    AADD(aEst,{.f.,oQry:FieldName(i)})
NEXT i
DEFINE DIALOG oDlg1 TITLE "Listado" FROM 03,15 TO 35,90
   @ 10, 10 SAY "Campos a incluir" OF oDlg1 PIXEL
    @ 25, 10 XBROWSE oBrw SIZE 105,80 pixel OF oDlg1 ARRAY aEst ;
      HEADERS "Muestra", "Campo";
      COLUMNS 1, 2 ;
      CELL LINES NOBORDER FASTEDIT
   WITH OBJECT oBrw
      :nEdittYPEs := 1
      :aCols[ 1 ]:SetCheck()
      :CreateFromCode()
   END  
   @ 45,10 BUTTON oBot1 PROMPT "&Imprimir" OF oDlg1 SIZE 30,10  ACTION ((mrta := .t.), oDlg1:End() ) PIXEL
   @ 45,20 BUTTON oBot2 PROMPT "&Cancelar" OF oDlg1 SIZE 30,10  ACTION ((mrta := .f.), oDlg1:End() ) PIXEL
ACTIVATE DIALOG oDlg1 CENTER
IF !mrta
   RETURN  NIL
ENDIF
REPORT oRep TITLE "Listado" FONT  oFont1,oFont2,oFont3 HEADER "Encabezado" RIGHT;
       FOOTER "Hoja:" + STR(oRep:npage,3) + SPACE(40)+"Fecha:"+DTOC(DATE())  PREVIEW
FOR i := 1 TO LEN(aEst)
    IF aEst[i,1]
       oCol := MakeRepCol( oRep, i, oQry )
    ENDIF
NEXT i

oRep:oTitle:aFont[1] := {|| 3 }
oRep:bInit := {|| oQry:GoTop() }
oRep:bSkip := {|| oQry:Skip() }
END REPORT
ACTIVATE REPORT oRep WHILE !oQry:EOF() ON STARTPAGE oRep:SayBitmap(.1,.1,"LOGO.BMP",.5,.5)
oQry:End()
RETURN NIL

static function MakeRepCol( oRep, i , oQry)

   local oCol, bData, cPic, nSize
   local cAlign

   
   bData := { || oQry:FieldGet(i) }
   
   nSize       := oQry:FieldLen(i)
   cPic        := IF(oQry:FieldType(i)=="N",;
                       REPLICATE("9",oQry:FieldLen( i ))+"."+REPLICATE("9",oQry:FieldDec( i )),NIL)
   cPic        := IF(RIGHT(cPic,1)=".",LEFT(cPic,LEN(cPic)-1),cPic)
   if bData != nil

      cAlign   := If( oQry:FieldType(i) == "C", "LEFT", "RIGHT" )
      oCol := RptAddColumn( { { || oQry:FieldName(i) } }, nil ,;
                            { bData }, nSize, { cPic } ,;
                            nil, .f., nil ,;
                            cAlign, .F., .F., nil, ;
                            .f.,.f., ;
                            nil, nil, nil, nil )

   endif

return oCol
 


Tambien podrías llenar con .t. los campos que quieres por defecto que el listado incluya, en incluso agregar si quieres totalizar o no un campo.
Espero que al menos te sirva como guia.
Saludos


CMSOFT, voy a revisar lo que me propones, igual te comento que al usuario no le dare lista de los campos...explico..es un xbrowse con varias columnas, asi como lo muestra Navarro en su primer mensaje, si el usuario quiere mandan imprimirlo como esta con todas las columnas que se ven en pantalla,

ejemplo: CODIGO - NOMBRE - CEDULA - DIRECCION - _....

pero luego se le ocurre hacer de ese mismo uno que sea solo... CODIGO - NOMBRE - _... y asi sucesivamente, la idea no es hacer un reporte con cada combinacion, sino que el usuario oculte o mueva las columnas que quiera..y cuando el decida entonces mande imprimir con las columnas en pantallas y si luego quiere otro pero con CODIGO - NOMBRE - DIRECCION, oculte _ y muestre DIRECCION, creo esta clara la idea..para no ser tan repetitivo, creo que oBrw:Report() hace parte de lo que quiero, ahora el punto es para agregarle por defecto el logo de la empresa y si hay alguna columna que lleve total saber cual es, que alli creo ayuda lo que sugieres, revisare con detalle...gracias...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 40 guests