Hace tiempo escribí un manual para crear facturas en visual basic 6 y hoy lo recupero y agrego al blog
Bueno visto que mucha gente viene pidiendo como añadir facturas o informes, voy a hacer un pequeño tutorial sobre el uso de data report desde visual basic 6.0.
Solamente hace un par de semanas desde que aprendí a utilizarlo y no creo que domine todo lo que si interfaz engloba.
Pero, dentro de mis limitaciones, voy a intentar explicar básicamente como preparar informes, facturas y etiquetas.
Vamos al lio.
Antes de nada decir que para que funcione hará falta tener una base de datos de la que recabar la información.
Agregar Data Enviroment
Para poder usar el Data Report, agrega un dataenviroment al proyecto (Menú Proyecto/Agregar Data Enviroment).
(Para poder ver el environment y tal en agregar componentes, click derecho sobre la barra componentes/componentes/diseñadores/marcamos data report y data environment )
Vemos que se ha añadido una nueva carpeta llamada Diseñadores a nuestro proyecto.
Lo mejor es cambiarle el nombre por DEFacturas o como quieras ya que DataEnvironment1 me resulta bastante engorroso (yo no voy a cambiar el nombre a nada para que se aprecie mejor el ejemplo).
Definir conexión
Al hacer doble click sobre nuestro dataenviroment, se nos abre una ventanita con un objeto llamado Connection1, cambiarle el nombre si queréis.
Yo voy a establecer la conexión a una base de datos access 2000. Esto variara según la base de datos o procedimiento por el que deséis conectaros a los datos de los que recobraremos la información.
Click derecho sobre connection1, propiedades:
*Proveedor : Microsoft Jet 4.0 OLE Data Provider
(Siguiente)
*Conexión : Seleccionamos la que deseemos, dejando luego solamente el nombre y la extensión de la base de datos (asi podremos utilizar rutas relativas).
Si tienes que rellenar algo más pues lo rellenas xD
(Probamos conexión para comprobarlo)
Creando las consultas
A continuación creamos las consultas con las que recuperaremos la información.
Click derecho sobre Connection1, agregar comando. (recomendable cambiarle el nombre)
El nuevo objeto creado Command1 va a servir para rellenar la cabecera de nuestras facturas.
Click derecho sobre el Command1, propiedades.
Marcamos la casilla instrucción sql, y generamos la consulta con el generador o a pelo.
Explico un poco el generador de consultas.
Se abre una ventanita llamada Vista de datos, de ahí tomamos las tablas. Con doble click sobre alguna te la abre en otra ventanita, si la arrastras y sueltas sobre el generador de consultas te agrega la tabla.
Relacionamos los campos de las tablas que deseemos (por defecto relaciona las claves externas). Se relacionan arrastrando/soltando sobre los campos.
En el ejemplo hemos añadido tres tablas y las hemos relacionado entre si por codprove (para sacar los datos del proveedor) y codactividad (actividad que realiza el proveedor)
Seleccionamos los campos que nos interesen, marcando simplemente el checkbox, abajo se nos añadiran, tendremos la opción de ordenar por ese campo y otras tantas.
Con esto ya tenemos la consulta generada, de forma que nos devuelve todas las cabeceras de las facturas.
Luego explicare como hacerlo para que solamente devuelva una factura.
Relacionando Consultas
Ya tenemos la cabecera de los pedidos, ahora solamente faltan las líneas que forman cada pedido. Para ello vamos a crear otro Command haciendo click derecho sobre la conexión, agregar comando.
Click derecho propiedades, entramos al generador y seleccionamos los campos que deseemos mostrar en la factura/pedido, vamos a añadir también el numpedido puesto que nos hara falta para relacionar el cuerpo con la cabecera de la factura.
Esta vez solo he asociado lineapedidos con modulos.
Una vez seleccionados los campos guardamos, click derecho Command2 propiedades/Relación, marcamos la casilla relacionar con un comando primario, seleccionamos el nombre del command con que deseamos relacionarlo (Command1) y seleccionamos el campo por el cual se seleccionará, numpedido. Agregamos y aceptamos, ahora veremos que el Command2 se encuentra dentro del Command1. Con ésto hemos logrado que por cada línea de la cabecera tengamos todas las líneas del pedido.
Creando el diseño
Ahora vamos a crear el diseño para mostrar los datos, para ello data report presenta un interfaz bastante intuitivo y sencillo de manejar. Eso si, muy limitadito xD
Para agregarlo basta con ir al menú (Protecto/Agregar Data Report)
En la propiedad del data report lo asociamos con el datasource al enviroment que hemos creado y el datamember con el command1.
Clicamos con el botón derecho sobre el diseño y le damos a obtener estructura, aceptamos.
Clicamos con el botón derecho sobre el diseño y le damos a forzar a la cuadrícula, de este modo podremos poner las cosas sin estar obligados por las extrañas dimensiones que te indica el programa xD
Ahora abrimos con doble click nuestro enviroment y arrastramos los campos a sus cabeceras correspondientes.
Command1 al command1_header y command2 al command2_detail.
Cada vez que añades algo se agrega el campo y el nombre del campo. Podéis cambiarles las letritas y poner adornos si queréis xD
Lo recomendable en el command2_detail es solamente poner los valores y los campos de nombre asociados ponerlos en la cabecera del command1_header tal y como se muestra en el ejemplo. De esta manera no repetiréis todo el rato el nombre de los campos.
Vamos a contar también la cantidad de articulos pedidos y su precio total con las funciones que tenemos en la barra de controles del datareport. Es la E con el pergamino (la última).
Añadimos en command1_footer, un control para contar (definir propiedad functiontype) y otro para sumar. Datamember command2 y en datafield el campo sobre el que se aplicara la función.
Si queremos evitar que salgan todos los pedidos seguidos, lo mejor es activar la opción ForcePageBreak (1- rptPageBreakBefore) del command1_header para que separe las facturas por páginas.
Ahora añadiremos algo de código a nuestro datareport para que al salir cierre el recordsource que generará cada vez que lo llamemos.
Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer) DataEnvironment1.rsCommand1.Close End Sub
Como véis podemos añadir código en el datareport para realizar algunas tareas
Ya tenemos el diseño preparado. Ahora solo falta llamarlo.
Creamos un botón en nuestro formulario y en el evento hacer click ponemos.
Private Sub Command1_Click() 'aquí llamamos al data enviroment y al método que llena el datareport, no es otro que el nombre de nuestro command de cabecera DataEnvironment1.Command1 'aquí mostramo el datareport deseado DataReport1.Show End Sub
En el ejemplo he sacado una única factura,
para ello he creado otro datareport (datareport2) he añadido lo mismo que antes,
dejando la opción del before por defecto.
He añadido también dos nuevas consultas, command3 en la que la realizo igual que la anterior(command1)
simplemente cambiando las cosillas que os digo a continuación y command4 que es idéntica a command2 (lo mejor es hacer copy paste de la sentencia generada de los anteriores y modificarla).
Para sacar una factura en el paso de generar el encabezado de la consulta (Command1) en nuestro command3
haremos todo igual salvo que deberemos especificar un parámetro,
eso se hace poniendo =? en el campo criterio de la consulta.
Luego click derecho command3 propiedades pestaña Parámetros, le ponemos un nombre, Ejemplo=NumeroFactura.
Para mostrar el datareport2 se le debe llamar con el parámetro.
Añadimos un textbox en el que meteremos el num del pedido que deseamos mostrar y
un botón para realizar las acciones.
Private Sub Command2_Click()
dataenviroment1.Command3 Val(Me.Text1.Text)
datareport2.Show
End Sub
DESCARGAR Ejemplo Data Report Visual Basic 6.0 by RobiHm













31 Comentarios
hola me gustaria que me ayuden , estoy haciendo un sistema de un alquiler de video como hago un factura y que me la imprime y que me guarde al sistema
Saludos, como comprendera una cosa es un tutorial y otra que le haga todo. Me he tomado la molestia de crear varios tutoriales sobre facturación, balances y generación de etiquetas para que el resto de personas tengan una base sobre la que poder comenzar. Si es incapaz de comprender nada de todos los tutoriales o en vez de leerlos prefiere que le den todo hecho, me temo que se ha equivocado de lugar.
Saludos.
Un tutorial muy sencillo, pero de mucha utilidad.
Gracias por compartir
Saludos
Chihuahua, Chih.
Mexico
Amigos necesito su ayda con un programa de factura no tendran un ejemplo q me pueda ayuadr porfavor? alli ta mi correo para q me den una mano se los agradeceria
y el tutorial que tienes encima no es un ejemplo? xD
hola!! pues
la vdd si me sirbio demasiado pero amm
no comprendo desde ay: Ahora abrimos con doble click nuestro enviroment y arrastramos los campos a sus cabeceras correspondientes.
lo demas si me podrias ayudar jejeje la vdd grs.
mi correo es farid_tpm@hotmail.com
el enviroment es el control que hemos añadido para gestionar las consultas de los datareports, cuando digo arrastrar los campos me refiero a los campos de las tablas que aparecen, los arrastras sobre el datareports correspondiente y así nos evitamos tener que ir enlazando uno a uno ya que lo hace automáticamente
grs.
por la ayuda jejejeje
Muy bueno el tutorial, hace tiempo que no trabajaba con datareport y esto me ha refrescado los conocimiento.
Solamente tengo una duda, cuando yo estaba estudiando un profesor nos enseñó un método para traspasar los reportes a unos archivos PDF, pero sinceramente no me acuerdo de nada jajaja
Si tienes algun manual sobre eso estaría más que agradecido.
Gracias por tu tiempo
Nos vemos
lo del .pdf no me ha tocado nunca hacerlo, así que no puedo indicarte :X
me alegro de que les sirva el tutorial de ayuda
hola Demiurgo,
muy bueno el tutorial. Me ha servido de mucho.
Un saludo y a seguir,
Roberto C.
Hola, me ha gustado mucho este tutorial, estuve tratando de hacer uno un poco diferente, hice un Query en Access y relacioné en este query el detalle y la línea única de una factura, luego me fui al Dataenvironment y agregué un command y le puse el Sql del Query y obtuve la estructura en el diseño. Le di click derecho al command y me fui a los parámetros y agregué uno de tipo long poniendo en el value =Norden (osea un nombre), y en el botón del form puse dataenvironment1.facturacion_grouping 801, donde 801 es el valor numérico; pero me da un error que dice: la aplicación utiliza un valor de tipo no válido para la operación actual, me puede alguien por favor decir a que se debe esto?
el valor de tipo long lo has añadido en la consulta con un “?”, es decir primero se añade a la consulta y luego se define el parámetro (adNumeric o el que corresponda)
yo suelo utilizar siempre el tipo que pone por defecto (adVarChar) y no da ningún tipo de problema con los enteros o cualquier otro tipo de dato (fechas y demás), de hecho si pones valor numérico access te lo transforma (cambia el “.” por “,” dependiendo de la configuración del equipo, idem con las fechas)
Estupendo tu ejemplo te debo una de verdad super sencillo y con bastante sentido del humor tienes un 10 en este ejemplo
Es correcto lo que tienes en el bloq, pero una pregunta, como harías si necesitas filtrar los datos del report, un ejemplo: facturas emitidas entre dos fecha solamente
Cirilo tienes más ejemplos
http://www.miblog.indomita.org/2007/12/generar-un-informe-con-tres-commands-relacionados-en-datareport-desde-visual-basic-60.html
ok
muy interesante el Tutorial! muy bueno!
El problema que tengo es que el reporte me lo hace con todos los registros de la tabla de la BD, y yo solo necesito los de la fecha que yo indique mediante un Form, ¿como puedo hacer la busqueda en el DataEnvirontment ? con la info de mi Form
gracias por ayudar y por su tiempo!
soy novato e visual
Mister_teos simplemente debes añadir a la consulta que desees filtrar dos valores más. El intervalo de la fecha que quieres filtrar (fecha_min y fecha_max) y pasarlos como parámetros en la llamada del comand pertinente (ejemplo: dataenviroment1.Command3 fecha_min, fecha_max)
La consulta con 2 parámetros más en el where ( where bla bla bla and fecha>=? and fecha< ? )
Eso si, el intervalo de fechas tendrás que pedirlo al usuario de alguna manera y comprobar que es una fecha válida antes de usarla.
en creacion de facturas manuales en visual basic tengo que mostrar en un report todas las facturas seleccionadas y con la interrogacion solo me muestra la ultima que puedo hacer para que me muestre las 4 que me gustaria emitir? gracias
crear correctamente la sentencia sql, el tutorial es para mostrar como se relacionan sentencias sql con data reports desde visual basic, si no sabemos hacer las consultas sql lo mejor que se puede hacer es aprender
ya se suficiente sql y al final ya lo he conseguido gracias
amigo saludos tengo un pequeño sistema de facturación y realize los cambios que recomiendas pero no consigo que imprima dos registros asociados a una venta… si me das tu correo te puedo enviar esa parte para que me recomiendes lo que necesita.. Gracias
Hola amigo, disculpa, tendras un ejemplo que me sirva para poder colocar en datareport varios consultas de manera independiente una de la otra, es decir vaciar varios resulset de manera consecutiva, saludos.
no sé si te he entendido, tienes que hacer lo explicado sin relacionar las tablas
hola amigo si es asi, bueno te explico pense que podia hacerlo sin relacionarlas ya que varias de ella ya estan relacionadas y el resultado es la seleciion de campos de varias tablas, en realidad lo que quiwero hacer y no se si datareport me lo permita es colocar en el cuerpo del reporte informacion proveniente de varias consultas y no se lo correcto es relacionarlas, en report de oracle yo lo hago de las dos formas, pero si quiero tener varias consultas dentro del mismo cuerpo lo puedo hacer siempre que defina un espacio para cada uno.
ok. te entiendo, pero esa opcion de hacerlo con el comman de repente me sirva, pero nunca lo he hecho, si tengo mas de un command puedo mostrarlos todos en en report, o debo tener command hijos, es que no se como funciona esto exactamente, mi me lo explicas un poco te lo agradeceria, saludos.
Tras releerte varias veces creo que he entendido lo que quieres hacer y puedes encontrar un ejemplo práctico aquí : http://www.miblog.indomita.org/2007/12/generar-un-informe-con-tres-commands-relacionados-en-datareport-desde-visual-basic-60.html
ok. lo que quiero hacer es simplemente es halgo como esto: en un primer qry mostrar una especie matriz como las coberturas de una poliza(digamos 5 lineas), luego mas abajo con otro titulo mostrar los asegurados de esa poliza( pueden ser varios o uno), luego los siniestros que ha tenido esa poliza, como veras todo tiene relacion pero no lo se hacer, y me parecio que si tengo todo dentro de resulsets luego podria vaciarlos en un report, creo que con crystall lo puedo hacer pero no lo tengo, y la base de datos es oracle.
Revisa el link que te he pasado
Hola amigo! Tengo un pequeño problema con el DataReport Resulta que cuando ejecuto el programa no se ve el Detalle es decir todo lo que me traigo del segundo comand no aparece, de hecho las etiquetas que están en el detalle tampoco aparecen, vi las propiedades de la sección y esta visible ya no se que más ver.
Te recomiendo descargar el ejemplo ( http://www.miblog.indomita.org/wp-content/uploads/2008/12/data-report-ejemplo-by-robihm.rar ) y verificar que tienes correctamente relacionados los commands, que existen registros en la base de datos y que existen campos asociados en el datareport a los detalles.
1 Trackbacks and Pingbacks
[...] El artículo actual es la continuación del tutorial Crear Facturas/Pedidos/Etiquetas con Data Report desde Visual Basic 6.0 [...]
Escribir un Comentario