Access - urgente autonumerico

 
Vista:
sin imagen de perfil

urgente autonumerico

Publicado por mauricio (48 intervenciones) el 11/09/2002 00:44:02
Hola al Grupo a ver si alguien me puede ayudar en otros foros no he podido:
necesito un consecutivo que el primer caracter sea el ultimo caracter del año,siguiendo 4 caracteres mas que se incrementan de 1 en 1 cada que ingreso un registro,obviamente al cambiar el año deberia cambiar el primer caracter del consecutivo completo:
algo asi:
hoy seria 20001
mañana 20002
al cambiar el año ,el primer registro seria 30001

gracias de antemano al que me pueda dar una ayuda,estoy colgado
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

RE:urgente autonumerico

Publicado por Victoria (1530 intervenciones) el 11/09/2002 08:57:32
Hola
Ahi van las funciones que has de usar:
Righ (year(Date()),1):capturas el digito del año
Despues de incremetar tu número de ¿factura?:
Format(numero,"0000")
Concatenas y tienes lo que deseas
Victoria
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

RE:urgente autonumerico

Publicado por Francisco (1 intervención) el 11/09/2002 11:46:06
Enviame las funciones, por favor..
En la respuesta del foro no aparece el fichero adjunto.
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

RE:urgente autonumerico

Publicado por Luis Fdo Melo (323 intervenciones) el 12/09/2002 05:28:50
Hola
Para generar tu autonumerico como necesitas, te voy a dar un truco, no es el unico, pero es una buena practica de programacion:

Crea una tabla de secuencias que contenga el ultimo consecutivo de cada año, en el fin de consultar y actualizar el utimo consecutivo en una tabla muy pequeña, esto es muy eficiente si tu tabla contiene muchos registros...
La nueva tabla debe tener minimo dos campo el año y el valor actual del consecutivo.. otros campos como el incremento son opcionales

Ejemplo:
Crea la tabla

sql= " Create table secuencias ( nombre text(20) not null primary key, valor long not null)"

dbengine(0)(0).execute sql,dbfailonerror

Cuando requires el siguiente valor de la secuencia haz las siguientes consultas
Dim R as recordset
set R = dbengine(0)(0).openrecordset("select valor from secuencias where nombre='2002'")
'Verifica si tiene registros, para evitar errores
if not(r.eof and r.bof ) then
Valor_Actual =R("valor")
siguiente_valor=valor_actual+1
'Actualizar secuencia
sql ="update secuencias set valor= " & siguiente_valor & " where nombre='2002'"
'Ejecuta la consulta anterior
dbengine(0)(0).execute sql,dbfailonerror
end if
Para generar tu consecutivo como necesitas, debes concatenar el ultimo digito del año con el consecutivo generado aqui (siguiente_valor), usa los trucos que te dio Victoria...


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

RE:urgente autonumerico

Publicado por mauricio (48 intervenciones) el 13/09/2002 00:29:06
El truco esta perfecto ,pero hoy he estado tratando y no he podido que el valor del campo que esta como =([numero]"0000") se vuelva a
([numero]"0001") cuando vaya a ingresar el primer registro del siguiente año ej:
voy en 21867 el 30 de diciembre
el 2 de enero que vuelva a trabajar debe estar el consecutivo en
30001 para seguir la secuencia durante el año
deberia usarse un bucle o algo asi? lo siento se sale de mis manos
gracias por su ayuda

mauricio
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

RE:urgente autonumerico

Publicado por Victoria (1530 intervenciones) el 13/09/2002 09:08:32
Hola
Cuando vayas a añadir un registro:
1º has de mirar el último de la serie,
2º comparar que corresponde al año en curso
3º si existe ese año: número=numero+1
4º sino existe ese año: número=1
5º despues concatenas y formateas
Para hacer esto has de jugar con las funciones: Right y Left o con: Mid
Victoria
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

RE:urgente autonumerico

Publicado por Luis Fdo Melo (323 intervenciones) el 13/09/2002 16:57:23
el problema que tienes para la solución que plantee para nuevos consecutivos, es facil resolverlo, como el año lo tienes, al hacer una consulta por año en la tabla de secuencias y no encontralo lo debes crear de inmediato... y de esta manera tendras el consecutivo...

if not(R.bof and R.eof) then
valor_actual =r("valor")
valor_siguiente=vaor_actual+1
'actualizar la tabla secuancias ..
..... este codigo ya lo tienes en una nota anterior
else
'El caso en que no exista
valor_actual=0
valor_siguiente=1
'Añadir el registro
sql="insert into secuencias values ('2003',1)"
db.execute sql,dbfailonerror
end if

La solucción es optima si tu tabla tiene muchos registros, para el caso planteado por Victoria es muy bueno para tablas pequeñas con menos de mil regsitros.. ya que al hacer consultas sobre el campo llave utilizando funciones o cualquier expresión, se pierde el indice, haciendo mucho más lenta la consulta....

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