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 :

la fonction hlitdernier ne trouve aucune donnée enregistrée en BD. [WD17]


Sujet :

WinDev

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut la fonction hlitdernier ne trouve aucune donnée enregistrée en BD.
    Bonsoir à tous, voici mon problème, je fais un logiciel de gestion de stock et de vente d'un magazin de vêtements. J'ai crée une fonction locale pour l'incrementation du code des facture, il donne correctement. Le problème survient lorsque j'utilise une fonction locale identique à celle de la facture pour les bons de commandes et d'entrées. Lorsque j'enregistre le première enregistrement tout vas bien mais lors l'on crème ngation du deuxième, une erreur apparaît sur la ligne de la fonction HlitDernier(bonentree.nument), disant que le code du bon qui viens d'etre enregistré est inconnu donc inexistant(pourtant je viens de l'enregistrer) même quand je ferme la fenêtre et recommence rien. Quelqu'un aurait-il une solution? Mer6 d'avance

    Le code de la fonction

    Hlitfernier(bonent. Nument)
    Hnumenr(bonent)
    I=Hnumenr(bonent)
    Si Hendehors(bonent) =vrai alors
    I+=2
    Ival=i
    Fin
    Si Hendehors(bondent) =faux alors
    I+=1
    Ival=i
    Fin
    Date=datesys()
    Cval= "be"+dateverschaine(date) +numéroverschaine(ival," 4.0f")
    Renvoyer cval

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Ca veut dire quoi : lors l'on crème ngation ?

    A mon avis, l'utilisateur ne devrait pas pouvoir faire crème ngation. c'est là le problème.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Sorry pour l'orthographe c'est le correcteur de mon téléphone qui à déconné. Je voulais parler de l'incrémentation du numéro de bon. L'utilisateur ne fais rien, lincrementation se fait automatiquement, lorsque le bouton "nouvelle enregistrement" est appuyé. D'où la fonction appelé à ce moment là.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour

    Il y a plusieurs points à souligner et à commenter.

    Tout d'abord, quand vous faites appel à l'aide du Forum, il faudrait respecter une bienséance minimale. Je m'explique.

    1. La lecture des règles vaut aurait permis de connaître l'existence de la balise [CODE] et de l'utiliser.
    2. Plutôt que de vous excuser en incriminant votre téléphone, une relecture même rapide vous aurait permis de repérer l'erreur, en fait les erreurs.
    3. Il est demandé d'éviter le style texto, donc évitez les "Mer6".

    Tous ces points sont de nature à améliorer la compréhension de ceux et celles qui sont disposés à vous aider.
    Si, par contre, ils doivent faire trop de spéculation pour vous suivre, ils passent au sujet suivant.
    Faire un minimum d'effort sera donc tout bénéfice pour vous.
    Et tenter de formuler clairement et proprement un problème, amène souvent à la solution.

    Après ces préliminaires un peu désagréables, entrons dans le vif du sujet.

    Vous nous montrez le corps d'une fonction locale, mais nous ignorons les (éventuels) paramètres d'appel.

    Qu'entendez-vous par premier enregistrement ? Premier bon de commande ? Première ligne d'une bon de commande ?

    Hlitfernier(bonent. Nument) ne peut pas fonctionner : l'argument ne peut pas être un nom de rubrique (préfixé du nom du fichier) comme vous l'utilsez.
    HLitDernier() attend soit un nom de fichier seul : HLitDernier(bonent), soit un nom de fichier et une rubrique de parcours qui doit être une clé : HLitDernier(bonent, Nument)
    A moins évidemment, qu'il s'agisse encore d'un problème de relecture, mais je me suis basé sur votre commentaire ("une erreur apparaît sur la ligne de la fonction HlitDernier(bonentree.nument)) pour interpréter votre code.
    Donc, il faudrait connaître l'erreur exacte qui vous est renvoyée.

    Ensuite, HLitDernier vous positionne sur le dernier enregistrement selon la rubrique de parcours Nument, pour autant que Nument soit défini comme une clé (ce que nous ignorons).

    Le premier appel à HNumEnr ne sert à rien.
    Le second appel I = HNumEnr vous renvoie le numéro physique de l'enregistrement en cours.
    Ce numéro ne correspond généralement pas à l'identifiant automatique (voir la doc sur HModifie).

    La fonction numéroverschaine (numéroverschaine(ival," 4.0f")) n'existe pas, mais bien NumériqueVersChaine().
    Vous devriez relire l'explication du format à spécifier parce que vous ne l'avez apparemment pas bien compris.
    " 4.0f" devrait sans doute s'écrire "04d" si vous souhaitez obtenir une mise en forme d'un entier (numéro d'enregistrement ou de bon de commande) et non d'un décimal ou flottant.
    "0" vous permet de faire précéder les chiffres significatifs par des "0" pour obtenir la longueur voulue
    "4" signifie que vous voulez obtenir une longueur de 4 caractères et donc formater votre nombre sur 4 chiffres (MAIS sans limite à 9.999 et votre format pourrait donc s'allonger si vous n'avez pas prévu la bonne limite, ce qui vous poserait des problèmes lors d'une recherche)
    "d" signifie que vous travaillez avec un entier et remplace donc avantageusement ".0f"

    Pour le reste, on peut difficilement faire plus pour l'instant.

    Bon travail

    Hemgé

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Tout est dit.
    A partir du moment où tu ne relis pas ta question... comment peut on avoir envie d'aider ? Comment peut-on même être capable d'aider ?
    Relire sa question, c'est le minimum requis. C'est la base de la POLITESSE.

    Zut, j'ai dit un gros mot.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Ok merci bien compris!
    Bonjour,
    Merci à vous Hemgé et biensur tbc92, il aura fallu ça pour que je lise vraiment les règles du forum, je ne l'ai avais que survolées. une bonne douche froide ça aide souvent...

    Alors j'ai retenu plusieurs points soulevez;
    1) Montrer les paramètres d'appel. le code complet de la fonction est cette fois présent.

    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
    26
    27
    28
    29
    30
     
    PROCEDURE IncréLocNumCom()
    Ival est un entier
    Cval est une chaîne
    Date est une Date
    i est un entier
     
    //lit le dernier enregistrement
    HLitDernier(BonCommande.NumBC)
     
    //prend le numéro de l'enregistrement en cours
    i=HNumEnr(BonCommande)
     
    //vérifi s'il y'a déja un engegistrement dans la base de donneés
      SI HEnDehors(BonCommande)= Vrai ALORS
      	i+=2
      	Ival=i
     FIN
     
    //s'il y'a déjà un enregistrement
     SI HEnDehors(BonCommande)=Faux  ALORS
    	i+=1
    	Ival=i
     FIN
     
    Date=DateSys()
    //convertir le type date et numérique puis concaténer 
    Cval="CO"+DateVersChaîne(dDate,"MM-JJ-AAAA")+NumériqueVersChaîne(Ival,"04d")
     
    RENVOYER Cval
    2) De quoi je parle exactement quand je fais référence à un enregistrement d'un bon de commande? Il sagit belle et bien de l'enregistrement d'un bon de commande. Pour être plus précis la fenêtre (bon de commande) à son ouverture est totalement grisé sauf le bouton "Nouvelle enregistrement" accessible par un clic ou un raccourci clavier. Apres clic, la fonction d'incrémentation est appelée, NumFact=IncréLocNumCom() (rempli le champs numéro du bon de commande) et la fenêtre deviens accessible (bouton nouvelle enregistrement lui se grise) celle ci contenant les champs standard à un bon de commande: nom de l'article, nombre d'article commandé...ainsi qu'un tableau ou sont ajouté (bouton ajouté) les ligne de commandes. Lorsque cette opération est fini, le bouton "valider" est appuyer, l'enregistrement des données est effectuer et la fonction d'incrémentation est là encore appeler pour annoncer un nouvelle enregistrement éventuel. Pour finir l'impression et le cycle recommence. voici en grosso-modo comment ça se passe.
    3) Syntaxe de HLitDernier. voici vraiment la syntaxe que j'ai utilisé HLitDernier (BonCommande.NumBC). BonCommande=Nom du fichier en Base de donnée et NumBC= la clé primaire.
    4) l'erreur exacte renvoyer. La voici:"

    "Erreur à la ligne 21 du traitement Procédure locale IncréLocNumCom.
    Vous avez appelé la fonction HLitDernier.
    Fichier <CO02-14-20170001> inconnu dans l'analyse <C:\Mes Projets\FKStock\FKStock.wdd>, ou requête ou vue non initialisée.
    Si il s'agit d'une requête, l'exécution de cette requête a peut-être échoué."

    Il est important que je précise que cette erreur apparaît lorsque j'ai au préalable enregistrer le bon <CO02-14-20170001> et que je veux enregistrer un autre. Cette fonction donne parfaitement dans le formulaire de la "Facture" qui est textuellement et fonctionnellement pareille. Alors j'ai eu beau essayer de voir mon erreur sur le formulaire "Bon de commande" et "Bon d'entrée en stock", rien HLitDernier() ne voit rien.
    5) NumEnt est t'il une clé? effectivement mais c'est plus tôt NumBC, dans notre cas qui est une clé primaire.
    6) Qu'est ce que je cherche en appelant HNumEnr(). Je recherche le numéro d'enregistrement et non l'id automatique, car je l'ai supprimer sur toute mes table il ne me semblait pas nécessaire puisque j'en ai crée d'autres.
    7) Syntaxe de NumériqueVersChaine(): Merci pour ces précisions sur la syntaxe, mais pour le "0" avant "4.0F" je l'avais oublier. Encore une erreur de ma part.

    Pour finir, comme solutions d'aide proposées par windev, il parle de déclarer le fichier "Boncommande" en spécifiant son chemin dans le disque comme s'il n’était pas dans le répertoire du projet en utilisant HDeclare(). le fichier est belle et bien dans le répertoire du projet mais j'ai neanmoins essayer, rien toujours la fonction HLitDernier() ne reconnait pas le numéro. Sauf si je l'ai mal effectuer l'opération? Comme autre solution proposées, l'utilisation de HDecritFichier() mais si j'ai bien compris cette fonction est utilisée lorsqu'on veut décrire un fichier par programmation ce qui n'est pas mon cas.

    Merci déjà pour l'écoute et bonne journée ou soirée

  7. #7
    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,
    Il faut bien lire les réponses...
    Citation Envoyé par Hemgé Voir le message
    Hlitfernier(bonent. Nument) ne peut pas fonctionner : l'argument ne peut pas être un nom de rubrique (préfixé du nom du fichier) comme vous l'utilsez.
    HLitDernier() attend soit un nom de fichier seul : HLitDernier(bonent), soit un nom de fichier et une rubrique de parcours qui doit être une clé : HLitDernier(bonent, Nument)
    Citation Envoyé par BlackStones Voir le message
    Bonjour,
    3) Syntaxe de HLitDernier. voici vraiment la syntaxe que j'ai utilisé HLitDernier (BonCommande.NumBC). BonCommande=Nom du fichier en Base de donnée et NumBC= la clé primaire.
    4) l'erreur exacte renvoyer. La voici:"

    "Erreur à la ligne 21 du traitement Procédure locale IncréLocNumCom.
    Vous avez appelé la fonction HLitDernier.
    Fichier <CO02-14-20170001> inconnu dans l'analyse <C:\Mes Projets\FKStock\FKStock.wdd>, ou requête ou vue non initialisée.
    Si il s'agit d'une requête, l'exécution de cette requête a peut-être échoué."
    Il est important que je précise que cette erreur apparaît lorsque j'ai au préalable enregistrer le bon <CO02-14-20170001> et que je veux enregistrer un autre
    Rien ne vous choque ici ? Le message WinDev est pourtant assez explicite, et en ajoutant le message de Hemgé la solution parait assez évidente...

    Tatayo.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Résolut
    Oui effectivement TaTayo je viens de voir mon erreur elle est si simple que j'en suis moi même estomaqué d'avoir louper ça. Au lieu de HLitDernier(BonCommande.NumBC) il fallait plus tôt écrire HLitDernier(BonCommande,NumBC) ou simplement HLitDernier(BonCommande), dans ce dernier cas j'imagine que comme il n'existe qu'une clé dans le fichier la fonction prend automatiquement celle-ci comme clé de parcours. une virgule qui fait la différence.
    Merci encore

  9. #9
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Je vais encore venir avec mes leçons de morale, mais ça forme un tout qui est très cohérent.
    Programmer, ça demande de la rigueur. (fichier.nom_de_colonne) ou (fichier,nom_de_colonne), ce n'est pas du tout pareil.
    Pour programmer correctement, il faut s'appliquer, il faut lire et relire, et vérifier la syntaxe de chaque instruction. S'assurer que chaque mot est correctement écrit.
    Et le mieux pour s'entraîner à cette rigueur, c'est d'avoir la même rigueur quand on poste une question sur un forum.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] La fonction .Find ne trouve aucun résultat
    Par Didier_BONANSEA dans le forum Excel
    Réponses: 4
    Dernier message: 16/07/2015, 13h38
  2. Comment Eviter ORA-01403(aucune donnée trouvée)
    Par riadhhwajdii dans le forum PL/SQL
    Réponses: 7
    Dernier message: 28/01/2011, 12h06
  3. ORA-01403: Aucune donnée trouvée
    Par MaRTy59 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 10/08/2010, 11h26
  4. ERREUR Aucune donnée trouvée
    Par TheBlue dans le forum SQL
    Réponses: 1
    Dernier message: 20/05/2008, 23h05
  5. [vba] Mon findfirst ne trouve aucune donnée.
    Par LordTal dans le forum VBA Access
    Réponses: 7
    Dernier message: 02/04/2007, 14h54

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