IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

initialisation de numéro chaque année [WD17]


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    ty
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : ty
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 0
    Points
    0
    Par défaut initialisation de numéro chaque année
    Bonjour j'aimerai générer le numéro de facture (texte) qui est différent du IDFacture (Auto) de la façon suivante:
    Num_facture = 2020/0001-2020/0002-2020/0003...

    Lors d'une nouvelle année, le numéro d'enregistrement doit revenir à Num_facture= 2021/0001
    Merci pour votre collaboration

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 266
    Points
    5 266
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Regarde du côté de SauveParamètre et de ChaineIncrémente
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Membre éprouvé
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 808
    Points : 912
    Points
    912
    Par défaut
    Bonjour,
    Tu peux avoir un fichier supplémentaire SUIVI dont les champs seraient (par exemple) : ANNEE, NUM. Ainsi à chaque fois que tu crée une nouvelle facture, si l'année existe tu incrémentes NUM sinon tu crée une nouvelle ANNEE avec NUM = 1. De l'autre côté, sur ton fichier FACTURE, tu enregistres le NUM. Pas de liaison entre les deux fichiers mais une gestion programmée.

    Cette méthode fonctionne pour moi. Peut-être qu'il y a une meilleure...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Dans le cas d'une application multi-utilisateurs, il faut absolument bloquer le fichier "compteur", et tout mettre dans une transaction (lecture du numéro, création de la facture, incrémentation du numéro), sans quoi tu cours le risque d'avoir deux factures avec le même numéro (sauf index unique, qui va bloquer la deuxième mise à jour), ou avoir des trous dans la numérotation (si pour une raison ou une autre la mise à jour de la première facture n'aboutit pas).

    Accessoirement tu devrais stocker les deux valeurs dans deux colonnes distincts (sous peine de violer la première loi de Codd).

    Tatayo.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    ty
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : ty
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par mcthiam Voir le message
    Bonjour j'aimerai générer le numéro de facture (texte) qui est différent du IDFacture (Auto) de la façon suivante:
    Num_facture = 2020/0001-2020/0002-2020/0003...

    Lors d'une nouvelle année, le numéro d'enregistrement doit revenir à Num_facture= 2021/0001
    Merci pour votre collaboration

    voici le code que j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    eID_Fact   est un entier
    SC_Fiche.Num_facture = Facture.IDFacture
    sCNum_Fact	est une chaîne
    dDateFact	est une Date
    eID_Fact = Val(Droite(Facture.IDFacture,4))
    dDateFact = DateSys()
    sCNum_Fact=Milieu(dDateFact,3,2)
     
     
    SC_Fiche.Num_facture=  sCNum_Fact + "/" + NumériqueVersChaîne(eID_Fact, "05d")

    Mais je n'arrive pas à initialiser le Num_Fact pour l'année à venir

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par mcthiam Voir le message
    Mais je n'arrive pas à initialiser le Num_Fact pour l'année à venir
    Je ne comprends pas trop la question...
    L'année prochaine, ton datesys() te renverra des 2021MMJJ ?

    Si c'est pour incrémenter l'année, tu fais PS : lorsque tu mets du code, utilise la balis de code (bouton # tout à droite de la 2 ligne de la barre d'outils)
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    ty
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : ty
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    bonjour frenchsting,

    mon problème n'est pas d'incrémenter mais
    -c'est de remettre le num_fact AA/0001 à la fin de chaque année, mais le num_fact continue à s'incrémenter
    -On est en 2020 si on visualise un ancien enregistrement 2019/0002 le num_fact change ce dernier en 2020/002

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Citation Envoyé par mcthiam Voir le message
    voici le code que j'ai utilisé :

    SC_Fiche.Num_facture= sCNum_Fact + "/" + NumériqueVersChaîne(eID_Fact, "05d")

    Mais je n'arrive pas à initialiser le Num_Fact pour l'année à venir
    Il vous manque un "SI ALORS" pour ne prendre en compte que lors d'une création de la fiche.
    Dans mon cas j'utilise un numéro provisoire pour réserver l'enregistrement et au moment de fermer la fiche et enregistrer, je recalcule le numéro définitif.
    Ce qui permet à d'autres utilisateurs faire de même sans avoir jamais de doublon ni blocage.
    En réalité, je surveille si l'enregistrement est bloqué au cas où plusieurs utilisateurs confirment le nouvel enregistrement à la même microseconde.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    ty
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : ty
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Yusep Voir le message
    Il vous manque un "SI ALORS" pour ne prendre en compte que lors d'une création de la fiche.
    Dans mon cas j'utilise un numéro provisoire pour réserver l'enregistrement et au moment de fermer la fiche et enregistrer, je recalcule le numéro définitif.
    Ce qui permet à d'autres utilisateurs faire de même sans avoir jamais de doublon ni blocage.
    En réalité, je surveille si l'enregistrement est bloqué au cas où plusieurs utilisateurs confirment le nouvel enregistrement à la même microseconde.
    bonjour,

    Pour le numéro provisoire, comment dois je m'y prendre?

  10. #10
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 999
    Points : 2 526
    Points
    2 526

  11. #11
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par mcthiam Voir le message
    bonjour frenchsting,

    mon problème n'est pas d'incrémenter mais
    -c'est de remettre le num_fact AA/0001 à la fin de chaque année, mais le num_fact continue à s'incrémenter
    -On est en 2020 si on visualise un ancien enregistrement 2019/0002 le num_fact change ce dernier en 2020/002
    ????????

    Je suis sans voix... Ton numéro de facture, pour une facture donnée, est censé être enregistré une fois pour toute dans la BDD !

    Citation Envoyé par serendib Voir le message
    Topissime !
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  12. #12
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 266
    Points
    5 266
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Je suis sans voix... Ton numéro de facture, pour une facture donnée, est censé être enregistré une fois pour toute dans la BDD !
    J'ai l'impression que c'est la nouvelle mode. On modifie les factures. Le montant j'avais déjà vu, le n° jamais
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  13. #13
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 999
    Points : 2 526
    Points
    2 526
    Par défaut
    Citation Envoyé par mcthiam Voir le message
    bonjour frenchsting,

    mon problème n'est pas d'incrémenter mais
    -c'est de remettre le num_fact AA/0001 à la fin de chaque année, mais le num_fact continue à s'incrémenter
    -On est en 2020 si on visualise un ancien enregistrement 2019/0002 le num_fact change ce dernier en 2020/002
    Et en 2020 le Client demande un duplicata de sa facture 2019/0002 !
    Y va s'marrer le mec, et son comptable aussi.
    C'est pas très sérieux tout ça.

    PS:
    Mais au Sénégal, tout cela n'est peut-être pas très important.

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Je pense qu'il s'est mal exprimé, et qu'il veut que le compteur reparte à 1 chaque année.
    Si c'est bien le cas, mcthiam je ne vois vraiment pas ce qu'il y a de compliqué.
    Dans ton fichier compteur, tu ajoutes une rubrique avec l'année.
    Quand tu récupères un numéro, si l'année courant ne correspond pas à l'année en cours, tu repars à 1 et tu changes l'année.
    Tu n'as pas de problème d'accès concurrentiel, vu que tu bloques le fichier.
    Et vu que tout ceci se trouve dans une transaction, si la création de la facture échoue, la mise à jour du compteur échoue aussi.
    Le prochain à demander un numéro s'occupera de mettre à jour le compteur, et l'année.

    Bref je ne vois pas ce qui bloque ici.

    Maintenant si tu veux modifier le numéro d'une facture, là part contre...

    Tatayo.

  15. #15
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 999
    Points : 2 526
    Points
    2 526
    Par défaut
    Citation Envoyé par mcthiam Voir le message
    bonjour frenchsting,

    -On est en 2020 si on visualise un ancien enregistrement 2019/0002 le num_fact change ce dernier en 2020/002
    Il me semble bien que ce soit très clair.
    La phrase ne souffre aucune ambiguïté.

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    ty
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : ty
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Bonsoir

    voici le code que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    DerniereRef est un entier
    Zeros est une chaîne
    HFiltre(facture,IDfacture,hValMin,hValMax)
    HLitDernier(facture,IDfacture)
    SI HEnDehors(facture)ALORS
    	// Toute première facture
    	refFACT=Gauche(DateSys(),4)+"/0001"
    SINON
    	SI Gauche(facture.num_fact,4)<>Gauche(DateSys(),4)ALORS
    		// Une nouvelle année est commencée
    		refFACT=Gauche(DateSys(),4)+"/0001"
    	SINON
    		// Incrémentation de la numérotation
    		DerniereRef=Val(Droite(facture.num_fact,4))
    		DerniereRef++
    		SELON Taille(NumériqueVersChaîne(DerniereRef))
    			CAS 1: Zeros="000"
    			CAS 2: Zeros="00"
    			CAS 3: Zeros="0"
    			CAS 4: Zeros=""
    		FIN
    		refFACT=Gauche(DateSys(),4)+"/"+Zeros+NumériqueVersChaîne(DerniereRef)
    	FIN
    FIN
    HRAZ(facture)
    Mais J'ai un tout petit de souci par rapport au num_facture, on est en 2020 si j'ouvre le fichier d'un ancien enregistrement 2019/0002 le num_fact change ce dernier en 2020/0002
    Images attachées Images attachées   

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Dans ton code, je ne vois aucun accès à un fichier "compteur", aucun blocage, aucune transaction, aucune mise à jour... Je ne vois donc pas comment tu vas gérer un accès concurrent si le compteur n'est géré que dans le code.
    Il te faut impérativement un compteur partagé, donc dans la base. Qu'est-ce qui empêche ici 2 utilisateurs d'avoir le même numéro de facture ? Rien.
    Bref ton code n'a pas grand chose à voir avec les pistes qu'on t'a donné.

    Accessoirement tu devrais jeter un œil à l'aide des fonctions de gestion des chaines, au hasard ChaineConstruit() et NumériqueVersChaine(), tu pourras largement simplifier ton code.
    Là ça pique un peu les yeux.

    Allez, une autre piste: dans ton fichier compteur, tu mets une ligne par année, avec 2 rubriques de type entier: une pour l'année, l'autre pour le compteur. Avec 20 enregistrements, c'est à dire rien du tout, tu gères 20 ans de facture.
    Pour avoir un numéro, tu lits l'enregistrement en question EN LE BLOQUANT", tu récupères le compteur, tu le mets à jour et tu le libères.
    Si tu ne veux pas de trou dans les numéros, il faut mettre cette gestion de compteur avec la création de la commande, et le tout dans une transaction.
    Simple, rapide et plus de question à se poser lors d'un changement d'année.

    Pour la dernière question (l'année qui change), pause un point d'arrêt sur la première ligne de ton code, avances pas à pas et tu vas vite comprendre ce qui ne va pas.

    Tatayo.

    P.S. penses aux balises code (le # dans la barre d'outils), là c'est un peu illisible.

  18. #18
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 266
    Points
    5 266
    Billets dans le blog
    1
    Par défaut
    Au fait es-tu en CLASSIC ou en C/S ?
    Etant donné le nombre de facture Max je pencherais pour le CLASSIC mais sait-on jamais.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    ty
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : ty
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Merci à tout le monde, j'ai pu trouver la solution à mon problème
    Que DIEU vous protège.

  20. #20
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Est-ce que tu peux nous décrire cette solution ?
    Cela pourrait aider d'autres personnes qui seraient confrontées au même problème.

    Tatayo.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. clé auto incrémente est actualisé chaque année
    Par 21247692 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/04/2008, 12h19
  2. [SQL] Sélectionner un mois pour chaque année
    Par kreatik dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/06/2007, 14h35
  3. Ré-initialiser les numéro automatiques
    Par tintin0001 dans le forum Access
    Réponses: 5
    Dernier message: 29/01/2007, 16h36
  4. Moyenne 5 dernières année pour chaque année?
    Par kissmytoe dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/02/2006, 19h28
  5. [ORACLE 9i] Avoir 12 lignes pour 12 mois de chaque années
    Par Worldofdada dans le forum Oracle
    Réponses: 4
    Dernier message: 17/11/2005, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo