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

JavaScript Discussion :

Code qui ne marche qu'en debuggage


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Code qui ne marche qu'en debuggage
    Bonjour,

    Pour le contexte, il s'agit de traiter des nomenclatures ( liste de pièces mécaniques).
    L’arborescence est limitée à un seul niveau avec une succession de tables, dont la première ligne concerne le composé et les suivantes sont ses composants.
    L'objectif est de sortir ces informations du html et de les mettre dans un fichier texte à plat en vue d'un import par l'erp.

    j'ai un script assez simple qui n'utilise que l'api native du navigateur et aucune autre dépendance. Il fonctionne en pas à pas, mais tombe en échec si lancé d'un coup.
    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
    31
    32
    33
              function pushBOM() {
                let Tables = document.getElementById("nomenclatures").getElementsByTagName("table");
                let nomERP = "";
     
                for (let i = 0; i < Tables.length; i++) {
                  let ligne_compose = Tables[i].getElementsByClassName("ligne_compose")[0];
     
                  let type_compose = ligne_compose.getElementsByClassName("col_identification")[0].innerText;
                  let code_compose = ligne_compose.getElementsByClassName("col_compose")[0].innerText;
                  let desc_compose = ligne_compose.getElementsByClassName("col_designation")[0].innerText;
                  nomERP = nomERP.concat("A|",code_compose,"||",desc_compose,"||\n");
     
                  // Export des composants
                  let Lignes = Tables[i].getElementsByTagName("tr");
     
                  for (let i = 2; i < Lignes.length; i++) {
                    // On saute l'entête et la ligne_compose
     
                    let ligne_composant = Lignes[i];
                    let type_composant = ligne_composant.getElementsByClassName("col_identification")[0].innerText;
                    let code_composant = ligne_composant.getElementsByClassName("col_composant")[0].innerText;
                    let desc_composant = ligne_composant.getElementsByClassName("col_designation")[0].innerText;
                    let quantite = ligne_composant.getElementsByClassName("col_qte")[0].innerText;
                    }
     
                    // On vérifie que le type du composant est reconnu
                    if(type_composant != "") {
                      nomERP = nomERP.concat("N|",code_compose,"|",code_composant,"|",desc_composant,"|",quantite,"\n");
                    }
                  }
                }
                console.log(nomERP)
              }
    Un extrait du fichier html :
    Code html : 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
    31
    32
    33
    34
    35
    <table>
       <col class="col_identification">
       <col class="col_compose">
       <col class="col_composant">
       <col class="col_designation">
       <col class="col_qte">
       <tr>
          <th></th>
          <th>Fichier</th>
          <th>Composé</th>
          <th>Composant</th>
          <th>Désignation</th>
          <th>Qté</th>
       </tr>
       <tr class="ligne_compose">
          <td class="col_identification" title="Identifié comme un composant sous-ensemble (catalogue ou spécifique)">-</td>
          <td class="col_compose"><a id="221818-00">221818-00</a></td>
          <td class="col_composant"></td>
          <td class="pre col_designation" desc_en="FRAME">00- BATI</td>
          <td class="col_qte"></td>
       </tr>
       <tr>
          <td class="col_identification" title="Identifié comme un composant séquence (catalogue ou spécifique)">S</td>
          <td class="col_compose"></td>
          <td class="col_composant"><a href="#140E--00S00-0006">140E--00S00-0006</a></td>
          <td class="pre col_designation" desc_en="FRAME">00S BATI: BATI EQUIPE</td>
          <td class="col_qte">1</td>
       </tr>
       <tr>
          <td class="col_identification" title="Identifié comme un composant séquence (catalogue ou spécifique)">S</td>
          <td class="col_compose"></td>
          <td class="col_composant"><a href="#140E--00S11-0001">140E--00S11-0001</a></td>
          <td class="pre col_designation" desc_en="DOORS: BACK LEFT DOOR">00S PORTES: PORTE ARRIERE DROIT</td>
          <td class="col_qte">1</td>
       </tr>

    J’obtiens une erreur
    16:19:45,257 Uncaught ReferenceError: type_composant is not defined
    pushBOM file:///NOMENCLATURE_M22-1818_20221117155616.html:34487
    <anonymous> debugger eval code:1
    debugger eval code:34487:20
    pushBOM file:///NOMENCLATURE_M22-1818_20221117155616.html:34487
    <anonyme> debugger eval code:1
    Il fonctionne en pas à pas, mais tombe en échec si lancé d'un coup.

    Si je commente la ligne "let type_composant = ligne_composant.getElementsByClassName("col_identification")[0].innerText;" et que je commande le test associé à cette variable un peu plus bas, la fonction fonctionne !!
    Et je ne comprends pas pourquoi !
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 451
    Points : 4 600
    Points
    4 600
    Par défaut
    ton script est surement charge avant le HTML, du coup, quand il cherche un element dans la page (qui n'existe pas encore), il rale =)
    un navigateur est "bete", il lit une ligne & l'interprete... donc si ton JS est avant, ton <body> il va interpreter le JS avant d'avoir lu le <body>

    si ton JS est dans un fichier a part, essaye de rajouter un defer a ta balise
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="tonFichier.js" defer></script>

    si ton JS est dans la page HMTL, tu peux mettre ton code dans un DCL
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.addEventListener('DOMContentLoaded', () => {
    // ... ton code ici ...
    });
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

Discussions similaires

  1. un code qui ne marche pas
    Par JeanNoel53 dans le forum C++/CLI
    Réponses: 8
    Dernier message: 15/02/2016, 19h11
  2. [WD17] Problème avec un code qui ne marche plus
    Par devalender dans le forum WinDev
    Réponses: 2
    Dernier message: 14/02/2014, 12h57
  3. [XL-2010] code qui ne marche pas avec excel 2003
    Par nibledispo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/08/2013, 06h04
  4. Code qui ne marche plus sur IE7 Beta
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/03/2006, 00h15
  5. code qui ne marche pas
    Par Jihed Amine Maaref dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/08/2005, 13h44

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