Bonjour à tous,
Après avoir cherché je me décide à poster et m'en remets à votre sagacité.
J'avance petit à petit sur Windev, et je suis aussi pataud qu'un nouveau-né. Donc, si mes questions vous paraissent naïves, ne m'en tenez pas rigueur.
(Petit aparté : j'arrive à prendre en mains cet EDI sans être informaticien de formation. Je développe pour mon entreprise. J'essaie, autant que faire se peut d'être rigoureux. Je suis arrivé sans trop de difficultés à utiliser des outils comme l'indirection (notion qui me faisait assez peur de prime abord), je requête en sql natif, etc. Je suis en tout cas agréablement surpris par l'EDI... Par contre, la partie Etats ne laisse de me perturber tant je n'arrive pas à m'approprier la logique de fonctionnement de ceux-ci !)
En gros : j'aimerais arriver à un résultat tel que celui-ci : http://doc.pcsoft.fr/fr-FR/?9000128&...iner_des_etats
Le besoin réside dans un mailing qui est composé d'un courrier, recto-verso, par client.
Le recto et le verso sont respectivement en portrait et paysage, et comporte des informations de nature très différente (vraiment l'exemple de PCSoft).
L'idée, bien entendu, est d'avoir un seul document qui est balancé sur l'imprimante.
J'ai donc créé deux états distincts, chacun alimenté par des requêtes paramétrées distinctes. Jusque-là, pas de soucis. Chaque état s'imprime comme il faut.
Là où la doc de PcSoft est quelque peu trompeuse, ou en tout cas simpliste (et détrompez-moi le cas échéant), c'est que tant l'état composite que l'état enchaîné génère tout d'abord tous les états 1, ensuite tous les états 2.
Autrement dit, contrairement à l'exemple de PcSoft, on a à la queue-leu-leu tous les recto et ensuite tous les versos. Pour la sortie imprimante, ça ne le fait pas !
Première question :
Est-ce que j'ai mal cherché ? Est-il possible d'organiser la manière dont les états s'enchaînent, étant entendu que cela serait une fonctionnalité et/ou une option qui existe dans l'EDI ?
Bref, une case à cocher ou une ligne de code assez simple ?
Si cette fonction existe, inutile d'aller plus loin dans le développement qui suit.
Deuxième question :
En considérant que le comportement des enchaînements est bien celui que j'ai découvert, il faut donc réaliser, à travers une boucle, l'enchainement des recto et des verso.
Pour ce faire, j'abandonne les états composites et j'utilise IEnchainement : http://doc.pcsoft.fr/fr-FR/?1000020059
L'enchainement est de ce type (code simplifié) :
Et là, je cale ! Car je passe le paramètre IDClient à mon état, mais je ne sais pas quoi en faire !?!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SI HExécuteRequête(REQ_FACTURES,hRequêteDéfaut) = Vrai ALORS HLitPremier(REQ_FACTURES) TANTQUE PAS HEnDehors(REQ_FACTURES) iEnchaînementAjoute(EtatFacture,REQ_FACTURES.IDClient) iEnchaînementAjoute(EtatDetailFacture,REQ_FACTURES.IDClient) HLitSuivant(REQ_FACTURES) FIN
J'ai bien cherché de la doc sur le bloc Filtre d'un état, c'est très peu documenté, et je ne trouve aucun exemple un peu parlant (doc PcSoft : http://doc.pcsoft.fr/fr-FR/?1011037&...n_etat#NOTE4_1 )
J'ai quelques intutions de la manière d'évaluer ce paramètre, notamment en le comparant à l'IDClient du bloc en cours de traitement.
D'où
Troisième question :
L'IDClient n'est pas imprimé sur les documents (j'ai utilisé le concept de client et de facture pour rendre le cas accessible). Je n'ai aucune utilité de cette information pour l'impression.
Par contre, j'ai bien une rupture sur l'IDClient. Cette donnée fait partie de la source (requête).
Est-il possible d'avoir accès à cette information lors du processus d'impression sans avoir un champ de l'état qui pointe expressément vers cette donnée ?
Pour l'instant, je n'ai trouvé qu'une alternative :
Créer un champ IDClient... et le rendre invisible.
Dans le traitement filtre, comparer la valeur de ce champ avec la valeur renvoyée par la requête.
Je trouve cette manière de fonctionner avec un champ invisible assez peu élégante, et ça me laisse sur ma faim.
Avez-vous d'autres pistes, de manière générale ?
Dernière précision : il est hors de question de relancer la requête en lui passant en paramètre le IdClient. En termes de traitement et de ressources, cette solution n'est pas envisageable.
D'avance merci.
X.
Partager