PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Erreur de liaison sur le champ source
Erreur de liaison sur le champ source
Iniciado por avauxaurelien, 26,mar. 2019 10:55 - 4 respuestas
Publicado el 26,marzo 2019 - 10:55
Bonjour,

Voila que je travaille sur WinDev 24 depuis peu et je suis confronté à un problème.

J'ai une erreur fatale de programmation :

Erreur à la ligne 1 du traitement Clic sur BTN_Valider1.
Vous avez appelé la FONCTION EcranVersFichier.
Erreur de Liaison sur le champ Source <SAI_Numéro_de_facture>.
Erreur de Liaison sur le champ Source <SAI_Numéro_de_facture>.


J'explique un peu le contexte :

J'ai une fenêtre qui contient un onglet avec deux volets, dans cette même fenêtre j'ai déclaré plusieurs variables de type Enregistrement
gTINVENTAIRE est un Enregistrement de TINVENTAIRE
gTCOMPTABILITÉ est un Enregistrement de TCOMPTABILITÉ


gTINVENTAIRE est liée aux champs du premier volet et gTCOMPTABILITÉ à ceux du deuxième volet.
J'ai un bouton de validation dans chacun des volets avec le code
EcranVersFichier(FEN_FICHE_INVENTAIRE, "gTINVENTAIRE")

pour le premier et
EcranVersFichier(FEN_FICHE_INVENTAIRE, "gTCOMPTABILITÉ")

pour le second

Lorsque je valide le formulaire du premier volet, ça fonctionne, ma variable Enregistrement gTINVENTAIRE est bien modifiée.
Mais si j'essaye avec le formulaire du deuxième volet, j'ai l'erreur citée plus haut et le programme plante.

Merci d'avance pour votre aide.
Publicado el 26,marzo 2019 - 12:26
Est-ce que tu n'aurais pas deux champs reliés à la même donnée de tes enregistrements (Ça expliquerait le fait que le message d'erreur apparaisse deux fois)
Publicado el 26,marzo 2019 - 13:55
Non j'ai déjà vérifier plusieurs fois, et même refait entièrement le formulaire.
Je ne comprend pas pourquoi cela fonctionne pour le premier formulaire mais pas pour le deuxième, je l'ai programmé de la même façon.

De plus je viens d'essayer avec une nouvelle fenêtre, je déclare ma variable Enregistrement, je place deux champs reliés à la même rubrique et quand je fais EcranVersFichier je n'ai pas d'erreur, il recopie la valeur du premier champ et ensuite l'écrase avec la valeur du deuxième, mais aucune erreur.
Miembro registrado
1.640 mensajes
Publicado el 26,marzo 2019 - 14:41
Hello,

Je ne suis pas sur mais, il me semble que EcranVersFichier utilise implicitement la sérialisation et la sérialisation n'aime pas les accents..
Essaye en renommant ta variable gTCOMPTABILITÉ en gTCOMPTABILITE ?

Sinon, tente la même chose mais avec EcranVersSource()
C'est a peu près pareil mais bon.. Un enregistrement de fichier n'etant pas vraiment un fichier a proprement parlé.. normalement EcranVersSource est fait pour ca.
Publicado el 26,marzo 2019 - 15:31
Je viens d'essayer avec EcranVersSource et en retirant les accents, ça ne change rien du tout à mon erreur.

Je viens de trouver mon erreur, à un endroit dans le code j'affecte Null à ma variable gTCOMPTABILITÉ et donc dès que je fais un EcranVersFichier sur cette variable, le programme plante.

Un exemple de procédure (définie dans une classe CTINVENTAIRE)
// Traitement automatique des erreurs : exécuter le bloc de code CAS ERREUR
//
// Traitement automatique des exceptions : exécuter le bloc de code CAS EXCEPTION:
//

Procedure GLOBAL Ajouter(LOCAL mTINVENTAIRE est un Enregistrement de TINVENTAIRE)

// Copie des rubriques identiques
TINVENTAIRE = mTINVENTAIRE

// On débute une transaction pour être sûr que l'ajout du matériel et de l'historique sont tout deux effectués
HTransactionDébut(Localhost)
SI HAjoute(TINVENTAIRE) ALORS
mTINVENTAIRE_HISTO est un Enregistrement de TINVENTAIRE_HISTO

// Clé étrangère
mTINVENTAIRE_HISTO.ID_TINVENTAIRE = TINVENTAIRE.ID

// Copie des rubriques identiques
mTINVENTAIRE_HISTO = TINVENTAIRE

// Opération effectuée
mTINVENTAIRE_HISTO.OPÉRATION = "Ajout"

// Ajout de l'enregistrement historique
CTINVENTAIRE_HISTO.Ajouter(mTINVENTAIRE_HISTO)

// On termine la transaction
HTransactionFin(Localhost)

// On renvoie l'enregistrement ajouter
RENVOYER TINVENTAIRE
FIN

// Par défaut on renvoie Null
RENVOYER Null

// En cas d'erreur ou d'exception on annule la transaction et on renvoie Null
CAS ERREUR:
HTransactionAnnule(Localhost)
ErreurPropage()
CAS EXCEPTION:
HTransactionAnnule(Localhost)
ExceptionPropage()


Donc si je fait :
gTINVENTAIRE est un Enregistrement de TINVENTAIRE
gTINVENTAIRE.LIBELLÉ = "test"
// CTINVENTAIRE est la classe qui défini toutes mes opérations
gTINVENTAIRE = CTINVENTAIRE.Ajouter(gTINVENTAIRE)


Si la procédure Ajouter renvoie Null, je ne peux plus utiliser ma variable gTINVENTAIRE pour faire des EcranVersFichier.

En tout cas merci pour votre aide.