PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Etat table mémoire par programmation
Etat table mémoire par programmation
Débuté par Ludwig, 14 juil. 2024 23:04 - 6 réponses
Membre enregistré
24 messages
Posté le 14 juillet 2024 - 23:04
Bonjour à tous,

Je cherche quelques explications et/ou aides.
J'ai une table mémoire alimentée par programmation.
Je souhaiterais imprimer l'état de cette table mémoire en la parcourant.
Ainsi, en fonction de la ligne parcourue j'ajouterai ou pas la ligne, je regrouperai ou pas plusieurs lignes, ferai des calculs, etc...
Mais, je ne sais pas du tout comment m'y prendre pour récupérer les données de la table mémoire.
Je peux boucler sur la table mais un message s'affiche : "Aucune donnée à imprimer" ou ça boucle en boucle et l'aperçu est infini.

Quel code est à placer dans le code de l'état et comment récupérer les données pour traitement dans le code du bloc corps ?

Par avance merci.
Membre enregistré
4 111 messages
Posté le 15 juillet 2024 - 05:46
Bonjour,
Une solution serait
1-Récupérer les données de ton champ source dans un tableau de structure/classe.
2-Passer cette variable en paramètre de ton état.

Ton état sera créé à partir de la structure/classe concernée.
Note : Il faut définir le tableau de classe/structure en tant que variable globale au projet

Prenons le cas d'un champ table comportant les colonnes N°Client/PrénomClient/NomClient
1-On va créer la classe CCLient:
CClient est une Classe
m_saNoClient est une chaîne
m_saNomClient est une chaîne
m_saPrenomClient est une chaîne
FIN

2-On déclare la variable gtabListeClient globale au projet (pour être vue de la fenêtre dans laquelle se trouvent nos données ainsi que de l'état)
3-On crée notre état "Tableau" basé sur une variable à savoir gtabListeClient
4-Le code de l'impression devrait ressembler à cela;
InitialiserParamètre() //On remplit gtabListeCLient

iDestination(iVisualisateur) //ou une autre destination
iImprimeEtat(ETAT_Clients,gtabListeClient)

avec
Procedure InitialiserParamètre()

clUnClient est CClient
nIndice est un entier

POUR nIndice=1 _À_ TableOccurrence(TABLE_Client)
clUnClient:m_saNoClient = COL_NoClient[nIndice]
clUnClient:m_saPrenomClient = COL_PrenomClient[nIndice]
clUnClient:m_saNomClient = COL_NomClient[nIndice]
TableauAjoute(gtabListeClient,clUnClient)
FIN

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 15 juillet 2024 - 06:51
Membre enregistré
2 676 messages
Posté le 15 juillet 2024 - 09:12
Bonjour,

Pour info, si tu crées ton état selon l'exemple de Voroltinquo, qui me semble être une très bonne solution, il n'est pas nécessaire que le tableau soit déclaré en globale au projet. Il suffit se passer le tableau en paramètre à l'état et d'avoir comme source de données le tableau passé en paramètre.

Une autre solution calquée sur l'exemple de Voroltinquo serait de créer une 2ème table mémoire qui contiendrait le résultat de ce que tu souhaites imprimer et baser ton état sur cette table.

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
24 messages
Posté le 15 juillet 2024 - 09:47
Bonjour,

Merci beaucoup pour ton retour.
J'ai une erreur cela me renvoie que "Un élément de type 'CClient' ne peut pas être converti vers le type 'chaîne ANSI'."
J'ai déclaré gtabListeClient comme tableau de chaines. (?)

Encore merci.
Membre enregistré
2 676 messages
Posté le 15 juillet 2024 - 17:43
Il va falloir un peu plus de code pour t'aider mais je peux d'ores et déjà dire que gtabListeClient doit être un tableau de CClient

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
24 messages
Posté le 15 juillet 2024 - 17:52
Merci,

Jai opté pour une deuxième table mémoire. (C'est plus de mon niveau ;)).
Ca fait l'affaire, pour le moment.

Je vais tout de même creuser l'idée de Voroltinquo. :merci:

Encore merci à vous deux et bonne journée.
Membre enregistré
4 111 messages
Posté le 16 juillet 2024 - 08:52
Ludwig a écrit :
J'ai déclaré gtabListeClient comme tableau de chaines. (?)

gtabListeClient est un tableau de CClient

--
Il y a peut être plus simple, mais, ça tourne