PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Récupérer la définition d'un tableau de structure dans une classe
Récupérer la définition d'un tableau de structure dans une classe
Débuté par xof, 07 fév. 2024 17:04 - 6 réponses
Membre enregistré
282 messages
Popularité : +1 (1 vote)
Posté le 07 février 2024 - 17:04
Bonjour
Est-il possible de récupérer le nom, et les propriétés, des membres
d'une structure déclarée dans une classe, comme cela, par exemple.
Je sais bien traiter les membres truc et toto, mais pas le tableau LesSelect.

MEAPX est un classe
Procedure m_traite()
scac40 est un Description de Variable
sbourse est un Definition
noccurrenceTableau est un entier
sbourse=RécupèreDéfinition(objet)
POUR TOUT scac40 de sdef.Variable
Trace (scac40.Nom, scac40.Déclaration.Type,
scac40.Définition.Nom,scac40.Définition.Type)
FIN


StrucPourTableauSelect est une structure
cod_soc est une chaine sur 500 // sur 500
cod_action est une
chaine sur 15 // sur 15 NULLABLE
cod_art est une chaine sur 22 // sur 22
NULLABLE
lib_anom est une
chaîne // sur xxxxx (Max) NULLABLE
num_anom est un
entier // [Identity de la table]
module est une chaine sur 10 // sur 10
NULLABLE
FIN
BDAPX_anombed est une Classe
hérite de MEAPX
truc est une chaîne
toto est un numérique
...
LesSelect est un tableau de StrucPourTableauSelect
FIN


o_anomabed est un BDAPX_anombed
o_anomabed:m_traite


A part les informations dans la trace et pour le tableau le nombre d'occurrences avec

{objet,scac40.nom}..occurence



D'avance, merci pour vos lumières

--
Christophe Charron
Membre enregistré
330 messages
Popularité : +8 (10 votes)
Posté le 07 février 2024 - 19:22
Bonsoir,

tu peux faire 2 classes :

1 classe Cstructure_tableau qui contiendra les membres correspondant à ta structure
1 classe Ctableau_structure qui aura un membre tableau de Cstructure_tableau

Dans la classe Cstrucutre_tableau tu peux y mettre les méthode qui agissent sur la structure
Dans le classe Ctableau_structure les méthode qui vont agir sur le tableau (le nombre d'occurence, l'accès aux lignes etc)

SI toutefois j'ai bien compris ton besoin
Membre enregistré
282 messages
Popularité : +1 (1 vote)
Posté le 07 février 2024 - 20:00
Merci pour ta réponse.
J'essaierai cela demain et je te tiens au courant.

--
Christophe Charron
Membre enregistré
282 messages
Popularité : +1 (1 vote)
Posté le 08 février 2024 - 09:07
Bonjour,
C'est la définition des composantes d'un tableau qui pose problème.
Que ce soit un tableau de structures, un tableau de classes, un tableau de chaines, d'entier ...
Impossible de récupérer la nature des éléments du tableau.
Même en essayant de m'inspirer de l'aide de l'éditeur https://doc.pcsoft.fr/fr-fr/?6010015

--
Christophe Charron
Membre enregistré
330 messages
Popularité : +8 (10 votes)
Posté le 08 février 2024 - 12:12
Ton tableau est un tableau d'objet
Donc tu peux obtenir la définition de tes objets directement

sinon pour le tableau en lui meme il faut utiliser TableauInfo()

https://doc.pcsoft.fr/?3075005&verdisp=160
Membre enregistré
282 messages
Popularité : +1 (1 vote)
Posté le 09 février 2024 - 09:04
Bonjour et grand merci pour ton aide. J'arrive au résultat escompté, à savoir supprimer les espaces de droite, dans toutes les chaines et chaines de tableau d'un objet instancié.
Le méthode est écrite dans la classe mère de toutes les classes
Procedure M_sansEspace()
sdv est un Description de Variable
sdef est un Definition
noccurrenceTableau est un entier
sdef=RécupèreDéfinition(objet)
sdeftableau est une Definition
POUR TOUT sdv de sdef.Variable
SELON sdv.Définition.Type
CAS 1 // Booleen
CAS 4
CAS 6 // entier sur 1 octet
CAS 8 //entier
CAS 9 // entier sur 8 octets
CAS 13 // Numérique
CAS 17 // caractère
CAS 19 //Chaine Ansi
{sdv.Nom,indVariable}=SansEspace({sdv.Nom,indVariable})
CAS 26 // Dateheure
CAS 34 // Tableau
noccurrenceTableau={objet,sdv.Nom}..Occurrence
SI noccurrenceTableau<>0 ALORS
sdeftableau=TableauInfo({objet,sdv.Nom},tiDéfinitionElément)
POUR TOUT truc de sdeftableau.Variable
SI truc.Définition.Type=19 ALORS
POUR j=1 _À_ noccurrenceTableau
{sdv.Nom+"["+j+"]"+"."+truc.Nom,indVariable}=SansEspace({sdv.Nom+"["+j+"]"+"."+truc.Nom,indVariable})
FIN
FIN
FIN
FIN
CAS 36 // Structure
CAS 37 // objet
AUTRE CAS
Trace("???Merci de signaler au support???")
Trace (sdv.Nom, sdv.Déclaration.Type,
sdv.Définition.Nom,sdv.Définition.Type)
Trace("???Merci de signaler au support???")
FIN
FIN


--
Christophe Charron
Membre enregistré
12 messages
Posté le 28 avril 2024 - 12:08
Bonjour,

Je viens me greffer sur ce sujet où j'ai trouvé la réponse à une de mes questions, à savoir comment récupérer le type des instances qui composent un tableau via TableauInfo().

1er point, qui est juste une remarque pour ma culture technique personnelle. J'ai du mal avec la syntaxe qui est utilisée, je l'ai appliquée à mon code et ça fonctionne mais je n'arrive pas à la comprendre.

Ladite syntaxe dans mon code donne :

defTableau =TableauInfo({:m_pclTravail,monMembre.Nom},tiDéfinitionElément)


Alors que moi je l'aurais écrite comme suit et cela fonctionne de la même manière :

defTableau = TableauInfo({":m_pclTravail:" + monMembre.Nom,indVariable},tiDéfinitionElément)


2nd point, et c'est la qu'est mon problème, ce membre dont je récupère la description > :m_pclTravail:m_tabColisage est un tableau de tableau de Modèle (MAgencement). J'arrive à récupérer la définition du membre :m_pclTravail:m_tabColisage ce qui me donne évidement un tableau mais je n'arrive à comprendre comment récupérer la définition du tableau qui compose ce même tableau.

Dans mes tests je construit une chaine pour vérifier que je récupère les bonnes informations :

"Le membre m_bConfigurable est un booléen"
"Le membre m_nID_Produit est un entier sur 8 octets"
...
"Le membre m_nQuantité_par_carton est un entier sur 8 octets"
...

Arrivé au membre :m_tabColisage la ligne que je souhaite construire est :

"Le membre m_nID_Produit est un tableau de tableau de MAgencement" mai je n'arrive à faire que "Le membre m_nID_Produit est un tableau"

Je ne sais pas si je suis clair ...

Par avance merci pour votre aide.

Cordialement.