Reportes


Objetivo: Reportes
hola amigos:

Generar reportes con el objeto TextArea

Este es mi primer aporte en este foro y espero que les guste y les sea útil.

¿Porque uso este objeto para generar reportes?

a) se puede exportar los datos reportados hasta cualquier procesador de texto
b) es compatible con cualquier impresora previamente instalada
c) es rápido
d) muy flexible. (tan flexible que puedo consultar de 1 hasta 50 tablas si fuera necesario)
e) en un solo formulario se pueden hacer hasta 20 reportes y mas
f) puedo tomar decisiones (if the else) en medio de la consulta
g) puedo introducir valores en medio de la consulta, Ej, se puede introducir una tasa de interés, un valor o rango de valores para que se aplique a ciertos registros que cumplan con determinadas características.
h) puede ordenar los datos y hacer cualquier calculo en vertical y horizontal, entre otras cosas...

Manos a la Obra.

Objetos necesarios:
1-labels
2-valuebox
3-combobox
4-command
5-textArea

Nota: Como vengo de visual basic 6.0 en ocasiones llamo a los controles como en VB6.0.
También advierto que soy Lic. en Contabilidad y uso algunos términos de esa profesión

Nombre de los controle
valuebox=hasta
combobox=empleados
command=ver
command=imprimir
textarea=reporte

Nota: Considere también que hay funciones definidas por 'mi' que no funcionaran y deberá ignorarlas, así como también
debe crear las tablas y las conexiones de tal manera que funcionen.

he publicado en la siguiente dirección otro articulo que contiene algunas de mis funciones:http://alessandricp.wordpress.com/

Aquí esta el código del reporte completo.

' gambas class file
PRIVATE Ado1 AS Result 'Ado de consulta
PRIVATE Ado2 AS Result 'Ado de consulta
PRIVATE Ado3 AS Result 'Ado de consulta
PRIVATE res AS Integer 'Resultado de MSQ¿?
PRIVATE Vrep AS String ' Contiene el reporte
PRIVATE ln AS String 'Salto de linea
PRIVATE lineas AS Integer 'Cantidad de lineas actuales
PRIVATE pagina AS Integer 'Numero de pagina
PRIVATE informe AS String[400] 'Contiene el informe paginado
PRIVATE ACTL2 AS Integer 'Numero de pagina actual para imprimir
PRIVATE fechaV AS String 'fecha del movimiento
PRIVATE codigoV AS String 'codigo de cobro
PRIVATE transaccionV AS String 'numero de transaccion
PRIVATE clienteV AS String 'nombre del cliente****puede que no la utilice
PRIVATE valorV AS String 'valor de recibo****puede que no la utilice
PRIVATE usuarioV AS String 'codigo de usuario
PRIVATE indice AS Integer 'Indice de lista
PRIVATE cod AS Integer 'Codigo del empleado

PUBLIC SUB Form_Open()
Module1.Conectar2 'Conecta a base de datos
EstadoEmpleados.x = FMain2.X
EstadoEmpleados.Y = FMain2.Y
CarList()
END

PUBLIC SUB Timer1_Timer() ' Sistema de privilegios de formularios ***** puede que tenga que comentar este SUB
IF FMain2.p30 = 0 THEN
Timer1.Stop()
Module1.MSC("No tiene autorización.")
ME.Close()
ENDIF
Timer1.Stop()
END

PRIVATE FUNCTION Fnumeros(Cadena AS String) AS String 'Formate a numero DE 9999.44 a 9,999.44
DIM tm AS String
DIM l AS Single
DIM z AS String
DIM final AS String

Cadena = Trim(Cadena)
Cadena = Module1.Numeros(Cadena)
Cadena = Format(Cadena, "$,##0.#0")

tm = Len(cadena)
FOR l = 1 TO tm
z = Mid(Cadena, l, 1)
IF z <> "$" THEN final = final & z
NEXT
RETURN LTrim(final)
END

PUBLIC SUB desde_KeyPress() 'permite mandar el foco de un objeto a otro con ENTER
IF Key.Code = Key.Enter OR Key.Code = Key.Return THEN hasta.SetFocus
END

PUBLIC SUB hasta_KeyPress() 'permite mandar el foco de un objeto a otro con ENTER y llama un SUB
IF Key.Code = Key.Enter OR Key.Code = Key.Return THEN ver_Click()
END

PUBLIC SUB ver_Click() 'Funcion personalizada ESDATE()
IF Module1.Esdate(hasta.Text) = FALSE THEN
Module1.MSE("Fecha final Incorrecta.")
hasta.SetFocus
RETURN
END IF

IF Module1.Esdate(empleados.Text) = "" OR cod = "" THEN
Module1.MSE("Debe seleccionar un Empleado.") 'Funcion personalizada de mensajeria
hasta.SetFocus
RETURN
END IF

reporte.Text = ""
BuscarD() 'Busca los datos a reportar
END

PUBLIC SUB imprimir_Click()
DIM ACTL AS Integer 'Numero de pagina actual a imprimir

res = Module1.MSQ("Desea imprimir este Reporte?")
IF res = 1 THEN
FOR ACTL = 0 TO pagina - 1
ACTL2 = ACTL
Imprime() ' Imprime el REPORTE
NEXT
END IF
END

PRIVATE SUB Imprime() ' Imprime el REPORTE
Draw.Begin(Printer)
Draw.Font.Name = "Courier"
Draw.Font.Size = 9
Printer.Orientation = Printer.Portrait
Draw.Text(informe[ACTL2], 200, 200)
Draw.End
END

PRIVATE SUB BuscarD() 'Busca los datos a reportar
DIM toc AS Integer 'Total clients
DIM tot AS Single 'Total de cxc
DIM i AS Integer 'Control de ciclo
DIM des AS String 'Fecha inicial
DIM has AS String 'Fecha final
DIM fec AS String 'Fecha de transaccion
DIM det AS String 'Detalle de transaccion
DIM tra AS String 'Numero de transaccion
DIM deb AS String 'Debito entransaccion
DIM cre AS String 'Credito en transaccion
DIM blc AS Single 'Balance en Movimiento

pagina = 0
Titulo1() 'Pone el titulo

ln = Chr$(10)

has = Module1.FecSQL(hasta.Text)

'REPORTE COMPLETO DE empleados/ Aqui selecciono cada campo de la base de datos que me interesa
Ado1 = Module1.conn2.Exec("select fecha,detalle,debito,credito,transaccion from mov_empleados use index (codigo) where codigo=" & cod & " and fecha<= '" & has & "' order by transaccion asc")
WHILE Ado1.Available

'Aqui los cargo en las variables previamente definidas
fec = Module1.FecSQL2(Ado1!fecha) ' esta funcion cambia el formato de YYYY/MM/DD A DD/MM/YYYY
tra = Ado1!transaccion
det = Ado1!detalle
deb = Fnumeros(Ado1!debito)
cre = Fnumeros(Ado1!credito)
blc = blc + (Ado1!debito - Ado1!credito)

'Esta LAAARRRRRGA linea representa cada columna y linea del Reporte
Vrep = Vrep & fec & " " & det & Space(26 - Len(det)) & tra & Space(9 - Len(tra)) & Space(13 - Len(deb)) & deb & Space(14 - Len(cre)) & cre & Space(14 - Len(Fnumeros(blc))) & Fnumeros(blc) & ln

lineas = lineas + 1 ' aqui cuento cada linea ingresada
IF lineas = 54 THEN ' aqui se decide si se debe escribir en la pagina siguiente
informe[pagina - 1] = Vrep
lineas = 0
Titulo1 'Prepara la siguiente pagina
ENDIF

toc = toc + 1
Ado1.MoveNext
WEND

Vrep = Vrep & ln

informe[pagina - 1] = Vrep 'Carga la ultima pagina

'Aqui se concatenan cada pagina en el TextArea
FOR i = 0 TO pagina - 1
reporte.Text = reporte.Text & informe[i] & ln & ln
NEXT

' pagina = 0
toc = 0
lineas = 0
toc = 0
END

PRIVATE SUB Titulo1() 'Este es el titulo del reporte
ln = Chr$(10)
pagina += 1

Vrep = Module1.Memb & ln & ln ' Datos del formulario principal de la aplicacion que es el membrete de la EMPRESA/ anular esta linea
Vrep = Vrep & " Página:" & pagina & ln
Vrep = Vrep & " ESTADO DE CUENTA DE EMPLEADO" & ln & ln
Vrep = Vrep & "Nombr:" & UCase(empleados.Text) & ln
Vrep = Vrep & "Hasta:" & hasta.Text & ln
Vrep = Vrep & "Fecha:" & Now & ln
Vrep = Vrep & "---------- ------------------------- -------- ------------- ------------- -------------" & ln
Vrep = Vrep & "Fecha Detalle Transacc Débito Crédito Balance" & ln
Vrep = Vrep & "---------- ------------------------- -------- ------------- ------------- -------------" & ln
END

PRIVATE SUB CarList() 'Carga la lista de empleados desde la tabla empleados
Ado1 = Module1.conn.Exec("select nombre from empleados where estado='1' order by nombre asc")
indice = 0
empleados.Clear
DO WHILE Ado1.Available
indice += 1
empleados.Add(Ado1!nombre, indice)
Ado1.MoveNext
LOOP
END

PUBLIC SUB empleados_Click() 'Busca codigo de empleado
Ado1 = Module1.conn2.Exec("select codigo from empleados where nombre='" & empleados.Text & "'")
cod = Ado1!codigo
END


****************El reporte se ve Asi.....***************

reporte_empl

Espero les sea útil...

Perfil MP  
Objetivo: Re: Reportes
Hola alessandri !!

Gracias por el aporte pero creo que debes subir el proyecto ya que como veo te faltaron algunos controles como "Timer" entre otros..!! También veo que utilizaste un modulo llamado "Module1" es decir que hace falta algunos pedazos del código para que el programa pueda andar !!

Pero por lo demás como veo la imagen se ve muy bien el reporte !! Saludos y Bienvenido al foro

Objetivo: Re: Reportes
Hola.

Gracias por tu aporte, es una excelente alternativa para los que utilizamos Gnome.

Saludos

Perfil MP  
Objetivo: Re: Reportes
yo opino lo mismo que chen_08 comprime y envia el proyecto por favor que el proyecto que as echo esta muy bien e interesante para los que queremos quitarnos el html de encima

Perfil MP  
Objetivo: Re: Reportes
hola amigos,

he preparado un ejemplo mas sencillo. tambien incluyo un bk de mysql para que puedan restaurar la DB
y no tengan problemas para ejecutarlo.


Reporte ejemplo textarea.zip
Descripción: contiene el proyecto y un backUp de la base de datos el cual debera restaurar usando Mysql Adminstrator 
Descargar
Nombre del archivo: Reporte ejemplo textarea.zip
Tamaño: 54.77 KB
Descargado: 113 veces
Reporte ejemplo textarea.zip
Descripción: contiene el proyecto y un backUp de la base de datos el cual debera restaurar usando Mysql Adminstrator 
Descargar
Nombre del archivo: Reporte ejemplo textarea.zip
Tamaño: 54.77 KB
Descargado: 113 veces
Reporte ejemplo textarea.zip
Descripción: contiene el proyecto y un backUp de la base de datos el cual debera restaurar usando Mysql Adminstrator 
Descargar
Nombre del archivo: Reporte ejemplo textarea.zip
Tamaño: 54.77 KB
Descargado: 113 veces

Perfil MP  
Objetivo: Re: Reportes
jajaja yo hice algo parecido en un cuadro de imagen y lo guardo como jpg o pdf no me acuerdo en que formato es que lo guarde pero ase algo parecido ha imprime el jpg si lo consigo lo pulo un poco mas y lo pasteo


Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.6046s (PHP: -24% SQL: 124%)
Consultas SQL: 47 - Debug off - GZIP Activado