Forum Sketchup Artlantis Archicad
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Annonces
Bonjour Invité Bienvenue sur le forum biblio3d - le forum a été créé le Sam 19 Jan 2008 - 14:26- Nous avons enregistrés 14835 topics pour un total de : 175875 posts - le record de membres connectés simultanément :853
Galerie


[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Empty
Ton bloc notes
Derniers sujets
» [ SKETCHUP plugins ] Les bon plans Black Friday 2024
par simjoubert Hier à 16:19

» [ TWINMOTION ] Unreal Engine déménage sur Fab - DataSmith & Archicad
par simjoubert Hier à 16:04

» [ SKETCHUP généralité ] Tête de pilastre
par jerryvento Hier à 8:52

» [ CHALLENGE 2024 ] résultats du challenge
par Allansens Hier à 8:42

» [ ARCHICAD ] Paramétrage des coupes sur Archicad
par AK40Cess Jeu 21 Nov 2024 - 14:12

» [ FORUM ] astuce pour insérer facilement un tableau sur le forum
par tenrev Mer 20 Nov 2024 - 9:12

» [ SKETCHUP plugins ] une barre d’outils perso
par tenrev Lun 18 Nov 2024 - 15:05

» [ SKETCHUP généralité ] Orienter 1 Face, 1 Profil Normal (Perpendiculaire) à 1 Arête, 1 Trajectoire
par jerryvento Lun 18 Nov 2024 - 14:47

» [ SKETCHUP généralité ] Modéliser facilement 1 spirale en moins de 40 secondes
par jerryvento Lun 18 Nov 2024 - 14:47

» [ SKETCHUP généralité ] Modélise 1 Forme Hélicoïdale, en forme de spirale : main courante, rampe d'accès voitures...
par jerryvento Lun 18 Nov 2024 - 14:46

» [ SKETCHUP tutos ] Orienter 1 Face, 1 Profil Normal (Perpendiculaire) à 1 Arête, 1 Trajectoire
par jerryvento Lun 18 Nov 2024 - 14:45

» [ SKETCHUP tutos ] Modéliser facilement 1 spirale en moins de 40 secondes
par jerryvento Lun 18 Nov 2024 - 14:44

» [ SKETCHUP tutos ] Modélise 1 Forme Hélicoïdale, en forme de spirale : main courante, rampe d'accès voitures...
par jerryvento Lun 18 Nov 2024 - 14:43

» ColorMaker par Didier Bur[ SKETCHUP plugins ]
par JDD Dim 17 Nov 2024 - 20:56

» [ ARCHICAD ] Plus de format *atl dans Archicad
par Coulou Jeu 14 Nov 2024 - 8:26

» [ SKETCHUP tutos ] Créer des Bibliothèques et des livres aléatoires Facilement (2 Méthodes!)
par tenrev Mar 12 Nov 2024 - 11:31

» [ CHALLENGE 2024 ] les images finales du challenge
par tenrev Lun 11 Nov 2024 - 15:35

» [ SKETCHUP composants dynamiques ] Formule IF
par Samuel MATHIEU Jeu 7 Nov 2024 - 21:12

» [ Challenge 2024] cHallenge archjtexture exterieur ou paysagiste-vick-sketchup-enscape
par vick Jeu 7 Nov 2024 - 10:23

» [ SKETCHUP vray ]
par tenrev Mar 5 Nov 2024 - 21:19

» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste- Gaspard Hauser - Sketchup - D5 render
par tenrev Mar 5 Nov 2024 - 10:22

» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - JDD - SketchUp - Enscape
par tenrev Mar 5 Nov 2024 - 10:10

» [ ARCHICAD ] Murs paramétriques
par Coulou Lun 28 Oct 2024 - 10:28

» [ SKETCHUP généralité ] Aide pour SKP 2017
par PEGASE Sam 26 Oct 2024 - 18:36

» [ ARCHICAD ] Ajouter du lambris sur un mur
par Coulou Jeu 24 Oct 2024 - 10:43

» [ SKETCHUP généralité ] 1 Citrouille à imprimer pour Halloween
par jerryvento Jeu 24 Oct 2024 - 8:13

» [ SKETCHUP tutos ] 1 Citrouille à imprimer pour Halloween
par jerryvento Jeu 24 Oct 2024 - 8:11

» [ D5_RENDER] Petit exemple "hors sujet" ... D5
par Gaspard Hauser Mar 22 Oct 2024 - 19:59

» [ MATOS INFORM. ] [WINDOWS] Miniatures de prévisualisation pour les fichiers de modèle 3D au format .OBJ, .FBX, .STL, .3DS et +
par Gaspard Hauser Mar 22 Oct 2024 - 19:49

» [ SKETCHUP Layout ] Symboles Électriques sur Layout
par JDD Jeu 17 Oct 2024 - 9:44

» [ ARCHICAD ] gardes corps et profils complexe ?
par Christophe Fortineau Lun 14 Oct 2024 - 12:10

» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - allansens - cinema 4D
par Allansens Sam 12 Oct 2024 - 13:53

» [ ARTLANTIS ] Ca donne envie !
par Gaspard Hauser Jeu 10 Oct 2024 - 10:00

» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - AK40Cess - Archicad-Twinmotion
par Coulou Mar 8 Oct 2024 - 11:53

» [ TWINMOTION ] Unreal Engine déménage sur Fab - Assets de Megascan
par JDD Lun 7 Oct 2024 - 21:52

Sondage

êtes vous intéressé et prêt à participer à un challenge ?

[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c1015%[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c10 15% [ 2 ]
[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c1031%[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c10 31% [ 4 ]
[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c1046%[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c10 46% [ 6 ]
[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c108%[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c10 8% [ 1 ]
[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c100%[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c10 0% [ 0 ]
[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c100%[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Poll_c10 0% [ 0 ]

Total des votes : 13

chaine sketchup.tv
Serveur Discord
-28%
Le deal à ne pas rater :
-28% Machine à café avec broyeur à grain MELITTA Purista
229.99 € 318.99 €
Voir le deal

[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel

Page 4 sur 4 Précédent  1, 2, 3, 4

Voir le sujet précédent Voir le sujet suivant Aller en bas

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Jeu 13 Mai 2021 - 17:49

Je vais voir si en remplaçant les valeurs par défaut directement par la valeurs calculée si je peux m'affranchir du redraw! et voir si cela fait gagner du temps du coup il fut que je face un boite de dialogue pour saisir directement les valeurs de prix unitaire de nom . c'est même plus pratique pour du traitement de lot !
Je rajoute à la todo !

Par contre si le composant est définit avant c'est plus rapide les instances copiées en profite

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
Samuel Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Jeu 13 Mai 2021 - 19:49

Bonsoir Simon sourire

Simple vérification : tu utilises bien le

Code:
Sketchup.active_model.start_operation

quand tu fais des traitements par lot ?

-------------------------------------------------------------------------------------------------------------------------
Galerie | Plugins
simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Jeu 13 Mai 2021 - 19:54

Hello
Oui mon cher maitre et un commit à la fin

Code:

model = Sketchup.active_model
#On indique le début de l'opération pour une éventuelle annulation
model.start_operation('créer attribut', true,true,false)


Code:

   status = model.commit_operation
   if status == true
       UI.messagebox('7 Attributs créés',MB_OK)
   end
end

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

Samuel Tallet aime ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Lun 17 Mai 2021 - 14:00

Hello
Je bloque sur le javascript pour une boite de dialoque qui afficherai les attributs rapport pour chaque éléments de la sélection.

J'ai créer des fonctions javascript mais elles ne semblent pas être reconnu comme définit
je pense que c'est la syntaxe de l'enchainement de la définition des  fonctions qui bug.

Le concept j'itère chaque instances sélectionnées
je créer un json des valeurs par défault

j'ai passé le json en valeur d'une variable javascript via ruby
les inputs du formulaire reçoivent en dure les valeurs par ruby

je veux qu'en je clic sur le bouton suivant changer les valeurs des inputs avec les valeurs de l'enregistrement suivant.
les valeurs initiales ne sont pas chargées correctement après le chargement de la boite de dialogue.
avec les outils de développement on voit bien que ruby à écrit en dure le json dans le script

J'ai aussi une fonction qui recalcule le sous total âpres changement des qtt ou du prix unitaire.
quand dan le script elle est seul cela fonctionne mais pas avec les autres fonctions

mais là j'ai rien qui fonctionne


​[/code]

[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 Captur79

Voila le code de mon module
si une âme charitable genre @Samuel peux y jeter un œil ! ange voir les deux !

merci
Juste le code su script

Code:

# Préparation du code JS (syntaxe HEREDOC).
            js = <<-JS
            
               
               
               

                  // Mise en place d'un espace de noms pour éviter les conflits...
                  SimJoubert = {}

                  /**
                   * Renvoie les valeurs saisies.
                   *
                   * @returns {object}
                   */
                  SimJoubert.obtenirValeursSaisies = () => {

                        var valeursSaisies = [];
                        
                        // Pour chaque élément HTML de type input :
                        var numenr = getElementById("attribut_rapport").elements["num"].value
                        document.querySelectorAll('input,select,textarea').forEach(elementInput => {
                              valeursSaisies[numenr].elementInput.name = elementInput.value
                        })

                        return valeursSaisies

                  }

                  // Gestion des évènements.

                  // Dès que le document HTML est chargé :
                  document.addEventListener('DOMContentLoaded', _evenement => {
                        
                        // Declaration des variables
                        var numenr = 0;
                        var values_json = #{default_values_json};
                        var article, commentaire, poste, fournisseur, qtt, unite, prixunitaire, soustotal, id, num, num_max;
                                                
                        // Lors d'un clic sur le bouton APPLIQUER :
                        document.getElementById('bt_appliquer').addEventListener('click', _evenement => {

                              // On appelle le callback défini en Ruby un peu plus bas...
                              sketchup.enregistrerValeursSaisies(SimJoubert.obtenirValeursSaisies())

                        })

                        // Lors d'un clic sur le bouton RESET :
                        document.getElementById('bt_reset').addEventListener('click', _evenement => {

                              // On appelle le callback défini en Ruby un peu plus bas...
                              sketchup.effacerValeursSaisies()

                        })

                        // Lors d'un clic sur le bouton ANNULER :
                        document.getElementById('bt_annuler').addEventListener('click', _evenement => {

                              // On appelle le callback défini en Ruby un peu plus bas...
                              sketchup.annuler()

                        })
                        
                        //Lors d'un clic sur le Bouton Next
                        document.getElementById('bt_next').addEventListener('click', fonctionNext()
                        {
                           // on incremente la variable numenr
                           numenr = numenr + 1;
                           
                           // On extrait du tableau values_json les valeurs de l'enregistrement
                           article = values_json[numenr].article;
                           commentaire = values_json[numenr].commentaire.;
                           poste = values_json[numenr].poste;
                           fournisseur = values_json[numenr].fournisseur;
                           qtt = values_json[numenr].qtt;
                           unite = values_json[numenr].unite;
                           prixunitaire = values_json[numenr].prixunitaire;
                           soustotal = parseFloat(qtt)*parseFloat(prixunitaire);
                           id = values_json[numenr].id;
                           num = values_json[numenr].num;
                           num_max = values_json[numenr].num_max;
                           
                           //on change les valeurs des inputs
                           document.getElementById("attribut_rapport").elements["ra_1_article"].value = article;
                           document.getElementById("attribut_rapport").elements["ra_1_commentaire"].value = commentaire;
                           document.getElementById("attribut_rapport").elements["ra_1_fournisseur"].value = fournisseur;
                           document.getElementById("attribut_rapport").elements["ra_1_poste"].value = poste;
                           document.getElementById("attribut_rapport").elements["ra_4_qtt"].value = qtt;
                           document.getElementById("attribut_rapport").elements["ra_4_unite"].value = unite;
                           document.getElementById("attribut_rapport").elements["ra_5_prixunitaire"].value = prixunitaire;
                           document.getElementById("attribut_rapport").elements["ra_6_soustotal"].value = soustotal;
                        })
                        
                        //Lors du changement de valeur de qtt
                        document.getElementById('ra_4_qtt').addEventListener('onchange',  _evenement =>{
                           //   Mise à jour du sous total
                           document.getElementById("attribut_rapport").elements["ra_6_soustotal"].value = parseFloat(document.getElementById("attribut_rapport").elements["ra_4_qtt"].value) * parseFloat(document.getElementById("attribut_rapport").elements["ra_5_prixunitaire"].value);
                        })
                        //Lors du changement de valeur de prix unitaire
                        document.getElementById('ra_5_prixunitaire').addEventListener('onchange',  _evenement =>{
                           //   Mise à jour du sous total
                           document.getElementById("attribut_rapport").elements["ra_6_soustotal"].value = parseFloat(document.getElementById("attribut_rapport").elements["ra_4_qtt"].value) * parseFloat(document.getElementById("attribut_rapport").elements["ra_5_prixunitaire"].value);
                        })
                  })

            JS
Le code complet

Code:

# encoding: UTF-8
#
# file "sj_attribut_rapport/DiagAttribut.rb"

module SimJoubert
  module AttributRapport
    module DiagAttribut

      #include SharedConstants # mixin the constant module
         DCDICT = "dynamic_attributes"
         extend self

         def self.diag_attribut_quantite_cmd
            model = Sketchup::active_model
            
            #Preparation des listes déroulantes pour les elements select du formulaire

            fournisseurs_liste = model.get_attribute('AttributRapport', 'fournisseurs',"")
            fournisseurs_liste_array = fournisseurs_liste.split("|")
            fournisseurs_liste_option = fournisseurs_liste_array.map {|a|'<option value="'+a+'">'+a+'</option>'}.join('\n')
                  
            postes_liste = model.get_attribute('AttributRapport', 'postes',"")
            postes_liste_array = postes_liste.split("|")
            postes_liste_option = postes_liste_array.map {|a|'<option value="'+a+'">'+a+'</option>'}.join('\n')
                  
            unites_liste = 'u|h|ft|m|m²|m³|l|t|'
            unites_liste_array = unites_liste.split('|')
            unites_liste_option = unites_liste_array.map {|a|'<option value="' + a + '">' + a + '</option>'}.join('\n')
            
            #Definition de l'url de l'icone pour le css
            urlico = Sketchup.find_support_file("Unite.svg", "Plugins/sj_attribut_rapport/Toolbar Icons/")
            
            #Initialistation des variables de boucle
            i_max = model.selection.grep(Sketchup::ComponentInstance).count
            i = 0
            default_values = []
            
            #Itération sur chaques instances de composants sélectionnées
            model.selection.grep(Sketchup::ComponentInstance){ |inst|
            
               #On récupère la définition de l'instance
                     inst_d = inst.definition
                     
                     #On récupère l'identifiant unique de l'instance il ne change jamais
                     id = inst.guid
                     
                     # sauf si l'attribut est abscent de l'instance
                     unless inst.get_attribute(DCDICT,"ra_1_poste",false)
                     #on prend celui de la définition
                        poste = inst_d.get_attribute(DCDICT,"ra_1_poste","")
                     else
                     #sinon celui de l'instance
                        poste = inst.get_attribute(DCDICT,"ra_1_poste","")
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_1_article",false)
                        unless inst_d.get_attribute(DCDICT,"ra_1_article",false)
                           inst_d_name =inst_d.name
                           inst_d_name_a = inst_d_name.split(/#/)
                           article = inst_d_name_a[0]
                        else
                           article = inst_d.get_attribute(DCDICT,"ra_1_article","")
                        end
                     else
                        article = inst.get_attribute(DCDICT,"ra_1_article","")
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_4_qtt",false)
                        qtt = inst_d.get_attribute(DCDICT,"ra_4_qtt",1.0)
                     else
                        qtt = inst.get_attribute(DCDICT,"ra_4_qtt",1.0)
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_4_unite",false)
                        unite = inst_d.get_attribute(DCDICT,"ra_4_unite","u")
                     else
                        unite = inst.get_attribute(DCDICT,"ra_4_unite","u")
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_5_prix_unitaire",false)
                        unless inst_d.get_attribute(DCDICT,"ra_5_prix_unitaire",false)
                           prix_unitaire = inst_d.get_attribute("SU_DefinitionSet", "Price", 0)
                        else
                           prix_unitaire = inst_d.get_attribute(DCDICT,"ra_5_prix_unitaire",0.0)
                        end
                     else
                        prix_unitaire = inst.get_attribute(DCDICT,"ra_5_prix_unitaire",0.0)
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_5_sous_total",false)
                        sous_total = inst_d.get_attribute(DCDICT,"ra_5_sous_total",0.0)
                     else
                        sous_total = inst.get_attribute(DCDICT,"ra_5_sous_total",0.0)
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_1_fournisseur",false)
                        fournisseur = inst_d.get_attribute(DCDICT,"ra_1_fournisseur","")
                     else
                        fournisseur = inst.get_attribute(DCDICT,"ra_1_fournisseur","")
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_1_commentaire",false)
                        commentaire = inst_d.get_attribute(DCDICT,"ra_1_commentaire","")
                     else
                        commentaire = inst.get_attribute(DCDICT,"ra_1_commentaire","")
                     end
                  
                     #On ajoute la ligne numéro i au tableau default_values
                     default_values[i] = {
                        'num_max': i_max,
                        'num': i.to_i + 1,
                        'id': id,
                        'article': article,
                        'commentaire': commentaire,
                        'fournisseur': fournisseur,
                        'poste': poste,
                        'qtt': qtt,
                        'unite': unite,
                        'prixunitaire': prix_unitaire,
                        'soustotal': qtt.to_f * prix_unitaire.to_f
                        }
                     
                     #On incrémente le compteur i
                     i += 1
                     
                  }#fin de l'itération des instances
                  
               i = 0
               #On transforme le tableau en tableau JSON
               default_values_json = JSON.generate(default_values)
               
               
            # Les valeurs saisies seront stockées là.
            entered_values = []

            # Préparation du code CSS (syntaxe HEREDOC).
            css = <<-CSS

            body{
               font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', 'DejaVu Sans', Verdana, sans-serif
               }
               
            .main{
               background-color: #0E649B;
               background-image: url("#{urlico}");
               background-repeat: no-repeat;
               background-position: 3%;
               background-size: 15% 15%;
               padding: 10px 0px 10px 10px;
               text-align: right
            }
            
            h1{
               text-align: center;
               color: #FFFFFF;
               font-size: 24px;
               margin-left: 25%
            }
            
            h1>span{
               color: #F35E06
            }
            
            .textGras{
               font-weight: bold;
               font-size : 16px
            }
            
            form{  
               margin-left: 25%;
               margin-right: 0px;
               text-align: left    
            }
            
            label,input,textarea,select{
               width: 100%;
               padding: 5 5 5 5;
            }
            .inputhalf{
               width: 40%
            }
            
            label{
               font-size: 12px;
               padding: 5 0 5 0;
               font-style: italic
            }
            
            input[name='ra_6_soustotal'],input[name='ra_5_prixunitaire'],input[name='ra_4_qtt']{
               text-align: right
            }
            
            input::placehoder{
               text-align: left;
               color: #065FD8
            }
            
            input[name='ra_6_soustotal']{
               font-size: 24px;
               font-style: italic;
               background-color: #666666;
               color: #FC5103
            }
            
            #data{
               background-color: #7CBCE5;
               margin-bottom: 30px;
               margin-right: 0px;
               padding: 20px
            }
            
            #bt_reset{
               background-color: #FFFFFF;
               border: none
            }
            #bt_appliquer{
               background-color: #EFD423;
               border: none
            }
            
            .desactive{
               font-style: italic;
               background-color: #63729a;
               color: #89a5f7
            }
            
            .invisible{
               display: none
            }

            CSS

            # Préparation du code JS (syntaxe HEREDOC).
            js = <<-JS
            
               
               
               

                  // Mise en place d'un espace de noms pour éviter les conflits...
                  SimJoubert = {}

                  /**
                   * Renvoie les valeurs saisies.
                   *
                   * @returns {object}
                   */
                  SimJoubert.obtenirValeursSaisies = () => {

                        var valeursSaisies = [];
                        
                        // Pour chaque élément HTML de type input :
                        var numenr = getElementById("attribut_rapport").elements["num"].value
                        document.querySelectorAll('input,select,textarea').forEach(elementInput => {
                              valeursSaisies[numenr].elementInput.name = elementInput.value
                        })

                        return valeursSaisies

                  }

                  // Gestion des évènements.

                  // Dès que le document HTML est chargé :
                  document.addEventListener('DOMContentLoaded', _evenement => {
                        
                        // Declaration des variables
                        var numenr = 0;
                        var values_json = #{default_values_json};
                        var article, commentaire, poste, fournisseur, qtt, unite, prixunitaire, soustotal, id, num, num_max;
                                                
                        // Lors d'un clic sur le bouton APPLIQUER :
                        document.getElementById('bt_appliquer').addEventListener('click', _evenement => {

                              // On appelle le callback défini en Ruby un peu plus bas...
                              sketchup.enregistrerValeursSaisies(SimJoubert.obtenirValeursSaisies())

                        })

                        // Lors d'un clic sur le bouton RESET :
                        document.getElementById('bt_reset').addEventListener('click', _evenement => {

                              // On appelle le callback défini en Ruby un peu plus bas...
                              sketchup.effacerValeursSaisies()

                        })

                        // Lors d'un clic sur le bouton ANNULER :
                        document.getElementById('bt_annuler').addEventListener('click', _evenement => {

                              // On appelle le callback défini en Ruby un peu plus bas...
                              sketchup.annuler()

                        })
                        
                        //Lors d'un clic sur le Bouton Next
                        document.getElementById('bt_next').addEventListener('click', fonctionNext()
                        {
                           // on incremente la variable numenr
                           numenr = numenr + 1;
                           
                           // On extrait du tableau values_json les valeurs de l'enregistrement
                           article = values_json[numenr].article;
                           commentaire = values_json[numenr].commentaire.;
                           poste = values_json[numenr].poste;
                           fournisseur = values_json[numenr].fournisseur;
                           qtt = values_json[numenr].qtt;
                           unite = values_json[numenr].unite;
                           prixunitaire = values_json[numenr].prixunitaire;
                           soustotal = parseFloat(qtt)*parseFloat(prixunitaire);
                           id = values_json[numenr].id;
                           num = values_json[numenr].num;
                           num_max = values_json[numenr].num_max;
                           
                           //on change les valeurs des inputs
                           document.getElementById("attribut_rapport").elements["ra_1_article"].value = article;
                           document.getElementById("attribut_rapport").elements["ra_1_commentaire"].value = commentaire;
                           document.getElementById("attribut_rapport").elements["ra_1_fournisseur"].value = fournisseur;
                           document.getElementById("attribut_rapport").elements["ra_1_poste"].value = poste;
                           document.getElementById("attribut_rapport").elements["ra_4_qtt"].value = qtt;
                           document.getElementById("attribut_rapport").elements["ra_4_unite"].value = unite;
                           document.getElementById("attribut_rapport").elements["ra_5_prixunitaire"].value = prixunitaire;
                           document.getElementById("attribut_rapport").elements["ra_6_soustotal"].value = soustotal;
                        })
                        
                        //Lors du changement de valeur de qtt
                        document.getElementById('ra_4_qtt').addEventListener('onchange',  _evenement =>{
                           //   Mise à jour du sous total
                           document.getElementById("attribut_rapport").elements["ra_6_soustotal"].value = parseFloat(document.getElementById("attribut_rapport").elements["ra_4_qtt"].value) * parseFloat(document.getElementById("attribut_rapport").elements["ra_5_prixunitaire"].value);
                        })
                        //Lors du changement de valeur de prix unitaire
                        document.getElementById('ra_5_prixunitaire').addEventListener('onchange',  _evenement =>{
                           //   Mise à jour du sous total
                           document.getElementById("attribut_rapport").elements["ra_6_soustotal"].value = parseFloat(document.getElementById("attribut_rapport").elements["ra_4_qtt"].value) * parseFloat(document.getElementById("attribut_rapport").elements["ra_5_prixunitaire"].value);
                        })
                  })

            JS

            # Préparation du code HTML (syntaxe HEREDOC).
            html = <<-HTML
               <html>

                  <head>
                     <meta charset="utf-8">
                     <!-- Le CSS est inclus dans le HTML -->
                     <style>#{css}</style>

                     <!-- Le JS aussi -->
                     <script>#{js}</script>
                  </head>

                  <body>
                     
                     <div class="main">
                        <h1>Attribut <span>Rapport</span></h1>
                     
                        <form id="attribut_rapport">
                           <table width="100%" border="0" cellspacing="0" cellpadding="5" id="data">
                              <tbody>
                                 <tr>
                                    <td colspan="4">
                                       <input type="number" id="num" name="num" value="#{default_values[i][:num]} class="inputhalf">
                                       <input type="number" id="num_max" name="num_max" value="#{default_values[i][:num_max]} class="inputhalf">
                                    </td>
                                 </tr>
                                 
                                 <tr>
                                    <td colspan="4">
                                       <label>Article</label>
                                       <input type="text" name="ra_1_article" placeholder="Nom d'article" value="#{default_values[i][:article]}" class="textGras">
                                    </td>
                                 </tr>
                                 <tr>
                                    <td colspan="4" >
                                       <label>Commentaire</label>
                                       <textarea name="ra_commentaire" placeholder="Saississez un commentaire">#{default_values[i][:commentaire]}</textarea>
                                    </td>
                                 </tr>
                                 <tr>
                                    <td colspan="4" >
                                       <label>Fournisseur</label>
                                       <select name="ra_1_fournisseur" placeholder="Selectionnez un fournisseur existant" value="#{default_values[i][:fournisseur]}">
                                          #{fournisseurs_liste_option}
                                       </select>      
                                    </td>
                                 </tr>
                                 <tr>    
                                    <td colspan="4">
                                       <label>Poste</label>
                                       <select name="ra_1_poste"  placeholder="Selectionnez un poste existant"  value="#{default_values[i][:poste]}">
                                             #{postes_liste_option}
                                       </select>                  
                                    </td>
                                 </tr>  
                                 <tr>
                                    <td width="30%">
                                       <label>Quantité</label>
                                       <input type="text" id="ra_4_qtt" name="ra_4_qtt" placeholder="Quantité d'article" value="#{default_values[i][:qtt]}">
                                    </td>
                                    <td width="25%">
                                       <label>Unité</label>
                                       <select name="ra_4_unite" value="#{default_values[i][:unite]}">
                                          #{unites_liste_option}
                                       </select>
                                    </td>
                                    <td>
                                       <label>Prix unitaire</label>
                                       <input type="text" id="ra_5_prixunitaire" name="ra_5_prixunitaire" placeholder="Prix unitaire" value="#{default_values[i][:prixunitaire]}">
                                    </td>
                                     <td><br>€</td>
                                 </tr>
                                 <tr>
                                     <td colspan="3"> </td>
                                 </tr>
                                 <tr>
                                    <td>
                                       <label>Sous total</label>
                                    </td>
                                    <td colspan="2">
                                       <input id="ra_6_soustotal" name="ra_6_soustotal" type="text"   readonly="readonly" value="#{default_values[i][:soustotal]}">
                                    </td>
                                    <td>€</td>
                                 </tr>
                              </tbody>
                           </table>
                           
                           <table width="100%" border="0" cellspacing="10" cellpadding="0">
                              <tbody>    
                                 <tr>
                                    <td><input type="button" name="first" value="|<" id="bt_first"></td>
                                    <td><input type="button" name="previous" value="<" id="bt_previous"></td>
                                    <td><input type="text" name="position" value="#{default_values[i][:num]} / #{default_values[i][:num_max]}" id="position"></td>
                                    <td><input type="button" name="next" value=">" id="bt_next"></td>
                                    <td><input type="button" name="last" value=">|" id="bt_last"></td>
                                 </tr>
                              </tbody>
                           </table>

                           
                           <table width="100%" border="0" cellspacing="10" cellpadding="0">
                              <tbody>    
                                 <tr>      
                                    <td><input type="button" name="reset" value="RESET" id="bt_reset"></td>
                                    <td><input type="button" name="annuler" value="ANNULER" id="bt_annuler"></td>
                                    <td><input name="appliquer" type="button" id="bt_appliquer" value="APPLIQUER"></td>
                                 </tr>
                              </tbody>
                           </table>    
                        </form>  
                     </div>  
                  </body>
               </html>
            HTML

            # Initialisation de la boîte de dialogue.
            dialog = UI::HtmlDialog.new(

               dialog_title: "Dialog Example",
               preferences_key: "my_name_my_extension_my_dialog",
               scrollable: false,
               resizable: false,
               width: 520,
               height: 800,
               left: 100,
               top: 100,
               min_width: 520,
               min_height: 690,
               max_width: 1000,
               max_height: 1000,
               style: UI::HtmlDialog::STYLE_DIALOG

            )

            # Paramétrage de la boîte de dialogue.

            dialog.add_action_callback('enregistrerValeursSaisies') do |_contexte, valeurs_saisies|

               # Enregistrement des valeurs saisies.
               entered_values = valeurs_saisies

               # Fermeture de la boîte de dialogue.
               dialog.close

               # Affichage des valeurs saisies.
               UI.messagebox(entered_values)

            end

            dialog.add_action_callback('effacerValeursSaisies') do |_contexte|

               # Effacement des valeurs saisies.
               entered_values = {}
            end
      
          dialog.add_action_callback('annuler') do |_contexte|

               # Effacement des valeurs saisies.
               entered_values = {}

               # Fermeture de la boîte de dialogue.
               dialog.close

            end

            # Remplissage de la boîte de dialogue.
            dialog.set_html(html)

            # Affichage de la boîte de dialogue.
            dialog.show

      
         end




    end#fin sous module
  end#fin module plugin
end#fin module espace de nom

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
Samuel Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Lun 17 Mai 2021 - 15:53

Bonjour Simon,

Je viens de regarder ton code. J'ai plusieurs remarques :

- L'indentation n'est pas bonne. Ca complique la relecture.

- Dans le code Ruby/HTML, tu utilises la variable i.
Code:

html = <<-HTML
...
<input type="number" id="num" name="num" value="#{default_values[i][:num]}" width="40%">
...

Ne devrais-tu pas forcer l'index à 0 vu que les données suivantes sont chargées en JS ?

Code:

html = <<-HTML
...
<input type="number" id="num" name="num" value="#{default_values[0][:num]}" width="40%">
...

- Concernant le code JS : je te conseille de déclarer tes variables globales et tes fonctions dans ton espace de noms. Ca pourrait t'éviter des conflits de noms ou un problème de portée de variable.

Code:

// Déclaration des variables.
SimJoubert.numenr = 0
...
// Déclaration des fonctions.
SimJoubert.fonctionNext = () => {
...
SimJoubert.numenr = SimJoubert.numenr + 1
...
}

- Toujours concernant le code JS, il y a une erreur de syntaxe ici.
Code:

// document.getElementById('ra_4_qtt').addEventListener('onchange', calculerSousTotal())
document.getElementById('ra_4_qtt').addEventListener('change', _evenement => { calculerSousTotal() })

Bon courage !

-------------------------------------------------------------------------------------------------------------------------
Galerie | Plugins
simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Lun 17 Mai 2021 - 15:59

Merci Samuel
je vais essayer de compiler tes conseils et corrections !
Ne pars pas trop loin ! gentleman

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

Samuel Tallet aime ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Lun 17 Mai 2021 - 16:39

Il doit y avoir encore des coquilles
j'ai mis les variables et les fonctions dans l'espace de nom mais c'est comme au mastermind bonne forme mauvaise place ou mauvaise syntaxe
En l'état rien ne fonctionne
j'ai changé le i en 0 pour la définition initiale des valeurs. le formulaire s'ouvre mais aucun évenement n'est pris en compte.
l'appel des fonctions doit être sous la forme espacedenom.nomfonction() ou seulement nomfonction() ?
à quel endroit precis je doit faire mes déclaration de variable et de fonction ?
Merci

*code modifié mais non fonctionnel:

Code:
        # Préparation du code JS (syntaxe HEREDOC).
        js = <<-JS
       
         
         
         

            // Mise en place d'un espace de noms pour éviter les conflits...
            SimJoubert = {}
                     

            /**
            * Renvoie les valeurs saisies.
            *
            * @returns {object}
            */
            SimJoubert.obtenirValeursSaisies = () => {

                var valeursSaisies = [];
               
                // Pour chaque élément HTML de type input :
                var numenr = getElementById("attribut_rapport").elements["num"].value;
                document.querySelectorAll('input,select,textarea').forEach(elementInput => {
                    valeursSaisies[numenr].elementInput.name = elementInput.value
                })

                return valeursSaisies

            }

            // Gestion des évènements.

            // Dès que le document HTML est chargé :
            document.addEventListener('DOMContentLoaded', _evenement => {
               
              // Declaration des variables
              SimJoubert.numenr = 0;
              SimJoubert.values_json = #{default_values_json};
           
              //Declaration des fonctions
             
              //Mise à jour du sous total
              SimJoubert.calculerSousTotal = () => {             
              document.getElementById("attribut_rapport").elements["ra_6_soustotal"].value = parseFloat(document.getElementById("attribut_rapport").elements["ra_4_qtt"].value) * parseFloat(document.getElementById("attribut_rapport").elements["ra_5_prixunitaire"].value);
              }
                         
              SimJoubert.Next = () => {
              // on incremente la variable numenr
                numenr = numenr + 1;
               
                // On extrait du tableau values_json les valeurs de l'enregistrement
                article = values_json[numenr].article;
                commentaire = values_json[numenr].commentaire.;
                poste = values_json[numenr].poste;
                fournisseur = values_json[numenr].fournisseur;
                qtt = values_json[numenr].qtt;
                unite = values_json[numenr].unite;
                prixunitaire = values_json[numenr].prixunitaire;
                soustotal = parseFloat(qtt)*parseFloat(prixunitaire);
                id = values_json[numenr].id;
                num = values_json[numenr].num;
                num_max = values_json[numenr].num_max;
               
                //on change les valeurs des inputs
                document.getElementById("attribut_rapport").elements["ra_1_article"].value = article;
                document.getElementById("attribut_rapport").elements["ra_1_commentaire"].value = commentaire;
                document.getElementById("attribut_rapport").elements["ra_1_fournisseur"].value = fournisseur;
                document.getElementById("attribut_rapport").elements["ra_1_poste"].value = poste;
                document.getElementById("attribut_rapport").elements["ra_4_qtt"].value = qtt;
                document.getElementById("attribut_rapport").elements["ra_4_unite"].value = unite;
                document.getElementById("attribut_rapport").elements["ra_5_prixunitaire"].value = prixunitaire;
                document.getElementById("attribut_rapport").elements["ra_6_soustotal"].value = soustotal;
              }
                               
                // Lors d'un clic sur le bouton APPLIQUER :
                document.getElementById('bt_appliquer').addEventListener('click', _evenement => {

                    // On appelle le callback défini en Ruby un peu plus bas...
                    sketchup.enregistrerValeursSaisies(SimJoubert.obtenirValeursSaisies())

                })

                // Lors d'un clic sur le bouton RESET :
                document.getElementById('bt_reset').addEventListener('click', _evenement => {

                    // On appelle le callback défini en Ruby un peu plus bas...
                    sketchup.effacerValeursSaisies()

                })

                // Lors d'un clic sur le bouton ANNULER :
                document.getElementById('bt_annuler').addEventListener('click', _evenement => {

                    // On appelle le callback défini en Ruby un peu plus bas...
                    sketchup.annuler()

                })
               
                //Lors d'un clic sur le Bouton Next
                document.getElementById('bt_next').addEventListener('click', _evenement =>{ SimJoubert.Next() })
               
                //Lors du changement de valeur de qtt
                document.getElementById('ra_4_qtt').addEventListener('change',  _evenement =>{ SimJoubert.calculerSousTotal() })
               
                //Lors du changement de valeur de prix unitaire
                document.getElementById('ra_5_prixunitaire').addEventListener('change',  _evenement =>{ SimJoubert.calculerSousTotal() })
               
            })

        JS

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
Samuel Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Lun 17 Mai 2021 - 18:12

simjoubert a écrit:à quel endroit precis je doit faire mes déclaration de variable et de fonction ?

Je te conseille de déclarer tes variables et fonctions juste après la mise en place de ton espace de noms.

simjoubert a écrit:l'appel des fonctions doit être sous la forme espacedenom.nomfonction() ou seulement nomfonction() ?

Code:

EspaceDeNoms.nomFonction()

Attention ! Regarde bien le corps de ta fonction SimJoubert.Next. Il manque l'espace de noms SimJoubert avant les variables numenr et values_json...

-------------------------------------------------------------------------------------------------------------------------
Galerie | Plugins

tenrev et simjoubert aiment ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Lun 17 Mai 2021 - 20:00

EUREKA !
après avoir trouvé un point après "commentaire" que je prenais pour une saleté sur mes lunettes!
Après avoir rajouté var devant la création de l'espace de nom !
après avoir rajouter le préfixe de l'espace de nom sur toutes les variables!
après avoir redémarrer 150 Sketchup!
J'ai enfin les enregistrement qui sont chargés en javascript instantanément en provenance du Json.  chaud2

Je suis en train de rajouter précédent 1er et dernier pour la navigation
Prochaine étape
récupérer la saisie dans la variable qui initialise le formulaire au changement d'enregistrement si on veux revenir en arrière.
Puis la sortie pour l'enregistrement dans le dictionnaire de sketchup !
[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 4 IPB_917
On lâche rien !

Merci Samuel

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

tenrev et Samuel Tallet aiment ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Lun 17 Mai 2021 - 21:47

Je code avec Notepad++ c'est suffisant mais j'ai pas la coloration syntaxique à l'intérieur des Heredocs !

Il y a une astuce de vieux sioux pour l'obtenir ?
Sinon il y a une alternative à notepad++ qui rendrait les heredoc digest ?

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
Samuel Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Lun 17 Mai 2021 - 22:17

J'utilise VSCode depuis quelques mois et j'en suis plutôt satisfait. Il a l'avantage indéniable d'être gratuit content Il gère la coloration syntaxique dans les blocs heredoc, je crois... J'avoue ne pas avoir fait attention à ça.

-------------------------------------------------------------------------------------------------------------------------
Galerie | Plugins
Pilou
Pilou
V.I.P.
V.I.P.
Masculin Date d'inscription : 30/05/2014
Nombre de messages : 6973
Points : 15268
http://moiscript.weebly.com/

MessagePilou Mar 18 Mai 2021 - 1:34

J'attends la prochaine version pour voir s'il y a eu de l'amélioration question vitesse / nombre de composants à traiter! clindoeil

-------------------------------------------------------------------------------------------------------------------------
Petit site Galerie
Est beau ce qui plaît sans concept!
simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mar 18 Mai 2021 - 8:21

Hello Pilou
Tu sera pas déçu !
On fait dans l’instantané, maintenant !
Plus de latences dues aux redraw de chaque instances !
Je calcule en amont avant d’injecter l’attribut!

Je finis ma boîte de dialogue JavaScript
Je fais 3 tests et je vous soumets
Il pleut moins donc peut-être ce week-end ou avant si je suis insomniaque 😵💫

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

Samuel Tallet aime ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mar 18 Mai 2021 - 9:59

Samuel Tallet-Sabathé a écrit:J'utilise VSCode depuis quelques mois et j'en suis plutôt satisfait. Il a l'avantage indéniable d'être gratuit content Il gère la coloration syntaxique dans les blocs heredoc, je crois... J'avoue ne pas avoir fait attention à ça.

VS CODE = Visualstudio Code ?
j'ai installé visual studio code c'est top! Les heredocs ont leurs syntaxes colorées ! c'est vraiment plus lisible ! waah Et la lumière fut !

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

Samuel Tallet aime ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mer 19 Mai 2021 - 20:40

Hello @Samuel Tallet-Sabathé
J'avance bien avec le javascript sourire

Mais j'arrive pas à appliquer un readOnly conditionnel à un input
j'ai tester plusieurs possibilité mais je n'y arrive pas sauf si c'est codé en dur

Code:

// On modifie l'état de modification de la valeur de qtt selon le type
                  if (seltype == "Quantité") {
                     document.getElementById("ra_4_unite").removeAttribute("readonly");
                  } else {
                     document.getElementById("ra_4_unite").setAttribute("readonly", true);
                  }

un petit coup de main



-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mer 19 Mai 2021 - 21:30

Laisse tombé je ciblais le mauvis input depuis tout à l'heure c'est en relisant le poste  !
c'etait ra_4_qtt et non ra_4_unite
Bonne couleur, mauvaise place ! colere2 sourire alien Sleep

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

tenrev et Samuel Tallet aiment ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mer 26 Mai 2021 - 0:07

Hello
J'ai plus de mal à avancé sur le plugin car je suis en mode chantier !
je m’endors devant mon pc  !

Ce soir je suis sur un événement on clic d'un bouton htm.
le but du bouton est de copier la valeur d'un attribut à l'ensemble de la sélection via une boite de dialogue.

addEventListner
Code:
//Lors dun clic sur le Bouton copie article
                         document.getElementById('bt_copy_article').addEventListener('click', _evenement =>{
                            var valeur = document.getElementById('ra_1_article').value;
                            var attribut = 'article';
                            SimJoubert.copyAttribut(attribut, valeur);
                        })

le souci vient de la variable attribut c'est une string
et dans la fonction il faudrait que la string soit interprétée sans les quotes ! car c'est pour se substituer à une clef de hashage
j'essaye de faire une fonction générique pour alléger le code sinon je ferai une fonction pour chaque bouton copie d'attribut.

code de la fonction
Code:
SimJoubert.copyAttribut = (attribut, valeur) => {
                        var imax = SimJoubert.numenrMax;
                        var i = 0
                      
                        while (i <= imax) {
                            
                        SimJoubert.values_saisies[i].attribut = valeur ;
                        i = i+1
                        }


                    }

Bonne nuit les amis !

Je veux bien un petit coup de pouce !

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2920
Points : 6434
Age : 49
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mer 26 Mai 2021 - 0:31

Bon je crois avoir finalement trouvé
j'ai remplacer la syntaxe par point par la syntaxe entre crochet

Code:
SimJoubert.copyAttribut = (attribut, valeur) => {
                        var imax = SimJoubert.numenrMax;
                        var i = 0
                     
                        while (i <= imax) {
                           
                        SimJoubert.values_saisies[i][attribut] = valeur ;
                        i = i+1
                        }


                    }

Javascript est intransigeant ! il faut être vigilant et bien réveillé ! lire rage

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

tenrev et Samuel Tallet aiment ce message

Contenu sponsorisé

MessageContenu sponsorisé

Page 4 sur 4 Précédent  1, 2, 3, 4

Voir le sujet précédent Voir le sujet suivant Revenir en haut

Créer un compte ou se connecter pour répondre

Vous devez être membre pour répondre.

S'enregistrer

Rejoignez notre communauté ! C'est facile !


S'enregistrer

Connexion

Vous êtes déjà membre ? Aucun soucis, cliquez ici pour vous connecter.


Connexion

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum