PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Champs liés non mise à jour à la lecture
Champs liés non mise à jour à la lecture
Iniciado por Anthony, 07,mar. 2019 11:32 - 8 respuestas
Miembro registrado
108 mensajes
Publicado el 07,marzo 2019 - 11:32
Bonjour à tous,

Débutant avec Windev, je me retrouve dans une impasse, enfin, un comportement que je n'explique pas...
J'ai une fenêtre principale comportant une table liée à des enregistrements, en sélectionnant une ligne j'ouvre une fenêtre interne comportant différents champs (Date, combo, saisi,...) ainsi qu'un champ onglet lui-même comportant différents champs (date,combo, saisi,...).

à l'ouverture (double clic sur une ligne tableau de ma fenêtre principale), ma fenêtre interne s'ouvre, les champs (liés) qui se trouve en dehors du champ onglet sont mise à jour suivant les enregistrements correspondants sans problème. Cependant, les champs (eux aussi liés) se trouvant dans le champ onglet se retrouvent avec des enregistrements de données dans la base mais ne correspondant pas à la ligne sélectionnée initialement ! si je sélectionne une autre ligne, les données restent les mêmes... J'ai vérifié les propriétés des champs, "mémorisé la valeur" n'est pas cochée.

Mon code est simple (enfin je pense) :

Quand je débogue, gNumero récupère bien mon numéro de dossier que j'ai sélectionné (double clic) dans ma table, je ne comprends pas !!!!

Dois-je spécifier quelque chose pour les champs faisant parties du champ onglet dans ma fenêtre interne ?

Merci de votre aide !

//Déclaration globale de ma fenêtre interne
Procedure MaFenêtre(gNumero=0)
SI gNumero=0 ALORS
HRAZ(dossier)
SINON
HLitRecherchePremier(dossier,NUMERO,gNumero)
SI HTrouve() = Faux ALORS
Erreur ("Le dossier n'a pas été trouvé")
SINON
FichierVersEcran()
FIN
FIN
Miembro registrado
1.640 mensajes
Publicado el 07,marzo 2019 - 12:58
Hello,

Comment rafraichit tu ta fenêtre interne ?
Je pense qu'il faudrait creer une procédure globale dans cette fentetre
Procedure RefreshData(gNumero)
HLitRecherchePremier(dossier,NUMERO,gNumero)
SI HTrouve() = Faux ALORS
Erreur ("Le dossier n'a pas été trouvé")
SINON
FichierVersEcran()
FIN
FIN


Et tu appelles cette procédure a chaque nouveau clic
Miembro registrado
108 mensajes
Publicado el 07,marzo 2019 - 14:03
Bonjour François,

Merci pour ta réponse, je ne rafraîchi pas la fenêtre... ;) je vais essayer de voir selon tes conseils.
Je te tiens au courant des résultats.
Miembro registrado
108 mensajes
Publicado el 07,marzo 2019 - 14:26
Pour info voici le code qui est exécuté lors d'un double clic sur une ligne de ma table :
//Je vérifie qu'une ligne a bien été sélectionnée
SI TABLE_Dossier = -1 ALORS
Erreur("Vous devez sélectionner une ligne !")
FIN
//Je donne des valeurs à mes variables
soit numDossier=COL_NUMERO[TABLE_Dossier]//= au numéro de dossier de ma Table
sAlias est une chaîne="ALIAS_"+numDossier//Défini l'alias de l'onglet ouvert
Val_temp est une chaîne//Je mémorise la valeur de mon onglet ouvert

//Vérifie si le dossier est déjà ouvert
SI sAlias=""_OU_ OngletEtat(ONG_ListeDossiers,sAlias)=voletInexistant ALORS

//J'ouvre un onglet comprenant le libellé :
// Dossier : (sélection de la COLONNE de ma TABLE dans ma Fenêtre Interne avec comme paramètre ma variable)
Val_temp=OngletOuvre(ONG_ListeDossiers,"Dossier N° [%COL_NUMERO[TABLE_Dossier]%]",FI_DOSSIERS,numDossier)
ONG_ListeDossiers[Val_temp]..Alias="ALIAS_"+numDossier

SINON
//Je signale à l'utilisateur que le dossier est déjà ouvert !
ToastAffiche("Le dossier est déjà ouvert !",toastCourt,cvMilieu,chCentre)
//Active l'onglet
ONG_ListeDossiers=sAlias
FIN
Miembro registrado
299 mensajes
Publicado el 07,marzo 2019 - 14:27
L'idée de la procédure RefreshData(gNumero) a l'avantage de factoriser le traitement d 'affichage.

Je ne vois pas ce qu'il va changer au résultat.

J'ai remarqué que FichierVersEcran et EcranVersFichier réagissent mal avec des champs texte long. J'ai mis cela sur le comte d'un type de champ. Cela dit ces champs étaient aussi inclus dans un onglet.
Miembro registrado
108 mensajes
Publicado el 07,marzo 2019 - 14:53
Salut Michel,

En effet, la procédure ne change pas le résultat; Je viens d'essayer autre chose, dans les déclarations globales de ma fenêtre interne j'ai garde ce code (en cas de création de dossier) :
Procedure MaFenêtre(gNumero=0)
SI gNumero=0 ALORS
HRAZ(dossier)
FIN


Dans quelques champs (Champ en dehors de mon champ onglet et dans mon champ onglet) de ma fenêtre interne j'ai directement lié mes champs sans passé par la description, comme ceci :
SAI_Référence=dossier.REF_CIE

si je fais ça pour chaque champ ça fonctionne bien... s'il faut que je code en dur chaque champ....;(

Concernant l'enregistrement, si les champs ne sont pas lié par la description, les modifications ne sont pas prises en compte, là c'est le contraire. Il y a donc un souci avec les lecture fichierversecran .... Je n'y comprends plus rien.
Mensaje modificado, 07,marzo 2019 - 15:17
Miembro registrado
1.640 mensajes
Publicado el 07,marzo 2019 - 16:06
Ta fenetre interne n'aurait pas coché "Contexte HFSQL indépenant" ?
Miembro registrado
108 mensajes
Publicado el 07,marzo 2019 - 17:12
si... (j'ai lu que c'était conseillé pour éviter un déphasage avec la base de données) ;)
Mensaje modificado, 07,marzo 2019 - 17:13
Miembro registrado
108 mensajes
Publicado el 11,marzo 2019 - 10:05
François C. a écrit :
> Ta fenetre interne n'aurait pas coché "Contexte HFSQL indépenant" ?

Bonjour François,

C'est bien ça, quand je désactive le "context HFSQL indépendant", cela fonctionne normalement, on devrait donc coder différemment dans ce type de configuration. En tous les cas j'ai lié mes champs en dur pour le moment ça fonctionne comme ça, je regarderai plus tard pourquoi fichierversecran ne fonctionne pas en ayant mes champs lié "normalement" et en contexte HFSQL indépendant.

Merci encore !