PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Etat et programmation
Etat et programmation
Débuté par Ndiaga Toure, 21 aoû. 2019 18:30 - 6 réponses
Membre enregistré
311 messages
Popularité : +3 (5 votes)
Posté le 21 août 2019 - 18:30
Bonjour,
J'ai un Etat basé sur une requete.les champs affichées sont [Quantite, description, prix ]
-je doit répéter la même description et prix si la rubrique quantité est supérieur à 1
J'ai essayé ce code au niveau de l'ouverture de l'Etat mais ça affiche qu'une seule ligne

nb est entier=Lib_quantité
SI nb>1 ALORS
POUR i=1 A nb
lib_description="toto"
FIN
fin

Quelqu'un à une idée
Cordialement
Membre enregistré
3 885 messages
Popularité : +227 (347 votes)
Posté le 21 août 2019 - 21:04
Bonjour,
Il suffit de modifier ta requête en ajoutant une condition sur la quantité.

Ta requête doit ressembler à ça :
SELECT
PRODUIT.Decription,
PRODUIT.Prix,
LIGNECDE.Qte
FROM
PRODUIT,
LIGNECDE
WHERE
PRODUIT.PK_PRODUIT=LIGNECDE.FK_PRODUIT


Il suffit de la modifier en
SELECT
PRODUIT.Decription,
PRODUIT.Prix,
LIGNECDE.Qte
FROM
PRODUIT,
LIGNECDE
WHERE
PRODUIT.PK_PRODUIT=LIGNECDE.FK_PRODUIT
AND
LIGNECDE.QTE>1


--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 21 août 2019 - 21:13
Membre enregistré
311 messages
Popularité : +3 (5 votes)
Posté le 21 août 2019 - 23:03
Voroltinquo a écrit :
Bonjour,
Il suffit de modifier ta requête en ajoutant une condition sur la quantité.

Ta requête doit ressembler à ça :
SELECT
PRODUIT.Decription,
PRODUIT.Prix,
LIGNECDE.Qte
FROM
PRODUIT,
LIGNECDE
WHERE
PRODUIT.PK_PRODUIT=LIGNECDE.FK_PRODUIT


Il suffit de la modifier en
SELECT
PRODUIT.Decription,
PRODUIT.Prix,
LIGNECDE.Qte
FROM
PRODUIT,
LIGNECDE
WHERE
PRODUIT.PK_PRODUIT=LIGNECDE.FK_PRODUIT
AND
LIGNECDE.QTE>1


--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 21 août 2019 - 21:13

Merci de votre réponse.Mais ici l'idée ce n'est pas d'afficher seulement les quantité supérieur à 1 mais de splitter les quantités supérieur en 1. Autrement dit de répéter les lignes dont la quantité est supérieur à 1



Dans ce cas répéter le champ description et prix deux fois puisque la quantité est de 2.
Cordialement
Membre enregistré
3 885 messages
Popularité : +227 (347 votes)
Posté le 22 août 2019 - 07:40
On va appeler la requête REQ_DétailFacture_Complet
Le tableau doit être rempli par programmation (Description/Données/Les données viennent...)

Initialisation de l'état :
HExécuteRequête(REQ_DétailFacture_Complet)
gsQtéAffichée est chaîne //Il faudra passer la colonne en texte, cela évite d'avoir un "zéro"
gnItération est entier

gnItération=1 //A adapter si l'on considère que la première ligne du produit est le récapitulatif ou pas
HLitPremier(REQ_DétailFacture_Complet)


Lecture des données :
TANTQUE PAS HEnDehors(REQ_DétailFacture_Complet)
SI gnItération=1 ALORS //C'est la première ligne on affiche la quantité
gsQtéAffichée=REQ_DétailFacture_Complet.Qte
SINON //On n'affiche pas la quantité
gsQtéAffichée=""
FIN
RENVOYER Vrai
FIN

RENVOYER Faux


Avant impression de CORPS :
LIB_Qté=gsQtéAffichée
LIB_Produit=REQ_DétailFacture_Complet.NDX_NomProduit
LIB_Prix=REQ_DétailFacture_Complet.Prix

gnItération++
SI gnItération>REQ_DétailFacture_Complet.Qte ALORS
HLitSuivant(REQ_DétailFacture_Complet)
gnItération=1
FIN


--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
311 messages
Popularité : +3 (5 votes)
Posté le 22 août 2019 - 07:52
Voroltinquo a écrit :
On va appeler la requête REQ_DétailFacture_Complet
Le tableau doit être rempli par programmation (Description/Données/Les données viennent...)

Initialisation de l'état :
HExécuteRequête(REQ_DétailFacture_Complet)
gsQtéAffichée est chaîne //Il faudra passer la colonne en texte, cela évite d'avoir un "zéro"
gnItération est entier

gnItération=1 //A adapter si l'on considère que la première ligne du produit est le récapitulatif ou pas
HLitPremier(REQ_DétailFacture_Complet)


Lecture des données :
TANTQUE PAS HEnDehors(REQ_DétailFacture_Complet)
SI gnItération=1 ALORS //C'est la première ligne on affiche la quantité
gsQtéAffichée=REQ_DétailFacture_Complet.Qte
SINON //On n'affiche pas la quantité
gsQtéAffichée=""
FIN
RENVOYER Vrai
FIN

RENVOYER Faux


Avant impression de CORPS :
LIB_Qté=gsQtéAffichée
LIB_Produit=REQ_DétailFacture_Complet.NDX_NomProduit
LIB_Prix=REQ_DétailFacture_Complet.Prix

gnItération++
SI gnItération>REQ_DétailFacture_Complet.Qte ALORS
HLitSuivant(REQ_DétailFacture_Complet)
gnItération=1
FIN


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

Bonjour,
Je vais tester ça et je vous reviens
Encore merci cordialement
Membre enregistré
311 messages
Popularité : +3 (5 votes)
Posté le 22 août 2019 - 12:14
Bonjour,
Désolé mais j'ai pas encore le résultat escompté.
Je serais plus simple que possible .
Je veux répéter par programmation une ligne de mon Etat n fois. Dans ce cas d'Etat



Je veux répéter Exonéré par exemple 3fois au niveau de l'affichage de l'Etat.
Si j'arrive je pourrai résoudre le gros lot du probléme.
Merci et bon dév
Membre enregistré
165 messages
Popularité : +12 (12 votes)
Posté le 22 août 2019 - 13:56
Bonjour;
Y en a plusieurs méthodes pour faire ça, une parmi d'autre c'est :
Créer une table dans une fenêtre, la source de données de la table c'est ta requête + un bouton pour imprimer





changer la source de la table dans la description en par programmation





Le code d’initialisation de la table





Créer un état dont la source de donnée est le champ table









Le code du bouton Imprimer





et maintenant le test

la fenêtre :



l'état :




Bon Dev
Message modifié, 22 août 2019 - 14:01