[résolu]Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bonjour

j'ai un état avec rupture avec saut de page après rupture (et recalcul pagination en conséquence via pré-impression). Le haut de page contien donc des information dépendant de la rupture.

Si dans la majorité des cas tout va bien (rupture dans la zone corps classique), je rencontre un effet de bord calamiteux : lorsque mon bas de rupture ne peut être imprimé sur la même page que le corps précédent...

Dans ce cas, le haut de page tenant compte de l'enregistrement en cours, les informations imprimées ne sont pas en phase avec la ligne de cumul (bas de rutpture) qui suit (et je ne parle pas de la pagination).


En effet, si le corps termine en bas de page sans que le bas de rupture n'ai pu s'imprimer... le prochain haut de page est imprimé avec les information de l'enregistrement en cours : en dehors de la rupture. Ceci explique la désychronisation.

Nous avons paramétré la rupture comme insécable mais cela ne résouds pas le cas...

Comment procéder pour ce, s'il y a un saut de page après le dernier corps, le haut de page suivant tienne compte du dernier enregistrement de la rupture ? (ouf, pas clair....)

Contribution le : 25/07/2005 17:57
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Stagiaire WDF
Inscrit:
13/04/2004 18:59
Post(s): 4
Bonjour,

J'ai parfois des problèmes d'impression de fin de rupture : il n'y a pas assez de place dans la page pour l'imprimer et malheureusement j'imprime des info de la rutpture dans le haut de page. Pour contrer ce problème je déclare 2 boolean (global) :

-le premier m'indique si je suis dans la rupture.
bDansRupture = True dans les "avant impression" des haut de rupture
bDansRupture = False dans les "avant impression" des bas de rupture

-le 2ième va me permettre de savoir ou va s'imprimer le bas de rupture et surtout s'il y a eu un saut de page automatique...

bImpBasRuptureEnCours = true dans "avant impression" du bas de rupture
bImpBasRuptureEnCours = false dans "après impression" du bas de rupture

Dans le haut de page, je teste la valeur de ces 2 boolean et j'en déduis les valeurs que je dois afficher dans ce bloc.

Attention : dans certains cas ces booleans ont besoins d'être réinitialisée à False après impression du HP.

J'espère que ces quelques lignes (claires ?) pourront te donner des indices sur la marche à suivre.

Contribution le : 25/07/2005 23:15
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Merci... je teste dès que possible

Contribution le : 25/07/2005 23:30
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Selon mes tests en cours (encore des soucis avec la méthode citée), Une solution semble tenir dans un rapport entre les hauteur du corps/bas de rutpure et bas de page.

Concètement le bas de rupture et le corps doivent avoir une hauteur inférieur au bas de page (visible ou pas). Mais je poursuit mes évaluations.


Contribution le : 26/07/2005 09:19
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
17/05/2004 14:21
Post(s): 382

J'utilise la fonction iHauteurRestantePage() que je compare avec la hauteur de mes blocs avant impressions.

A voir si celà peut vous aider ?


Contribution le : 26/07/2005 15:45
_________________
Mbsl
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
rien à faire

En fait je dois, dans le haut de page afficher des information relatives à la rupture en cours.
Simplememtent il y a toujours un cas ou le bas de rupture est déporté seul dans une autre page... et là, je ne trouve le moyen d'afficher les infos relative au dernier imprimer (et dans ce cas uniquement sinon il me faut le dernier lu en début ou dans la rupture).

je ne trouve pas le moyen de différencier ce cas :
- le dernier numéro lu apprtient à la rutpure suivante
- le dernier affiché et biens dans la rupture
- il me trouve en dehors de la rupture alors que je ne suis pas encore passé en bas de rupture...

à force de tourner en rond au tour de ce code, plus moyen de trouver une idée... alors que ce doit pas être si sorcier

Peut-on savoir dans un code de haut de page, combien de lignes de corps va-t-on imprimer ? dans mon cas si cela était 0 alors il n'y aurait que le bas de rupture...

A cet instant j'ai toujours :
si pas dans rupture alors infoRupt(EnrLu) > infoRupt(dernier)
Cela ne me permet pas d'identifier ce fichu bloc repporté.

Contribution le : 26/07/2005 17:57
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Stagiaire WDF
Inscrit:
13/04/2004 18:59
Post(s): 4
Peut-être qu'une explication plus détaillée (?!) me permettrait d'apporter de l'eau à ton moulin ?
un petit exemple ...

Contribution le : 26/07/2005 20:47
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bon c'est effectivement confus.

Desctiption de l'état :
Etat fiche sur fichier de donnée avec bornes min et max + tri (programmé) et rupture (programmée itou).
L'état se présente comme un tableau, on a choisi le mode fiche pour des raisons pratiques.

S'agissant de grouper l'appercu d'un imprimé à destination de plusieurs destinatiares, nous avons eu l'idée d'utiliser une rupture par destinataire. Il a suffit alors d'ajouter un saut de page après la rupture pour découper clairement l'état. Une pré-immpression permet d'effectuer les calculs de pagination par destinataires.

Blocs de l'état :
DD, Début document (invisible)
HP, Haut de page : ID doc,pagination,haut tableau et destinataire.
HR, haut de rupture (invisible)
CP, Corps : infos fichier
BR, Bas de rupture : bas de tableau (cumul destinataire)
BP, Bas de page (invisible)
FD, Fin de document (invisible)

On résume donc l'état aux blocs imprimés : HP,CP et BR
Haut de rupture : la rupture est insécable
Bas de rupture : Saut de page après le bloc ( pas de completion)

Coté dimensions :
Les hauteurs nominales (les blocs sont extensibles en hauteurs dans certains cas) de CP et BR sont égales.
Les hauteurs de BP et FD sont aussi égales mais légèrement suppérieures à CP et BR.

Ainsi la présentaion générales est satisfaisante... excepté dans un cas.

En effet, dans le cas ou la liste des items pour un destinataire termine par une page complete (nombre lignes de la page = nombre de ligne maximum de la page), un saut de page précède l'impression de BR.

Dans ce cas, les informations de HP ne sont pas celles en concordance avec BR mais celles de l'enregistrement suivant à savoir le destinataire suivant. Les information du destinataire sont lu dans le code avant impression de HP.

Globalement on parvient à afficher toujours le bon destinataire excepté dans ce cas. Pire à cet instant, rien dans le code de HP ne nous permet d'identifier une différence avec un haut de page correspondant à un début de rupture normal.
-L'enregistrement lu et aussi égal au dernier imprimé + 1
- on est en 'hors rutpure' (silc) *
- le dernier bloc imprimé est BR (si on exclue BP) *

* alors que, au moment de 'avant impression' de HP, BR n'a pas été imprimé !

Bref j'en suis à sécher avec cela. La confidentialité m'oblige à une explication texte...

Contribution le : 27/07/2005 10:22
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Complément :
Sur la page avec problème j'ai donc :

Un HP avec un le destinataire suivant et le BR repporté.

Attention un phénumère bizarre quand même : il semblerait que WDEtat croie avoir imprimé le BR...

En effet, dans le HP, je templis un libellé (pour trace) avec :
l'ID du dernier destinataire lu ("Après lecture...")
l'ID du dernier imprimé (CP)
l'ID dans l'enregistrement en cours (toujours = au dernier imprimé !!!)
le nom du dernier bloc imprimé (bas de page exclu)

et bien dans cette page on as (alors qu'en théorie le BP n'as pas été imprimé) : "N+1;N;N;BAS RUPTURE"

Et sur page suivante (début rupture destinataire suivant) : "N+1;N;N;HAUT PAGE"
Alors qu'un début de rupture classique contient "N+1;N;N;BAS RUPTURE"


Dans le début de page suivant, le dernier bloc imprimé est Haut de page... alors que ce devrait être BR tout comme cette page devrait contenir "N;N;N;CORPS"

Mystère et boule de gomme



Contribution le : 27/07/2005 10:53
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822

Constat : voici la liste des blocs que wdetat semble croire imprimer :

HP dest1 page 1
CP
HP dest1 Page 2
CP
HP dest1 Page 3
CP
BR
HP dest2 page 1
CP
HP dest2 Page 2
CP
HP dest2 Page 3
CP
BR
HP dest3 page 1
CP
BR
HP dest3 (affiché4) BR repporté
HP dest4 page 1
...

Vu que je fais une pré-impression pour calculer la pagination par rupture, je vais en profiter pour alimenter un tableau des blocs imprimés et affecter le bon destinataire.
Du coup le destinataire sera lu dans le tableau et non plus dans le fichier (idem pour la pagination).

A suivre...

Contribution le : 27/07/2005 12:00
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Stagiaire WDF
Inscrit:
13/04/2004 18:59
Post(s): 4
L'impression d'un bloc se fait réellement entre le avant et le après impression de ce bloc. (logique )

Lors de l'impression du bloc haut, soit tu es toujours dans la rupture soit tu es en dehors.

"Dans la rupture", ca ne pose vraissemblablement pas de Pb.
La fin de rupture est active dès que l'on rentre dans le Avant Impression BR.

Soit elle s'imprime sur la page puis un saut de page est généré (dans ton cas je ne vois pas à quoi sert la rupture insécable)
Soit la place restante sur la page est insuffisante et donc il passe à la page suivante mais au saut de page il lit la donnée suivante avant d'imprimer ! (L'état est arrivé au bas de rupture donc lit automatiquement la donnée suivante)

Si tu te situes entre avant impression et après impression du BR, il ne faut pas mettre à jour les variables qui vont tre permettre de remplir ton haut de page. (Et par contre les mettre à jour après impression).

J'essaye d'être clair ... .
En tout cas, c'est un raisonnement maison qui nous a permis de nous sortir de beaucoup d'impasses.

A suivre.

Contribution le : 27/07/2005 15:22
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Oui Oui !
Cela ressemble à une trés bonne idée que de travailler sur le "entre Avant et Après impression de BR". Tests à suivre.

Effectivement la rupture inseccable n'était d'aucune utilité (supprimée entre temps et effectivement sans conséquence).

Je travaillais sur une autre piste plus lourde mais efficace à double titre : dans le corps garder L'ID du dernier destinataire imprimé et en bas de page envoyer des infos (n° rupture, n° page, IdDernier Dertinataire, Liste des vblocs imprimés).

Comme je suis obligé de faire une pré impression pour la pagination des ruptures (chacune commence à 1), j'en profitait alors pour récupérer dans mon tableau l'ID destinataire correspondant. NB : pour les pages avec repport de BR, j'ai bien le bon ID.

Entre les deux impressions (première vers un fichier, seconde vers l'apercu), j'ai juste à faite un petit parcours de mon tableau pour compter le nombre de pages de la rupture.

Néanmoins je vais évaluer tes dires car c'est une piste trés utile effectivement.



Contribution le : 27/07/2005 16:11
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Bas de rupture ?
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bon, le point final de l'épopée...

Mes remerciements à @lex et comme toujours à tous les participants.
Si j'ai bien noté le point sur lequel tu m'ad apporté la lumière, les délais de production m'ont obligé à ne pas aller au bout de mes investigation dans cette voie. En tout cas, je ne devais plus être loin cas la rupture esseulée affichait bien les bonnes informations. Simplement je ne parvenais plus être en phase... sur la première page d'une rupture (en gros "comment raffraîchir").

La solution finalement utilisée utilise la pré-impession.
Si elle double l'exécution de l'état, la première impression (dans un fichier) alimente un tableau de structure par page [N° rupure, N° page document, n° et nb page rupture (calculés) et dernier code imprimé (pour synchro haut de page)].
Avant de lancer la seconde impression (apercu), on lance le calcul de pagination :
Parcours du tableau selon deux pointeurs et affectation des n° et nb des pages dans les ruptures.
Et on bascule le mode d'utilisation du tableau (lecture).
La seconde impression va alors chercher les informations dans le tableau en fonction de iNumPage...

Peut être pas la solution la plus véloce (encore que...) mais en tout cas c'est complètement satisfaisant.

Le tout est dans une classe instanciée dans on objet glogal de la fenêtre appelant l'état (pour assurer la portée).

Contribution le : 28/07/2005 10:31
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2