Necesito hacer una base de datos en access, donde pueda generar números de factura a partir de un valor específico. Estas facturas una vez que la envíe a imprimir no debe dejarme acceder a ellas para que no se puedan volver a imprimir. Además debo tener la posibilidad de sacar 2 copias de cada una. ¿Cómo hago esto?
3 Respuestas
Respuesta de lukaspelukas
1
1
lukaspelukas, Aplicaciones en Access para la gestión de proveedores,...
En un principio, deberás crear una tabla, "Facturas emitidas" (Por ejemplo) asignando el valor autonumérico como clave principal de la tabla "Facturas emitidas" sin duplicados e incremental conseguirás el número de factura, si creas una consulta con todos los campos de la tabla, asignando en "criterios" el valor "Es Nulo", y un formulario que tome los datos de esa consulta, una vez cerrada no permitirá volver a abrirla (se abre con un nuevo registro). El tema de imprimir dos copias es cuestión de crear un botón en el formulario con la función "ejecutar macro", creas la macro que abrirá el informe correspondiente al formulario en el que has estado introduciendo los datos de la factura, en vista de impresión, le indicas a la macro que imprima dos copias.
Para imprimir n copias, puedes poner este código en Eventos del informe (Al Activar), te lo pongo con la variable NumCopias para que puedas, con un poco de imaginación, montártelo para que imprima las copias que te interese (InputBox), etc... Dim NumCopias As Integer NumCopias = 1 DoCmd.PrintOut acPrintAll, , , acHigh, NumCopias, True DoCmd.Close En el botón del formulario donde abres esta consulta, le tienes que poner que la abra en modo de Vista Preliminar, sino ya por si solo te imprimirá una copia. Lo de DoCmd. Close, lo hago para que no te muestre la vista Preliminar, es decir que solo lo abre, Imprime las copias y lo cierra automáticamente. Lo de generar num de factura automáticamente, lo más fácil es buscar mediante consulta cual es el ultimo y decirle que el NumFactura, es el ultimo + 1. Esto se puede hacer, mediante código. Dim Sql as String Dim Db as DataBase Dim RsNumFactura as Recordset Dim MaxNumFactura as Integer Dim NumFactura as Integer Set Db = CurrentDb Sql = "SELECT Max(Tabla1.NumFactura) As MayorNumFactura FROM Tabla1;" Set RsNumFactura = Db.OpenRecordset (Sql) If RsNumFactura Not EOF then MaxNumFactura = RsNumFactura.Fields ("MayorNumFactura") Else MsgBox "No Existen Facturas" End If NumFactura = MaxNumFactura + 1 Luego, solo tienes que insertar el NumFactura dentro de la tabla facturas mediante una consulta de datos anexados desde código. Siguiendo dentro de este código: Sql = "INSERT INTO Tabla1(id,NumFactura,Nombre,............)" _ + " SELECT "+Me.IdFactura+", "+NumFactura+","""+Me.Cliente.Value+", " ........+";" Db. Execute Sql Lo que va dentro de la variable Sql (Tipo Strig), lo más fácil es crear la consulta con el asistente y luego verla como SQL, copiar y pegar en el código (modificando los campos ppor las variables que tengas, así no te vas a liar con el lenguaje SQL. Para que no puedad imprimir la factura más de una vez, lo mejor seria insertar un campo si/no en la tabla donde tienes las facturas, y en el mismo botón de abrirlas, donde hemos dicho que lo harán en vista preliminar, mediante una consulta de actualización, lo marque en True, con lo cual ya sabes que está imprimida, este cuadradito (Campo) no tiene por que ser visible en el formulario, luego puedes poner antes de abrir el informe, un IF Me.FacturaImprimida.Value = True Then MsgBox "La Factura ya esta imprimida y no se puede volver a imprimir" Else Docmd. OpenReport ... En el MsgBox, te puedes ingeniar lo que quieras, como por ejemplo un InputBox donde pida contraseña para poder imprimir copias, (Los Clientes siempre pierden las facturas y piden duplicados, te lo digo por experiencia :-) ) Creo que te he liado un poco la existencia, si tienes dudas, estoy a tu disposición.
- Anónimoahora mismo
Respuesta de novatoacsslp
1
1
novatoacsslp, programacion en vb,clarion, manejo de bd sql...
Normalmente todas las facturas llevan un consecutivo por que lo mejor seria que a la estructura de la tabla de el encabezado de la factura le agregues un campo estra que funcionara como una bandera y al momento de imprimir cambies el valor de esta bandera para que puedas efectuar diversas funciones. Si el reporte de la factura lo mandas llamar desde un botón al momento de abrir el formulario de la factura deberás de verificar si esta activa esta bandera pra permitir imprimir o no la factura esto es lo que se me hace más sencillo
Hola: No entiendo a que le llamas bandera ni como se hace. Otra cosa, me dices "al momento de imprimir cambies el valor de esta bandera", lo que necesito es no tener que cambiar ningún valor, la bd que estoy haciendo no es para manipularla yo, es un usuario y no debe tener acceso a la misma. Un saludo
Si me puedes enviar la estructura de tu base te podría ayudar mejor de esta manera realizaría el cambio directamente y explicaría lo que se hace