Pregunta

Necesito generar facturas en lotes grandes que serán transformados a EDI y transportados a nuestro cuartel general. Hay una tabla de pedidos con todos los pedidos entrantes. En algún momento del día tengo que tomar un conjunto (aproximadamente 1k) y generar las facturas.

  1. ¿Dónde sería el mejor lugar para generar los números de factura? ¿En el servidor SQL? ¿O tomar el lote en una aplicación .NET y luego generar los números de factura allí? Los números de factura pueden ser aleatorios pero no deben repetirse (durante 3-4 años). Tengo un máximo de 12 dígitos para jugar y puedo ser alfanumérico. ¿Dónde puedo encontrar información sobre cómo generar números de factura?

Nota: Mientras estoy generando las facturas, necesito calcular los totales de los pedidos y los impuestos.

Agradecería su aporte.

¿Fue útil?

Solución

Los números de las facturas pueden estar regulados por demandas legales (donde yo vivo deben estar en secuencia, y no creo que haya lagunas en la secuencia).

A menudo ve que los números incluyen un elemento que los abarcará a tiempo (como el año: 2009 03472). De esa forma, minimiza el riesgo de usar el mismo número dos veces.

Dices que tienes ~ 1K facturas por día. Eso significa que el número de factura de 6 cifras cubrirá sus necesidades. Por lo tanto, un año de 4 dígitos seguido de un número de factura de 6 cifras con relleno de cero probablemente debería ayudarlo.

Probablemente la base de datos los generará para garantizar que sean únicos.

Otros consejos

Agregue una tabla a su base de datos que almacene el valor del último Número de factura utilizado, y un procedimiento almacenado para incrementar este valor y devolverle el nuevo valor para usar en la creación de su Factura.

Cuando guarde su nueva factura, haga una llamada al SP para obtener la próxima factura número uno de las últimas cosas que haga, después de la validación aprobada pero inmediatamente antes de escribir en el disco, para intentar minimizar el riesgo de " ; agujeros '' en su secuencia de numeración.

El uso de identificadores secuenciales es probablemente mejor a menos que desee que sean aleatorios por alguna razón (como porque los clientes no deberían poder adivinar la identificación de la orden de otra orden de aproximadamente el mismo período de tiempo). El uso de identificadores secuenciales le permite leer el máximo actual y luego verificar que ninguno se haya escrito en el rango que va a escribir justo antes de confirmar los pedidos de su proceso por lotes.

Si no desea la carga de verificar la base de datos y puede estar seguro de que otros procesos no van a interferir, puede aprovechar DateTime.UtcNow y una conversión Base64. Una ilustración realmente torpe podría ser algo así como:

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Year, 
                                    (byte)DateTime.UtcNow.Month,
                                    (byte)DateTime.UtcNow.Day,
                                    (byte)DateTime.UtcNow.Hour,
                                    (byte)DateTime.UtcNow.Minute,
                                    (byte)DateTime.UtcNow.Second,
                                    (byte)DateTime.UtcNow.Millisecond })

O

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Ticks })

Probablemente estaría más interesado en una Base32 (usa letras AZ y dígitos 2-7), aunque no hay conversión nativa de .Net, por lo que tendría que buscar una.

Creo que si no hay leyes que restrinjan las reglas sobre la generación de la identificación de la factura, puede ser lo que quieras ser.

Ahora tengo un buen ejemplo sobre: ??

En realidad, estoy programando un sistema de facturas y había generado mi código de identificación secuencialmente, y obtuve algunos vacíos, porque cuando el cliente, por ejemplo, canceló el contrato con la empresa, ya había generado 12 facturas una vez antes.

(porque aquí somos una empresa ISP y el contrato debe ser de 6, 12 o 24 meses)

Obtuve la brecha en mi base de datos, porque los usuarios del sistema eliminaron las facturas canceladas. Si realmente necesito un número secuencial, tengo un problema con la ley. Y tengo muchas otras situaciones aquí que me dieron una brecha en mi número de factura secuencial.

Realmente no sé cómo evitar este tipo de problema porque hay numerosas situaciones en las que sucede. ¿Alguna idea?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top