** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Ayuda Para resetear campo numerico
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Ayuda Para resetear campo numerico

 Responder Responder
Autor
Mensaje
agg33 Ver desplegable
Nuevo
Nuevo


Unido: 12/Septiembre/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita agg33 Cita  ResponderRespuesta Enlace directo a este mensaje 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
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 63
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Maverick2019 Cita  ResponderRespuesta Enlace directo a este mensaje 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,
Arriba
agg33 Ver desplegable
Nuevo
Nuevo


Unido: 12/Septiembre/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita agg33 Cita  ResponderRespuesta Enlace directo a este mensaje 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.
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 63
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Maverick2019 Cita  ResponderRespuesta Enlace directo a este mensaje 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,
Arriba
agg33 Ver desplegable
Nuevo
Nuevo


Unido: 12/Septiembre/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita agg33 Cita  ResponderRespuesta Enlace directo a este mensaje 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
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 63
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Maverick2019 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 12/Septiembre/2019 a las 17:00
Suerte...
Arriba
agg33 Ver desplegable
Nuevo
Nuevo


Unido: 12/Septiembre/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita agg33 Cita  ResponderRespuesta Enlace directo a este mensaje 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

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 12082
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje 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

    Dim intNumFra  As Integer
    If Me!linea_facturacion = 1 Then
        intNumFra = DCount("*", "Numeracion_Factura_Serie" & Me!serie_facturacion) + ((Me!serie_facturacion - 1) * 1000) + 1
        CurrentDb.Execute "INSERT INTO Numeracion_Factura_Serie" & Me!serie_facturacion & " (Numeracion) VALUES ('" & CStr(intNumFra) & ")", dbFailOnError
        Me!NFactura = intNumFra
    End If

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, un minyó de Terrassa

Mi web
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 12082
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje 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. 

Xavi, un minyó de Terrassa

Mi web
Arriba
agg33 Ver desplegable
Nuevo
Nuevo


Unido: 12/Septiembre/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita agg33 Cita  ResponderRespuesta Enlace directo a este mensaje 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
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable