Affichage des articles dont le libellé est Impressions. Afficher tous les articles
Affichage des articles dont le libellé est Impressions. Afficher tous les articles

18 novembre 2008

Pallier au message "L'état ?? est déjà en cours d'impression"

J'ai constaté avec surprise, suite aux plaintes d'utilisateurs, que le double-clic sur un bouton lançant un état provoquait une erreur de l'application :

L'état ?? est déjà en cours d'impression
Dump de l'erreur du module <12.00Bw>.
- Niveau : erreur fatale (EL_FATAL)
- Code erreur : 210055
- Infos de debug : Fonction (21,0)

Le défaut m'a été confirmé par le support. En palliatif immédiat, puriste s'abstenir, j'ai utilisé le code suivant qui évite de relancer l'état en cas de double clic.
// Code de clic sur le bouton d'impression
SI ChaîneOccurrence(dbgInfo(dbgPile), "Clic sur "+MoiMême..Nom) > 1 ALORS RETOUR

iAperçu(i100)
iImprimeEtat(Etat1)

J'espère que cette astuce pourra resservir, même s'appuyer sur la pile n'est pas de plus "propre", cela permet de facilement régler le problème.

22 février 2008

Placer en fond d'un état les pages d'un formulaire PDF

Suite à une demande sur le forum, et intéressé par la fonctionnalité, j'ai recherché comment placer en fond d'un état les différentes pages d'un document PDF.

La méthode n'a rien d'immédiate, je pense que sa publication sera appréciée !

Si un état contient plusieurs pages, et qu'il a en fond un PDF contenant également plusieurs pages, les différentes pages de l'état ne peuvent pas prendre les différentes pages du PDF, mais une seule (et c'est vraiment dommage) :



Il faut donc jongler et créer plusieurs états qui vont être imbriqués les uns dans les autres :
- un premier état est associé à la page 1 du formulaire PDF,
- un deuxième état est associé à la page 2 du formulaire PDF,
- un troisième état est associé à la page 3 du formulaire PDF ....

L'application fera ainsi un iImprimeEtat() du premier état. Ce premier état fera dans son code après impression un iImprimeEtat() du deuxième état, qui appellera à son tour le troisième état...

J'ai testé la solution d'états internes, mais je n'ai pas eu de bons résultats. De façon générale il me semble que les états imbriqués sont à préférer aux états internes.

Gageons que PC SOFT saura faire évoluer la fonctionnalité pour plus de simplicité. Car cette solution s'applique si les pages de l'état sont différentes, mais pas dans le cas ou c'est le bloc corps d'un état qui va se dérouler sur différentes pages ...

25 septembre 2007

Imprimer une image en gardant le choix de l'imprimante dans l'aperçu...

En créant un aperçu d'une image avec les fonctions "iAperçu", "iImprimeImage" et "iFinImprime", la fenêtre d'aperçu obtenue ne permet pas la sélection de l'imprimante. C'est pourtant bien utile notamment pour les applications qui s'exécutent depuis des postes portables qui changent régulièrement d'imprimante.

Une astuce permettant d'obtenir une impression d'image avec le choix de l'imprimante, consiste à utiliser un état créé par l'éditeur d'états, plutôt qu'une impression programmée.
Il suffit ensuite de lancer l'aperçu avec la fonction "iImprimeEtat", et l'aperçu sera pourvu du choix de l'imprimante. L'état sera on ne peut plus simple, avec un champ image affecté par un paramètre de l'état, paramètre recevant le nom de de l'image à afficher à l'ouverture de l'état.

05 décembre 2006

Fonctionnalités d'exportation (RTF, XLS, RTF ...) depuis l'aperçu pour les impressions programmées

L'aperçu des états imprimés créés avec l'éditeur d'états propose par défaut des sorties dans différents formats : RTF pour Word, XLS pour EXCEL, PDF, XML, ou envoi par email.

Cette même possibilité n'est pas disponible pour les impressions programmées par les fonctions "iImprime", "iImprimeMot", "iImprimeZone", "iImprimeImage"... alors qu'elle est bien utile !

Il existe un moyen de combiner ces deux "méthodes" d'impression pour avoir une impression programmée, imprimée au travers d'un état. Ainsi l'impression programmée bénéficie des possibilités d'exportation dans l'aperçu.

Le moyen pour y parvenir est très facile à mettre en œuvre, il suffit de :
- créer un état ne parcourant aucune donnée, sans aucune champ,
- placer le code de l'impression programmée dans traitement de fermeture de l'état.
Le lancement de cet état "spécial" avec la commande "iImprimeEtat" permettra d'avoir un aperçu contenant une impression programmée, et les possibilités d'exportation.

27 novembre 2006

Imprimer directement depuis un aperçu...

La fenêtre d'aperçu propose lors de l'impression de choisir le nombre de pages à imprimer, ainsi que le nombre de copies. D'un point de vue ergonomique, cela peut ne pas convenir à certains usages, voici la méthode pour ne pas avoir de confirmation et imprimer directement :

Aperçu personnalisé :
Il faut tout d'abord copier dans le répertoire du projet la fenêtre de l'aperçu, c'est une fenêtre WINDEV dans le répertoire des exemples. Ouvrir ensuite cette fenêtre dans le projet, afin de l'enregistrer dans les éléments du projet. Par le menu "Projet / Description du projet" et le volet "Style", il faut donner cette fenêtre comme fenêtre d'aperçu. A ce stade, il est possible de personnaliser la fenêtre utilisée lors de l'aperçu depuis l'application.

Modification de l'aperçu :
Ouvrir la description du bouton "Imprimer", et simplement changer son nom en "ImprimerTout". Au prochaine aperçu, ce bouton lancera directement l'impression !

05 octobre 2006

Limiter les ressources sollicitées par les impressions.

Je l'ai évoqué dans un précédent billet, s'il y a bien un domaine dans lequel il faut s'appliquer à ne pas trop solliciter le système, c'est bien celui de l'impression. En effet, si pour l'utilisateur le fait d'imprimer une action anodine, pour le système ce n'est pas rien, il va abondamment solliciter les pilotes de périphériques, les ressources graphiques...

Voici quelques astuces qui vous permettront je l'espère d'augmenter la réussite de vos impressions, essentiellement sur les configurations les plus faiblement dotées (hard et soft).

1. réinitialiser le mécanisme d'impression avant chaque nouvelle impression, avec un appel de la fonction "iRAZ".

2. éviter les images volumineuses en fond de page par exemple en utilisant une image enregistrée pour le Web.

3. sélectionner dans la confi- guration des états, l'option d'impres- sion à chaque page.


4. ralentir l'impression avec la fonction "Multitache" dans le code après impression du bas de page. L'attente doit varier en fonction de la configuration, elle peut être mémorisée dans la base de registres. Un menu "Configuration" de l'application pourra permettre son réglage d'un poste à un autre.

28 septembre 2006

Filigrane / image en fond d'un état

J'ai vu de nombreux développeurs, et encore un fil de discussion récent sur le forum, batailler pour ajouter dans le fond d'un état une image. Typiquement, une mention "duplicata" en diagonale dans le fond d'un état. Le piège consiste à partir sur la fonctionnalité de "formulaire" que propose l'éditeur d'état, elle est très spécifique. Il faut utiliser la solution "Image de fond" donnée dans la description de l'état (cf image du billet). Cette solution consiste à appeler dans le code avant impression du bloc de haut de page, la commande suivante :
iImprimeImage("Image.jpg", 0, 0, iLargeurPage(), iHauteurPage())

Il n'y a rien d'autre à faire !

Astuce : pensez à optimiser la taille de cette image, car elle sera envoyée au pilote de l'imprimante. Et s'il y a bien un domaine dans lequel il faut éviter d'être trop gourmand en ressources, c'est bien celui de l'impression.