Aller au contenu principal
Version: Next

Print form

Print form ( {laTable ;} formulaire {; formData} {; zone1{; zone2}} ) -> Résultat

ParamètreTypeDescription
laTableTableTable à imprimer, ou Table par défaut si ce paramètre est omis
formulaireText, ObjectNom (chaîne) du formulaire table ou projet à imprimer, ou
Chemin POSIX (chaîne) d'un fichier .json décrivant le formulaire, ou
Objet décrivant le formulaire
formDataObjectData to associate to the form
zone1IntegerMarqueur d’impression, ou Zone de départ (si zone2 est spécifié)
zone2IntegerZone de fin (si zone1 est spécifié)
RésultatIntegerHauteur de la section imprimée

Cette commande n'est pas thread-safe, elle ne peut pas être utilisée dans du code préemptif.

Description

La commande Print form imprime simplement formulaire avec les valeurs courantes des champs et des variables de laTable. Cette commande est généralement utilisée pour imprimer des états particulièrement complexes nécessitant un contrôle total du processus d'impression. Print form ne gère pas les traitements d'enregistrements, ni les ruptures, sauts de pages, en-têtes ou pieds de pages. Vous devez vous-même prendre en charge ces opérations. Print form imprime uniquement des champs et des variables avec une taille fixe, la commande ne gère pas les objets de taille variable.

Comme la commande Print form ne génère pas de saut de page après avoir imprimé un formulaire, elle vous permet de combiner facilement différents formulaires sur la même page. Ainsi, Print form est idéale pour effectuer des impressions complexes impliquant plusieurs tables et plusieurs formulaires. Pour "forcer" 4D à effectuer un saut de page entre deux formulaires, utilisez la commande PAGE BREAK. Pour reporter sur la page suivante l'impression d'un formulaire dont la hauteur est supérieure à la place disponible, appelez la commande CANCEL avant la commande PAGE BREAK.

Trois syntaxes peuvent être utilisées :

  • Impression du corps d'un formulaire Syntaxe :
 hauteur:=Print form(maTable;monFormulaire)

Dans ce cas, Print form imprime uniquement la zone de Corps du formulaire (zone située entre les marqueurs En-tête et Corps).

  • Impression de zone de formulaire Syntaxe :
 hauteur:=Print form(maTable;monFormulaire;marqueur)

Dans ce cas, la commande imprimera la section désignée par marqueur. Passez dans le paramètre marqueur une des constantes du thème “Zone de formulaire” :

ConstanteTypeValeur
Form break0Entier long300
Form break1Entier long301
Form break2Entier long302
Form break3Entier long303
Form break4Entier long304
Form break5Entier long305
Form break6Entier long306
Form break7Entier long307
Form break8Entier long308
Form break9Entier long309
Form detailEntier long0
Form footerEntier long100
Form headerEntier long200
Form header1Entier long201
Form header10Entier long210
Form header2Entier long202
Form header3Entier long203
Form header4Entier long204
Form header5Entier long205
Form header6Entier long206
Form header7Entier long207
Form header8Entier long208
Form header9Entier long209
  • Impression de section Syntaxe :
 hauteur:=Print form(maTable;monFormulaire;zoneDébut;zoneFin)

Dans ce cas, la commande imprimera la section comprise entre les paramètres zoneDébut et zoneFin. Les valeurs saisies doivent être exprimées en pixels.

La valeur retournée par Print form indique la hauteur de la zone d’impression. Cette valeur sera automatiquement prise en compte par la commande Get printed height.

Les boîtes de dialogue standard d'impression n'apparaissent pas lorsque vous utilisez la commande Print form. L'état généré ne tient pas compte des paramètres d'impression définis en mode Développement pour le formulaire. Il y a deux manières de définir les paramètres d'impression avant d'effectuer une série d'appels à Print form :

  • Vous appelez PRINT SETTINGS. Dans ce cas, vous laissez l'utilisateur définir ses paramètres dans les boîtes de dialogue d'impression.
  • Vous appelez _o_PAGE SETUP. Dans ce cas, les paramètres sont définis par programmation.

Print form construit chaque page à imprimer en mémoire. La page n'est imprimée que lorsqu'elle est entièrement remplie ou lorsque vous appelez PAGE BREAK. Pour vous assurer que la dernière page d'une impression exécutée par l'intermédiaire Print form soit effectivement imprimée, vous devez conclure par un appel à la commande PAGE BREAK (hormis dans le contexte d'un OPEN PRINTING JOB, cf. note). Sinon, la dernière page, si elle n'est pas pleine, reste en mémoire et n'est pas imprimée.

Attention: Si la commande est appelée dans le contexte d'une tâche d'impression ouverte avec OPEN PRINTING JOB, vous ne devez PAS appeler PAGE BREAK pour la dernière page car celle-ci est automatiquement imprimée par la commande CLOSE PRINTING JOB. Si vous appelez PAGE BREAK dans ce cas, une page vide est imprimée.

Cette commande imprime les zones et objets externes (par exemple des zones 4D Write ou 4D View). La zone est réinitialisée à chaque exécution de la commande.

Attention : Print form n'imprime pas les sous-formulaires. Si vous voulez imprimer uniquement un formulaire comportant de tels objets, utilisez plutôt PRINT RECORD.

Print form ne génère qu'un événement On Printing Detail pour la méthode formulaire.

4D Server : Cette commande peut être exécutée sur 4D Server dans le cadre d'une procédure stockée. Dans ce contexte :

  • Veillez à ce qu’aucune boîte de dialogue n’apparaisse sur le poste serveur (sauf besoin spécifique).
  • En cas de problème sur l’imprimante (plus de papier, imprimante déconnectée, etc.), aucun message d'erreur n'est généré.

Exemple 1

L'exemple suivant effectue la même chose que ce que ferait la commande PRINT SELECTION. Cependant, l'état utilise deux formulaires différents suivant le type d'enregistrement (chèque émis ou dépôt) :

 QUERY([Opérations]) // Permettre à l'utilisateur de sélectionner les enregistrements
 If(OK=1)
    ORDER BY([Opérations]) // Permettre à l'utilisateur de trier les enregistrements
    If(OK=1)
       PRINT SETTINGS // Afficher les boîtes de dialogue d'impression
       If(OK=1)
          For($i;1;Records in selection([Opérations]))
             If([Opérations]Type="Chèque") // Si c'est un chèque…
                Print form([Opérations];"SortieChèque") // Use un formulaire de chèque
             Else // Else c'est un dépôt donc…
                Print form([Opérations];"SortieDépôt") // Use un formulaire de dépôt...
             End if
             NEXT RECORD([Opérations])
          End for
          PAGE BREAK //S'assurer que la dernière page est imprimée
       End if
    End if
 End if

Exemple 2

Reportez-vous à l'exemple de la commande SET PRINT MARKER.

Exemple 3

Ce formulaire est utilisé comme dialogue, puis imprimé avec des modifications :

La méthode formulaire :

 If(Form event code=On Printing Detail)
    Form.lastname:=Uppercase(Form.lastname)
    Form.firstname:=Uppercase(SUBSTRING(Form.firstname;1;1))+Lowercase(SUBSTRING(Form.firstname;2))
    Form.request:=Lowercase(Form.request)
 End if

Le code qui appelle la boîte de dialogue ensuite imprime son corps :

 $formData:=New object
 $formData.lastname:="Smith"
 $formData.firstname:="john"
 $formData.request:="I need more COFFEE"
 $win:=Open form window("Request_obj";Plain form window;Horizontally centered;Vertically centered)
 DIALOG("Request_obj";$formData)
 $h:=Print form("Request_var";$formData;Form detail)

Voir aussi

CANCEL
PAGE BREAK
PRINT SETTINGS
SET PRINT OPTION