Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[WD11] iImprimeEtat et paramètres

306 views
Skip to first unread message

Olivier

unread,
Oct 29, 2008, 4:48:51 PM10/29/08
to
Bonjour,
J'ai un état générique qui me sert à imprimer aussi bien une facture
qu'un devis ou un rapport d'intervention. Je lance donc l'impression
par l'appel à une procédure :

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


SSX99

unread,
Oct 29, 2008, 5:19:30 PM10/29/08
to
Bonjour,

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...

Olivier

unread,
Oct 29, 2008, 6:29:23 PM10/29/08
to
J'avais essayé cette solution que je connaissais de Wd5, mais ça n'a
rien changé.
Olivier

Il se trouve que SSX99 a formulé :

mat

unread,
Oct 29, 2008, 6:38:28 PM10/29/08
to
Olivier wrote on 29.10.2008 :
...

> iImprimeEtat(ETAT_Facture, Client.CLCLEUNIK, Client.CLCLEUNIK, "Devis")
>
> Et à l'ouverture de l'état :
>
> PROCEDURE ETAT_Facture(_CleUnik_B1, _CleUnik_B2, _TypeEtat = "Facture")
...

> 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.

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


Olivier

unread,
Oct 30, 2008, 5:25:18 AM10/30/08
to

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


patrice

unread,
Oct 30, 2008, 7:01:02 AM10/30/08
to

"Olivier" <prog...@free.fr> a écrit dans le message de
news:4908cc25$0$14763$426a...@news.free.fr...
> Bonjour,
> J'ai un état générique qui me sert à imprimer aussi bien une facture
> qu'un devis ou un rapport d'intervention. Je lance donc l'impression
> par l'appel à une procédure :
>
> iImprimeEtat(ETAT_Facture, Client.CLCLEUNIK, Client.CLCLEUNIK, "Devis")
>

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")

Eric Laurent

unread,
Oct 30, 2008, 7:21:01 AM10/30/08
to
Une solution que j'utilisais en Windev 5.5 consitait à utiliser des
variables globales:
Au lieu de passer des paramètres, il suffit de valider les variables
globales que l'on utilisera à l'ouverture de l'état.
C'est un cache-misère mais ça marche.

Cordialement,

Eric

--
Eric Laurent
nospam.lau...@wanadoo.fr
(enlever nospam.)


mat

unread,
Oct 30, 2008, 6:31:47 PM10/30/08
to

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


mat

unread,
Oct 30, 2008, 6:44:49 PM10/30/08
to
mat wrote on 30.10.2008 :
> 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


Moua

unread,
Oct 31, 2008, 3:24:04 AM10/31/08
to
Le 29/10/2008, Olivier a supposé :
Bonjour,

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.


Daireaux Jean-Baptiste

unread,
Oct 31, 2008, 4:58:13 AM10/31/08
to
Olivier a écrit :

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.

Olivier

unread,
Oct 31, 2008, 1:27:08 PM10/31/08
to
Moua a formulé la demande :
Il s'agit en l'occurrence de la valeur de la clé unique de
l'enregistrement...

>
> Il faut passer le paramètre par valeur et non par adresse, ou utiliser des
> variables intermédiaires.
Il n'y a aucun parcours du fichier, juste l'impression d'un seul
enregistrement...

Merci


VPSoft

unread,
Oct 31, 2008, 1:37:05 PM10/31/08
to

"Olivier" <prog...@free.fr> a écrit dans le message de news:
490b3fdb$0$30699$426a...@news.free.fr...

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


Olivier

unread,
Nov 1, 2008, 9:13:40 AM11/1/08
to
Daireaux Jean-Baptiste avait prétendu :

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é...


mat

unread,
Nov 1, 2008, 1:29:20 PM11/1/08
to

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


Olivier

unread,
Nov 1, 2008, 1:37:29 PM11/1/08
to
Olivier a pensé très fort :

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.


0 new messages