Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 3
Ir a la página 1, 2, 3  Siguiente
 
Reportes En HTML
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Reportes En HTML 
 
Aquí presento una clase que sirva para volcar el contenido de un recordset en un archivo HTML.

Tiene algunas deficiencias fácilmente subsanables porque trato de hacer código comprensible mas que completo.

Entre las deficiencias mencionadas indico que cada rutina recibe un string con el nombre de un fichero donde se vuelcan los datos. Sería mejor abrir el fichero en la primera rutina y cerrarlo en la última. Las rutinas por tanto en vez de recibir un string y tener que volver a abrir y luego cerrar el archivo simplemente recibirían el puntero y continuarían escribiendo en él lo que les tocara.

Otra deficiencia es que no se contempla la posibilidad de alinear a la derecha o al centro los campos en cada columna de linforme. Esto es fácil de hacer pero para ello debería pasar como argumento un array con los campos que se quieren y la alineación que se desea y he preferido obviarlo a cambio de una mejor comprensión del código.

Otra deficiencia es que no se contempla que en el informe se desee un ancho de columna distinto de la longitud del campo en la tabla. Para solucionarlo habría que hacer lo mismo que ocn la alineación. Es decir pasar un array donde se indique la longitud de los campos en el informe para definir el ancho de columna.

Por último no he incluído la posibilidad de incluir campos resumen.

Cuando haya optimizado este código es posible que acabe programando un componente con ello.

Rutinas en la clase
Las rutinas son las siguientes:

Cabecera ---> función privada de la clase que recibe los argumentos variables que se quieran incluir en el encabezado del HTML.
Pie ----> función privada de la clase que recibe los argumentos variables que se quieran incluir en el pie del código HTML
Cuerpo ---> función privada que recibe un recordset y devuelve un archivo temporal con código HTML en el que se encuentran tabulados los datos de la tabla
InformeHtml ----> función pública que genera un informe HTML a partir de un recordset. Utiliza las funciones anteriores para la generación del código.

-----------------------------------------------------------
La función Cabecera
   Parámetros de entrada
      Titulo ---> Tïtulo que debe tener el informe en la cabecera
      Vertical ----> Si el informe será vertical o apaisado. Si es vertical será TRUE y si es apaisado FALSE.
   Parámetros de salida
      Devuelve de salida un string con la ubicación del archivo que ha creado
Private Function Cabecera(Titulo as string, Vertical as boolean) as string
DIM x AS  Integer, Fichero as string, F as File
DIM  linea[22] AS  String
Linea[0]  =  "<!DOCTYPE HTML PUBLIC ' -//W3C//DTD HTML 4.01 //EN'  'http://www.w3.org/TR/html4/strict.dtd'> "
Linea[1]  =  "<html><head>"
Linea[2]  =  "<meta http-equiv  =  'Content-Type'  content='text/html; charset=iso-8859-1 >"
Linea[3]  =  "<meta name='description' content= 'Información corporativa de aplicación '> "
Linea[4]  =  "<meta name= 'keywords ' content =' factura, albaran, pedido, orden, proveedor, almacén, trabajador,  cliente, horario, turno, incidencia, proyecto' >"
Linea[5]  =  "<title> Aplicación </title >"
Linea[6]  =  "<LINK  rel ='style sheet'   type =' text/css' href= 'http://localhost/Themes/default/style.css?fin11' >"
Linea[6]  =  " &nbsp;"
Linea[7]  = "</head> "
Linea[8]  =  "<body>"

IF vertical THEN '-------> decidir si el informe será vertical o apaisado  
   linea[8]  & = "<div style ='width: 100% '> "
ELSE
   linea[8]  & = "<div style =' width: 300% '> "
ENDIF

linea[9]  = "<table width='100%' cellpadding =' 0'   cellspacing =' 0'  border=' 0' >"
Linea[10]  =  "<t r><td  width =' 15 0px; '><img.src= 'http://localhost/imagen/logo.gif Alt=''></td> "
Linea[11]  =  "<td width= '10 %' >&nbsp; </ td >"< td>
Linea[13]  =  " <table border =' 2'  width= '100 %' ><tr><td>"
Linea[14]  =  "     <table width ='100%'  cellpadding = '2 '  cellspacing =' 2'  border =' 0' >"
Linea[15]  =  "     <tr><td><h2> " & Left(ti tulo, 45 )  & " </h2></td></t r> "
Li nea[16]  =  "    <tr><td>&nbsp;</td></tr>"
Linea[17]  =  "     <tr><td align='center'>Fecha de Impresi&oacute; n: " & Day(Now)  & "/"  & Month(Now ) &  "/" & Year(Now) & " " & Hour(Now) & ": " & Minute(Now) & "</td> </tr>"
Linea[18]  =  "     </table> "
Linea[19]  =  " </table></td></tr>"
Linea[20]  =  " </table>"
Linea[21]  =  "<br>"

' Obtener nuevo nombre para el fichero temporal
Fichero=temp()
'Crear el fichero
F=open fichero for create

FOR x =0 TO 21
   PRINT #F, Linea [x ]
NEXT
close F
return Fichero
END


----------------------------------------------------------------------
La función Pie

'   Parámetros de entrada Fichero -----> nombre del fichero donde se grabará.

PRIVATE SUB Pie(Fichero as string)
DIM Linea AS String, F as file
Linea  =  "</div></body></html> "

'Imprimir el pie
F=open fichero for write
print  #F,  Linea
close F
END


-------------------------------------------------------------------------------------
La función Cuerpo
Recoge el recordset y vuelca los datos en una tabla html que agrega al informe.
   Parámetros de entrada:
      Query ----> recordset con los datos a volcar
      Fichero ---> Fichero donde escribir

PRIVATE SUB Cuerpo( Query as result, Fichero as string )
DIM  Linea  AS String, Dim Campo as resultfield
Dim F as file

'Abrir el fichero donde escribir
F=open Fichero for write
PRINT #F , "<table width ='100%' cellpadding= '0'  cellspacing ='0'  border ='0'>"
PRINT #F ,"<tr><td Align='center' width ='90%'>"<td>
print #F,"<table width ='100%' cellpadding= '0'  cellspacing ='0'  border ='0'>"

'Escribir cabecera de campos
print #F,"<tr>"
for each Campo in Query
   print #F, "<td align='center' width='" & Campo.length & "'">Campo.name</td>
next

'Escribir campos
do while Query.Available
   for earch Campo in Query
      Linea &= "<td>"|" & Query.fields(Campo.name) & "|</td>"
   next
   print #F,linea
next

print #F,</tr>
print #F,"</table>
print #F,"</td></tr></table>

'cerrar el fichero
close #1

end


-----------------------------------------------------------
La función InformeHTML que genera el informe
Parámetros
   entrada
      Titulo ----> El título que aparecerá en el encabezado del informe
      Query ----> Un recordset que contiene los datos a imprimir
      Vertical ----> TRUE si el informe se quiere vertical. FALSE si el informe se quiere apaisado.
   Salida
      Fichero ---> el nombre del fichero temporal ubicado en /tmp donde quedó el informe generado.

Public Function InformeHtml(Titulo as string, Query as result, Vertical as boolean) as string
Dim ArchivoTmp as string

ArchivoTmp=Cabecera(Titulo,Vertical) '---> En Archivotmp queda la cabecera del informe
Cuerpo(Query,ArchivoTmp) '---> Se imprime en el informe el contenido del recordset
Pie(ArchivoTmp) '---> se imprime el pie del informe

Return ArchivoTmp ----> Devuelve el nombre del archivo que contiene el informe en formato HTML
end

 



 
última edición por soplo el Viernes, 15 Enero 2010, 00:52; editado 5 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
Aquí hago un añadido al código anterior en el que se crea un informe y se envía por email a un destinatario

Los datos básicos de transmisión (smtp, usuario, clave, host, puerto smtp, etc) se obtienen de un supuesto archivo de configuración

Public sub EnviarEmail(Destino as string,Asunto as string,TextoEmail as string,Adjunto as string)
Dim Smtp as SmtpClient, Adjunto as string

Smtp=new smtpclient

Smtp.to=Destino
Smtp.from=Setings[Email/EmailOrigen,"admin@dominio.com"]
Smtp.Subject=Asunto
Smtp.host=settings[Email/Host,"localhost"]
Smtp.user=settings[Email/User,"Usuario"]
Smtp.password=settings[Email/Password,"123456"]
Smtp.port=Settings[Email/Port,"25"]
Smtp.add(TextoEmail,Settings[Email/Mime,"text/plain",Adjunto]

end


El Adjunto sería el archivo devolvió la rutina InformeHtml en el código anterior.
De esta forma podemos enviar un informe html de un recordset llamando únicamente a la rutina InformeHtml para generarlo y a la rutina EnviarEmail para enviarlo.
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
Tengo hecho algo parecido, pero en lugar de implicar directamente el código html en el código gambas, utilizo una plantilla (template) que permite la edición del listado de manera independiente a la de la consulta de la base de datos.
No sé si es publicable aquí, que es parte de un proyecto mucho mayor, pero si interesa tal vez pueda extractar algo...
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
Bueno, no expongas todo el código si eso te da trabajo. Expon la idea para que los demás podamos ver como aplicarlo y con eso es suficiente.

Gracias
 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
Efectivamente el código fuente no está presentable, el pobre... (ya sabéis hay dos tipos de programadores, los que nunca comentan su código y los que no se acuerdan de cómo se hace...). Pero os adjunto un enlace a un .pdf con las pantallas de la aplicación que se encargan de configurar e imprimir un listado vía plantilla .html Si os interesa... pues no me importaría adecentar el código y subirlo después. Eso sí... sin prisas por favor, como decía el de la Voll-Damm

 impresion_gambas.pdf
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
Agradecido shordi, que ya veo que te ha costado.

Voy a echarle un vistazo a ver
   
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
shordi,
esto es una gran idea, pero no una idea cualquiera, es un pedazo de idea, haber quienes el guapo de poner en marcha y hablar con el principal para que lo coloque en gambas.
 



 
david - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
Joer, anima ver que lo que uno trajina en su solitaria cueva pueda ser útil a otros... ya mismo me encargo de hacer una versión tipo "utilidad" que os sirva de ejemplo y a la vez sea utilizable.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
Muy interesante shordi.

Si necesitas ayuda dilo. De hecho a mi me parece que si hiciéramos de este proyecto algo traducible a diversas lenguas sería una magnífica herramienta para desarrolladores de todo el mundo, solo que no tengo ni idea de como se hace eso de traducir strings aunque se que gambas tiene una capacidad muy poderosa para ello.

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes En HTML 
 
Hola me he descargado el enlace de shordi,  perdona pero soy nuevo en gambas y no se como implementas los tags y Loop en gambas para enlazar con la plantilla, si pudieras publicar un ejemplo mas de uno te lo agradeceríamos.

Muy versátil y muy buena idea.

Un saludo a todos, espero que el foro funcione.
 



 
angelnu - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Parsear HTML En Gambas destroyer General 4 Jueves, 03 Febrero 2011, 01:35 Ver último mensaje
razaAztk
No hay nuevos mensajes HTML Entities razaAztk General 5 Viernes, 18 Febrero 2011, 23:03 Ver último mensaje
razaAztk
No hay nuevos mensajes Impresión HTML: Generador De Listados HTM... shordi Aplicaciones/Fragmentos de Código 7 Martes, 02 Julio 2013, 08:50 Ver último mensaje
shordi
No hay nuevos mensajes Maquetacion Basica En HTML Y CSS Shell HTML y CSS 0 Sabado, 25 Abril 2020, 11:33 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 3
Ir a la página 1, 2, 3  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron