ImprimeTable

La fonction ImprimeTable, de la collection COL_Impression de Betula, va imprimer la table passée en paramètre « tel qu’à l’écran » (contenu, largeur des colonnes). En soi, c’est proche de la fonction TableImprime mais avec une 50aine de paramètres supplémentaires que vous pouvez ajuster à votre goût. Voyez ce que ça donne dans cette présentation vidéo.

Cette table peut être une table classique ou hiérarchique, mémoire ou fichier. Dans ce dernier cas, l’impression ne tient pas compte de la hiérarchie (tous les éléments de la colonne hiérarchique seront imprimés sur le même niveau). De même, toute rupture est également ignorée dans cette fonction.

Pour aider à bien paramétrer votre impression, voici un projet test qui fait appel à la fenêtre interne présente dans Betula. Vous pouvez cliquer dans cette fenêtre interne/page pour changer les couleurs de texte, de fond, de séparateurs, … Téléchargez l’exemple en cliquant ici.

Si vous le souhaitez, vous pouvez personnaliser et intégrer la fenêtre illustrée ci-dessous à vos projets (disponible dans l’exemple) pour donner accès, à l’utilisateur final, à toutes ces options.  Des profils sont gérés via un fichier INI.

Syntaxe

ImprimeTable (<xNomTable> [, <stOptions> est un stImpressionTableOption) : entier

Paramètres

xNomTable : Nom de la table (soit Table_Valeurs..nom, soit « Table_Valeurs »)
stImpressionTableOption (structure) :

sTitrePage (chaîne – valeur par défaut=NULL) Titre de l’impression. S’affichera en haut de la première page (au-dessus des titres de colonnes si demandé, sinon au-dessus des données) et sur toute les autres pages (si demandé avec l’option RépèteTitreChaquePage). Le titre peut contenir des RC pour avoir plusieurs lignes. La première ligne est toujours imprimée avec une police 20% plus grande, les autres lignes auront une taille standard (comme la taille du texte des données). Le titre peut aussi contenir le chemin complet d’une image. Celle-ci s’imprimera dans le coin haut à gauche de la page (voir remarques)
polTexte (police – valeur par défaut=xNomTable..police) Caractéristique de la police de caractères qui sera utilisée pour imprimer la table (voir remarques)
xLogo Image (objet image ou chaîne de caractères) pour afficher le logo de la compagnie en haut à gauche du document.
nNbExemplaire (entier – valeur par défaut 1) Nombre d’exemplaires à imprimer (est prioritaire sur l’option PasFinImprime)
nNbPagesMax (entier – valeur par défaut=0) Nombre de page à imprimer, depuis la première. Mettre 0 (zéro) pour imprimer toutes les pages. Attention, si l’on utilise une valeur > 0, l’ordre d’impression dépendant du type d’assemblage choisi (voir remarques)
rHauteurMaxLigne (réel – valeur par défaut=0.0) Hauteur d’une ligne de données (est influencé par le facteur de « zoom »)
rMargeHaut(réel – valeur par défaut 5.0) Marge de haut de page en millimètres
rMargeBas (réel – valeur par défaut 5.0) Marge de bas de page en millimètres
rMargeGauche (réel – valeur par défaut 5.0) Marge de gauche en millimètres
rMargeDroite (réel – valeur par défaut 5.0) Marge de droite en millimètres
sColonneAncrée (chaîne – valeur par défaut=vide) Nom de la colonne qui est susceptible de s’élargir pour imprimer la table sur toute la largeur de la page
sColonneSélection (chaîne – valeur par défaut=vide) Nom complet de la colonne à imprimer
sFormatDate (chaîne – valeur par défaut= »JJ/MM/AAAA ») Voir la documentation PC SOFT de DateVersChaine
sFormatHeure (chaîne – valeur par défaut= »HH:MM:SS ») Voir la documentation PC SOFT de HeureVersChaine
sFormatMonétaire (chaîne – valeur par défaut= »10.2fS ») Voir la documentation PC SOFT de NumériqueVersChaine
nNumPageDépart (entier – valeur par défaut=1) Valeur de début de numérotation de page (ne fonctionne que si l’on choisi d’imprimer le numéro de page)
sPiedDePageGauche, sPiedDePageDroite, sPiedDePageCentre (chaîne – valeur par défaut=vide) Textes à imprimer en bas de page (1 seule ligne est prise en compte)
eTraitH (énumération EImpressionTableTrait = TypeAucun (par défaut), TypeContinu, TypePointillé, TypeMixte, TypeTiret) type de trait du séparateur horizontal
eTraitV (énumération EImpressionTableTrait = TypeAucun (par défaut), TypeContinu, TypePointillé, TypeMixte, TypeTiret) type de trait du séparateur vertical
taCouleurs (tableau associatif d’entiers (couleur) – valeur par défaut=vide) Exemple : taCouleurs[CouleurLignePaire]=CyanClair

La couleur est un entier de 0 a 16777216 (voir la documentation PC SOFT). Les constantes reconnues pour le type sont :

  • CouleurLignePaire : Couleur de fond des lignes paires (par défaut : transparent)
  • CouleurTexteDonnéePaire : Couleur de caractère des données des lignes impaires (par défaut : noir)
  • CouleurLigneImpaire : Couleur de fond des lignes impaires (par défaut : transparent)
  • CouleurTexteDonnéeImpaire : Couleur de caractère des données des lignes paires (par défaut : noir)
  • CouleurPageFond : Couleur de fond du cadre délimitant le contenu complet de la page (par défaut : blanc)
  • CouleurSéparateurVertical : Couleur de trait des séparateurs verticaux (par défaut : noir)
  • CouleurSéparateurHorizontal : Couleur de trait des séparateurs horizontaux (par défaut : noir)
  • CouleurTitreFond : Couleur de fond du titre (par défaut : transparent)
  • CouleurTitreTexte : Couleur de caractère du titre (par défaut : noir)
  • CouleurCadre : Couleur de trait du cadre incluant la ligne en-dessous du titre et celle au-dessus du « pied de page » (par défaut : noir)
  • CouleurTitreColonneTexte : Couleur de caractère du titre des colonnes (par défaut : noir)
  • CouleurTitreColonneFond: Couleur de font du titre des colonnes (par défaut : transparent)
  • CouleurTitreColonneSéparateur : Couleur de séparateur des titres des colonnes (par défaut = noir)
  • CouleurPiedTexte : Couleur de caractère du pied de page (par défaut : noir)
  • CouleurPiedFond : Couleur de fond du pied de page (par défaut : transparent)
taColonnes (tableau associatif de stImpressionTableColonne – valeur par défaut=vide) stImpressionTableColonne (structure) :

  • nOrdre (entier) : ordre de la colonne (par défaut : 0 = ordre tel qu’à l’écran)
  • bCompteur (booléen) : doit avoir un compteur en bas de la colonne (par défaut : faux)
  • bMoyenne (booléen) : doit avoir une valeur moyenne en bas de la colonne (par défaut : faux)
  • bTotal (booléen) : doit avoir un total en bas de la colonne (par défaut : faux)
  • bComboValeur (booléen) : vrai = imprime la valeur d’une colonne combo, faux = imprime la valeur affichée (par défaut : faux)
  • taComboImages (tableau associatif de chaines) : imprime l’image associée à une valeur de combo (par défaut : vide)
coAutresOptions (combinaison COImpressionTableOption)
  • OptionMultiligneContenu : Imprime le contenu et les titres des colonnes sur plusieurs lignes si nécessaire, sinon sur une seule ligne (défaut)
  • OptionAvecCadre : Imprime le cadre qui délimite le contenu (ainsi que la ligne en-dessous du titre et celle au-dessus du bas de page avec la date/l’heure/le # de page s’ils sont choisis), sinon ne l’imprime pas (défaut)
  • OptionAvecDate : Imprime la date en bas de page, sinon ne l’imprime pas (défaut)
  • OptionAvecHeure : Imprime l’heure en bas de page, sinon ne l’imprime pas (défaut)
  • OptionAvecNumPage : Imprime le # de page en bas de page, sinon ne l’imprime pas (défaut)
  • OptionAvecTitreColonne : Imprime les titres des colonnes (représente NomDeColonne..titre et non le nom logique de la colonne), sinon ne les imprime pas (défaut)
  • OptionForcePortrait : Force l’orientation portrait quand l’ensemble des colonnes dépassent la largeur d’une page portrait, sinon l’orientation passe automatiquement en paysage (défaut)
  • OptionAvecSéparateurVertical : Imprime les séparateurs verticaux entre les colonnes (par défaut, en iContinu), sinon n’en imprime pas (défaut)
  • OptionAvecSéparateurHorizontal : Imprime les séparateurs horizontaux entre les enregistrements (par défaut, en iContinu), sinon n’en imprime pas (défaut)
  • OptionAfficherMotDePasse
  • OptionInterrupteurCoche : Imprime une coche si la valeur booléenne est vrai et vide si la valeur booléenne est fausse, sinon imprime la valeur booléenne 0 ou 1 (défaut)
  • OptionNonAssemblée : Assemble ou pas les pages dans le cas ou la table doit être imprimée sur plusieurs pages en largeur (voir remarques)
  • OptionEnTonDeGris : Imprime le texte, les lignes et les fonds en tons de gris, sinon imprime en couleur (défaut). Attention, ne gère pas le gris sur les images
  • OptionRépèteTitreChaquePage : Imprime le titre sur chaque page, sinon uniquement sur la première page (défaut)
  • OptionRépèteTitreColonneChaquePage : Imprime le titre des colonnes sur chaque page, sinon uniquement sur la première page (défaut)
  • OptionForceÉcritureDroiteAGauche : Force l’impression des textes de droite à gauche et les numériques de gauche à droite, sinon prend le sens d’écriture par ordre de priorité : de la table, de la fenêtre, de gauche à droite (défaut)
  • OptionRepèteCalculChaquePage : Imprime le résultat des calculs demandés en bas de chaque page (comme des valeurs intermédiaires), sinon le résultat des calculs s’imprime sur la dernière page (défaut)
  • OptionAvecImage : Imprime les images (rubrique image), sinon ne les imprime pas (défaut)
  • OptionOrientationPortrait : Imprime en orientation portrait, sinon en paysage (défaut)
  • OptionMagentaTransparent : Imprime les mémos images et le logo avec une transparence sur la couleur magenta, sinon le magenta est imprimé aussi (défaut)
  • OptionColonneCalculée : Sélectionne chaque ligne de la table pour que les colonnes calculées s’affichent correctement (exécution du code « Affichage d’une ligne de table » pour chaque ligne)
  • OptionMultiligneTitreColonne : Imprime les titres des colonnes sur plusieurs lignes, sinon sur une seule ligne (défaut)
  • OptionLigneSélectionnée : Imprime uniquement les lignes sélectionnées (voir remarques), sinon toutes les lignes (défaut)
  • OptionCouleurTable : Imprime selon les couleurs de la table elle-même. Cette option exploite les couleurs de texte et de fond des lignes paires, des lignes impaires et des cases. Cette option est prioritaire sur le paramétrage de ces mêmes couleurs dans le paramètre sOptions.sCouleurs
  • OptionPasFinImprime : En utilisant cette option, l’instruction iFinImprime() n’est pas lancée à la fin de l’impression (voir remarques)
  • OptionRepetePiedChaquePage : Imprime le pied de page sur chaque page, sinon uniquement sur la première page (défaut)
  • OptionRTFenTexte : transforme le RTF en texte sans mise en forme
  • OptionTailleSupérieure : en cours de développement
  • OptionAlignementDuContenu : cadrage des numériques, dates et heures à droite, le reste à gauche

Valeur de retour :

entier : nombre de pages imprimées

Contraintes techniques

La fonction ImprimeTable ne peut pas être appelée dans un état (comme pour imprimer un sous-état);
Le texte du titre et le texte du pied de page ne peuvent pas contenir de TAB si l’on utiliser un profil (le fichier ini n’accepte pas ces caractères);
L’option d’impression en tons de gris ne fonctionne que pour les textes, les lignes et les couleurs de fond; pas pour les images.
La fonction n’imprime que les colonnes visibles à l’écran, même si l’on insère le nom d’une colonne invisible dans le paramètre taColonnes. En effet, l’impression se base sur la largeur des colonnes à l’écran. Ces dernières doivent donc être visibles de l’utilisateur (qui pourrait alors les modifier pour modifier la présentation de son rapport).
Lors de l’utilisation de l’option OptionCouleurTable, seules les couleurs de fond et de caractères des lignes paires, des lignes impaires et des cases sont prises en compte. Les autres propriétés ne sont pas accessibles par programmation en WinDev.

Astuces

  • Le nom des colonnes à imprimer doit être sous forme NomDeFenêtre.NomDeTable.NomDeColonne, ceci pour garantir l’exacte correspondance entre ce qui est vu et ce qui est imprimé (car parfois le même nom de colonne peut se retrouver dans plusieurs table de la fenêtre).
  • La fonction ne gère pas le paramètre iAperçu. Vous devez donc, dans le code, utiliser (ou pas) iAperçu avant d’appeler la fonction ImprimeTable.
  • Lors d’un aperçu avant impression, si l’on utilise ImprimeTable et ensuite un iImprimeEtat() standard, il faut mettre un iAperçu avant chacune des deux instructions.
  • Malgré que la procédure n’imprime que les colonnes « visibles » (celles dont la propriété ..visible = vrai), il n’est pas interdit d’avoir la table invisible ou cachée dans une partie non visible de l’écran. Cela permet de « préparer » le contenu à imprimer dans une table non visible de l’utilisateur et d’ensuite lancer une impression dessus. Cette astuce peut être utilisée notamment lors de l’impression de table trop complexes ou contenant des fond de lignes images, …

Adaptation de l’impression à la largeur de la page

La fonction est construite de telle sorte à adapter la taille des caractères (et donc la hauteur et largeur des colonnes) automatiquement. En effet, lorsque la largeur de la table dépasse la largeur d’une page (selon l’orientation demandée dans un autre paramètre), la procédure commence par diminuer la taille de caractères pour voir si la table peut finir par entrer dans la page (la taille minimale est de 3). Si ce n’est pas possible, et que l’orientation portrait avait été choisie, la procédure passe automatiquement en paysage et refait le même calcul. Pour éviter ce passage automatique en mode paysage, il faut explicitement cocher « Force orientation portrait » ou utiliser OptionForcePortrait. Si finalement la ligne de table ne rentre pas dans la largeur de page, plusieurs pages seront alors imprimées sur la largeur. Dans ce cas, il faut être attentif aux options d’assemblage.

Dans l’autre sens, si une impression de table ne rempli pas la largeur de la page, et pour éviter que la dernière colonne soit plus large qu’elle n’apparaît, il est possible de sélectionner une colonne « ancrée » dont la largeur va s’adapter et gardera ainsi la proportion des autres colonnes. Habituellement, l’on ancre la première colonne.

Option d’assemblage

Grâce à ces fonctions, il est donc possible d’imprimer soit toutes les pages en largeur et ensuite les prochains enregistrements, soit les premières colonnes sur tous les enregistrements et ensuite les colonnes suivantes sur tous les enregistrements. Exemple : l’impression a besoin de 3 pages en largeur (pour contenir toutes les colonnes), soit a,b,c et 10 pages en hauteur (pour les 847 enregistrements) soit 1,2,3,4,..10. Chaque page est alors identifiée comme 1a, 1b, 1c, 2a, 2b, 2c, 3a, 3b, 3c … 10a, 10b et 10c.

  • L’option « Assemblé » ou l’absence de OptionNonAssemblée imprimera les pages dans l’ordre suivant : 1a, 2a, 3a, 4a, … 10a, 1b, 2b, 3b, 4b … 10b, 1c, 2c, 3c, 4c … 10c
  • L’option « Non assemblée » ou l’utilisation de OptionNonAssemblée imprimera les pages dans l’ordre suivant : 1a, 1b, 1c, 2a, 2b, 2c, … 10a, 10b, 10c

Attention, si l’on choisi un nombre de pages limité (différent de 0 qui imprime toutes les page), l’on imprime évidemment la table selon l’ordre précité.

Impression des lignes sélectionnées

La fonction ImprimeTable() permet de n’imprimer que les lignes sélectionnées. Pour faire cela, il faut d’une part ajouter OptionLigneSélectionnée et il faut ensuite être dans un des cas suivant : soit la table est multi-sélection (propriété ..MultiSélection) et l’impression se basera sur la propriété ..Sélectionnée de chaque ligne de la table, soit la première colonne est de type « coche » et elle sera utilisé comme élément de sélection. Dans ce dernier cas, la première colonne est la première visible de la table.

Impression d’un logo (image)

La fonction ImprimeTable() permet d’imprimer un logo dans le coin supérieur gauche. Il faut, pour cela, que l’image soit sous forme de fichier (les images issues d’un mémo image doivent d’abord est sauvegardées sous forme de fichier). Ensuite, il suffit juste de mettre le chemin de l’image dans le paramètre xLogo. Ex : « D:\Images\LogoCompagnie.png ».

Attention, le logo s’imprimera sans « marges » programmées. Si le logo est au bord de l’image, le cadre s’imprimera à raz de l’image. Pour éviter cet effet visuel indésirable, ajoutez quelques pixels (grâce un logiciel de traitement d’image comme Paint livré en standard dans Windows) de chaque côté de l’image pour qu’il puisse, visuellement, se distancier du reste des éléments qui seront imprimés autour de lui.

La taille de l’image imprimée est basée sur les deux instructions standards : iHauteurImage() et iLargeurImage(). Si l’image semble trop petite ou trop grande, merci de vérifier, grâce à ces instructions, combien de mm l’image prend en hauteur et largeur. Pour changer la taille du logo, utilisez un logiciel de traitement d’image (comme Paint livré en standard dans Windows).

Le logo s’imprime dans la zone de titre et en avant plan de la couleur de fond de titre.

Attention, la zone de titre peut s’agrandir si la hauteur du logo dépasse celle des lignes de titre. Les titres imprimés dans cette zone seront alors centrés verticalement sur la hauteur de la zone (et donc de l’image).