Ayuda Para resetear campo numerico |
Responder |
Autor | |
agg33
Nuevo Unido: 12/Septiembre/2019 Localización: Madrid Estado: Sin conexión Puntos: 9 |
Tema: Ayuda Para resetear campo numerico Enviado: 12/Septiembre/2019 a las 09:22 |
Hola compañeros, gracias por la ayuda que me prestais diariamente.
os leo muy amenudo, para resolver dudas. a ver si me podeis echar una mano. tengo una base de datos. access. el tema es que al realizar facturas las tengo limitadas numéricamente para que se rellenen las limito con este código, cada numeración de serie lleva un límite diferente. la cuestión es que al llegar al límite de 999, como le digo que regrese al inicio? Gracias de antemano por vuestra ayuda. Else If (serie = 2) Then 'SERIE 2 MsgBox "Serie2" '-----------------SERIE 2 'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie2_Emilia.Id) AS contador FROM Numeracion_Factura_Serie2_xxxxx;" Set r1 = db.OpenRecordset(strSQL1) numeracion = r1![contador] + 1 + 999 'Reservarla para la proxima vez strSQL2 = "INSERT INTO Numeracion_Factura_Serie2_xxxxx (Numeracion) VALUES('1');" DoCmd.RunSQL (strSQL2) 'Asignar nFactura a la factura Me.NFactura = numeracion |
|
Maverick2019
Habitual Unido: 10/Junio/2019 Localización: Madrid Estado: Sin conexión Puntos: 145 |
Enviado: 12/Septiembre/2019 a las 11:43 |
Hola
Pues verifica cual es la numeración, y si es 999 le asignas el 1. Tan sencillo como poner un IF...ELSE Salu2,
|
|
agg33
Nuevo Unido: 12/Septiembre/2019 Localización: Madrid Estado: Sin conexión Puntos: 9 |
Enviado: 12/Septiembre/2019 a las 16:08 |
Hola muchísimas gracias por tu pronta respuesta.
La verdad es que ando un poco perdido. Podrías indicarme que tendría que poner para que funcionara. Sería eso que regresara del 999 al 1. Gracias por tu tiempo. |
|
Maverick2019
Habitual Unido: 10/Junio/2019 Localización: Madrid Estado: Sin conexión Puntos: 145 |
Enviado: 12/Septiembre/2019 a las 16:23 |
Hola
'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie2_Emilia.Id) AS contador FROM Numeracion_Factura_Serie2_xxxxx;" Set r1 = db.OpenRecordset(strSQL1) if r1!(Contador)=999 then Numeracion=1 else numeracion = r1![contador] + 1 + 999 end if A grosso modo, según el código que has puesto. Salu2,
|
|
agg33
Nuevo Unido: 12/Septiembre/2019 Localización: Madrid Estado: Sin conexión Puntos: 9 |
Enviado: 12/Septiembre/2019 a las 16:56 |
Hola muchísimas gracias. Si el siguiente código es igual con las diferentes series.
Voy a probarlo. Luego te cuento. Un saludo. Y un millón de gracias. Si funciona me salvas la vida |
|
Maverick2019
Habitual Unido: 10/Junio/2019 Localización: Madrid Estado: Sin conexión Puntos: 145 |
Enviado: 12/Septiembre/2019 a las 17:00 |
Suerte...
|
|
agg33
Nuevo Unido: 12/Septiembre/2019 Localización: Madrid Estado: Sin conexión Puntos: 9 |
Enviado: 12/Septiembre/2019 a las 21:30 |
Hola muchisimas gracias por tu ayuda.
no me funciono, seguramente estoy metiendo la pata y no consigo dar con ello. te pongo todo el codigo a ver si me pudieras dar algo de luz. seguramente es una chorrada. pero no la veo. gracias de antemano. 'GENERAR NUMERACION DE FACTURAS SEGUN LA LINEA Y LA SERIE DE NUMERACION Dim numeracion As String Dim db As DAO.Database Set db = CurrentDb Dim r1 As DAO.Recordset Dim strSQL1 As String Dim strSQL2 As String If (Me.linea_facturacion = 1) Then MsgBox "xxxx" '----------------xxxxx---- Dim serie As Integer serie = Me.serie_facturacion If (serie = 1) Then 'SERIE 1 MsgBox "Serie1" '-----------------SERIE1 'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie1_xxxxx-.Id) AS contador FROM Numeracion_Factura_Serie1_xxxxx-;" Set r1 = db.OpenRecordset(strSQL1) numeracion = r1![contador] + 1 'Reservarla para la proxima vez strSQL2 = "INSERT INTO Numeracion_Factura_Serie1_xxxxx- (Numeracion) VALUES('1');" DoCmd.RunSQL (strSQL2) 'Asignar nFactura a la factura Me.NFactura = numeracion '----------------- Else If (serie = 2) Then 'SERIE 2 MsgBox "Serie2" '-----------------SERIE 2 'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie2_xxxxx-.Id) AS contador FROM Numeracion_Factura_Serie2_xxxxx-;" Set r1 = db.OpenRecordset(strSQL1) numeracion = r1![contador] + 1 + 999 'Reservarla para la proxima vez strSQL2 = "INSERT INTO Numeracion_Factura_Serie2_xxxxx- (Numeracion) VALUES('1');" DoCmd.RunSQL (strSQL2) 'Asignar nFactura a la factura Me.NFactura = numeracion '----------------- Else If (serie = 3) Then 'SERIE 3 MsgBox "Serie3" '-----------------SERIE 3 'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie3_xxxxx-.Id) AS contador FROM Numeracion_Factura_Serie3_xxxxx-;" Set r1 = db.OpenRecordset(strSQL1) numeracion = r1![contador] + 1 + 999 'Reservarla para la proxima vez strSQL2 = "INSERT INTO Numeracion_Factura_Serie3_xxxxx- (Numeracion) VALUES('1');" DoCmd.RunSQL (strSQL2) 'Asignar nFactura a la factura Me.NFactura = numeracion '----------------- Else If (serie = 4) Then 'SERIE 4 MsgBox "Serie 4" '-----------------SERIE 4 'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie4_xxxxx-.Id) AS contador FROM Numeracion_Factura_Serie4_xxxxx-;" Set r1 = db.OpenRecordset(strSQL1) numeracion = r1![contador] + 1 + 2999 'Reservarla para la proxima vez strSQL2 = "INSERT INTO Numeracion_Factura_Serie4_xxxxx- (Numeracion) VALUES('1');" DoCmd.RunSQL (strSQL2) 'Asignar nFactura a la factura Me.NFactura = numeracion '----------------- Else If (serie = 5) Then 'SERIE 5 MsgBox "Serie 5" '-----------------SERIE 5 'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie5_xxxxx-.Id) AS contador FROM Numeracion_Factura_Serie5_xxxxx-;" Set r1 = db.OpenRecordset(strSQL1) numeracion = r1![contador] + 1 + 3999 'Reservarla para la proxima vez strSQL2 = "INSERT INTO Numeracion_Factura_Serie5_xxxxx- (Numeracion) VALUES('1');" DoCmd.RunSQL (strSQL2) 'Asignar nFactura a la factura Me.NFactura = numeracion '----------------- Else If (serie = 6) Then 'SERIE 6 MsgBox "Serie 6;" '-----------------SERIE 6 'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie6_xxxxx-.Id) AS contador FROM Numeracion_Factura_Serie6_xxxxx-" Set r1 = db.OpenRecordset(strSQL1) numeracion = r1![contador] + 1 + 4999 'Reservarla para la proxima vez strSQL2 = "INSERT INTO Numeracion_Factura_Serie6_xxxxx- (Numeracion) VALUES('1');" DoCmd.RunSQL (strSQL2) 'Asignar nFactura a la factura Me.NFactura = numeracion '----------------- Else If (serie = 7) Then 'SERIE 7 MsgBox "Serie 7" '-----------------SERIA 7 'Consultar por que indice va strSQL1 = "SELECT Count(Numeracion_Factura_Serie7_xxxxx-.Id) AS contador FROM Numeracion_Factura_Serie7_xxxxx-;" Set r1 = db.OpenRecordset(strSQL1) numeracion = r1![contador] + 1 + 5999 'Reservarla para la proxima vez strSQL2 = "INSERT INTO Numeracion_Factura_Serie7_xxxxx- (Numeracion) VALUES('1');" DoCmd.RunSQL (strSQL2) 'Asignar nFactura a la factura Me.NFactura = numeracion '----------------- Else MsgBox "Otra serie de facturacion" End If End If End If End If End If End If End If MsgBox "Numeracion generada" + numeracion Me.Refresh End Sub |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: en línea Puntos: 14738 |
Enviado: 12/Septiembre/2019 a las 23:18 |
Tengo la sensación que estás matando moscas a cañonazos... Analizando lo que tu has puesto (que puede no ser lo que pretendes) Veo que, en cada serie, obtienes la cantidad de documentos de esa serie (es una tabla diferente por cada serie... ¿no te serviría una sola tabla con un campo "Serie"?) Con esa cantidad, sumando 1 o otras cantidades (creo que en serie = 3 te has equivocado) obtienes el NFactura No me queda nada claro la inserción del valor '1' en las tablas Numeracion_Factura_SerieN. Yo creo que lo que pretendes es almacenar el numero que acabas de calcular (ya me dirás) Resumiendo: si linea_facturacion = 1, asignar un número de factura en base a la serie y la cantidad de documentos que contiene. También almacenamos ese numero en un nuevo registro de la tabla. Nota: asumo que tienes una tabla por cada serie (si estás a tiempo planteate un cambio de táctica) Nota: asumo que la serie 1 empieza en 1, la 2 en 1001, la 3 en 2001, etc, etc Si todo eso es, más o menos, correcto, tu código se puede sustituir por
Traducido: Si linea_facturacion = 1... Cuenta los registros de la tabla Numeracion_Factura_SerieN (dónde N es el numero de serie) y les sumas ((serie-1)*1000) + 1 .... esto es que, para la serie 1 le sumará 1, para la serie 2 le sumará 1001 y así sucesivamente Ese valor obtenido lo insertas en la tabla correspondiente Y se asigna al campo NFactura Escrito al vuelo. Los experimentos con gaseosa. Un saludo |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: en línea Puntos: 14738 |
Enviado: 13/Septiembre/2019 a las 08:31 |
Por cierto... no acabo de entender lo de "regresar al primer numero". Entiendo que eso generaría duplicados y, hablando de números de factura, no parece muy adecuado.
¿Como controlar eso con el código? Pues evaluando intNumFra despues del cálculo: If intNumFra >= (Me!serie_facturacion *1000) Then intNumFra = 1 + ((Me!serie_facturacion - 1) *1000 ¿Que pasaría entonces? Que el código dejaría de ser válido porque la siguiente vez que lo ejecutaras tendrías 1001documentos lo que llevaría al If y asignaria el primero de la serie. ¿Cómo lo solucionamos? Modificando el condicional If intNumFra >= (Me!serie_facturacion *1000) Then intNumFra = intNumFra - (Me!serie_facturacion *1000) En cualquier caso no acabo de entender tu forma de trabajo aunque ya se sabe que, para gustos, los colores. Nota: todo esto es teórico. |
|
agg33
Nuevo Unido: 12/Septiembre/2019 Localización: Madrid Estado: Sin conexión Puntos: 9 |
Enviado: 13/Septiembre/2019 a las 12:35 |
Hola gracias por tu recomendación.
La verdad es que es una base de datos que ya estaba echa y yo la he retomado así directamente. Entonces estoy un poco perdido y no sabía cómo solucionar este tema. Probare eso que me recomiendas a ver si doy con la solución. Como siempre un millón de gracias |
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |