en nuestro caso.. hemos logrado controlar las secuencias... verificamos si la insercion se ha hecho correctamente entonces actualizamos el numero de documento con la siguiente secuencia caso contrario no se hace nada... en el caso de las facturas pre-impresas, cada ventanilla tiene su propia serie de facturas de tal manera que siempre coincide la factura q tengo en impresora con lo que se esta emitiendo en el sistema.. . el procedimiento que decide la actualizacion o no de la secuencias lo tenemos en php, desde aqui se hace el llamado al proceso de secuencias de postgres con transacciones... hay otros problemas como atazco de papel en la impresora, corte de energia en el instante que se imprime la factura.. pero eso es otro tema.
--
Felix Gonzales
(c) 074-97-9720762
2008/7/22 Javier Aquino H. <JAquino@lexuseditores.com>:
Yo tengo una tabla de correlativos asi:-----Mensaje original-----
De: pgsql-es-ayuda-owner@postgresql.org
[mailto:pgsql-es-ayuda-owner@postgresql.org] En nombre de Roberto Rodríguez
Pino
Enviado el: jueves, 17 de julio de 2008 11:47
Para: pgsql-es-ayuda@postgresql.org
Asunto: Re: [pgsql-es-ayuda] como lograr campo consecutivo sin fallar ?
2008/7/17 Robert J. Briones C. <robert.briones@gmail.com>:
> El día 16 de julio de 2008 23:24, Carlos Mendez <lucas1850@gmail.com>
escribió:
>> Hola, que tal
>>
>> como puedo lograr que un campo de una tabla aparezcan numeros
>> consecutivos sin fallar, 1, 2, 3, 4, 5, etc. con serial a veces falla
>> porque a veces hay errores y se salta del 2 al 4 y el 3 se pierde,
>> yo creo que una forma seria calcular el max de este campo y sumarle
>> +1 y asi sucesivamente, lo pregunto porque tengo que hacer un
>> programa de facturacion y no debe perder ni un solo consecutivo no
>> debe haber saltos o perdidas de numeros, Agradeciendo de antemano
>> cualquier ayuda o sugerencia, me despido, saludos.
>>
>
> Muchas veces se pierden los numeros por una cosa de eliminacion de datos.
> la forma que dices tu . es la que mayormente se ocupa, pero una vez
> creado el 1, 2, 3, 4, 5 y eliminas el tres, te quedará como, 1,2,4,5 y
> el próximo que se agregará será el 6, en el caso de un sistema de
> facturacion, las facturas no se eliminas, solo se anulan, así el 3 en
> este caso . seguira ahí, pero como anulado.
>
> yo nunca he tenido problemas de que se salte un numero.
> revisa el script que ocupas.
>
> Yo tengo un problema similar. Se salta el correlativo en caso de que haya
> habido un fallo en la inserción.
> Yo estoy ocupando jdbc. Necesitaba hacer 2 inserciones, donde la segunda
> dependia de la primera... pero si habia algun problema en la segunda, la
> primera no debia llevarse a cabo. Para lo cual aplicaba un rollback.
> Pero asi y todo se seguian "quemando" los identificadores de la
secuencia.
> Despues revise la cantidad de numeros disponbles y era una suma
> considerable, asi que no le di mucha importancia (en mi problema, me
> indiferente que se salte de un 3 a un 6)... pero igual me quedo la duda de
> como se podria solucionar esto.
>¿Se puede de alguna manera?
> Saludos!
> Roberto
Tabla: t_correlativo
Tipo_doc char(2) PK
Serie_doc number(3) PK
Numero_doc number(8)
Los pasos son sencillos:
1. Primero incrementas el valor del correlativo (numero_doc) que corresponda
al documento y a la serie que estás trabajando.
2. haces un select para traer el correlativo generado (numero_doc)
3. usas este número para tu tabla de movimientos.
Ya que todos estos pasos están dentro de una transacción el registro del
correlativo correspondiente a al documento y serie permanecen bloqueados
mientras no se haga un roolback o commit.
Ojo. El paso 1 y 2 se pueden hacer en un solo update con retorno de valores
y finalmente también se puede meter este proceso dentro de un trigger en la
tabla de movimientos.
Saludos,
Javier.
--
Este mensaje ha sido analizado por MailScanner
en busca de virus y otros contenidos peligrosos,
y se considera que está limpio.
For all your IT requirements visit: http://www.transtec.co.uk
--
TIP 5: ¿Has leído nuestro extenso FAQ?
http://www.postgresql.org/docs/faqs.FAQ.html
--
Felix Gonzales
(c) 074-97-9720762
No comments:
Post a Comment