Access - Registro autonumerico

 
Vista:

Registro autonumerico

Publicado por Antonio (81 intervenciones) el 21/03/2013 12:37:32
Buenos días a todos,

Necesito crear un registro autonumerico y correlativo para cada registro de mis facturas.
Tengo una tabla (Facturaliquidaciones) y dentro de esta, existen facturas, nóminas, ingresos... A través de un combo voy selecionando que tipo de registro tengo.
Lo que quiero es que cuando registre una factura, me genere automáticamente un número. En cambio si es una nómina o ingreso tras señalar esto es número no se incremente.
Resumiendo lo que busco es un registro numérico que vaya aumentando dependiendo de la selección.

Para mi ahora creo que es imposible, pues yo he hecho lo facil que aumente indistintamente si un registro u otro.

¿Alguien podría ayudarme?

Muchas gracias por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Registro autonumerico

Publicado por Neckkito (1157 intervenciones) el 21/03/2013 12:59:46
Hola!

Echa un vistazo a este ejemplo, que te enseña cómo crearte un autonumérico manual: http://goo.gl/hRF9C

Una vez le hayas "pillado el tranquillo", lo único que tienes que hacer es lanzar el código a través de un If.

Algo así como

...
If me.cboTipoDocRegistro.value = "Factura" then
'Lanzo el código que calcula el siguiente número
End if
...

A ver si puedes adaptarlo.

Un saludo,


http://neckkito.siliconproject.com.ar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Registro autonumerico

Publicado por Antonio (81 intervenciones) el 21/03/2013 13:49:21
Muchas gracias por tu rápida respuesta.
Creo que es lo que necesito, aunque no sé como aplicarlo

Yo tenía hecho esto y funciona

Private Sub Form_BeforeInsert(Cancel As Integer)
If Me.NewRecord Then
Me.contador = DMax("contador", "facturaliquidaciones") + 1
End If
End Sub



Si mi cbo se llama SelCto y mi registro se llama contador, no sé como enlzarlo a lo que tu bien explicas.


Private Sub Form_Current()
Dim vAutonum, vUltimo As Variant
vAutonum = Me.Autonum.Value

If Not IsNull(vAutonum) Then Exit Sub

vUltimo = DMax("[Autonum]", "TDatos")

If IsNull(vUltimo) Then
vUltimo = 0
End If

vAutonum = vUltimo + 1

Me.Autonum.Value = vAutonum
End Sub

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Registro autonumerico

Publicado por Neckkito (1157 intervenciones) el 21/03/2013 14:14:30
Hola!

Te comento un par de cosas;

- En tu caso hay varios problemas. En concreto son dos los que "tocan las naricillas"
El primero, que tengas todo mezclado en la misma tabla
El segundo, que sólo actúe el contador en el caso de que selecciones factura.

Como ves, el inicio del código debe empezar desde el momento en que tú le dices qué tipo de registro quieres. Tu código actúa sin tener en cuenta eso.

Una posible solución, vistas las circunstancias, sería "sacar fuera" de tu tabla la numeración, y que dicha numeración fuera controlada a través de una tabla auxliar de numeraciones externa (en tu tabla seguiría mostrándose la numeración, pero el DMáx actuaría sobre esa tabla externa).

Otra posible solución pasaría por que sólo los registros que corresponden a facturación lleven numeración, y el resto tuviera el campo en blanco. Evidentemente eso requeriría que revisaras todos los registros de la tabla y dejaras sin contador los que no son de factura (una consulta de actualización te haría eso rápidamente).

En cualquier caso el número de registro de factura no podría ser asignado hasta que no seleccionaras qué tipo de documento quieres registrar. Eso significa que, en función de qué sistema quisieras, tu código, que es perfectamente válido, tendría que modificarse de una manera u otra.

Ya me dirás qué solución prefieres, e intento explicarte cómo se haría.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Registro autonumerico

Publicado por antonio (81 intervenciones) el 21/03/2013 17:07:41
Da gusto conocer a gente que sepa tanto y que ayude. Efectivamente partimos de un planteamiento erróneo Peri porque he tenido que rehacer la base de datos a unas necesidades nuevas y no contempladas inicialmente. Lo que en un principio era un registro de facturas ahora es de n nóminas y otros. De acuerdo a lo que dices mi mejor opción es la segunda. Pero como podría hacerlo? Espero que me ayudes en esta aventura gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Registro autonumerico

Publicado por Neckkito (1157 intervenciones) el 21/03/2013 23:05:45
Hola!

Te recomiendo que pruebes el sistema que te voy a comentar en una copia de tu BD antes de aplicarlo a la original. Simplemente es por precaución, por si algo no te sale correctamente, para que no "pierdas" tus datos.

Voy a utilizar unos nombres supuestos. Tú deberás cambiar esos nombres supuestos por los que efectivamente tengas en tu BD.

Los nombres que utilizaré son:
- [Contador] -> campo que te recoge el número de factura
- [TipoRegistro] -> campo que te recoge el tipo de registro (factura, nómina, etc.)
- "Factura" -> Valor que cogerá el combo para saber si ese registro va a ser una factura
- cboTipoRegistro -> Nombre del combo del formulario donde indicas qué tipo vas a dar de alta (Propiedades del combo -> Pestaña Otras -> Nombre)

Vamos allá...

1.- Creas una consulta sobre la tabla donde tengas los datos y añades los campos [Contador] y [TipoRegistro].

2.- Conviertes la consulta en una consulta de actualización

3.- En el campo [Contador], en la línea "Actualizar a", escribes: NULL

4.- En el campo [TipoRegistro], en la línea "Criterios", escribes: <>"Factura"

Ejecutas la consulta. Ahora, si todo ha ido bien, en tu tabla sólo las facturas deben tener valor en [Contador]

5.- Vamos al formulario. Lo sitúas en vista diseño. Bórrale el código que tienes en el evento "Antes de actualizar".

6.- Selecciona el combo y sacas sus propiedades. Te vas a la pestaña Eventos -> Después de actualizar. Vamos a escribir un código para ese evento. Te voy a poner un pequeño control para evitar errores en la introducción de datos. Ese código te va a pedir, cada vez que digas que quieres una factura, que confirmes si eso es así. Piensa que automáticamente, al seleccionar un valor en el combo, se ejecutará el código, con lo que tendrás un número nuevo de factura. Si te has equivocado tendrías que borrar el registro. Con ese control te aseguras de no seleccionar factura por error. Te lo pondré entre guiones porque, si te molesta, conviertes lo que estará entre guiones en comentario (añadiéndole una comilla simple al inicio de cada línea) y ya no te actuará.

7.- El código (que te pongo comentado) sería:

...
Private Sub....
'Declaramos las variables
Dim resp as integer
Dim vUltimo as long
Dim vCbo as string
'Cogemos el valor seleccionado en el combo
vCbo=nz(me.cboTipoRegistro.value,"")
'Si no hay valor en el combo salimos
If vCbo="" then exit sub
'Si estamos dando de alta un nuevo registro...
If me.newrecord then
'y si estamos dando de alta una factura...
If vCbo="factura" then
'--------------------------------------
'Aquí viene el control donde pedimos confirmación
resp=msgbox("Va a crear una factura. ¿Correcto?",vbquestion+vbyesno,"CONFIRMACIÓN"
'Si la respuesta es que no pues lo arreglamos y ya está
If resp=vbNo then
me.cboTipoRegistro.value=null
exit sub
end if
'--------------------------------------
'Buscamos y calculamos el número de factura correlativo que corresponda
vUltimo = dmax("contador","facturaliquidaciones")+1
'Escribimos el número de factura calculado
me.contador.value=vUltimo
End if
End if
End Sub
...

Y eso es todo. Como verás te lo he escrito todo de memoria, por lo que si te salta algún error me lo comentas y le echamos un vistazo.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Registro autonumerico

Publicado por ANTONIO (81 intervenciones) el 24/03/2013 18:52:19
Muchas gracias por tu respuesta,

Tiene sentido tu respuesta pero no la he aplicado porque ahora tengo otra urgencia, la cual ya has solucionado en otro correo tu.
Me he dado cuenta que en mi cbo (SelCto) hay varios valores además de factura como son liquidaciones, ayuda, recibo.... Ahora bien yo quiero que mi registro autonumerico funcione para todos salvo para cuando selecciono Nomina.
Entonces, ¿como aplicaría tu ejemplo?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Registro autonumerico

Publicado por Neckkito (1157 intervenciones) el 24/03/2013 19:07:03
Hola!

Entiendo que quieres una numeración correlativa para cada tipo de documento. Es decir:
Factura 1
Factura 2
...
Recibo 1
Recibo 2
...

Si es así simplemente haces que:

- El if te funcione siempre y cuando no sea una nómina, así:

If vCbo<>"nómina" then

- El control al usuario cambiaría así en la línea <resp=>:

resp=msgbox("Elemento a crear: " & vCbo & ". ¿Correcto?",vbquestion+vbyesno,"CONFIRMACIÓN"

- El DMax te devolvería los valores filtrados; es decir, una cosa así:

vUltimo = dmax("contador","facturaliquidaciones","TipoRegistro='" & vCbo & "'")+1

Donde "TipoRegistro" es el nombre de tu campo que recoge el valor de si es una factura, un recibo, etc. (he dado por supuesto que el valor guardado era una cadena de texto. Si fuera un numérico el código debería cambiar).

Si lo que quieres es una numeración correlativa sin tener en cuenta el tipo de registro, es decir:
Factura 1
Recibo 2
Factura 3
...

el DMax no debería estar filtrado, dejándolo como te lo indicaba en el código original.

Recuerda que si los registros con nómina tienen valor en [contador] el DMax los tendrá en cuenta. Lo ideal sería que, en esos registros, no hubiera valor en [contador].

Saludos,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Registro autonumerico

Publicado por ANTONIO (81 intervenciones) el 24/03/2013 20:19:18
Lo que tu me indicas sería ideal,

Pero me conformo con que la numeracion sea correlativa para factura, recibo, liquidaciones es decir 1,2,3 independientemente que sea y que cuando venga la palabra nomina, no lo tenga en cuenta en la numeración.

¿es muy complicado?

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Registro autonumerico

Publicado por Neckkito (1157 intervenciones) el 25/03/2013 10:14:02
Hola!
Sólo tienes que seguir lo que te explicaba en el penúltimo mensaje, con las modificaciones del último mensaje.

Y, evidentemente, adaptarlo con los nombres que tengas en tu BD

El código del punto 7 del penúltimo mensaje te quedaría así:

...
Private Sub....
'Declaramos las variables
Dim resp as integer
Dim vUltimo as long
Dim vCbo as string
'Cogemos el valor seleccionado en el combo
vCbo=nz(me.cboTipoRegistro.value,"")
'Si no hay valor en el combo salimos
If vCbo="" then exit sub
'Si estamos dando de alta un nuevo registro...
If me.newrecord then
'y si estamos dando de alta una factura...
If vCbo<>"nómina" then
'--------------------------------------
'Aquí viene el control donde pedimos confirmación
resp=msgbox("Elemento a crear: " & vCbo & ". ¿Correcto?",vbquestion+vbyesno,"CONFIRMACIÓN"
'Si la respuesta es que no pues lo arreglamos y ya está
If resp=vbNo then
me.cboTipoRegistro.value=null
exit sub
end if
'--------------------------------------
'Buscamos y calculamos el número de factura correlativo que corresponda
vUltimo = dmax("contador","facturaliquidaciones")+1
'Escribimos el número de factura calculado
me.contador.value=vUltimo
End if
End if
End Sub
...

Saludos,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Registro autonumerico "directo" en la tabla

Publicado por Edmund (10 intervenciones) el 18/07/2014 23:07:44
Hola Neckkito:
Quisiera saber si me puedes ayudar o bien si es posible un autonumérico directo en la tabla es decir que funcione sin formulario.
La carga de datos la hago desde excel, pero el usuario no tiene manera de acceso a la bd para continuar con el correlativo.
Si no es mucha la molestia, me podrías ayudar con alguna solución?
Gracias de antemano.
Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Registro autonumerico

Publicado por Solker (1 intervención) el 17/07/2014 19:58:02
Hola,

Ante todo, muchas gracias por el aporte, ya que me ha venido muy bien para un BD que estoy acondicionando (en su origen no es mía). Si no os importa me gustaría ir un poco mas allá.

Mi ejemplo es que dadas una serie de replicas de tabla (cada una para una sección de la empresa), ciertos de los registros con un condicionante, y unas macros, se copian en una tabla común (anexadas) el cual provee un nuevo número, que es donde he puesto el contador.

En los formularios de entrada (cada tabla de sección tiene el suyo), el cuadro de ese contador lo consulta en la tabla común para mediante un click autorellenarse, se copia el número en la tabla individual de sección, y al ejecutar el macro se registra en la individual y se anexa a la común.

El invento me ha funcionado muy bien, salen los correlativos, independientemente de la tabla donde se genere el número.

Ahora lo que me interesa es que el número tenga el formato del año delante y el contador detrás, de esta manera "2014-000" (lo suyo sería mantener los 3 dígitos, pero si esto no es posible, da un poco igual)

¿Que podría hacer para esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar