IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

[Etat] Entete s'imprime même si le corps est vide [WD20]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut [Etat] Entete s'imprime même si le corps est vide
    Bonjour,
    J'ai créé un état sous windev 20 pour qu'il m'imprime une facture. Je rencontre un problème si mes données remplissent une page complète et que le format de la page n'est pas suffisant pour imprimer la fin de document. J'ai alors un nombre de pages contenant mes produits et une autre page qui contient uniquement l'entête de mon tableau (sans données) et la fin de document qui contient les totaux.
    Est-ce qu'il y a un moyen pour faire basculer le dernier produit sur la dernière page de façon à ce qu'elle contienne au moyen un produit et les totaux?

    J'ajoute une capture écran de ce que j'obtiens (bas de l'avant dernière page et haut de la dernière page).

    Merci.

    Nom : pages.jpg
Affichages : 735
Taille : 16,2 Ko

  2. #2
    Membre chevronné
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Par défaut
    une piste

    // passer le paramètre nombre enregistrement à imprimer à l'Etat
    nXTotal_Enreg = 90

    Ouvrir l'Etat avec variable nXTotal_Enreg

    dans code Etat
    // d'après la capture d'écran nombre enreg max par page = 30
    nXEnreg_Page = 0

    // Code avant impression du corps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SI nXTotal_Enreg=1 ALORS
        // c'est à dire  (max enreg par page - 1)
         SI nXEnreg_Page = 29 ALORS   
            iSautePage() 
        FIN
    SINON
       SI nXEnreg_Page >= 30 ALORS nXEnreg_Page = 0
    FIN
    // Code après impression du corps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nXTotal_Enreg -=1
    nXEnreg_Page+=1
    NB : j'ai pas testé

  3. #3
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut
    Bonjour,
    Merci pour la réponse. Seulement dans mon corps la rubrique Désignation est auto-extensible, c'est à dire qu'elle peut prendre plusieurs lignes. La méthode pressentie ne fonctionnera pas dans mon cas.

  4. #4
    Membre chevronné
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Par défaut
    Bonjour,

    Tout d'abord, je me suis trompé dans le premier message, j'ai écrit iSautePage() au lieu de iTerminePage().
    Je reviens avec une autre proposition basée sur la première.

    L'Etat devra être ouvert avec 2 paramètres :
    - nbre total enregistrements
    - nbre enregistrements à reporter sur la dernière page.

    par exemple créer un champ avec saisie "Nbre enreg à reporter"
    Comme c'est aléatoire, alors faire un premier aperçu avec nbre à reporter = 0
    Au vu de la dernière page, vous décidez éventuellement le nbre d'enreg à reporter en dernière page
    et relancer l'aperçu avec champ "nbre à reporter" rempli

    PROCEDURE MonEtat(nXTot_Enreg, nXReport)

    Dans code Après impression du CORPS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SI nXReport > 0 ALORS
       nXTot_Enreg-=1
       SI nXTot_Enreg = nXReport ALORS	
            iTerminePage()
       FIN
    FIN

  5. #5
    Membre chevronné
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Par défaut
    Le principe est toujours le même, faire un premier aperçu, ensuite décider reporter ou non dernières lignes

    en terme d'interface :
    - créer un champ ex. SAI_Report, si le nbre d'enregistrement pourrait dépasser un
    - ou bien si le nbre éventuel ne devrait pas dépasser un, alors si vous avez dans la fenêtre en question un champ,
    par exemple Interrupteur avec saisie, cochez-le et l'utiliser en tant que paramètre. Dans le cas contraire, créer un interrupteur ex. INT_Report

    2 paramètres :
    soit nbre total enreg et SAI_Report
    soit nbre total enreg et INT_Report

    Dans l'Etat, la configuration suivante est valable pour les 2 options

    PROCEDURE MonEtat(nXTot_Enreg, nXReport)

    nXTot_Enreg-=nXReport

    Dans code Après impression du CORPS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI nXReport > 0 ALORS
        SI MonEtat..NbEnrImprimé = nXTot_Enreg ALORS
             iTerminePage()
         FIN
    FIN

  6. #6
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut
    Bonjour,
    Merci midou23175 ton idée m'a guidé sur une autre piste.
    Je récupère les hauteurs des différents blocs : Début de document, Entête de page puis je les ajoute à celle du corps dans le code Après impression du ... Je fais alors un test si supérieur à une certaine hauteur si oui alors je réinitialise à zéro pour la prochaine page et je fais un iTerminePage(). Je crois que c'est bon.
    Je dois faire des tests.

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Vxi3] Afficher un libellé même si la valeur est vide/nulle
    Par JuniorBI dans le forum Designer
    Réponses: 4
    Dernier message: 10/03/2016, 16h15
  2. Réponses: 10
    Dernier message: 08/04/2008, 11h14
  3. Réponses: 8
    Dernier message: 01/03/2007, 22h32
  4. Réponses: 5
    Dernier message: 05/01/2006, 00h19
  5. [Crystal Report] Champs affichés même si la requête est vide
    Par navis84 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/02/2005, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo