Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Reportes
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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...
 



 
alessandri - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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  
 



 
chen_08 - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Reportes 
 
Hola.

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

Saludos
 



 
abarzuaf - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
david - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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

 



 
alessandri - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
alexprox - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes A Vueltas Con Los Reportes soplo General 16 Viernes, 11 Febrero 2011, 06:07 Ver último mensaje
soplo
No hay nuevos mensajes Reportes Josec General 1 Miercoles, 23 Noviembre 2011, 16:45 Ver último mensaje
Josec
No hay nuevos mensajes Reportes Pdf gustavo_fleitas General 3 Martes, 13 Agosto 2013, 06:01 Ver último mensaje
jousseph
No hay nuevos mensajes Reportes? soldadozero Controles/Librerías/Componentes 9 Miercoles, 25 Septiembre 2013, 20:17 Ver último mensaje
soldadozero
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

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