Question

Je dois générer des factures en grandes quantités qui seront transformées en EDI et acheminées vers notre siège. Il y a une table des commandes avec toutes les commandes qui arrivent. À un moment donné de la journée, je dois récupérer un jeu (environ 1k) et générer les factures.

  1. Où serait le meilleur endroit pour générer les numéros de facture? Sur le serveur SQL Server? Ou bien saisissez le lot dans une application .NET et générez ensuite les numéros de facture? Les numéros de facture peuvent être aléatoires mais ne doivent pas être répétés (pendant 3-4 ans). J'ai un maximum de 12 chiffres pour jouer et peut être alphanumérique. Où puis-je trouver des informations sur la génération de numéros de facture?

Remarque: lors de la génération des factures, je dois calculer le total des commandes et les taxes.

Je vous serais reconnaissant de votre contribution.

Était-ce utile?

La solution

Les numéros de facture peuvent être régis par des exigences légales (dans mon pays de résidence, ils doivent être classés dans l'ordre, et je ne pense pas qu'il puisse y avoir des lacunes dans la séquence).

Vous voyez souvent que les chiffres incluent un élément qui les définira dans le temps (par exemple l'année: 2009 03472). De cette manière, vous minimisez le risque d'utiliser le même nombre deux fois.

Vous dites que vous avez environ 1 000 factures par jour. Cela signifie que le numéro de facture à 6 chiffres couvrira vos besoins. Donc, une année à 4 chiffres suivie d'un numéro de facture à 6 chiffres sans valeur de remplissage devrait probablement vous aider.

Je demanderais probablement à la base de données de les générer pour garantir leur caractère unique.

Autres conseils

Ajoutez à votre base de données une table contenant la valeur du dernier numéro de facture utilisé et une procédure stockée pour incrémenter cette valeur et vous renvoyer la nouvelle valeur à utiliser lors de la création de votre facture.

Lorsque vous enregistrez votre nouvelle facture, appelez le SP pour obtenir le prochain numéro de facture une des dernières choses que vous ferez - après validation, mais immédiatement avant d'écrire sur le disque - afin d'essayer de minimiser le risque de " ; trous " dans votre séquence de numérotation.

Il est probablement préférable d'utiliser des identifiants séquentiels, sauf si vous souhaitez qu'ils soient aléatoires pour une raison quelconque (par exemple, parce que les clients ne devraient pas être en mesure de deviner l'identifiant d'un autre ordre à partir de la même période). L'utilisation d'identifiants séquentiels vous permet de lire le maximum actuel, puis de vérifier qu'aucun n'a été écrit dans la plage que vous allez écrire juste avant de valider les commandes de votre traitement par lots.

Si vous ne souhaitez pas que la charge de la base de données soit vérifiée et si vous êtes certain que d'autres processus n'interféreront pas, vous pourrez peut-être utiliser DateTime.UtcNow et une conversion Base64. Une illustration vraiment maladroite pourrait être quelque chose comme:

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

Ou

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

Une conversion de Base32 (elle utilise les lettres AZ et chiffres 2 à 7), bien qu’il n’y ait pas de conversion .Net native, vous devrez donc en rechercher un.

Je pense que s'il n'y a pas de lois limitant les règles relatives à la génération de l'identifiant de la facture, cela peut être ce que vous voulez.

Maintenant, j'ai un bon exemple sur:

En fait, je programme un système de facturation et j’avais généré mon code d’identification de manière séquentielle, ce qui a créé des lacunes, car lorsque le client, par exemple, annulait le contrat avec la société, j’avais déjà généré 12 factures auparavant.

(car nous sommes ici un fournisseur de services Internet et le contrat doit être de 6, 12 ou 24 mois)

J'ai eu un vide dans ma base de données, car les utilisateurs du système ont supprimé les factures annulées. Si j'ai vraiment besoin d'un numéro séquentiel, j'ai un problème avec la loi. Et j'ai beaucoup d'autres situations ici qui m'ont donné une lacune dans mon numéro de facture séquentiel.

Je ne sais vraiment pas comment éviter ce genre de problème car il existe de nombreuses situations où cela se produit. Une idée?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top