|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Bonjour,
Après avoir bien galéré pour imprimer des fiches objets je dois maintenant imprimer la totalité de ces fiches ; c'est là que j'ai un souci et sollicite toute idée bienvenue Chaque fiche ne tient pas sur une page mais en moyenne sur 3. Pour en imprimer une seule aucun pb : le DataSet Delphi étant déjà positionné sur le bon enregistrement, toutes les données des champs du DataView sont les bonnes et toutes mes Bands Rave sont "autonomes" (pas besoin de "ControllerBand"). Pour imprimer toutes les fiches : le rapport débute par une DataBand (affichant le nom de l'objet en question), dont dans l'idée toutes les Band/DataBand suivantes sont dépendantes (cela se traduit respectivement dans le BandStyle Editor par "Row Header" pour la 1ère et "Detail" pour les autres, plus "ControllerBand" qui est définie). Jusque là tout va bien, le problème vient de la longueur du contenu : dès que le texte dépasse une page l'impression s'emballe et ne s'arrête jamais ! Au début j'ai placé toutes les Bands/DataBands sur une page (non sans difficulté mais en jouant avec "DesignerHide" et "Always show Band headers" pour les réduire lors de la conception ça rentre). En mode preview sous Rave ça marche, mais en exécution sous Delphi : boucle infinie. Si je supprime des Bands : ça marche dès lors que rien ne dépasse de la 1ère page !! J'ai donc déplacé qques Bands sur les pages suivantes mais là surprise : impossible de leur assigner comme maitre la DataBand de la 1ère page ! Qu'à cela ne tienne je la duplique en haut de 2nde page : à ce moment là OK mais l'ordre d'impression est totalement (et logiquement) modifié, je me retrouve avec la page 1 (p1) de l'objet 1 (o1) suivie de p1o2, p1o3.. p1oN et ensuite p2o1, p2o2 etc. Ce qui ne me satisfait guère. J'aimerais donc de préférence faire tenir toutes mes DataBands sur une page (en mode édition) et supprimer ce bug d'impression infinie ! Des idées svp ? |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Je précise que j'ai testé les différents modes GotoMode, GotoPage... sans succès.
J'ai aussi trouvé qques liens sur internet, par exemple : http://efreedom.com/Question/1-68929...g-Nevrona-Rave mais tous proposent la même solution de bricolage... que j'aurais du mal à appliquer car "rows within the page" n'est absolument pas quantifiable dans mon cas |
|
|
00
|
|
|
#3 |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 3 611 ![]() |
je nage . Tu peux faire un shéma de ton état voulu avec si possible le shema des tables qui s'y rattachent
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Bonjour,
Oui je comprends que cela paraisse fouillis par écrit Voici déjà une capture de la 1ère page : ![]() En haut la DataBand maitre suivie de toutes les Bands/DataBands détail, sachant qu'il en manque les 2/3 car dès que le contenu des données de ces bandes dépasse la hauteur d'une page --> impression infinie. Avec ces seules bandes là tout tient sur cette 1ère page ; le reste des données est donc placé en 2nde page, identique à la page 1 mais avec sa propre DataBand maitre (exactement la même que celle-ci aussi). Cela fonctionne mais le rapport imprime N fois la page 1 et ensuite N fois la page 2. Et moi je voudrais p1p2 de l'objet 1, puis p1p2 de l'objet 2 etc... Suis-je plus clair ? |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Quant au schéma des tables il est simple : toutes les données proviennent de la même table !! (description de l'objet)
Excepté pour les DataBands, que je gère justement avec des RvCustomConnection et du OnGetRow pour récupérér les données de requêtes annexes. |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
En repartant de zéro :
1. je place ma DataBand en haut 2. je rajoute les Bandes une par une Dès que le contenu dépasse la heuteur de la page : > sous l'IDE Rave en preview pas de souci > sous Delphi = impression infinie Et je n'arrive pas à identifier la cause de tout ça. |
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Bon j'ai réussi à faire fonctionner une fois (!!!) comme je voulais en supprimant la seule DataBand détail présente sur la capture.
Maintenant même en réduisant au plus simple (cad la seule DataBand du haut) impossible de faire fonctionner sous Delphi |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
C'est vraiment un truc de fou : si j'implémente sous Delphi l'évènement OnNext de mon RvDataSetConnection "principal" ça provoque une boucle infinie ! Même si l'évènement est "vide" (aucune action) !!!
![]() En le supprimant ça remarche, mais mon pb initial ne vient pas de là car j'ai justement rajouté le OnNext pour tester une sorte de compteur... sans grand succès à l'évidence. |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
En gros maintenant j'ai ça :
![]() Tant que la DataBand est positionnée en dernier c'est OK, si je la remonte seulement en avant-dernier paf ! Boucle d'impression sans fin. Cela pourrait provenir : > du paramétrage de la bande elle même dans l'inspecteur d'objet Rave, mais tout est par défaut et fonctionne par ailleurs > plus probable : de la communication TRvDataSetConnection (Delphi) / DataView (Rave) et surtout de sa terminaison. Je m'étonne de ne rien trouver à ce sujet sur le net, vu que je ne fais rien de violent ni de particulier... Autre expérimentations : ne jamais implémenter les évènements OnGetCols et OnNext d'un TRvDataSetConnection --> violations d'accès !
|
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Après une journée entière (!!) de tests j'en suis là :
![]() Impossible de monter n'importe quelle DataBand (dans ce cas la 2) au dessus de sa position en cours sinon ça plante (toujours l'impression infinie). Là elle n'est plus reliée à un DataSet mais à un simple RvCustomConnection (pour tests), à part ça j'ai un peu tout essayé : suppression de bandes, de contrôles dans les bandes, modifs de propriétés, etc etc mais rien n'y fait et je suis à court d'inspiration Du coup je pense générer 1 fiche / objet (ça ça marche !) et concaténer tout ça, je ne vois pas d'autre solution... |
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
J'ai une nouvelle piste, enfin une observation plutôt ! En effet le rapport fonctionne si :
> les données imprimées tiennent sur une page > les données imprimées font plus d'une page et aucun DataBand n'est en 1ère page !! Cela proviendrait donc peut être de l'enchainement des pages... ![]() Tout espoir n'est pas perdu
|
|
|
00
|
|
|
#12 | ||
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 3 611 ![]() |
ne me connectant qu'une fois par jour au forum , je ne peux que constater l'état d'avancement
- concernant les données il y aurait certainement moyen de faire plus simple à coup de Jointures (quoique ,il y ait un paquet impressionnant de tables) Citation:
- le type d'état maitre détail(s) serait (est) le plus approprié mais uniquement en cas de relations 1-n entre maitre et détail . Utiliser aussi des Entetes de Bande et bas de Bande si nécessaire (par exemple pour la bande Sciage , j'aurais mis le titre 'SCIAGE ET USINAGE' et le trait dans la Bande 'Entete' plutôt que dans la bande détail , bien que cela n'ai pas d'importance puisque une seule 'ligne') Citation:
Cependant j'ai encore du mal a visualiser le truc . Questions : le rapport entre la Bande Maitre (ce que tu appelles Objet) et chaque détails est t-il de 1-1 ? tu indiques que chaque fiche tient sur 3 pages (en moyenne) as tu pensé a faire un état sur plusieurs pages avec enchainement de page ? (oui , c'est possible) . Peux tu joindre un PDF d'une Fiche Objet pour essayer de visualiser l'etat final d'une fiche ? un Shema de(s) tables et de leur(s) relation(s) serait quand même bienvenue
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius |
||
|
|
00
|
|
|
#13 | ||||||||||
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Bonjour,
Citation:
Alors avant tout je mets une capture plus complète : ![]() Citation:
Je suis obligé (je crois) de procéder en Maitre/Détail uniquement pour imprimer tous les enregistrements de ma table principale ! D'où : > une seule DataBand maitre contenant un champ de ma table (le plus commun : le nom de l'entité) > toutes les Bands (en bleu) contenant des champs de la table principale (données numériques et scientifiques de toute sorte, relation 1-1 forcément) dépendants de la 1ère DataBand > les 5% de données qui sont en relation 1-n se retrouvent dans les 3 DataBands visibles sur la capture (rouge/vert/violet) Citation:
Mais j'ai déjà tiré un enseignement de tes réponses : je n'utilise plus aucun évènement Rave Citation:
D'ailleurs en parlant de structure je pourrais mettre toutes les bandes bleues dans une seule, c'est uniquement par souci pratique/cosmétique qu'il y en a autant. Citation:
Alors après tests, si j'implémente l'évènement OnGetCols de mon DataSet principal : > et que je le laisse "vide" = violation d'accès ! > et que je mets la seule ligne "Connection.DoGetCols", OK pas d'erreur Cependant, si je rajoute un "Connection.DoGetCols" à tous mes OnGetCols qui fonctionnent (cad avec des TRvCustomConnection et non des TRvDataSetConnection), il me sort des résultats entièrement fantaisistes ! (voire vides) Et différents selon si je le mets au début ou à la fin du code ![]() Souhaitant donc connaitre l'utilité de ce DoGetCols (qui est carrément absent de la doc !) j'ai farfouillé sur le forum et trouvé ceci : Citation:
Citation:
Citation:
je pouvais améliorer tout ça : avec une seule page en conception plus de coupure arbitraire et de page à moitié remplie à l'impression, tout est automatique.De toutes façons dans ce cas (impression de toutes les fiches) j'ai déjà essayé et me suis heurté à ce que je décrivais dans mon 1er post : Citation:
Citation:
|
||||||||||
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Ce qui me "rassure" c'est que même avec le wizard de Rave, si je demande un simple M/Détail entre ma table principale et une autre il plante pareillement
|
|
|
00
|
|
|
#15 | |||||
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 3 611 ![]() |
Ah , après une 'visualisation' d'une fiche , j'y vois plus clair
Alors , première clarification en apparté pour le Dogetcols , oui c'est uniquement dans le cas d'un DatasetConnection ( pas d'un CustomConnection ) . L'objectif de Rave dans ce cas me semblait être l'ajout de champs calculés/liés (pour l'instant je n'ai pas trouvé de cas ou cela m'aurait été utile ou alors je les ai contournés autrement Citation:
Citation:
La structure de l'état me semble correcte pour l'objectif visé Citation:
![]() j'ai l'impression que la bande maitre est repositionnée au 1° enregistrement lors de l'appel a l'une des 'vraies' bandes détail !!! c'est sur les DatasetConnection Maitre et Détail (utilisations/appellations) qu'il faut se concentrer . Dans ton cas les SQL de ces différentes tables doivent se présenter de la maniere suivante ? Code sql :
(maitrisant mal les UIB j'ai contrôlé ) les UIBDataset n'ont pas de Datasource pour le passage de paramètres (ce qui est fort dommage d'une manière générale et encore plus dans ton cas car impossible dans le rave concepteur de 'voir' le résultat) Ma question comment gères tu ceci ? -Evènement Afterscroll de maitre ? -Evènement CustomConnection ? << compliqué et peu fiable - autrement ? Mon conseil : faire/maitriser un maitre détail 'simple' avec les UIB si tu y arrives , le reste suivra Allez , le bout du tunnel approche , je le sens
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius |
|||||
|
|
00
|
|
|
#16 | ||||
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
C'est déjà ça
![]() Bon qques tests complémentaires aujd mais rien de bien nouveau, j'ai essayé des combinaisons de régions, bandes etc... sans succès. Citation:
Citation:
Je me replonge là dedans lundi et t'en dirai un peu plus sur les relations entre mes datasets, mais en gros dans Delphi oui j'ai un AfterScroll sur le dataset principal dans lequel je MAJ les datasets détail, que je paramètre chacun dans leur OnBeforeOpen (de mémoire). Ce qui ressemble à ça : Code :
Dataset.SQL.ParamByName(':ID_MAITRE') = <valeur> Bon week end ! |
||||
|
|
00
|
|
|
#17 | |||
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Bonjour,
Pour en revenir à ton dernier message : Citation:
Citation:
> dans le OnAfterScroll du dataset maitre > dans les OnBeforeOpen des datasets détail Par contre il est en effet impossible de prévisualiser tout ça dans Rave. Citation:
![]() Malheureusement il n'y a pas de démo Rave utilisant Firebird/UIB, toutes utilisent les DB de DBDEMOS (biolife, customer...) et les TTable du BDE. Coté Rave je pense faire tout bien, d'ailleurs je me suis grandement inspiré du MasterDetailReport des démos. |
|||
|
|
00
|
|
|
#18 | ||
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
Re,
Bon après être reparti de très très loin et avoir simplifié au maximum sous Delphi, soit : > 1 DB, 1 transaction, 1 dataset maitre, 1 dataset détail > aucun traitement dans les évènements Ce qui donne : Code :
> 1 databand maitre, 1 databand détail et ses propriétés correctement renseignées (ControllerBand, DataView, MasterDataView, MasterKey, DetailKey) ainsi que le style de bande (Detail & First) Hé ben... ça marche pas non plus !!! ![]() Ou plutôt : ça marche très bien du moment que je n'ai QUE ma DataBand (les données passent à la page suivante et tout ), ça fonctionne aussi avec plusieurs DataBands mais dès que je pose une simple Band ça part en live (cad en impression infinie). C'est encore plus tordu que ça : si je place une Band (avec 1 seul champ hein, rien de sorcier) avant les DataBands détail ou entre 2 DataBands ça peut (parfois) être OK. Mais si elle est en dernier aucune chance.Bref devant ce grand n'importe quoi face auquel je n'ai plus le temps de lutter : j'abandonne !!! (1ère fois de ma vie de programmeur que je dis ça... et j'espère la dernière !) En tout cas merci pour ton aide SergioMaster. |
||
|
|
00
|
|
|
#19 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 256 ![]() |
PS : j'y reviendrai peut être...
|
|
|
00
|
|
|
#20 | |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 3 611 ![]() |
Citation:
rocky-stallone n'a qu'un genou à terre et il y a eu plusieurs 'épisodes' ![]() ton état est loin d'être simplissime mais peut être résolu ![]() je ferais un essai 'bidon' avec mes bases de données pour voir . Maintenant que je comprend le résultat attendu il me faut juste le temps !! j'ai un état quickreport/d3 (eh oui
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com