|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| L'expression ne peut pas être évalué aléatoire |
| Débuté par Nico, 11 juil. 2025 14:17 - 26 réponses |
| |
| | | |
|
| |
| Posté le 11 juillet 2025 - 14:17 |
Bonjour, Ca fait plusieurs jour que je tourne en rond sur un souci aléatoire mais très très génant.
J'ai une variable chaine globale au projet (Au départ elle était à la fenêtre) que je charge depuis un hlitrecherchepremier. A ce stade la variable a bien la bonne valeur.
Ensuite il se passe différent traitement mais aucun qui ne manipule cette chaine.
Puis tout à la fin j'ai un bouton pour finir mon traitement et là de temps en temps (Sur certain poste c'est très très régulier, sur d'autre quasiment jamais) j'ai une erreur fatale avec "Cette expression ne peut pas être évalué" puis Une erreur interne inattendue est survenue. Pour obtenir des informations supplémentaires, activez la génération d'un dump système (fonction dbgInfo).
J'ai protégé un peu avec
sValeurNumDossierEnCoursDePréparationDansLeStock = ÉvalueExpression("ggsNumDossierEnCoursDePréparationDansLeStock")
SI PAS ErreurDétectée ALORS // Mon traitement final sinon Erreur("Une erreur fatale est détectée !") FIN
J'ai aussi mis un cas Exception dans la procédure. Je rentre dedans mais dés la fenêtre d'erreur ouverte, je plante en fatal. Pour fini dans mon cas exception j'ai voulu indiqué l'erreur et relancer une autre procédure et dans cette dernière il y a de nouveau une variable (un nom de plan) non reconnu. Comme si windev perdait l'info à TOUTES les variables à un moment, mais pour quelles raison?
Merci |
| |
| |
| | | |
|
| | |
| |
| Posté le 11 juillet 2025 - 15:53 |
J'ai également sur ces mêmes procédures des erreurs fatales sur HLibèreRequête(REQ_ListeDesBLAPréparerAvecLigne) et/ou sur la 1ère ligne du POUT TOUT et/ou sur le FIN du POUR TOUT
Au cas ou ça donne un indice....
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 11 juillet 2025 - 16:36 |
Salut Nico,
Si tu veux de l'aide va falloir donner plus d'infos 
Que contient ta variable ggsNumDossierEnCoursDePréparationDansLeStock que tu évalue ? ou est le code de ton process ? Quel est l'erreur exacte que tu reçois ?
Sinon impossible de t'aider.
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
| Posté le 15 juillet 2025 - 10:11 |
Daryl a écrit :
Salut Nico, Si tu veux de l'aide va falloir donner plus d'infos  Que contient ta variable ggsNumDossierEnCoursDePréparationDansLeStock que tu évalue ? ou est le code de ton process ? Quel est l'erreur exacte que tu reçois ? Sinon impossible de t'aider. A+ Daryl -- http://www.concept4u2.com
Salut Daryl, J'aimerais tant en avoir plus. Je viens par "chance" d'avoir l'erreur sur ma machine
J'ai là tout de suite par exemple : Une erreur interne inattendue est survenue. Pour obtenir des informations supplémentaires, activez la génération d'un dump système (fonction dbgInfo).
Pile des appels : Procédure locale ChargeBLAPréparer (FI_Entrepot.PROCEDURE.ChargeBLAPréparer), ligne 119 Procédure locale ClicBoutonValiderLaPrépa (FI_Entrepot.PROCEDURE.ClicBoutonValiderLaPrépa), ligne 41 Sélection du menu de MENU_ValiderContrôleBL.OPT_Valider_Terminer_la_préparation (FI_Entrepot.MENU_ValiderContrôleBL.OPT_Valider_Terminer_la_préparation), ligne 1
et l'erreur est sur
SI nPrépaUrgent <> gnNombreDeCommandeUrgenteAPréparer ALORS sFichierSon est une chaîne = fRepExe() + "\Alert.wav"
SI fFichierExiste(sFichierSon) ALORS SI gnNombreDeCommandeUrgenteAPréparer<>0 ALORS Son(sFichierSon) FIN FIN gnNombreDeCommandeUrgenteAPréparer = nPrépaUrgent FIN
sur la ligne "SI nPrépaUrgent <> gnNombreDeCommandeUrgenteAPréparer ALORS"

Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 15 juillet 2025 - 11:30 |
Salut Nico,
Tu ne nous à toujours pas dit ce que contenait tes variables nPrépaUrgent et gnNombreDeCommandeUrgenteAPréparer ? De plus utiliser des accents dans des variables ce n'est jamais une bonne idée, crois moi 
Je ne sais pas ce que tu voulais montrer dans ton image, mais le lien ne donne rien
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
| Posté le 15 juillet 2025 - 13:47 |
Daryl a écrit :
Salut Nico, Tu ne nous à toujours pas dit ce que contenait tes variables nPrépaUrgent et gnNombreDeCommandeUrgenteAPréparer ? De plus utiliser des accents dans des variables ce n'est jamais une bonne idée, crois moi  Je ne sais pas ce que tu voulais montrer dans ton image, mais le lien ne donne rien A+ Daryl -- http://www.concept4u2.com
Bah en fait l'erreur n'est pas toujours au même endroit. Ici c'est censé être 2 entiers. Je vais retirer les accents et refaire des essais jusqu'a ce que ca plante à nouveau.
J'ai ajouté au passe un Cas Exception avec
CAS EXCEPTION:
// Sauve le dump de débogage dans un fichier dbgSauveDumpDébogage("c:\tmp" + ["\"] + "MonDump.wdump") Info("Dump système généré avec succès.")
En espérant que ce soir exploitable en cas de souci.
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 15 juillet 2025 - 14:57 |
Salut Nico,
Tu indiques que c'est censé être des entiers, j'en conclus que tu ne sais pas ce que contiennent tes variables. As-tu déjà effectué des tests en mode debug et contrôler les valeurs ?
As-tu déjà essayé de mettre ton code dans une section QUAND EXCEPTION FAIRE ?
Essaie peut-être ceci pour avoir un peu plus d'informations
QUAND EXCEPTION DANS // Mettre ici to code à exécuter ... FAIRE // Erreur principale en cas d'erreur Trace(ExceptionInfo()) // Sous-erreurs (s'il y en a) POUR i = 1 À ExceptionInfo(errNombreSousErreur) // Message complet de chaque sous-erreur Trace("Sous-erreur " + i + " : " + ExceptionInfo(errMessage, i)) FIN FIN
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
| Posté le 15 juillet 2025 - 15:37 |
Daryl a écrit :
Salut Nico, Tu indiques que c'est censé être des entiers, j'en conclus que tu ne sais pas ce que contiennent tes variables. As-tu déjà effectué des tests en mode debug et contrôler les valeurs ? As-tu déjà essayé de mettre ton code dans une section QUAND EXCEPTION FAIRE ? Essaie peut-être ceci pour avoir un peu plus d'informations QUAND EXCEPTION DANS // Mettre ici to code à exécuter ... FAIRE // Erreur principale en cas d'erreur Trace(ExceptionInfo()) // Sous-erreurs (s'il y en a) POUR i = 1 À ExceptionInfo(errNombreSousErreur) // Message complet de chaque sous-erreur Trace("Sous-erreur " + i + " : " + ExceptionInfo(errMessage, i)) FIN FIN A+ Daryl -- http://www.concept4u2.com
J'indique censé car c'est bien ce qu'il y a. Le code marche 95% de temps. Mais sur certaines machines, à certains moment, ca plante avec une erreur fatale. J'ai l'impression que windev perd toutes les variables globales, les plans, etc.....
Je vais essayer avec ton bout de code QUAND EXCEPTION, en espérant que ca plante du coup pour en voir plus.
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 15 juillet 2025 - 16:12 |
| |
| |
| | | |
|
| | |
| |
| Posté le 16 juillet 2025 - 11:40 |
Daryl a écrit :
Salut Salut Daryl 
Ca va bien? Alors j'en "enfin", je ne sais pas si je dois me réjouïr re eu mon bug.
Je suis bien rentré dans le cas Exception du coup. Mais l'erreur est plutôt très vague.
Une erreur interne inattendue est survenue. Pour obtenier des informations supplémentaires, activez la génération d'un dump système.
Le bon point c'est qu'a priori mon
dbgSauveDumpDébogage("c:\tmp" + ["\"] + "MonDump.wdump") Info("Dump système généré avec succès.") a fonctionné.
Mais lorsque je l'ouvre, il me place tout simplement en haut de la procédure ayant provoqué le souci sans aucun autre élément.
Pour rappel ma procédure est la suivante :
PROCÉDURE ChargeBLAPréparer()
QUAND EXCEPTION DANS SI gbChargementDesBLEnCours ALORS RETOUR FIN
gbChargementDesBLEnCours = Vrai
nLig est un entier nLigUrgent est un entier = 0 sLibOperateurDate est une chaîne sTexte est une chaîne = "**%1** BL à préparer - **%2** préparation(s) en cours - **%3 URGENT !!!!**" nPrepaEnCours, nPrepaAFaire, nPrepaUrgent sont des entier = 0 //trace("") MENU_ValiderContrôleBL.OPT_Pause..Etat = Grisé
LIB_Prépatation_en_cours..Visible = Faux
LIB_NumDocNomClient = Vide TableSupprimeTout(TABLE_REQ_ListeDesBLAPréparer) TableSupprimeTout(TABLE_REQ_ListeDesLignesBLAPréparer)
REQ_ListeDesBLAPréparerAvecLigne.ParamCléDocAPréparer = Vrai+PIP+stdBonLivraison+PIP+ggsLettreAgenceChoisi REQ_ListeDesBLAPréparerAvecLigne.ParamLigneAPréparer = Vrai REQ_ListeDesBLAPréparerAvecLigne.ParamTypeDeLigne = tldPièce REQ_ListeDesBLAPréparerAvecLigne.ParamStatutDocument = stdBonLivraison REQ_ListeDesBLAPréparerAvecLigne.ParamCodeRegroupementNeContientPas = Suppr
HExécuteRequête(REQ_ListeDesBLAPréparerAvecLigne)
POUR TOUT REQ_ListeDesBLAPréparerAvecLigne
nLig = TableAjouteLigne(TABLE_REQ_ListeDesBLAPréparer)
SI REQ_ListeDesBLAPréparerAvecLigne.BonDePréparationImprimé ALORS nPrepaEnCours ++ TABLE_REQ_ListeDesBLAPréparer[nLig].COL_BonDéjàImprimé.INT_BonImprimé = REQ_ListeDesBLAPréparerAvecLigne.BonDePréparationImprimé SI DateValide(REQ_ListeDesBLAPréparerAvecLigne.HorodatageImpressionBonDePrépa..PartieDate) ALORS sLibOperateurDate = OPERATEUR░[ggsLettreAgenceChoisi+REQ_ListeDesBLAPréparerAvecLigne.OpérateurImpressionBonDePrépa].NomOperateur+Espace+OPERATEUR░[ggsLettreAgenceChoisi+REQ_ListeDesBLAPréparerAvecLigne.OpérateurImpressionBonDePrépa].PrénomOperateur+" le "+DateVersChaîne(REQ_ListeDesBLAPréparerAvecLigne.HorodatageImpressionBonDePrépa..PartieDate,"JJ/MM/AAAA")+" à "+HeureVersChaîne(REQ_ListeDesBLAPréparerAvecLigne.HorodatageImpressionBonDePrépa..PartieHeure,"HH:MM:SS") SINON sLibOperateurDate = OPERATEUR░[ggsLettreAgenceChoisi+REQ_ListeDesBLAPréparerAvecLigne.OpérateurImpressionBonDePrépa].NomOperateur+Espace+OPERATEUR░[ggsLettreAgenceChoisi+REQ_ListeDesBLAPréparerAvecLigne.OpérateurImpressionBonDePrépa].PrénomOperateur FIN
TABLE_REQ_ListeDesBLAPréparer[nLig].COL_BonDéjàImprimé.LIB_Opérateur = sLibOperateurDate SINON TABLE_REQ_ListeDesBLAPréparer[nLig].COL_BonDéjàImprimé.INT_BonImprimé = Faux TABLE_REQ_ListeDesBLAPréparer[nLig].COL_BonDéjàImprimé.LIB_Opérateur = Vide nPrepaAFaire++ FIN TABLE_REQ_ListeDesBLAPréparer[nLig].COL_CodePostal = REQ_ListeDesBLAPréparerAvecLigne.CodePostal TABLE_REQ_ListeDesBLAPréparer[nLig].COL_DateCréation = REQ_ListeDesBLAPréparerAvecLigne.HorodatageCréation..PartieDate TABLE_REQ_ListeDesBLAPréparer[nLig].COL_HeureCréation = REQ_ListeDesBLAPréparerAvecLigne.HorodatageCréation..PartieHeure TABLE_REQ_ListeDesBLAPréparer[nLig].COL_NomDeFact = REQ_ListeDesBLAPréparerAvecLigne.NomDeFact TABLE_REQ_ListeDesBLAPréparer[nLig].COL_NumDocAG = REQ_ListeDesBLAPréparerAvecLigne.NumDocAG TABLE_REQ_ListeDesBLAPréparer[nLig].COL_NumDossierAG = REQ_ListeDesBLAPréparerAvecLigne.NumDossierAG TABLE_REQ_ListeDesBLAPréparer[nLig].COL_PrénomDeFact = REQ_ListeDesBLAPréparerAvecLigne.PrénomDeFact TABLE_REQ_ListeDesBLAPréparer[nLig].COL_Société = REQ_ListeDesBLAPréparerAvecLigne.Société TABLE_REQ_ListeDesBLAPréparer[nLig].COL_Ville = REQ_ListeDesBLAPréparerAvecLigne.Ville TABLE_REQ_ListeDesBLAPréparer[nLig].COL_NumClient = REQ_ListeDesBLAPréparerAvecLigne.NumClient TABLE_REQ_ListeDesBLAPréparer[nLig].COL_NumClientRegroupement = REQ_ListeDesBLAPréparerAvecLigne.NumClientRegroupement TABLE_REQ_ListeDesBLAPréparer[nLig].COL_IDDOC = REQ_ListeDesBLAPréparerAvecLigne.IDDOC TABLE_REQ_ListeDesBLAPréparer[nLig].COL_PréparationEnCours = REQ_ListeDesBLAPréparerAvecLigne.PréparationEnCours
SELON REQ_ListeDesBLAPréparerAvecLigne.TypeDeLivraison CAS livraisonColisTransporteur TABLE_REQ_ListeDesBLAPréparer[nLig].COL_ModeLivraison.IMG_Livraison = IMG_LivraisonTransporteur CAS livraisonRetraitComptoir TABLE_REQ_ListeDesBLAPréparer[nLig].COL_ModeLivraison.IMG_Livraison = IMG_LivraisonComptoir AUTRE CAS TABLE_REQ_ListeDesBLAPréparer[nLig].COL_ModeLivraison.IMG_Livraison = IMG_LivraisonComptoir
FIN
TABLE_REQ_ListeDesBLAPréparer[nLig].COL_ModeLivraison.LIB_Transporteur = REQ_ListeDesBLAPréparerAvecLigne.Transporteur
SELON REQ_ListeDesBLAPréparerAvecLigne.Civilité CAS 3 // Société TABLE_REQ_ListeDesBLAPréparer[nLig].COL_NomAffiché = REQ_ListeDesBLAPréparerAvecLigne.Société AUTRE CAS TABLE_REQ_ListeDesBLAPréparer[nLig].COL_NomAffiché = SansEspace(REQ_ListeDesBLAPréparerAvecLigne.NomDeFact,sscExtérieur) + Espace + SansEspace(REQ_ListeDesBLAPréparerAvecLigne.PrénomDeFact,sscExtérieur)
FIN SELON REQ_ListeDesBLAPréparerAvecLigne.EstUrgent CAS Vrai TABLE_REQ_ListeDesBLAPréparer[nLig].COL_Urgent.IMG_URGENT..Visible = Vrai TABLE_REQ_ListeDesBLAPréparer[nLig].COL_Urgent.IMG_URGENT = IMG_LivraisonUrgente nPrepaUrgent++ CAS Faux TABLE_REQ_ListeDesBLAPréparer[nLig].COL_Urgent.IMG_URGENT..Visible = Faux FIN
// FIN FIN
HLibèreRequête(REQ_ListeDesBLAPréparerAvecLigne) SI nPrepaUrgent <> gnNombreDeCommandeUrgenteAPreparer ALORS sFichierSon est une chaîne = fRepExe() + "\Alert.wav"
SI fFichierExiste(sFichierSon) ALORS SI gnNombreDeCommandeUrgenteAPreparer<>0 ALORS Son(sFichierSon) FIN FIN gnNombreDeCommandeUrgenteAPreparer = nPrepaUrgent FIN
LIB_Prépatation_en_cours = ChaîneConstruit(sTexte,nPrepaAFaire,nPrepaEnCours,nPrepaUrgent) LIB_Prépatation_en_cours..Visible = Vrai AfficheDétailBLSélectionnéPourPréparation()
TABLE_REQ_ListeDesBLAPréparer..Grisé = Faux
gbChargementDesBLEnCours = Faux //TableAjuste(TABLE_REQ_ListeDesBLAPréparer)
FAIRE
// Erreur principale en cas d'erreur Trace(ExceptionInfo())
// Sous-erreurs (s'il y en a) POUR i = 1 À ExceptionInfo(errNombreSousErreur) // Message complet de chaque sous-erreur Trace("Sous-erreur " + i + " : " + ExceptionInfo(errMessage, i)) FIN // Sauve le dump de débogage dans un fichier dbgSauveDumpDébogage("c:\tmp" + ["\"] + "MonDump.wdump") Info("Dump système généré avec succès.") FIN
Merci |
| |
| |
| | | |
|
| | |
| |
| Posté le 16 juillet 2025 - 11:48 |
Et c'est la 1ère fois que j'utilise un dump de debogage. Je viens d'ajouter la 1ere expression dans le déboggeur et effectivement elle es indiqué non évaluable. Alors que les 3/4 du temps ca fonctionne. Je ne comprend rien.
https://ibb.co/KzLkRG5b |
| |
| |
| | | |
|
| | |
| |
| Posté le 16 juillet 2025 - 12:13 |
Ma]is en fait je viens de reprendre mon code et je pense que l'erreur est en amont.
En réalité je clique un bouton qui fait
POUR TOUTE LIGNE nLig DE TABLE_REQ_ListeDesLignesBLAPréparer SI HLitRecherchePremier(DOSSIER_LIGNE,IDDOSSIER_LIGNE,TABLE_REQ_ListeDesLignesBLAPréparer[nLig].COL_IDDOSSIER_LIGNE) ET H.Trouve ALORS HBloqueNumEnr(DOSSIER_LIGNE) DOSSIER_LIGNE.LigneAPréparer = Faux DOSSIER_LIGNE.LignePréparé = Vrai HModifie(DOSSIER_LIGNE,hNumEnrEnCours,hIgnoreDoublon) // On ignore le doublon pour la clé de contrôle HDébloqueNumEnr(DOSSIER_LIGNE) FIN FIN
ChargeLigneAPréparer(Faux,TABLE_REQ_ListeDesBLAPréparer[TABLE_REQ_ListeDesBLAPréparer].COL_NumDocAG,Null)
ToastAffiche("Fin de préparation du BL",toastCourt,cvBas,chCentre,DonneCouleur()) FinDeControleDuBL() ChargeBLAPréparer()
et finalement je pense que l'erreur est déjà dans FinDeControleDuBL
SI PAS sNumDocEnCoursDePréparationAValider = Vide ALORS // Trace(CR+"Avant Lecture DOSSIER_DOCS") SI HLitRecherchePremier(DOSSIER_DOCS,NumDocAG,sNumDocEnCoursDePréparationAValider) ET H.Trouve ALORS // Trace(CR+"Après Lecture DOSSIER_DOCS") ggsNumDossierEnCoursDePréparationDansLeStock = DOSSIER_DOCS.NumDossierAG gsNumDocAGnCoursDePréparation = DOSSIER_DOCS.NumDocAG SINON // Trace(CR+"Erreur Lecture DOSSIER_DOCS") Erreur(ChaîneConstruit("Impossible de lire le dossier_docs : %1",sNumDocEnCoursDePréparationAValider)) FIN FIN
sValeurNumDossierEnCoursDePréparationDansLeStock = ÉvalueExpression("ggsNumDossierEnCoursDePréparationDansLeStock")
SI PAS ErreurDétectée ALORS // Un traitement SINON Erreur("Une erreur fatale est détectée !","Les lignes sont bien passés en statut préparé mais pas le BL complet","Veuillez-utiliser le bouton de réparation ci-dessus !!") FIN
En en réalité moi je passe dans le cas SINON de cette procédure. Du coup l'erreur de départ doit être dans sValeurNumDossierEnCoursDePréparationDansLeStock = ÉvalueExpression("ggsNumDossierEnCoursDePréparationDansLeStock")
Mais je ne manipule plus cette donnée du début à la fin. Et d'ailleur je pense qu'elle perd sa donnée. Que ca passe dans le SINON. Puis ca lance la procédure à la suite (ChargeBLAPréparer()) Et celle ci aussi à perdu ses données.
je vais rajouter le dump dans l'exception de la 1ere procédure et essayer de "replanter" |
| |
| |
| | | |
|
| | |
| |
| Posté le 16 juillet 2025 - 13:38 |
NICO a écrit :
Ma]is en fait je viens de reprendre mon code et je pense que l'erreur est en amont. En réalité je clique un bouton qui fait POUR TOUTE LIGNE nLig DE TABLE_REQ_ListeDesLignesBLAPréparer SI HLitRecherchePremier(DOSSIER_LIGNE,IDDOSSIER_LIGNE,TABLE_REQ_ListeDesLignesBLAPréparer[nLig].COL_IDDOSSIER_LIGNE) ET H.Trouve ALORS HBloqueNumEnr(DOSSIER_LIGNE) DOSSIER_LIGNE.LigneAPréparer = Faux DOSSIER_LIGNE.LignePréparé = Vrai HModifie(DOSSIER_LIGNE,hNumEnrEnCours,hIgnoreDoublon) // On ignore le doublon pour la clé de contrôle HDébloqueNumEnr(DOSSIER_LIGNE) FIN FIN
ChargeLigneAPréparer(Faux,TABLE_REQ_ListeDesBLAPréparer[TABLE_REQ_ListeDesBLAPréparer].COL_NumDocAG,Null)
ToastAffiche("Fin de préparation du BL",toastCourt,cvBas,chCentre,DonneCouleur()) FinDeControleDuBL() ChargeBLAPréparer() et finalement je pense que l'erreur est déjà dans FinDeControleDuBL SI PAS sNumDocEnCoursDePréparationAValider = Vide ALORS // Trace(CR+"Avant Lecture DOSSIER_DOCS") SI HLitRecherchePremier(DOSSIER_DOCS,NumDocAG,sNumDocEnCoursDePréparationAValider) ET H.Trouve ALORS // Trace(CR+"Après Lecture DOSSIER_DOCS") ggsNumDossierEnCoursDePréparationDansLeStock = DOSSIER_DOCS.NumDossierAG gsNumDocAGnCoursDePréparation = DOSSIER_DOCS.NumDocAG SINON // Trace(CR+"Erreur Lecture DOSSIER_DOCS") Erreur(ChaîneConstruit("Impossible de lire le dossier_docs : %1",sNumDocEnCoursDePréparationAValider)) FIN FIN
sValeurNumDossierEnCoursDePréparationDansLeStock = ÉvalueExpression("ggsNumDossierEnCoursDePréparationDansLeStock")
SI PAS ErreurDétectée ALORS // Un traitement SINON Erreur("Une erreur fatale est détectée !","Les lignes sont bien passés en statut préparé mais pas le BL complet","Veuillez-utiliser le bouton de réparation ci-dessus !!") FIN En en réalité moi je passe dans le cas SINON de cette procédure. Du coup l'erreur de départ doit être dans sValeurNumDossierEnCoursDePréparationDansLeStock = ÉvalueExpression("ggsNumDossierEnCoursDePréparationDansLeStock") Mais je ne manipule plus cette donnée du début à la fin. Et d'ailleur je pense qu'elle perd sa donnée. Que ca passe dans le SINON. Puis ca lance la procédure à la suite (ChargeBLAPréparer()) Et celle ci aussi à perdu ses données. je vais rajouter le dump dans l'exception de la 1ere procédure et essayer de "replanter"
bonjour je vois dans le dump : prepaTation !!! ce serait pas prepaRation (a verifier peut etre ?)
LIB_Prépatation_en_cours = ChaîneConstruit(sTexte,nPrepaAFaire,nPrepaEnCours,nPrepaUrgent) LIB_Prépatation_en_cours..Visible = Vrai AfficheDétailBLSélectionnéPourPréparation() |
| |
| |
| | | |
|
| | |
| |
| Posté le 16 juillet 2025 - 14:36 |
J'ai voulu faire un dump mémoire aussi mais j'ai l'erreur :
Vous avez appelé la fonction 'dbgSauveDumpMémoire'. Une erreur interne inattendue est survenue. Pour obtenir des informations supplémentaires, activez la génération d'un dump système (fonction dbgInfo).
Just après le dbgSauveDumpDébogage
dbgSauveDumpDébogage("c:\tmp" + ["\"] + "[%NomExe%]_[%Date%]_[%Heure%]") dbgSauveDumpMémoire("c:\tmp" + ["\"] + "[%NomExe%]_[%Date%]_[%Heure%]") Info("Dump système généré avec succès.") |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 16 juillet 2025 - 16:40 |
Salut Nico,
Sauf si "NomExe", "Date" et "Heure" sont des variables, ton code ne fonctionne pas, donc c'est normal que ça plante  de plus, le ["\"] n'a pas d'intérêt ici puisque c'est toi qui fixe le répertoire de manière directe (ce n'est pas une erreur, mais tu ne facilite pas la lecture de ton code) 
dbgSauveDumpDébogage("c:\tmp" + ["\"] + "[%NomExe%]_[%Date%]_[%Heure%]") dbgSauveDumpMémoire("c:\tmp" + ["\"] + "[%NomExe%]_[%Date%]_[%Heure%]") Info("Dump système généré avec succès.")
De plus j'ai remarqué dans ton code que tu as un caractère spécial après chaque mot OPERATEUR, si tu as fait un copier / coller, tu dois virer ce caractère.
OPERATEUR¦[ggsLettreAgenceChoisi
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
| Posté le 16 juillet 2025 - 17:09 |
Daryl a écrit :
Salut Nico, Sauf si "NomExe", "Date" et "Heure" sont des variables, ton code ne fonctionne pas, donc c'est normal que ça plante  de plus, le ["\"] n'a pas d'intérêt ici puisque c'est toi qui fixe le répertoire de manière directe (ce n'est pas une erreur, mais tu ne facilite pas la lecture de ton code)  dbgSauveDumpDébogage("c:\tmp" + ["\"] + "[%NomExe%]_[%Date%]_[%Heure%]") dbgSauveDumpMémoire("c:\tmp" + ["\"] + "[%NomExe%]_[%Date%]_[%Heure%]") Info("Dump système généré avec succès.") De plus j'ai remarqué dans ton code que tu as un caractère spécial après chaque mot OPERATEUR, si tu as fait un copier / coller, tu dois virer ce caractère. OPERATEUR¦[ggsLettreAgenceChoisi A+ Daryl -- http://www.concept4u2.com
Hello,
Alors le code fonctionne. Il m'a bien généré les dumps sur une autre machine. Il y a en effet un caractère; Ce sont des structures que j'ai créé avec ce caractères mais ca n'a jamais posé de souci de 6 ans d'utilisation de l'application.
C'est vraiement la perte des variables dans mon cas qui est plus qu'étrange. Et impossible de comprendre quel process fait ca. Les dumps (sauf si je ne sais pas les lire) ne m'indique quand meme pas grand chose. Mémoire non saturé, etc... |
| |
| |
| | | |
|
| | |
| |
| Posté le 17 juillet 2025 - 12:33 |
Salut,
J'ai un peu avancé mais sans succès. J'ai repris un peu tous le code. L'erreur est toujours aléatoire mais le dump me la place toujours sur la ligne
nOccurenceModif est un entier = gtabModifEnPrepa..Occurrence
Et dans le dump, ce tableau de structure n'es pas évaluable. La structure est déclaré comme mes autres structures dans une collection de procédure.
L'erreur est du coup quadrillé par un
QUAND EXCEPTIONEXCEPTION DANS
FAIRE
FIN
J'ai bien le code du FAIRE qui s'exécute. puis ma fenetre reprend le focus.
Ensuite si je reclick le bouton qui lance mes procédures tout s'exécute correctement à la différence que gtabModifEnPrepa..Occurrence est considéré comme à "0". Comme s'il avait été vidé. ou jamais rempli ....
Dans mes déclarations globales à la fenêtre j'ai bien
gtabModifEnPrepa est un tableau de STRUCTUREPréparationBL
Au tout tout début de mon traitement je fais un click sur un bouton qui fait un TableauSupprimeTout(gtabModifEnPrepa)
Puis des actions utilisateurs qui font des TableauAjouteLigne(gtabModifEnPrepa,gstPrepaEnCours)
Et à la fin, un bouton pour valider qui lui enclenche l'erreur sur nOccurenceModif est un entier = gtabModifEnPrepa..Occurrence
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 17 juillet 2025 - 14:34 |
Salut Nico,
Vu que ton problème n'est pas reproductible à chaque fois, pour moi la seule solution serait que tu crées un fichier log qui retrace toutes tes valeurs en indiquant à chaque l'endroit ou tu te trouve, cela te permettra de voir ou est le problème.
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
| Posté le 17 juillet 2025 - 15:48 |
Daryl a écrit :
Salut Nico, Vu que ton problème n'est pas reproductible à chaque fois, pour moi la seule solution serait que tu crées un fichier log qui retrace toutes tes valeurs en indiquant à chaque l'endroit ou tu te trouve, cela te permettra de voir ou est le problème. A+ Daryl -- http://www.concept4u2.com
Salut Daryl,
Je viens de modifier tout le code sans passer par des variables et structures. J'écris directement dans ma base HFSQL. Et maintenant à la validation j'ai de nouveau de temps en temps une erreur avec un dump généré sur ce code
SELON FI_Entrepot..Plan CAS planBLEntreeAPreparer#7 CMOD_Ruban.EstEnModeConsultation(Vrai) TABLE_REQ_ListeDesBLAPréparer..Grisé = Faux GR_PrépaCommande..Grisé = Vrai TABLE_REQ_ListeDesLignesBLAPréparer..Grisé = Vrai CMOD_Ruban.BTN_Modifier..Libellé = "Démarrer contrôle préparation" CAS planPointageInventaire#3 CMOD_Ruban.EstEnModeConsultation(Vrai) FIN
Mon plan est bien le 7. Il s'appelle bien planBLEntreeAPreparer#7 Ce traitement est appelé très souvent mais à un moment précis il me reconnait plus le plan. Il indique "Le champ planBLEntreeAPreparer#7 est inconnu"
Peut etre que quelqu'un a déjà eu ce genre de chose. C'est vraiement la 1ère fois pour moi
je clique OK, j'ai la confirmation qu'un dump est généré. Je reclique sur le bouton pour finir mon traitement et là ca marche. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 18 juillet 2025 - 11:32 |
Salut Nico,
Hormis le fait de tracer tes variables pour voir à quel moment tu perds l'infos, je ne peux plus rien faire ici pour t'aider. 
J'espère que tu vas trouver la solution.
Courage A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 128 messages |
|
| Posté le 19 juillet 2025 - 17:30 |
Bonjour,
Ça vaut ce que ça vaut... Ça marchait très bien et sur plus de 300 clients. J'avais une définition de structure que j'avais déplacé dans ma liste des variables de fenêtre (question d'organisation personnelle). Ensuite j'avais des erreurs où des variables déclarées étaient inconnues. Ça disparaissait quand je repositionnais mes variables comme avant, même pas une annulation de modif (ctrl Z). Solutionné avec un "Réparer le projet". Pourquoi ?, je n'en sais rien mais ça a fonctionné. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 21 juillet 2025 - 11:19 |
Salut Nico,
Réparé le projet, c'est toujours la 1ère chose que je fais quand j'ai un soucis. J'aurais dû faire cette proposition également 
Mais bon au final le plus important c'est que ce soit corrigé 
Bon Dev A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
| Posté le 22 juillet 2025 - 08:41 |
NadSoftware a écrit :
Bonjour,
Ça vaut ce que ça vaut... Ça marchait très bien et sur plus de 300 clients. J'avais une définition de structure que j'avais déplacé dans ma liste des variables de fenêtre (question d'organisation personnelle). Ensuite j'avais des erreurs où des variables déclarées étaient inconnues. Ça disparaissait quand je repositionnais mes variables comme avant, même pas une annulation de modif (ctrl Z). Solutionné avec un "Réparer le projet". Pourquoi ?, je n'en sais rien mais ça a fonctionné.
Salut,
C'est vrai que je ne l'ai pas fait non plus. Je vais essayer de ce pas ou vous tiens au courant.
Merci |
| |
| |
| | | |
|
| | |
| |
| Posté le 22 juillet 2025 - 15:42 |
Bon bah chez moi ca n'a rien changé  |
| |
| |
| | | |
|
| | |
| |
| Posté le 23 juillet 2025 - 16:09 |
Allez une petite nouvelle qui change pas grand chose.
Mais comme préconisait Daryl j'ai mis des "traceurs"
Donc j'ai plein d'appel
Le clic sur mon bouton valider
Trace("Valeur du plan doit être 7 = "+planBLEntreeAPreparer#7+TAB+TAB+"Clic sur Bouton Valider") Pas d'erreur. Le planBLEntreeAPreparer#7 est bien égal à 7
puis
Trace("Valeur du plan doit être 7 = "+planBLEntreeAPreparer#7+TAB+TAB+"Avant Ouverture Menu") Idem planBLEntreeAPreparer#7 est bien égal à 7
puis j'ouvre un Menu Contextuel et fais un choix dedans avec
Trace("Valeur du plan doit être 7 = "+planBLEntreeAPreparer#7+TAB+TAB+"Clic sur ClicBoutonValiderLaPrépa") Idem planBLEntreeAPreparer#7 est bien égal à 7
puis là je rentre dans une procédure
Procedure ClicBoutonValiderLaPrépa() Trace("Début procédure avant déclaration variable ClicBoutonValiderLaPrépa")
bBLCorrectementTermine est un booléen = Faux nNNombreDeLignesRestante est un entier = 0 sNumDossierAGPourMiseEnBO est une chaîne = ggsLettreAgenceChoisi+TABLE_REQ_ListeDesBLAPréparer[TABLE_REQ_ListeDesBLAPréparer].COL_NumClient Trace("La variable sNumDossierAGPourMiseEnBO = "+sNumDossierAGPourMiseEnBO+" dans ClicBoutonValiderLaPrépa")
Trace("Valeur du plan doit être 7 = "+planBLEntreeAPreparer#7+TAB+TAB+"Début procédure ClicBoutonValiderLaPrépa") etc... FIN
Et là, la valeur de sNumDossierAGPourMiseEnBO dans la trace est bien la bonne. Mais en dessous le planBLEntreeAPreparer#7 est inconnu.
Pour rappel c'est le nom du plan de ma fenêtre. Suivant les postes, jamais de souci ou souvant. J'arrive régulièrement a valider mais de temps en temps ca plante avec ce message.
Comme je le gère dans une exception, je revalide le tout à la souris et plus de problème.
Du coup avez-vous une idée entre un menu qui fait simplement
Trace("Valeur du plan doit être 7 = "+planBLEntreeAPreparer#7+TAB+TAB+"Clic sur ClicBoutonValiderLaPrépa") ClicBoutonValiderLaPrépa()
Et la procédure local à la fenêtre de ce qui peux faire disjoncter windev a en perdre ses propres plans?
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 299 messages |
|
| Posté le 23 juillet 2025 - 18:05 |
Bonjour Nico,
Rien de bien original à proposer mais comme le nommage des plans est une fonction récente, il y a peut-être des limitations ou des bugs qui n'ont pas encore été identifiés. Le plan n'est pas dans la fenêtre elle-même mais dans une fenêtre interne... Cela me semble l'élément clé. Essaye de préfixer ton plan de la FI.
Essaye aussi de changer le nom du plan en simplifiant, genre Plan7.
-- Bon dev, Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 330 messages |
|
| Posté le 23 juillet 2025 - 18:12 |
Salut Nico,
Ta procédure ClicBoutonValiderLaPrépa() elle est globale (dans une collection de procédure) ou elle est une procédure de la fenêtre ? Est-ce que il y a d'autres fenêtres qui pourraient être active et qui ne serait plus la fenêtre qui contient le nom de ton planBLEntreeAPreparer#7 ?
Pourrais-tu ajouter là ou planBLEntreeAPreparer#7 n'est plus connu (la ligne avant son utilisation) et contrôler que c'est bien la fenêtre qui contient le nom de ton plan.
Trace(ChaîneConstruit("Fenêtre active est : ", MaFenêtre..NomComplet))
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|