Bonjour,
je comprend pas pourquoi tu dois faire un hajoute à chaque prise de focus de ta fenetre principale.
Dans ton Bouton Ajouter tu as un code de ce style
1 2
| Sur clic BTN_AJOOUTER
ouvre(saisie) |
le traitement dans ta fenetre principale se bloque alors, en attendant que la fenetre Saisie soit fermée.
Pourquoi ne pas lancer la mise à jour de tes tables une fois que la fenêtre Saisie a rendu la main. C'est à dire directement dans le code du bouton Ajouter.
Remarque : Si tu lance exploreur ou la calculette, si tu reviens sur ta fenetre Windev, Tu relance Hajoute dans ta table en reprenant le focus il me semble. Pourtant il est probable que tu n'es pas fini ta saisie dans ta page.
Si je peux, je te conseille d'éviter les ajouts supression sur des prises de focus. Une mégarde est toujours probable.
Essaie donc le traitement directement sur le bouton Ajouter.
Envoyé par
RENAUDER
Prise de focus de EXPRESS_FEN_Départ
Code :
1 2 3 4 5
| HLitPremier(EXPRESS_Mouvement,IDEXPRESS_Mouvement)
TANTQUE PAS HEnDehors
TableAjoute(TABLE_EXPRESS_Tmouv,EXPRESS_Mouvement.IDEXPRESS_Mouvement+TAB+EXPRESS_Mouvement.Date+TAB+EXPRESS_Mouvement.Descriptif+TAB+EXPRESS_Mouvement.Dépense+TAB+EXPRESS_Mouvement.Recette)
HLitSuivant(EXPRESS_Mouvement)
FIN |
Je pense également qui te manque un tableaffiche(<Nom de ta table>).
Elle doit être à jour lors de la premiere ouverture de ta fenêtre mais tu ne rafraichit pas l'écran lorsque tu reprend le focus sur la fenêtre Saisie.
CF le TP 3 qui fonctionne très bien sur mon windev express 12 comme le tien
le bouton Valider se trouve sur ta fenetre Saisie. Le bouton Ajout sur ta fenetre départ.
ExécuteTraitement(EXPRESS_FEN_Départ,trtPriseFocus)
permet de reproduire un code d'une même fenêtre. Dans le TP on l'utilise avec le bouton supprimer pour reproduire le traitement codée dans la même fenêtre.
1 2 3 4 5 6 7 8 9 10 11 12
| Bouton supprimer
HLitRecherchePremier(EXPRESS_MOUVEMENT,IDEXPRESS_MOUVEMENT,TMOUV.COL_Colonne5)
//TMOUV.COL_Colonne5 correspond à la valeur cherché
//on recherche la première occurence (içi l'unique)
TANTQUE HTrouve(EXPRESS_MOUVEMENT) = Vrai
HSupprime(EXPRESS_MOUVEMENT) //on supprime l'enregistrement
TitreSuivant("Info")
DélaiAvantFermeture(500)
Info("Ligne : " + TMOUV.COL_Colonne5 + " supprimée")
HLitSuivant(EXPRESS_MOUVEMENT,IDEXPRESS_MOUVEMENT) //La ligne est unique sinon on supprime chacune des occurences
FIN
ExécuteTraitement(EXPRESS_FEN_depart,trtPriseFocus) |
1 2 3 4
| Bouton Valider
EcranVersFichier(EXPRESS_FEN_saisie)
HAjoute(EXPRESS_MOUVEMENT)
Ferme |
Relis le TP et mets le code au bon endroit, ca fonctionnera surement mieux
N'oublie pas de vider la table également
1 2 3 4
| sur prise de focus
TableSupprimeTout(TMOUV)
...
... |
N'oublie pas le code est lié à la fenêtre, si tu lance ta commande dans une autre fenêtre, celle-ci à le focus lors du lancement du code, les variables prises sont celles de ta fenêtre "Saisie" lorsque tu souhaites faire ton execute traitement. Hors ce code est fait pour la fenêtre Départ qui n'a pas obtenu le focus puisque c'est encore ta fenêtre Saisie qui le possède. D'où ton problème de mise à jour.
Windev est orientée Objet.
Ce qui signifie que si tu code
Tmouv.colonne5 par exemple tu fais reference à la colonne5 de l'objet Tmouv qui est contenu dans la fenêtre du code.
si tu code Mafenetre.Tmouv.colonne5 tu fais réference à un objet plus précis puisque tu lui as assigné une provenance (Mafenetre).
ce qui peut te permettre de te passer de certaines variables Globale (qui sont lié au programme) et de variables locales (qui sont lié à la fenêtre). Tu peux pointer vers des éléments d'autres feêtres que si le nom est clairement identifié et si les fenêtres sont ouvertes. Si tu ne precises pas plus, considère que tu es en local donc lié à la fenêtre active.
Si tu fais un bouton fermer, garde à l'esprit que l'action fermer est effective quand tout le code est passé et non pas uniquement lorsque tu clic sur le bouton.
Partager