1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

AIDE Générer le matricule

Discussion dans 'Résolution problème & conseils' créé par Man, Mar 2, 2019.

  1. Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67
    Bonjour les cops, depuis quelques jours je suis embrouillé sur une fonction/procédure que je veux implémenter pour générer un matricule à un étudiant. Format du matricule Année+Lettre de l'alphabet+La valeur numérique Exple : 18A001 mon problème se pose sur la lettre de l'alphabet.
    Je souhaite que quand 18A001 à 18A999 alors le prochain matricule devient 18B001 ainsi de suite jusqu'à 18Z001 à 18Z999 si l'année change alors le matricule devient 19A001.
    NB : Sans la lettre de l'alphabet je génère sans problème comme le montre le code en exemple
    Code (Text):

    [windev]PROCEDURE PRIVÉE RefEnterprise()
    sNumEnreg est une chaîne
    TANTQUE HLitRecherchePremier(Code_Enterprise,Date_Générée,Date_Serveur(),hBlocageEcriture)=Faux
        // Si on n'a pas trouvé d'enreg, on l'ajoute
        SI HTrouve()=Faux ALORS
            Code_Enterprise.Date_Générée = Date_Serveur()
            Code_Enterprise.NumCode = 0
            HAjoute(Code_Enterprise)
        SINON
            // Enregistrement trouvé mais le blocage n'est pas possible
            SI HErreurBlocage() ALORS
                CONTINUER
            SINON
                // Autre erreur
                RENVOYER ""
            FIN
        FIN
    FIN

    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = Code_Enterprise.NumCode + 1
    Code_Enterprise.NumCode++
    SI HModifie(Code_Enterprise)=Faux ALORS
       
        Erreur("Erreur de génération")
        RENVOYER 0  
    FIN

    // Génère le numéro : Ex : EASY-18090501XX
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AAMMJJ")+NumériqueVersChaîne(nNum,"02d")
    RENVOYER sNumEnreg[/windev]
     
    à ce code je veux donc insérer une lettre qui s'incrémente.
    Merci d'avance
     
    Tags:
  2. Yusep

    Yusep Active Member
    DUMP TEAM

    Inscrit:
    Jan 3, 2018
    Messages:
    230
    J'aime reçus:
    163
    Bonjour.
    Tu peux passer par le code ASCII de la lettre.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    suenodesign apprécie ceci.
  3. michel

    michel Well-Known Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    174
    J'aime reçus:
    599
    Salut,

    Pour incrémenter les lettres de l alphabets tu peut utilisé l'une de ces deux méthodes:

    • Caract(Asc("A")+1) // Donne le Résultat=> "B"

    • Déclaré une chaine que tu parcoure et récupère la lettre suivante , le tout utilisé dans une boule
    ChaineAlphabet est une chaîne="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    ExtraitChaîne(ChaineAlphabet, 1, ",") // Donne le Résultat=> "A"
     
    Man et suenodesign aiment ça.
  4. trick

    trick Active Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    173
    J'aime reçus:
    96
    Salut,

    Utilise ChaîneIncrémente()
     
    michel apprécie ceci.
  5. Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67
    Merci pour vos multiples réponses, je vais implémenter et vous envoyer le retour afin que ça serve pour celui qui sera dans la même situation que moi
     
    suenodesign apprécie ceci.
  6. Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Salut,

    Pour incrémenter les lettres de l alphabets tu peut utilisé l'une de ces deux méthodes:

    • Caract(Asc("A")+1) // Donne le Résultat=> "B"

    • Déclaré une chaine que tu parcoure et récupère la lettre suivante , le tout utilisé dans une boule
    ChaineAlphabet est une chaîne="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    ExtraitChaîne(ChaineAlphabet, 1, ",") // Donne le Résultat=> "A"
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Ton intervention semble être pratique je vais essayer de l'adapter pour avoir le résultat voulu.
    Je te reviens
     
  • trick

    trick Active Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    173
    J'aime reçus:
    96
    Re,

    Un truc vite fait du style

    [windev]

    nValeurNumerique est un entier
    sChaineFinale est une chaîne
    nValeurMaxVantChangementLettre est un entier = 999
    sChaineDepart est une chaîne = "18A999"

    sAnnee est une chaîne = sChaineDepart[[1 À 2]]
    sLettre est une chaîne = sChaineDepart[[3 À 3]]
    sValeurNumerique est une chaîne = sChaineDepart[[4 À 6]]


    nValeurNumerique = ChaîneIncrémente(sValeurNumerique)
    SI nValeurNumerique > nValeurMaxVantChangementLettre ALORS
    sValeurNumerique = "001"
    sLettre = Caract(Asc(Majuscule(sLettre))+1)
    SINON
    sValeurNumerique = ChaîneIncrémente(sValeurNumerique)
    FIN


    sChaineFinale = sAnnee + sLettre + sValeurNumerique

    Trace(sChaineFinale)

    [/windev]
     
    PhantomX, Gemini1961 et suenodesign aiment ça.
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Re,

    Un truc vite fait du style

    [windev]

    nValeurNumerique est un entier
    sChaineFinale est une chaîne
    nValeurMaxVantChangementLettre est un entier = 999
    sChaineDepart est une chaîne = "18A999"

    sAnnee est une chaîne = sChaineDepart[[1 À 2]]
    sLettre est une chaîne = sChaineDepart[[3 À 3]]
    sValeurNumerique est une chaîne = sChaineDepart[[4 À 6]]


    nValeurNumerique = ChaîneIncrémente(sValeurNumerique)
    SI nValeurNumerique > nValeurMaxVantChangementLettre ALORS
    sValeurNumerique = "001"
    sLettre = Caract(Asc(Majuscule(sLettre))+1)
    SINON
    sValeurNumerique = ChaîneIncrémente(sValeurNumerique)
    FIN


    sChaineFinale = sAnnee + sLettre + sValeurNumerique

    Trace(sChaineFinale)

    [/windev]
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    bonjour je viens vers vous présenter ceci
    [windev]
    Code (Text):

    PROCEDURE Gen_Matricule()
    sNumEnreg est une chaîne
    ChaineAlphabet est une chaîne="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    nIndice est un entier = 1
    TANTQUE HLitRecherchePremier(Avoir_Matricule,Date_Avoir,Date_Serveur(),hBlocageEcriture)=Faux
        // Si on n'a pas trouvé d'enreg, on l'ajoute
        SI HTrouve()=Faux ALORS
            Avoir_Matricule.Date_Avoir = Date_Serveur()
            Avoir_Matricule.NumAvoir = 0
            Avoir_Matricule.Lettre = ExtraitChaîne(ChaineAlphabet, nIndice, ",")
            SI PAS HAjoute(Avoir_Matricule) ALORS
                Erreur_trouvée("Erreur d'ajout des infos de code")
            FIN
        SINON
            // Enregistrement trouvé mais le blocage n'est pas possible
            SI HErreurBlocage() ALORS
                CONTINUER
            SINON
                // Autre erreur
                RENVOYER ""
            FIN
        FIN
    FIN

    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = Avoir_Matricule.NumAvoir +1
    SI nNum <= 999 ALORS
        Avoir_Matricule.NumAvoir++
    SINON SI nNum > 999
        Car est une chaîne  = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
        Avoir_Matricule.Lettre = Car
        Avoir_Matricule.NumAvoir = " "
    FIN
    SI HModifie(Avoir_Matricule)=Faux ALORS
        Erreur("Erreur de génération")
        RENVOYER 0  
    FIN
    // Génère le numéro : Ex : 18A001
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(nNum,"03d")
    RENVOYER sNumEnreg
     
    [/windev]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    J'ai un problème dès que le matricule atteint Année+Lettre+999
    Exple : 19A999 le prochain matricule est 19B1000 puis le second devient 19B001
    pourtant je veux que dès que le matricule est : 19A999, le prochain devrait être 19B001.
    je vous ai envoyé le code de sources et je joins à ça les captures d'écran.
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Merci d'avance
     

    Fichiers attachés:

  • trick

    trick Active Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    173
    J'aime reçus:
    96
    Re

    il faut modifier

    SI nNum <= 999 ALORS
    Avoir_Matricule.NumAvoir++
    SINON SI nNum > 999
    Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
    Avoir_Matricule.Lettre = Car
    Avoir_Matricule.NumAvoir = " "
    FIN

    par

    SI nNum < 999 ALORS
    Avoir_Matricule.NumAvoir++
    SINON SI nNum >= 999
    Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
    Avoir_Matricule.Lettre = Car
    Avoir_Matricule.NumAvoir = " "
    FIN
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Re

    il faut modifier

    SI nNum <= 999 ALORS
    Avoir_Matricule.NumAvoir++
    SINON SI nNum > 999
    Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
    Avoir_Matricule.Lettre = Car
    Avoir_Matricule.NumAvoir = " "
    FIN

    par

    SI nNum < 999 ALORS
    Avoir_Matricule.NumAvoir++
    SINON SI nNum >= 999
    Car est une chaîne = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
    Avoir_Matricule.Lettre = Car
    Avoir_Matricule.NumAvoir = " "
    FIN
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonsoir je reviens vers toi rien n'a changé toujours les mêmes résultats je suis sûr ma boucle est mal appliquée.
    mais merci pour cette correction
    je suis toujours en attente d'aide je parie que mon code a besoin d'une retouche
     
  • aelfassi

    aelfassi New Member

    Inscrit:
    Fev 10, 2019
    Messages:
    4
    J'aime reçus:
    1
    Votre problème est dans cette instruction
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(nNum,"03d")

    il faut utiliser Avoir_Matricule.numavoir au lieu de nNum
     
    suenodesign apprécie ceci.
  • trick

    trick Active Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    173
    J'aime reçus:
    96
    Salut,

    Bien vu j’étais pas descendu en bas de la procedure

    le code devrait ressembler à ceci

    Code (Text):


    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = Avoir_Matricule.NumAvoir +1
    SI nNum < 999 ALORS
        Avoir_Matricule.NumAvoir++
    SINON SI nNum >= 999
        Car est une chaîne  = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
        Avoir_Matricule.Lettre = Car
        Avoir_Matricule.NumAvoir = "001"
    FIN
    SI HModifie(Avoir_Matricule)=Faux ALORS
        Erreur("Erreur de génération")
        RENVOYER 0
    FIN
    // Génère le numéro : Ex : 18A001
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne( Avoir_Matricule.NumAvoir,"03d")

    RENVOYER sNumEnreg

     
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Salut,

    Bien vu j’étais pas descendu en bas de la procedure

    le code devrait ressembler à ceci

    Code (Text):


    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = Avoir_Matricule.NumAvoir +1
    SI nNum < 999 ALORS
        Avoir_Matricule.NumAvoir++
    SINON SI nNum >= 999
        Car est une chaîne  = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
        Avoir_Matricule.Lettre = Car
        Avoir_Matricule.NumAvoir = "001"
    FIN
    SI HModifie(Avoir_Matricule)=Faux ALORS
        Erreur("Erreur de génération")
        RENVOYER 0
    FIN
    // Génère le numéro : Ex : 18A001
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne( Avoir_Matricule.NumAvoir,"03d")

    RENVOYER sNumEnreg

     
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour quand j'utilise cette fragment de fonction/ procédure que tu as proposée alors tout est gâté
    Merci d'avance
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Votre problème est dans cette instruction
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(nNum,"03d")

    il faut utiliser Avoir_Matricule.numavoir au lieu de nNum
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour même en remplaçant par Avoir_Matricule.numavoir ça ne changent rien car une fois à 19A999 il passe à 19B1000 et après 19B001...
    je vois que je vais gérer ça de cette façon ce qui m'énerve c'est juste une petite chose en tout cas mieux que ça que rien. Une fois de plus un grand merci à vous.
    et bonne journée.
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67
    Bonjour à vous avec votre aide j'ai une solution à 97 % je puis générer le matricule ou code soit 19A001 à 19A999, puis 19B1000, 19B001 à 19B999. Comme vous le constatez je stocke les datas dans une BD, pour me faciliter la tâche. Il peut être utile à développeur qui sera dans la même situation que moi et aux expérimentés d'améliorer. En attendant des améliorations, le sujet/discussion est considéré comme résolu
    Code (Text):

    PROCEDURE Gen_Matricule()
    sNumEnreg est une chaîne
    ChaineAlphabet est une chaîne="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    nIndice est un entier = 1
    TANTQUE HLitRecherchePremier(Avoir_Matricule,Date_Avoir,Date_Serveur(),hBlocageEcriture)=Faux
        // Si on n'a pas trouvé d'enreg, on l'ajoute
        SI HTrouve()=Faux ALORS
            Avoir_Matricule.Date_Avoir = Date_Serveur()
            Avoir_Matricule.NumAvoir = 0
            Avoir_Matricule.Lettre = ExtraitChaîne(ChaineAlphabet, nIndice, ",")
            SI PAS HAjoute(Avoir_Matricule) ALORS
                Erreur_trouvée("Erreur d'ajout des infos de code")
            FIN
        SINON
            // Enregistrement trouvé mais le blocage n'est pas possible
            SI HErreurBlocage() ALORS
                CONTINUER
            SINON
                // Autre erreur
                RENVOYER ""
            FIN
        FIN
    FIN

    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = Avoir_Matricule.NumAvoir +1
    SI nNum <= 999 ALORS
        Avoir_Matricule.NumAvoir++
    SINON SI nNum > 999
        Car est une chaîne  = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
        Avoir_Matricule.Lettre = Car
        Avoir_Matricule.NumAvoir = " "
    FIN
    SI HModifie(Avoir_Matricule)=Faux ALORS
        Erreur("Erreur de génération")
        RENVOYER 0
    FIN
    // Génère le numéro : Ex : 18A001
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(nNum,"03d")
    RENVOYER sNumEnreg
     

    Fichiers attachés:

  • trick

    trick Active Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    173
    J'aime reçus:
    96
    Salut,

    Comme je n'ai pas ta Base de données j'ai ressortir ta partie de code en enlevant les accès à ta base et le code ci dessous fonctionne bien
    Donne comme résultat 19B001

    Code (Text):


    Date_Avoir est une chaîne = "19"
    NumAvoir est un entier = 999
    Lettre est une chaîne

    sNumEnreg est une chaîne
    ChaineAlphabet est une chaîne="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    nIndice est un entier = 1

    Lettre = ExtraitChaîne(ChaineAlphabet, nIndice, ",")
    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = NumAvoir +1
    SI nNum <= 999 ALORS
        NumAvoir++
    SINON SI nNum > 999
        Car est une chaîne  = Caract(Asc(Majuscule(Lettre))+1)
        Lettre = Car
        NumAvoir = "001"
    FIN

    // Génère le numéro : Ex : 18A001
    sNumEnreg= Date_Avoir+Lettre+NumériqueVersChaîne(NumAvoir,"03d")

     
    Je n'ai pas ta Base de données mais essaie le code ci-dessous

    Code (Text):


    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = Avoir_Matricule.NumAvoir +1
    SI nNum <= 999 ALORS
        Avoir_Matricule.NumAvoir++
    SINON SI nNum > 999
        Car est une chaîne  = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
        Avoir_Matricule.Lettre = Car
        Avoir_Matricule.NumAvoir = "001"
    FIN
    SI HModifie(Avoir_Matricule)=Faux ALORS
        Erreur("Erreur de génération")
        RENVOYER 0
    FIN
    // Génère le numéro : Ex : 18A001
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(Avoir_Matricule.NumAvoir,"03d")

    RENVOYER sNumEnreg

     
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Salut,

    Comme je n'ai pas ta Base de données j'ai ressortir ta partie de code en enlevant les accès à ta base et le code ci dessous fonctionne bien
    Donne comme résultat 19B001

    Code (Text):


    Date_Avoir est une chaîne = "19"
    NumAvoir est un entier = 999
    Lettre est une chaîne

    sNumEnreg est une chaîne
    ChaineAlphabet est une chaîne="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    nIndice est un entier = 1

    Lettre = ExtraitChaîne(ChaineAlphabet, nIndice, ",")
    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = NumAvoir +1
    SI nNum <= 999 ALORS
        NumAvoir++
    SINON SI nNum > 999
        Car est une chaîne  = Caract(Asc(Majuscule(Lettre))+1)
        Lettre = Car
        NumAvoir = "001"
    FIN

    // Génère le numéro : Ex : 18A001
    sNumEnreg= Date_Avoir+Lettre+NumériqueVersChaîne(NumAvoir,"03d")

     
    Je n'ai pas ta Base de données mais essaie le code ci-dessous

    Code (Text):


    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = Avoir_Matricule.NumAvoir +1
    SI nNum <= 999 ALORS
        Avoir_Matricule.NumAvoir++
    SINON SI nNum > 999
        Car est une chaîne  = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
        Avoir_Matricule.Lettre = Car
        Avoir_Matricule.NumAvoir = "001"
    FIN
    SI HModifie(Avoir_Matricule)=Faux ALORS
        Erreur("Erreur de génération")
        RENVOYER 0
    FIN
    // Génère le numéro : Ex : 18A001
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(Avoir_Matricule.NumAvoir,"03d")

    RENVOYER sNumEnreg

     
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour la base n'est pas aussi fameuse elle me permet de stocker les infos telles que l'année encours, lettre de l'alphabet et numéro d'ordre
    par exple au prémier lancement la BD recevra les data Date_Avoir ->19, Lettre -> A NumAvoir -> 0
    car ce que tu proposes gâte tout...
    try using this analysis given in screenshot
     

    Fichiers attachés:

  • trick

    trick Active Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    173
    J'aime reçus:
    96
    Re,

    j'ai essayé avec une Base de données et le code ci-dessous fonctionne nickel
    Tu a u moins essayé de copier coller le code ci-dessous et de relancer ton test ?
    Pour vérifier le bon fonctionnement le deboggeur Pcsoft est ton ami

    Perso je ne peux plus rien pour toi (sans un mini projet et ton code ) car ce code fonctionne selon ce que tu demande

    Code (Text):


    PROCEDURE Gen_Matricule()
    sNumEnreg est une chaîne
    ChaineAlphabet est une chaîne="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    nIndice est un entier = 1
    TANTQUE HLitRecherchePremier(Avoir_Matricule,Date_Avoir,Date_Serveur(),hBlocageEcriture)=Faux
        // Si on n'a pas trouvé d'enreg, on l'ajoute
        SI HTrouve()=Faux ALORS
            Avoir_Matricule.Date_Avoir = Date_Serveur()
            Avoir_Matricule.NumAvoir = 0
            Avoir_Matricule.Lettre = ExtraitChaîne(ChaineAlphabet, nIndice, ",")
            SI PAS HAjoute(Avoir_Matricule) ALORS
                Erreur_trouvée("Erreur d'ajout des infos de code")
            FIN
        SINON
            // Enregistrement trouvé mais le blocage n'est pas possible
            SI HErreurBlocage() ALORS
                CONTINUER
            SINON
                // Autre erreur
                RENVOYER ""
            FIN
        FIN
    FIN

    // Lit le numéro de séquence, l'incrémente et met à jour le fichier
    nNum est un entier = Avoir_Matricule.NumAvoir +1
    SI nNum <= 999 ALORS
        Avoir_Matricule.NumAvoir++
    SINON SI nNum > 999
        Car est une chaîne  = Caract(Asc(Majuscule(Avoir_Matricule.Lettre))+1)
        Avoir_Matricule.Lettre = Car
        Avoir_Matricule.NumAvoir = "1" // Force à 1
    FIN
    SI HModifie(Avoir_Matricule)=Faux ALORS
        Erreur("Erreur de génération")
        RENVOYER 0
    FIN
    // Génère le numéro : Ex : 18A001
    sNumEnreg= DateVersChaîne(Date_Serveur(),"AA")+Avoir_Matricule.Lettre+NumériqueVersChaîne(Avoir_Matricule.NumAvoir,"03d")
    RENVOYER sNumEnreg

     
     
  • sardoine

    sardoine New Member

    Inscrit:
    Juin 30, 2018
    Messages:
    3
    J'aime reçus:
    0
    salut ceci pourra t'aider :

    PROCÉDURE Nouvelle_Procédure()

    //-------------ANNE EN COURS ON RECUPERE LE DEUX DERNIERS CHIFFRES
    anneee est une chaîne = Droite(AnnéeEnCours(),2)


    //-------------LE CHAMP QUI CONTIENT LE DERNIER MATRICULE DE VOTRE TABLE
    SI SAI_Matricule="" ALORS

    //-------------POUR LE PREMIER MATRICULE 19A001
    SAI_Résultats = anneee+""+"A"+"001"


    SINON

    //-------INCREMENTATION DE 3 DERNIERS CARACTERES SI LE CHAMP SAI_MATRICULE CONTIENT UN MATRICULE
    matricuChiffre est une chaîne = ChaîneIncrémente(Droite(SAI_Matricule,3 ))

    //-------RECUPERATION DE LA LETTRE ALPHABETIQUE DANS LE CHAMP SAI_MATRICULE
    matricuLettre est une chaîne = Milieu(SAI_Matricule,3,1)

    //------CONVERTION DE CHAINE INCREMENTEE EN ENTIER
    nMatricuChiffreEnEntier est un entier = matricuChiffre

    //------SI LE DERNIER MATRICULE EST INFERIEUR OU EGAL A 998 LA LETTRE NE CHANGE PAS
    SI nMatricuChiffreEnEntier <= 998 ALORS


    SAI_Résultats = anneee+""+matricuLettre+""+matricuChiffre


    //-------MAIS SI LE DERNIER MATRICULE EST SUPERIEUR A 998 ALORS LA LETTRE A CHANGE VERS B
    SINON


    //--------NOUS COMMENCONS PAR CHANGER LA LETTRE A VERS B QUI A ETE RECUPERE DANS LE CHAMP SAI_MATRICULE CI-HAUT
    sAlphab est une chaîne = Caract(Asc(matricuLettre)+1)

    //---------LE RESULTAT FINAL SERA 19B001---------
    SAI_Résultats = anneee+""+sAlphab+""+"001"


    FIN

    FIN

    SI TU EPROUVE DES DIFFICULTES FAIT SIGNE.
     
  • Partager cette page

    Chargement...