PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → Etats & Requêtes → Comment imprimer une série d'états ?
Comment imprimer une série d'états ?
Débuté par Pinimat, 26 aoû. 2006 18:11 - 8 réponses
Posté le 26 août 2006 - 18:11
Bonjour,
J'ai créé une requête puis un état qui me permettent d'imprimer une seule facture. Je souhaite maintenant imprimer en une seule fois une série de factures (5, 8, 11, etc.). Merci d'avance à la personne qui pourrait m'aider.
Posté le 28 août 2006 - 11:45
tu souhaite imprimer directement ou voir tout ces états avec un apercu?
Posté le 28 août 2006 - 20:27
Les deux. En aperçu puis impression.

Merci

Pinimat
Posté le 29 août 2006 - 11:08
OK
Dans ton bouton d'impression de ta fenetre, tu mets le code suivant:

iapercu(i100) (ou ipage comme tu veut!)
iimprimeetat(etatvierge)

Ensuite,
Il faut créer un état vierge! ici nommé "etatvierge"
Dans description de l'état, onglet données sélectionnez : "les données imprimées viennent <pas de source de données>"

Mettre le format (marge et tt ca) au meme format que pour tes états à imprimer!
Ensuite lancer le code dans la partie "Avant impression de corps" de l'état vierge"!

imprimeetat(etat1)
iterminepage()
iimprimeetat(etat2)
iterminepage()

(ici Ne pas mettre apercu surtout sinon ca sert a rien)

Si un bloc (haut de page ou bas de page) ne s'imprime pas, je n'ai pas trouvé la solution, j'ai refait la mise en page en mettant ce qui se trouvait dans ces blocs dans un autre bloc.

++ Tjs la si ya probleme!!
Posté le 30 août 2006 - 13:27
Merci Alex pour ta contribution. Mais je crois que je ne me suis pas fais bien comprendre. Il s'agit ici d'un seul état qui éditerait plusieurs factures à la fois (Facture No1, Facture No8, ..., Facture NoX). Pour l'instant l'édition individuelle (c'est à dire facture par facture) marche.
L'idée est donc d'éditer une série de factures (dont le nombre varierait en fonction du besoin et dont les No ne se suivent pas forcément) en une seule fois.
Imagine un utilisateur qui doit éditer 200 factures par exemple, s'il doit le faire facture par facture cela lui demandera beaucoup de temps.
Si tu as une autre solution, cela me ferait plaisir.

A bientôt peut-être !

Pinimat
Posté le 30 août 2006 - 16:14
Eh bien je pense c un bout de la solution,
Moi, je doit imprimer X relances à la fois, la personne sélectionne toutes celles qu'elles désirent dans un tableau ou j'affiche mes factures à relancer, et la je lance tout en meme temps grâce à la solution que je t'ai donné!

Ton utilisateur doit sélectionnez les factures désirées j'imagine, pour les imprimer?
Posté le 30 août 2006 - 18:41
bonjour,

essaye de regarder dans l'aide en ligne les Etats et les points de rupture, cela devrait faire ton bonheur.

bon dev
Posté le 02 février 2009 - 01:46
Le plus simple est de passer en paramètre à ta requête, une liste de facture.
il s'agit de créer un paramètre de type liste, tu peux séparer tes factures par des TAB.
Posté le 25 mars 2009 - 07:56
Salut,
Visualiser et imprimer une série de pièces comerciales n'est pas un problème ! la difficultée réside dans le paramétrage de l'état lui même, début et fin...
La solution que j'ai trouvée et qui fonctionne est assez codée... je le concède mais elle fonctionne depuis des années, en reseau et plusieurs dizaines de pièces sont lancées sans aucun délai d'attente ! la fenêtre "patientez" visible dans le code ne s'affichant quasiment jamais ou brièvement.
> l'état doit comporter un corps bas de page et un corps bas de document, le bas de page est invisible, je récupère le N0 de pièce commerciale au début de l'état, il est mis dans un champ "caché" en entête puis il est lu "avant impression bas de page" si N0 haut et N0 bas sont = alors même pièce (multipages...) on continu, si NO haut et N0 bas sont <> alors on affiche le bas de page avec les totaux...

1) mes factures sont dans une table mémoire, j'ai un champ de table "print" avec une valeur "" ou "o" cette table est basée sur une vue (reseau donc light !)
2) je marque/démarque les lignes factures à cocher
3) j'envoie l'impression :
CODE IMPRESSION :
PROCEDURE BtImprimer()
//droits d'utilisateur
HLitPremier(GestionMaster)
SI GestionMaster.PRINTDEVIS = Faux ALORS
TitreSuivant("Gestion des droits d'accès")
Info("Vous n'avez pas accès à cette fonction")
RETOUR
FIN
//destruction des vues par précaution
SI HFichierExiste(VuePrintDev) ALORS
HDétruitVue(VuePrintDev)
FIN
SI HFichierExiste(VueL) ALORS
HDétruitVue(VueL)
FIN
//fenêtre d'attente
OuvreFille(Fpatientez)
Fpatientez.Patientez = "Tri des lignes devis en cours"+RC+"veuillez patienter"
//Print1N est une variable globale
//si faux = impression multiples sinon 1 pièce
//création requête sur la vue de la table selon critères...
ReqE est une Source de Données
SI Print1N = Faux ALORS
HExécuteRequêteSQL(ReqE,"SELECT NODEVIS FROM VueEntêteDev WHERE VueEntêteDev.PRINT = 'O'")
FIN
SI Print1N = Vrai ALORS
HExécuteRequêteSQL(ReqE,"SELECT NODEVIS FROM VueEntêteDev WHERE VueEntêteDev.NODEVIS ="+"'"+FtableDevis.NODEVIS+"'")
FIN
//les lignes, d'abord une requête avec les champs vides
//puis remplissage avec l'entête "ReqE"
HCréeVue(VueL, LIGNEDEVIS, "*", "NODEVIS,NoLIGNE", "NODEVIS = 'EFFACE'", hVueInterruptible)
HLitPremier(ReqE)
TANTQUE PAS HEnDehors(ReqE)
HLitRecherche(LIGNEDEVIS,NODEVIS,ReqE.NODEVIS,hIdentique)
TANTQUE HTrouve()
HCopieEnreg(VueL,LIGNEDEVIS)
HAjoute(VueL)
SI HErreurDoublon() ALORS
hIgnoreDoublon
FIN
HLitSuivant(LIGNEDEVIS)
FIN
HLitSuivant(ReqE)
FIN
// Création de la vue qui rassemble les données
HCréeVue(VuePrintDev, VueL, "*", "NODEVIS,NoLIGNE", "", hVueInterruptible)
//selon les paramètres clients le nb de pièces à imprimer
HLitRecherche(CLIENTS,NOCLIENT,TableEntedev.NOCLIENT,hIdentique)
SI HTrouve(CLIENTS) ALORS
Res est un entier = clients.NBDEVIS
SI Res <=0 ALORS
Res=1
FIN
FIN
Ferme(Fpatientez)
//on lance l'impression sur l'état
Varprintvue = "VueL"//renseigne l'état sur l'intitulé de la vue
iParamètre("COPIES="+Res)
iAperçu(NiveaudeZoom,"Devis")//NiveaudeZoom = variable du programme sur base de registre
iImprimeEtat(Devis,VuePrintDev)//le fichier lignes, l'entête n'est pas liée.
//------------------------------------------
//destruction des vues pour libérer la mémoire.
SI HFichierExiste(VuePrintDev) ALORS
HDétruitVue(VuePrintDev)
FIN
SI HFichierExiste(VueL) ALORS
HDétruitVue(VueL)
FIN
SI HFichierExiste(Reqtvadistinct) ALORS
HDétruitVue(Reqtvadistinct)
FIN