Domanda

Devo generare fatture in grandi lotti che verranno trasformate in EDI e trasportate nel nostro quartier generale. C'è una tabella degli ordini con tutti gli ordini in arrivo. Ad un certo punto della giornata devo prendere un set (circa 1k) e generare le fatture.

  1. Dove sarebbe il posto migliore per generare i numeri di fattura? Sul back-end di SQL Server? O prendere il batch in un'applicazione .NET e quindi generare i numeri di fattura lì? I numeri di fattura possono essere casuali ma non devono essere ripetuti (per 3-4 anni). Ho un massimo di 12 cifre con cui giocare e posso essere alfanumerico. Dove posso trovare informazioni sulla generazione dei numeri di fattura.

Nota: mentre sto generando le fatture, devo calcolare i totali e le tasse dell'ordine.

Gradirei il tuo contributo.

È stato utile?

Soluzione

I numeri delle fatture possono essere regolati da richieste legali (dove vivo devono essere in sequenza e non credo che ci possano essere lacune nella sequenza).

Spesso vedi che i numeri includono un elemento che li cercherà nel tempo (come l'anno: 2009 03472). In questo modo minimizzi il rischio di usare lo stesso numero due volte.

Dici di avere ~ 1K fatture al giorno. Ciò significa che il numero di fattura a 6 cifre coprirà le tue esigenze. Quindi un anno a 4 cifre seguito da un numero di fattura a 6 cifre con imbottitura zero dovrebbe probabilmente farti partire.

Probabilmente vorrei che il database li generasse per assicurarmi che siano unici.

Altri suggerimenti

Aggiungi una tabella al tuo database che memorizza il valore dell'ultimo numero di fattura utilizzato e una procedura memorizzata per incrementare questo valore e restituirti il ??nuovo valore da utilizzare nella creazione della fattura.

Quando salvi la tua nuova fattura, effettua la chiamata all'SP per ottenere il prossimo numero di fattura una delle ultime cose che fai - dopo che la convalida è passata, ma immediatamente prima di scrivere sul disco - per cercare di ridurre al minimo il rischio di " ; fori " nella sequenza di numerazione.

L'uso degli ID sequenziali è probabilmente il migliore a meno che tu non voglia che siano casuali per qualche motivo (ad esempio perché i clienti non dovrebbero essere in grado di indovinare l'ID dell'ordine di un altro ordine all'incirca nello stesso periodo di tempo). L'uso di ID sequenziali ti consente di leggere il massimo corrente e quindi verificare che nessuno sia stato scritto nell'intervallo che stai per scrivere appena prima di eseguire il commit degli ordini dal processo batch.

Se non vuoi l'onere di controllare il database e puoi essere sicuro che altri processi non interferiranno, potresti essere in grado di sfruttare DateTime.UtcNow e una conversione Base64. Un'illustrazione davvero goffa potrebbe essere qualcosa del tipo:

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 })

Probabilmente saresti più interessato a una Base32 (utilizza le lettere AZ e cifre 2-7), anche se non esiste una conversione .Net nativa, quindi dovresti cercarne una.

Penso che se non ci sono leggi che limitano le regole sulla generazione dell'ID fattura, può essere quello che vuoi essere.

Ora ho un buon esempio di:

In realtà sto programmando un sistema di fatturazione e ho generato il mio codice ID in sequenza, e ho avuto alcune lacune, perché quando il cliente, ad esempio, ha annullato il contratto con la società, e avevo già generato 12 fatture una volta prima.

(perché qui siamo una società ISP e il contratto deve essere di 6, 12 o 24 mesi)

Ho ottenuto il divario nel mio database, perché gli utenti del sistema hanno eliminato le fatture annullate. Se ho davvero bisogno di un numero sequenziale, ho un problema con la legge. E ho molte altre situazioni qui che mi hanno lasciato un vuoto nel mio numero di fattura sequenziale.

Non so davvero come evitare questo tipo di problema perché ci sono numerose situazioni in cui ciò accade. Qualche idea?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top