PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Remplir un tableau par programmation dans un état
Remplir un tableau par programmation dans un état
Débuté par Adri1b, 02 fév. 2015 18:32 - 6 réponses
Membre enregistré
182 messages
Posté le 02 février 2015 - 18:32
Bonsoir,
Sur un état, j'aimerais définir par programmation le contenu de mes rubriques.
J'ai donc mis en place cette requête dans la partie "Avant impression de CORPS" :

qContracts est une Source de Données
SI PAS HExécuteRequêteSQL(qContracts, hRequêteDéfaut, "SELECT Contracts.Ct_Start, Contracts.Ct_End, Sites.Site_ID, Sites.Site_Name, Services.Service_ID, Services.Service_Name, Contracts.Tutor FROM Contracts LEFT JOIN Sites ON Contracts.Site_ID = Sites.Site_ID LEFT JOIN Services ON Contracts.Service_ID = Services.Service_ID WHERE Contracts.Member_ID = " + sMember_ID + " ORDER BY Contracts.Ct_Start ASC") ALORS
Erreur(HErreurInfo())
SINON
HLitPremier(qContracts)

TANTQUE PAS HEnDehors()

RUBRIQUE1 = qContracts.Ct_Start
RUBRIQUE2 = qContracts.Ct_End
RUBRIQUE3 = qContracts.Site_Name
RUBRIQUE4 = qContracts.Service_Name
RUBRIQUE5 = qContracts.Tutor

HLitSuivant()
FIN
FIN

HLibèreRequête(qContracts)

La requête fonctionne bien, mais mon tableau qui devrait comporter deux lignes n'en comporte qu'une seule, le dernier résultat de la requête en l'occurrence -_-.
Quelqu'un peut-il me donner l'astuce ou la méthode s'il vous plaît ? J'ai beau cherché, je ne trouve pas -_-.
Merci par avance :).
Membre enregistré
182 messages
Posté le 03 février 2015 - 00:35
Petit message pour vous dire que je suis tombé sur cette documentation, et en suivant les étapes j'ai réussi à faire ce que je voulais ;).

http://doc.pcsoft.fr/?1011034&name=etat_sur_une_source_donnees_programmee
Membre enregistré
847 messages
Posté le 03 février 2015 - 12:34
Bonjour,
Afin que état s'imprime corerectement, vous devez :

Code de l'état : Ouverture de l'état :
qContracts est une Source de Données

SI PAS HExécuteRequêteSQL(qContracts, hRequêteDéfaut, "SELECT Contracts.Ct_Start, Contracts.Ct_End, Sites.Site_ID, Sites.Site_Name, Services.Service_ID, Services.Service_Name, Contracts.Tutor FROM Contracts LEFT JOIN Sites ON Contracts.Site_ID = Sites.Site_ID LEFT JOIN Services ON Contracts.Service_ID = Services.Service_ID WHERE Contracts.Member_ID = " + sMember_ID + " ORDER BY Contracts.Ct_Start ASC") ALORS
Erreur(HErreurInfo())
SINON
HLitPremier(qContracts)
FIN


Code de l'état : Lecture des données de l'état
TANTQUE PAS HEnDehors()
RENVOYER Vrai
FIN
HLibèreRequête(qContracts)
RENVOYER Faux


Code du bloc : Avant impression
RUBRIQUE1 = qContracts.Ct_Start
RUBRIQUE2 = qContracts.Ct_End
RUBRIQUE3 = qContracts.Site_Name
RUBRIQUE4 = qContracts.Service_Name
RUBRIQUE5 = qContracts.Tutor

HLitSuivant()


En espérant vous avoir aidé.
J.Michel
Membre enregistré
26 messages
Posté le 10 novembre 2017 - 15:49
Bonjour à tous,

je galère a remplir un tableau par programmation.... et je suis tombé sur ce post...

malgré les solutions proposées, je n'y arrive toujours pas ...

lors du HLitSuivant() dans la partie avant impression du corps, il lit bien l'enregistrement suivant va directement au test hendehors() dans la partie apres impression

j'ai essayé de mettre une boucle dans avant impression mais comme tout le monde ca n'imprime qu'une ligne avec le dernier enregistrement...

je suis perdu
Message modifié, 10 novembre 2017 - 15:49
Posté le 04 avril 2018 - 23:38
J'ai eu ce même problème. Pour le résoudre, il faut accéder à la "Description de l'état" (accès par clic droit), et s'assurer que "<Pas de source de données>" n'est pas sélectionné (sinon cela ne marchera pas). Dans mon cas, les données à imprimer viennent de "la programmation".





Cela devrait marcher pour vous, je l'espère.
Membre enregistré
6 messages
Posté le 26 décembre 2024 - 11:19
bonjour j'ai un probleme pour remplir le corps de mon etat.
j'ai essayé votre methode mais y'a des problemes au niveau du source de données car moi j'utlise des données mysql distant dans un serveur local.
si vous avez un solution je suis preneur
Posté le 15 janvier 2025 - 14:13
Adri1b a écrit :
Bonsoir,
Sur un état, j'aimerais définir par programmation le contenu de mes rubriques.
J'ai donc mis en place cette requête dans la partie "Avant impression de CORPS" :

qContracts est une Source dede Données
SI PAS HExécuteRequêteSQL(qContracts, hRequêteDéfaut, "SELECT Contracts.Ct_Start, Contracts.Ct_End, Sites.Site_ID, Sites.Site_Name, Services.Service_ID, Services.Service_Name, Contracts.Tutor FROM Contracts LEFT JOIN Sites ON Contracts.Site_ID = Sites.Site_ID LEFT JOIN Services ON Contracts.Service_ID = Services.Service_ID WHERE Contracts.Member_ID = " + sMember_ID + " ORDER BY Contracts.Ct_Start ASC") ALORS
Erreur(HErreurInfo())
SINON
HLitPremier(qContracts)

TANTQUE PAS HEnDehors()

RUBRIQUE1 = qContracts.Ct_Start
RUBRIQUE2 = qContracts.Ct_End
RUBRIQUE3 = qContracts.Site_Name
RUBRIQUE4 = qContracts.Service_Name
RUBRIQUE5 = qContracts.Tutor

HLitSuivant()
FIN
FIN

HLibèreRequête(qContracts)

La requête fonctionne bien, mais mon tableau qui devrait comporter deux lignes n'en comporte qu'une seule, le dernier résultat de la requête en l'occurrence -_-.
Quelqu'un peut-il me donner l'astuce ou la méthode s'il vous plaît ? J'ai beau cherché, je ne trouve pas -_-.
Merci par avance :).


Pour tous ceux qui ont du mal à faire ceci, je me suis tapé la tête dessus bien longtemps et je vous recommande chaleureusement les blocs d'itération.

Créez des blocs d'itération pour vos cellules, vos colonnes, vos sections, etc.
Voici par exemple ci-dessous un code que j'ai utilisé dans la section "Lecture des données" de mon état, regardez surtout la logique de parcours et l'utilisation des fonctions iImprimeBloc() et iTerminePage():

TANTQUE PAS HEnDehors()
SI code_agence <> REQ_DEMANDES_VALIDE.dcc_code_agence ALORS
Montant_total_data = montant_total_agence
Nb_chq_10_data = tabChqTotalAgence[1]
Nb_chq_20_data = tabChqTotalAgence[2]
Nb_chq_50_data = tabChqTotalAgence[3]
iImprimeBloc(DONNEES)

montant_total_agence = 0
tabChqTotalAgence = [0,0,0]
iTerminePage()

iImprimeBloc(DEBUT_DOCUMENT)
iImprimeBloc(HAUT_DE_PAGE)

TEXTE16 = TabAssoBureaux[REQ_DEMANDES_VALIDE.dcc_code_agence]
TEXTE17 = REQ_DEMANDES_VALIDE.dcc_code_agence
iImprimeBloc(AGENCE)
iImprimeBloc(LIBELLES)
FIN

TabChqARendre est un tableau d'entiers = Calcul_cheques_pour_demande()
chq10 est un entier = TabChqARendre[1]
chq20 est un entier = TabChqARendre[2]
chq50 est un entier = TabChqARendre[3]

tabChqTotalAgence[1] += chq10
tabChqTotalAgence[2] += chq20
tabChqTotalAgence[3] += chq50

tabTotalCheques[1] += chq10
tabTotalCheques[2] += chq20
tabTotalCheques[3] += chq50

montant_total_agence += REQ_DEMANDES_VALIDE.dcc_montant
montant_total_cheques += chq10+chq20+chq50

ID_data = REQ_DEMANDES_VALIDE.dcc_id_demande
Code_agence_data = REQ_DEMANDES_VALIDE.dcc_code_agence
Montant_data = REQ_DEMANDES_VALIDE.dcc_montant
Numcli_data = REQ_DEMANDES_VALIDE.dcc_no_cli
Numcli_sn_data = REQ_DEMANDES_VALIDE.dcc_no_cli_sn
Nom_cli_data = REQ_DEMANDES_VALIDE.cli_nom
dix_data = chq10
vingt_data = chq20
cinquante_data = chq50

code_agence = REQ_DEMANDES_VALIDE.dcc_code_agence
HLitSuivant()
RENVOYER Vrai
FIN