Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

GENERAR NUMERO CONSECUTIVO

2,582 views
Skip to first unread message

hector barajas

unread,
Jun 28, 2005, 7:41:49 PM6/28/05
to
ESTOY CAPTURANDO UN CONSECUTIVO DE COMPRAS EN EL CUAL TENGO LOS CAMPOS
"NUMERO", "CLAVEPROV" Y "FECHA". DESEO QUE CUANDO CARGUE EL FORMULARIO ME
AGREGUE EL SIGUIENTE NUMERO CONSECUTIVO TOMANDO EN CONSIDERACION LOS QUE YA
ESTAN CAPTURADOS. NO DESEO USAR EL TIPO AUTONUMERICO, YA QUE DESEO QUE EL
NUMERO CONSECUTIVO SEA TEXTO (POR EJEMPLO "001", "002", ETC.). ALGUIEN TIENE
ALGUN PROCEDIMIENTO PARA GENERAR ALGO ASI, ES DECIR QUE REVISE EN LA BASE DE
DATOS Y DETERMINE CUAL ES EL NUMERO SIGUIENTE Y ME LO PUEDA CAPTURAR EN UNA
CELDA.


Alejandro A. (leon,gto)

unread,
Jun 28, 2005, 8:00:55 PM6/28/05
to
Hola Hector
con una sentencia sql...

"select max(clave) as SIGFOLIO from tabla" 'esta instruccion
guarda el num.mayor maximo y lo guardas en un recordset

y con un reaad al recordset

wsigfolio= val( recordset("sigfolio") +1

espero haber ayudado

salduos


Alex Martínez

unread,
Jun 29, 2005, 2:49:29 AM6/29/05
to
Puedes usar una tabla auxiliar con un único registro y un único campo para
el contador (si es necesario, puedes aprovechar esa tabla para generar
contadores de otras tablas, si añades un campo para el nombre de la tabla y
haces que ya no tenga un único registro). Dentro de una transacción (esto es
importante para evitar que, en un entorno multiusuario, otro usuario pueda
"robarte" el contador), consultas el valor actual del contador, lo
incrementas en 1, lo actualizas en la base de datos e insertas el registro
de compras con el valor del contador obtenido (y, opcionalmente, en ese
momento avisas al usuario del número del contador). Como podrás imaginar,
para que todo esto sea válido, este proceso se realiza cuando ya tienes
todos los datos necesarios para dar de alta el registro de compras. Por
tanto, no se ajusta exactamente a tu planteamiento (es decir, que al cargar
el formulario te presente en pantalla el número que va a usar). Lo que
sucede es que tu planteamiento no es correcto en un ambiente multiusuario
(asumo que una aplicación de compras lo será), porque sería muy probable que
dos usuarios presentaran el mismo número en pantalla.

En cuanto a lo de no usar autonuméricos (me parece respetable), si sólo lo
dices para poder tener valores del tipo '001', '002', ... pero no necesitas
que contenga valores alfanuméricos, puedes plantearte que sí sea numérico y
en todo caso formatear el valor completando con ceros a la izquierda cuando
sea necesario (en impresos o formularios). Los autonuméricos - sin ser
perfectos - pueden ayudarte a simplificar mucho el proceso.

--
Saludos,
Alex
[MS-MVP Visual Basic]


"hector barajas" <baraja...@hotmail.com> escribió en el mensaje
news:ebzvnHD...@TK2MSFTNGP09.phx.gbl...

Lluís Franco

unread,
Jun 29, 2005, 3:53:10 AM6/29/05
to
:-)
Hola,
Únicamente una pregunta para relfexionar:

¿Que sucede (existiendo el registro "001" y el "002" en la BD) si un usuario
comienza a crear un nuevo registro?

Obviamente deberíamos asignarle el "003", verdad? Pero ¿y si antes de que
grabe el registro en la BD, otro usuario comienza a crear un nuevo registro?
¿Le asignamos el "003" o el "004"? ¿Y como sabemos que hay usuarios con
nuevos registros a medio editar? ¿Y si el primer usuario (el que le
asignamos el "003") se arrepiente y decide no guardar el registro?

Resumiendo, ¿Por que no dejas que sea la base de datos la que se encargue de
asignar valores a los nuevos registros?
Si lo que deseas es mostrarlo como texto "00x", puedes formatear el valor
numérico con Format(Valor, "000")

Saludos,
--

Lluís Franco i Montanyés
[MS-MVP-MCP Visual Basic]

This posting is provided "AS IS" with no warranties, and confers no rights.
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho

--
(Guía de netiquette del foro)
http://www.uyssoft.com/MSNews.aspx?sm=10
FIMARGE, S.A.
Principat d'Andorra
lfranco@ODIO_EL_SPAMfimarge.ad
Tel.: +376 805 100
Fax: +376 824 500
Mi Perfil MVP en: http://tinyurl.com/4nbnb

Saga

unread,
Jun 29, 2005, 10:18:57 AM6/29/05
to

Hola Alex,

Yo le haria una recomendacion ligeramente diferente a la tuya <g>

Donde dices que la tabla de folios puede contener un registro, con
varios
campos para diferentes folios, porque no mejor agregar registros segun
el numero de folios que sean necesarios... un ejemplo:

Tabla Folios1

Campos:
FolioFactura tipo numerico

Con esta estructura, la tabla soporta un folio, que es para facturas.
Si yo necesito ahora tambien soportar folios para pedidos, puedo
modificar
la tabla asi:

Tabla Folios1

Campos:
FolioFactura tipo numerico
FolioPedidos tipo numerico

En este caso, tuve que modificar la tabla. Pero que pasa si en lugar
tengo
una tabla asi:

Tabla Folios2

Campo:
IdFolio - tipo numerico
Folio - tipo numerico

Le asingo que el folio de la facturas corresponda a 1, asi que

IdFolio = 1 - folio de las facturas

Si ahora necesito el foli de los pedidos, le asigno el id 2:

IdFolio = 2 - folio de los pedidos

Ahora si yo necesito el folio de un peeido yo puedo hacer esto:

select Folio from Folios2 where IdFolio=2

Este esquema me permite agregar mas folios para otros conceptos
sin la necesidad de modificar la estructura de la tabla.

Saludos
Saga

"Alex Martínez" <alexQUI...@comb.es> wrote in message
news:e$yI0aHfF...@TK2MSFTNGP14.phx.gbl...

Alex Martínez

unread,
Jun 29, 2005, 10:44:06 AM6/29/05
to
>
> Hola Alex,
>
> Yo le haria una recomendacion ligeramente diferente a la tuya <g>
>
> Donde dices que la tabla de folios puede contener un registro, con
> varios
> campos para diferentes folios, porque no mejor agregar registros segun
> el numero de folios que sean necesarios (...)
 
Quizá no me haya explicado bien, pero eso es precisamente lo que yo pretendía decir. Cuando dije que había un campo con el nombre de la tabla no me refería a que el nombre del campo indica la tabla y que necesito un campo para cada tabla a controlar, sino que tengo un campo CUYO CONTENIDO me indica la tabla a controlar.
 
Es decir:
 
Tabla Contadores
    Campo "TablaAControlar"
    Campo "Contador"
 
Un ejemplo del contenido de la tabla Contadores:
 
TablaAControlar        Contador
Pedidos                123
Facturas               121
Albaranes              567  

Saga

unread,
Jun 29, 2005, 10:58:42 AM6/29/05
to

Aparte de lo que indican los demas, y quizas hasta repitiendo, te
hago las siguientes recomendaciones:


1. Al menos de que tu folio sea realmente alfanumerico, o sea que
pienses usar letras ademas de digitos, este debe ser de tipo
numerico. Ya que lo presentes con ceros a la izquierda es otra
cosa diferentem, que facilmente lo puedes hacer con format tal
como te indican.

2. Es bueno contar con un campo autonumerico en tablas que
guadar clientes, faturas, pedidos y otros datos. Esto no significa
que vas a usar el autonumerico dentro de tu aplicacion, mas bien
este dato seria de uso interno. Este es util cuando, por ejemplo,
cargas registros a una lista (que puede ser un grid, listview, list,
combo, etc). Consigues el autonumerico (que suelo llamar Id)
y lo guardas en la lista como llave unica. Con los Lists, se guarda
en el ItemData, en algunas rejillas (grids) se guarda en el RowData
(creo que asi se llama). Cuando se selecciona el elemento y es
necesario modificarlo, solo usas el Id y ya esta.

3. Como ya te han dicho, el folio se consigue cuando das de alta
el registro (compras, factura, pedido, etc). No es posible conseguir
este dato cuando inicialmente se abre la ventana de captura. Hacer
esto lleva a la posibilidad de brincarte consecutivos.

4. Donde sea posible, has que tu llave primaria sea numerico en lugar
de texto, ya que esto agiliza las busqueda (aunque sea un poquito).

5. No dices que base de datos usas, aunque el termino automunerico
normalemente se asocia con los mdbs de Access, asi que es
importante que al dar de alta la factura (o lo que sea), le pongas
un candado a la tabla de folios para que nadie intente dar de alta
dos facturas con el mismo folio.

6. Cuando se redactan mensajes en mayusculas... das la impresion
que estas gritando. Como el oido no es necesario para leer los
mensajes (al menos que tengas un reproductor de voz), no es
necesrio que grites, asi que usa las mayusculas prudentemente :-)

Suerte!
Saga
"hector barajas" <baraja...@hotmail.com> wrote in message
news:ebzvnHD...@TK2MSFTNGP09.phx.gbl...

Saga

unread,
Jun 29, 2005, 11:19:24 AM6/29/05
to
 
 
Oops, creo que el error de lectura fue mio. Efectivamente eso es lo
que dices :-)
 
Saga
 
"Alex Martínez" <alexQUI...@comb.es> wrote in message news:OHFpBkLf...@TK2MSFTNGP15.phx.gbl...

Cristian

unread,
Jun 29, 2005, 3:20:38 PM6/29/05
to
Hola.
Bajo las condiciones propuestas por ti es facil dar una solución :
Cuando cargues el formulario ocupas un max + 1, en todo caso el usuario
debe estar conciente que ese numero es momentaneo, ya que cuando hagas
el Insert sera nuevamente max + 1 y eso pudo haber cambiado en el tiempo
que el usuario se tomo para presionar grabar, no hay mas remedio.
La idea de la tabla que guarde los folios es buena de hecho tambien la
he utilizado, pero el max no es del todo malo tampoco, la final el
resultado es le mismo, la Tabla de Folios es mucho mas util en todo caso.

Atentamente,
Cristian.

hector barajas escribió:

0 new messages