iImprimeEtat(ETAT_Facture, Client.CLCLEUNIK, Client.CLCLEUNIK, "Devis")
Et à l'ouverture de l'état :
PROCEDURE ETAT_Facture(_CleUnik_B1, _CleUnik_B2, _TypeEtat = "Facture")
C'est un état borné sur la clé unique transmise et une chaine pour
choisir le type de l'état. Seulement voila, sous le debugger on
s'apperçoit que les paramètres arrivent dans un ordre différent de
celui transmis et donc ça imprime n'importe quoi ou rien du tout ou
pire il me sort une erreur :
Erreur à la ligne 4 du traitement Clic sur IMP_FACTURE.
Vous avez appelé la fonction iImprimeEtat.
Les paramètres d'ouverture de l'état 'ETAT_Facture' sont incorrects :
on attendait entre 2 et 3 paramètres et on en a reçu 1.
Avez-vous déjà rencontrer ce type de problème et comment l'avez-vous
résolu.
Merci pour votre aide, Olivier
reintegrer l'etat et recompiler
si vous avez le groupware developpeur activé
autre possibilite effacer le rep .cpl et recompiler le projet
Bon dev
@+
"Olivier" <prog...@free.fr> a écrit dans le message de news:
4908cc25$0$14763$426a...@news.free.fr...
Il se trouve que SSX99 a formulé :
Bonsoir,
L'état reçoit les paramètres dans le même ordre que iImprimeEtat les
envoie. L'explication est bien dans le message d'erreur: l'état attend
2 ou 3 paramètres mais ne reçoit qu'un seul. Donc vérifier la valeur
des paramètres dans iImprimeEtat.
Salutations
Mat
Bonjour,
J'ai vérifié et revérifié. J'ai bien mes 3 paramètres qui partent dans
l'ordre et qui arrivent dans le désordre. C'est à dire que le 1 er
paramètre (_CleUnik_B1) qui est égale à la clé unique de la fiche, me
donne dans l'ouverture de l'état _CleUnik_B1 = "Devis".
C'est quand même hallucinant !
Slt, Olivier
attention, y'a un risque en windev
Les parametres sont passés par adresses (modifiable par l'appelant)
donc en gros, si iImprimeEtat change la position courante de ton fichier
client, la valeur Client.CLCLEUNIK change aussi
exemple:
hlitrecerchepremier(client,clclunik,"macle")
titi(client.clcleunik)
procedure titi(s est une chaine)
hlitpremier(client)
info(s)
il va afficher tout sauf ce que tu attend
Avec les fichiers, pense à utiliser la notation () qui permet de faire une
copie du parametre
exemple:
titi((client.clcleunik))
iImprimeEtat(ETAT_Facture, (Client.CLCLEUNIK), (Client.CLCLEUNIK), "Devis")
Cordialement,
Eric
--
Eric Laurent
nospam.lau...@wanadoo.fr
(enlever nospam.)
Bonsoir,
Les messages d'erreur de Windev sont généralement corrects et celui en
question dit que l'état ne reçoit que 1 paramètre, pas les 2 ou trois
qu'il attend. Vraisemblablement iImprimeEtat n'envoie pas de valeur
pour la clé unique (Null) ce qui fait que le seul paramètre qui arrive
est "Devis", en première position. Un DEBUG sur les paramètres
d'iImprimeEtat peut éclaircir cela.
Sinon, essayer avec cela
//Début
ID est entier = Client.CLCLEUNIK
// tester la valeur de l'ID
info(ID)
iImprimeEtat(ETAT_Facture, ID, ID, "Devis")
//Fin
Si info() montre une valeur et l'état plante toujours, je contacterais
le ST de PC Soft qui ont peut-être déjà vu ce phénomène.
Salutations
Mat
une autre idée: probablement l'état utilise un contexte Hyperfile
indépendant. Dans ce cas pour l'état aucun enregistrement est lu, donc
Null, ignoré par Windev.
Mat
Je pense résumer les commentaires :
Quelle drôle d'idée de passer en paramètre l'adresse mémoire d'un champ
d'un fichier qui risque d'être parcouru par l'état.
Il faut passer le paramètre par valeur et non par adresse, ou utiliser
des variables intermédiaires.
Quand le comportement est bizarre, je refait un nouvelle état où je
copie tout les éléments de l'ancien sans changé une ligne de code. Et
bien souvent le problème disparé. Il arrive que des états ou des fenêtre
de windev se mette à déconner sans que la recompilation ou la
suppression des CPL ne la rétablisse.
J.B.D.
Merci
Salut,
Selon moi, 2 possibilités (déjà évoquées) :
1) N° ID farfelus (pour x raisons). Faudrait essayer : mettre les 2 premiers
param dans des variables locales avant appel et tester si valeur >0
2) créer un nouvel état bidon juste pour voir si le prob vient de l'état lui
même
Espérant avoir aidé,
Victor
Bonjour et merci pour vos idées et vos pistes, mais plus je teste,
moins j'y comprend quelque chose, et pourtant j'utilise windev depuis
la version 4.1 et régulièrement, les procédures et fonctions.
J'ai testé l'idée de refaire un état avec en ouverture d'état la ligne
suivante :
[CODE]PROCEDURE ETAT_Etat1(a1, b1)[/CODE]
Au lancement du test directement à partir de l'état, j'ai cette erreur
:
Erreur :Erreur de syntaxe sur le mot v00000004ffffffff1 .
ETAT_Etat1, Ouverture, ligne 1, colonne 65
Plutôt surprenant, non ?
J'ai essayé aussi de passer par une variable intermédiare.
Le code de lancement de l'état :
[CODE]
sChoixEtat est chaîne = "Facture"
nCleUnik est entier = Client.CLCLEUNIK
Info(nCleUnik)
iImprimeEtat(ETAT_Facture, nCleUnik, nCleUnik)
[/CODE]
Code dans l'ouverture de l'état :
[CODE]
PROCEDURE ETAT_Facture(gn_CleUnik_B1 est entier = 0, gn_CleUnik_B2 est
entier = 0)
[/CODE]
Cette écriture fonctionne, mais la suivante ne fonctionne pas. J'ai
uniquement rajouté en dernier paramètre une chaine :
Le code de lancement de l'état :
[CODE]
sChoixEtat est chaîne = "Facture"
nCleUnik est entier = Client.CLCLEUNIK
Info(nCleUnik)
iImprimeEtat(ETAT_Facture, nCleUnik, nCleUnik, sChoixEtat)
[/CODE]
Code dans l'ouverture de l'état :
[CODE]
PROCEDURE ETAT_Facture(gn_CleUnik_B1 est entier = 0, gn_CleUnik_B2 est
entier = 0, gs_TypeEtat = "Facture")
[/CODE]
Au DEBUG, le 1er paramètre = 0, le 2ème à la valeur de ma CléUnik et le
3ème a aussi cette valeur mais en chaine.
Y a de quoi se taper la tête contre les murs !
Ou alors ça fait 3 jours que je ne suis pas réveillé...
Bonsoir,
d'accord mais à mon avis le problème commence chez PC Soft pour avoir
choisi de passer, par défaut, les paramètres par adresse. Les produits
que j'ai utilisé dans le passée (Borland, Microsoft) faisait le
contraire. Soucieux de la cohérence des données (appris avec des outils
Borland), et sachant que le code parfait est une théorie, je préfère
des solutions par défaut qui ne risquent pas de modifier les données.
Mais il semble que c'est une idée démodée car avec VB6 le défaut est
aussi devenu byRef...
Salutations
Mat
Je crois que j'ai trouvé, mais c'est vraiment tortiller du c.. pour
c...r droit.
Sur un état borné, il faut envoyer les 2 bornes + éventuellement, les
paramètres supplémentaires. Dans l'ouverture de l'état, il ne faut
récupérer que les paramètres supplémentaires.
ex :
iImprimeEtat(ETAT_Facture, Client.CLCLEUNIK, Client.CLCLEUNIK, "Devis")
et
PROCEDURE ETAT_Facture(_TypeEtat = "Facture")
Et la, ça fonctionne. Ceci dit, ça n'est pas une solution évidente,
même en consultant les aides.
Merci à tous, Olivier.