Utilisation de 4D Write Pro au lieu de 4D Write

Product :4D - 4D Server v17
OS : Mac OS X

Bonjour,

j’utilisais 4D Write depuis des années, et je travaille à la migration vers 4D Write Pro (4D WP).
La conversion des documents existants a été simple.
Mais je bute sur le problème suivant :
je génère des documents de type lettre contenant 1 entête (coordonnées et infos sur l’expéditeur), 1 corps, 1 pied : rien d’exceptionnel donc !
Il y a dans la base,une bibliothèque de documents types, et on ajuste les valeurs de variables (expressions) 4D.
Si j’imprime tout de suite derrière (mettons le champ [IMPRIME_TYPE]Champ_Write_Pr) :
WP IMPRIMER([IMPRIME_TYPE]Champ_Write_Pr)
j’ai exactement ce que j’attends.

Dans une autre table ([COURRIER], j’archive les dits courriers.
Dans cette autre table, j’ai donc créé un champ objet pour accueillir le document 4D WP : [COURRIER]Champ_Write_Pr

J’écris donc :
[COURRIER]Champ_Write_Pr:=[IMPRIME_TYPE]Champ_Write_Pr juste après avoir renseigné les variables de [IMPRIME_TYPE]Champ_Write_Pr

MAIS…, si je lis l’enregistrement ainsi créé dans [COURRIER] :
seul le corps a bien les valeurs de [IMPRIME_TYPE]Champ_Write_Pr
l’entête n’a pas gardé les valeurs …(parmi lesquelles des variables texte, et des images (logo, codes barre))

Qu’est-ce que j’oublie ? (à supposer que ma question soit compréhensible !)

Merci
Marc

Tu utilises cette commande pour rafraîchir tes expressions ?
<code 4D>
ST CALCULER EXPRESSIONS(*;$NomZone;ST Début texte;ST Fin texte)

</code 4D>

Bonjour,

non, pour l’instant, je n’ai fait appel à aucune commande de la famille ST xxx

Pour mieux illustrer ma question :

Voici ce que j’imprime avec la commande WP IMPRIMER (maZOne Write Pro)

Formulaire de dépôt

[]33924941;“l’imprimé”[/]

Et voici ce que je récupère si j’ouvre la zone recopiée dans ma table d’archivage :

[]33924963;“l’archivage”[/]

C’est quoi les elements dans ton entête tu parles de variables ? c’est des champs 4D, des expressions, des formules ???

Si c’est des elements qui sont susceptibles d’être recalculés ET que tu ne figes pas ces elements, ils ne seront pas enregistrés dans ton objet archivé (ou plutôt ils le sont, mais ils vont s’afficher vide).

Donc, pour enregistrer l’objet avec les elements figés, il faut procéder différemment ou recalculer “tes variables” dans ta table archive (càd. il faut charger les liens, etc… ET recalculer ton document) pour au final FIGER les expressions pour que ton doc ne varie plus.

les éléments dans l’entête sont des variables (process) textes et des images (process)
Elles sont renseignées par le code, à partir de champs de diverses tables

L’entête doit correspondre au profil de l’auteur de l’imprimé :
nom
prénom
code barre de son immatriculation professionnelle
numéro d’enregistrement professionnel,

autant de données provenant d’une table et rafraichies par une méthode qui nourrit les variables de l’entête

J’ai essayé, suite à ta réponse de “recalculer” en passant en paramètre à ST CALCULER EXPRESSIONS la zone 4D Write Pro
alors que les variables sont encore chargées avec les bonnes valeur (dans le mode trace)
Mais c’est toujours vide

Avant d’enregistrer ton objet, il faut le figer
si tu ne veux pas perdre des infos, il faut faire cela juste avant ou juste après ton impression qui fonctionne.

<code 4D>
C_OBJET($ZONEFIGEE)
$ZONEFIGEE:=OB Copier([IMPRIME_TYPE]Champ_Write_Pr ) //copie directe
ST FIGER EXPRESSIONS($ZONEFIGEE;ST Début texte;ST Fin texte) //on fige la zone
[COURRIER]Champ_Write_Pr:=$ZONEFIGEE //on enregistre la zone objet figée
//puis sauvegarder ton enregistrement de la table [COURRIER]

</code 4D>

C’est exactement ce que je faisais avec 4D Write :

Ancien code :
WR FIXER SELECTION (Zone_Write;1;1) //à laisser absolument
//sinon la mise à jour et figer references se fait mal
//mais je ne sais pas pourquoi…
WR EXECUTER COMMANDE (Zone_Write;wr cmd mise à jour références)
WR EXECUTER COMMANDE (Zone_Write;wr cmd figer références)
$blob:=WR Zone vers blob (Zone_Write;1)
COMPRESSER BLOB($blob)
[COURRIER]Le_Blob_:=$blob
STOCKER ENREGISTREMENT([COURRIER]) : et là tput était bon

mais là, ça ne le fait toujours pas : l’entête s’entête à rester “blanc”…
nouveau code :
WP IMPRIMER([IMPRIME]Write_Pro) : l’imprimé est 100% correct
C_OBJET($ZONEFIGEE)
$ZONEFIGEE:=OB Copier([IMPRIME]Write_Pro) //copie directe
ST FIGER EXPRESSIONS($ZONEFIGEE) //on fige la zone
[COURRIER]Write_Pro:=$ZONEFIGEE
STOCKER ENREGISTREMENT([COURRIER]) : entête “blanc”

Scrogneugneu…

La réponse est https://forums.4d.com/Post/FR/28686515/1/28712596#28710107là> en anglais :wink:

Il faut freezer les 3 parties une après l’autres…

Pour le cas où vous n’auriez pas acces au forum BETA

voici l’extrait de la citation de Roland.

: Roland LANNUZEL

The toolbar button applies the the (sub) area with the focus, not to
the full document. The header, the body, and the footer are distinct
internal areas, so you could try setting the cursor inside the body
before freezing expressions.

If you want to freeze everything at once, you have to select the
frames first :

<code 4D>

WP SET FRAME(;“WParea”;wk current section default header)
ST FREEZE EXPRESSIONS(
;“WParea”;ST Start text;ST End text)

WP SET FRAME(;“WParea”;wk body)
ST FREEZE EXPRESSIONS(
;“WParea”;ST Start text;ST End text)

WP SET FRAME(;“WParea”;wk current section default footer)
ST FREEZE EXPRESSIONS(
;“WParea”;ST Start text;ST End text)

</code 4D>

I know this this not optimal (yet) but notice I used the ST command.
When a native (i.e. WP) command will be available, any king of target
(including the full document) will be avaliable as first parameter.
(this has already been discussed in another threadSmile

Bonjour,

merci beaucoup, j’ignorais…
Mais, je suis maudit :
le code ci-dessous ne passe pas :

WP IMPRIMER([IMPRIME]Write_Pro)

C_OBJET($ZONEFIGEE)
$ZONEFIGEE:=OB Copier([IMPRIME]Write_Pro) //copie directe

WP FIXER CADRE($ZONEFIGEE;wk current section default header) //on fige l’entête
ST FIGER EXPRESSIONS($ZONEFIGEE;ST Début texte;ST Fin texte)

WP FIXER CADRE($ZONEFIGEE;wk body) //on fige le corps
ST FIGER EXPRESSIONS($ZONEFIGEE;ST Début texte;ST Fin texte)

WP FIXER CADRE($ZONEFIGEE;wk current section default footer) //on fige le pied
ST FIGER EXPRESSIONS($ZONEFIGEE;ST Début texte;ST Fin texte)

du coup, j’ai essayé :
WP FIXER CADRE(*;"$ZONEFIGEE";wk current section default header) //on fige l’entête

passe pas non plus…

Désolé pour tout ce bruit…

Alors là je commence à sécher :frowning:
Éventuellement, faire l’inverse c’est à dire copier la zone pour la sauvegarder, puis figer la zone écran (il semble qu’il faille travailler avec une zone active), sauvegarder cette zone, puis enfin restaurer la zone non figée…

En testant ainsi, tu pourrais voir aussi ce que tu obtiens après avoir figée la zone dans ton entête :idea:

je me demande si ce n’est pas parce que je fais du “hors écran” (ce qu’on pouvait faire avec 4D Write) ?

je progresse un chouïa (dans mon analyse) :
si la zone est affichée dans un écran, les commandes WP FIXER CADRE et ST FIGER EXPRESSIONS fonctionnent bien

et si je copie ensuite dans une archive les éléments figés (entete, corps et pied), tout y est (pour la première fois)

mais ça ne répond pas à mon besoin… (qui est de pouvoir archiver juste après impression des courriers générés par programmation, le tout hors écran)

On avance quand même… :roll:

Certes à petits pas, mais on avance :mrgreen:

Il y aura https://blog.4d.com/4d-write-pro-and-formulas/des
nouveautés interessantes> sur le sujet dans les prochaines versions en
v18R2.
Je sais cela vous fait une belle jambe surtout si vous n’avez pas
accès à ces versions mais le descriptif
<https://doc.4d.com/4Dv18R2/4D/18-R2/WP-FREEZE-FORMULAS.301-4831166.fe.
tml>des nouvelles commandes> dans la Doc en BETA est instructif.

Avez-vous un accès Partner ?

Il est mentionné par exemple:

: Doc 4D

Les formules sont évaluées :
lorsqu’elles sont insérées dans un objet formulaire qui affiche des
valeurs calculées
lorsque l’objet 4D Write Pro est chargé dans un objet formulaire qui
affiche des valeurs calculées
lorsque la commande WP CALCULER FORMULES est appelée
lorsqu’elles sont “gelées” à l’aide de la commande WP FIGER FORMULES
(si elles ne sont pas encore calculées)
avant impression (si elles ne sont pas encore calculées)
avant d’être exportées au format .docx (si la formule ne peut pas
être avec mappée avec les formules MS Word)
Les formules ne sont pas évaluées lorsqu’un document est chargé (à
l’aide de WP Nouveau, WP INSERER DOCUMENT ou wpArea:=[table]field) :
si le document est uniquement hors écran
si le document s’affiche à l’écran mais l’objet formulaire ne montre
que les références.
Les formules deviennent des valeurs statiques si vous appelez la
commande WP FIGER FORMULES (à l’exception du nombre et du numéro de
pages, voir ci-dessous).

Du coup, il faudrait peut-être essayer de calculer les expressions AVANT de les figées mais est-ce que cela fonction avec des zones hors écran dans une version v17 de 4D… :?:

Je crois que j’ai donné mon max, je ne travaille plus que sur la v18 maintenant et je n’ai commencé ma migration sous 4D Write Pro qu’à partir de cette version (trop de problèmes de conversion avant en ce qui me concerne).

Merci beaucoup, pour toutes les réponses, sincèrement.
Ca m’a permis de beaucoup avancer, tester,…
Je constate que pour l’instant, l’environnement “hors écran” est problématique avec Write Pro
Je vais peut-être devoir attendre.

Cordialement

Hello Marc,
ça répond pas à la question write, mais en lisant ce fil, je me demande : tant qu’à conserver des courriers en archive, si write pro ne coopère pas, c’est peut-être le moment de se demander si en pdf ça vaut le coup ? Du moins si les courriers en question n’ont plus à être modifiés…

Hello Arnaud,
c’est une piste intéressante !
En effet, je parle là de courriers “figés” qui permettent une traçabilité, mais n’ont plus à être modifiés.
Donc ouaïe note

A+