[Résolu] Publiposter des données d'un ODB par enregistrement

Discussions à propos du traitement de textes Writer mais également sur l'éditeur HTML.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 17:28

[Résolu] Publiposter des données d'un ODB par enregistrement

Message par martinterrier »

Bonjour à tous,

Etant entrain de développer une Base, je commence à m'intéresser à son utilisation concrète et notamment au publipostage. Il s'agit en effet d'une Base à partir de laquelle je vais avoir beaucoup de courriers différents à imprimer.

J'ai donc le choix entre Rapport et Publipostage. Après recherche, je comprends les avantages et inconvénients de chacun comme suit :

- Rapport : intégré à Base, il donne le résultat tel que conçu dans la Base de Données (il "concatène" les informations, pas de redondance si la Base est bien faite). Mais la mise en page de ces Rapports peut être laborieuse et n'est pas aussi aisée que sur le Publipostage Writer.
- Publipostage Writer: Mise en page classique et aisée d'un document de type lettre. Problème : il n'y a pas de "concatènation" des informations. C'est à dire qu'il y aura autant de lettres créees qu'il y a de lignes dans la Base de données.

Pour bien me faire comprendre, le tableau en PJ est l'idée du fonctionnement de la Base.
Tableau.pdf
- Avec Rapport, j'aurais 2 lettres distinctes pour les deux PV différents.
- Avec le Publipostage : j'aurais sept lettres différentes, correspondant à toutes ces lignes de la Base.

Je n'ai pas trouvé d'aide dans le Forum, le sujet ayant par exemple été résolu par un réajustement de la Base (https://forum.openoffice.org/fr/forum/v ... er#p351095), ce qui ne me semble pas être la problématique ici puisque j'obtiens les rapports que je souhaite obtenir (cf Pj également).

Je remets la Base, enfin, si je n'ai pas été assez explicite.
SUIVI_PV_V4_4.odb
Ainsi, est-il possible de ne retenir que le meilleur des deux outils pour le publipostage et si oui, lequel selon votre expérience?

Merci à tous et bon weekend!
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par martinterrier le 10 janv. 2022 15:07, modifié 3 fois.
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 946
Inscription : 19 août 2018 05:20

Re: Publipostage depuis une base de données Base

Message par Dolev »

Bonjour,
martinterrier a écrit :Publipostage Writer: Mise en page classique et aisée d'un document de type lettre. Problème : il n'y a pas de "concatènation" des informations.
La concaténation se fait dans Base avec l'instruction CONCAT.
Tu fais une requête que tu peux tout à fait utiliser dans Writer ensuite.
Il suffit de sélectionner la bonne rubrique dans le volet "Source de données".
Open Office 4.1.15 sous Windows 11
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 17:28

Re: Publipostage depuis une base de données Base

Message par martinterrier »

Bonjour Dolev,

Merci pour ta réponse.

Je me suis donc rendu dans la requête que j'ai édité via "Editer en mode SQL", puisque CONCAT() ne semble pas exister dans les fonctions proposées (je m'interroge d'ailleurs sur l'utilité des fonctions "RASSEMBLER" et "FUSIONNER" qui me sont proposées, mais qui buggent si je les utilisent). J'ai alors placé les instructions CONCAT(), d'abord sur l'ID_PV, puis, ne parvenant pas à réaliser l'opération, sur l'ensemble des champs à concaténer. Cf la requête REQ_PV ci-jointe:
SUIVI_PV_V4_4.odb
Je n'ai pas de message d'erreur, mais pas de concaténation non plus...

Je ne cache pas ne pas être du tout familier avec le SQL : je suppose que l'instruction est mal rédigée (parenthèses mal placées?), puisque j'obtiens toujours 7 pages sans données concaténées, alors que je souhaiterais n'en obtenir que 2 sur le modèle .odt que je joins (le champ principal est Id_PV, dans cet exemple je cherche à regrouper les données des 2 procès verbaux sur 2 pages distinctes, et non 7 qui correspond au nombre de codes d'infraction (NATINF).
test_publipostage.odt
Bon dimanche et encore merci!
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 946
Inscription : 19 août 2018 05:20

Re: Publipostage depuis une base de données Base

Message par Dolev »

Re,

Pourquoi ne pas mettre en ligne dans ton message cette requête ?

Code : Tout sélectionner

SELECT CONCAT( "T_SAISIE_PV"."ID_PV" ), CONCAT( "T_MIS_EN_CAUSE"."NOM_MIS_EN_CAUSE" ), CONCAT( "T_MIS_EN_CAUSE"."PRENOM_MIS_EN_CAUSE" ), "T_NATINF"."CODE_NATINF" FROM "T_DETAILS_MIS_EN_CAUSE", "T_MIS_EN_CAUSE", "T_NAVIRES", "T_SAISIE_PV", "T_DETAILS_CODES_NATINF", "T_NATINF", "T_QUALITE" WHERE "T_DETAILS_MIS_EN_CAUSE"."ID_MIS_EN_CAUSE" = "T_MIS_EN_CAUSE"."ID_MIS_EN_CAUSE" AND "T_DETAILS_MIS_EN_CAUSE"."ID_NAVIRE" = "T_NAVIRES"."ID_NAVIRE" AND "T_DETAILS_MIS_EN_CAUSE"."ID_PV" = "T_SAISIE_PV"."ID_PV" AND "T_DETAILS_CODES_NATINF"."ID_CODE_NATINF" = "T_NATINF"."ID_CODE_NATINF" AND "T_DETAILS_CODES_NATINF"."ID_MIS_EN_CAUSE" = "T_DETAILS_MIS_EN_CAUSE"."ID_MIS_EN_CAUSE" AND "T_QUALITE"."ID_QUALITE" = "T_MIS_EN_CAUSE"."ID_QUALITE_MIS_EN_CAUSE"
Ce n'est pas comme ça qu'on utilise CONCAT qui prend deux arguments comme expliqué récemment dans ce fil :
https://forum.openoffice.org/fr/forum/v ... =9&t=64361
Open Office 4.1.15 sous Windows 11
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Publipostage depuis une base de données Base

Message par jeanmimi »

je suppose que l'instruction est mal rédigée (parenthèses mal placées?), puisque j'obtiens toujours 7 pages sans données concaténées
La concaténation dans une Requête est, a minima, celle d'au moins deux champs de la Table.
Par exemple, si dans une Table contenant des champs "Prénom", "NOM", "Date de naissance", on veut concaténer ces trois champs, l'instruction SQL sera :

Code : Tout sélectionner

CONCAT("Prénom", CONCAT("NOM", "Date de naissance"))
et donnera le résultat
PrénomNOMDate de naissancece qui visuellement n'est pas très heureux. Évidemment, ce serait mieux avec des espaces entre les champs, voire avec une mention comme né le
Avec CONCAT, ça devient un peu compliqué :

Code : Tout sélectionner

CONCAT("Prénom",CONCAT(' ',CONCAT("NOM",CONCAT(' né le ',"Date de naissance"))))
ce qui donnera Prénom NOM né le Date de naissance

Dès que le nombre de champs à concaténer devient plus important, j'utilise cette deuxième possibilité pour concaténer :

Code : Tout sélectionner

"Prénom"||' '||"NOM"||' né le '||"Date de naissance"
ce qui donnera aussi Prénom NOM né le Date de naissance
Il restera plus qu'à entrer un Alias dans ce champ de la Requête, en particulier si on veut créer un Rapport.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 17:28

Re: Publipostage depuis une base de données Base

Message par martinterrier »

Bonjour à tous,

Je m'aperçois donc qu'il y a eu un malentendu dans nos échanges!

Je ne cherche à concaténer des champs - mea culpa pour l'emploi de ce terme - mais à faire figurer, via un publipostage, les données d'une Base, sans que le logiciel crée en publipostage un document par ligne.

je cherche à avoir en effet un document par procès verbal et non par ligne produite par la requête.

Pour clarifier en donnant un exemple:
- un procès verbal peut contenir deux contrevenants à qui trois infractions sont repprochées. Par requête, j'obtiens donc quelque chose comme

PV Contrevenant Code infraction
1 Thierry Lassalle 22560
1 Thierry Lassalle 22564
1 Bernard Soubiroux 22560
1 Bernard Soubiroux 22564


Publipostage sous Writer va créer 4 enregistrements distincts.
Je souhaitais donc savoir, à l'image de ce que fait un Rapport dans Base, s'il était possible de rassembler ces données du PV 1 en un seul document via le publipostage Writer, sur lequel aucune information ne serait alors redondante.

jeanmimi m'a indiqué qu'il pouvait s'agir de publipostage par numéro, mais qu'il ne parvenait pas à le faire fonctionner. Peut-être quelqu'un aura-t-il cette expérience?

Bonne journée à tous!
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Publipostage depuis une base de données Base

Message par Dude »

Salut,


Comme toujours un titre clair et explicite permet de faciliter le travail de réponse des bénévoles :
martinterrier a écrit :les données d'une Base, sans que le logiciel crée en publipostage un document par ligne
A corriger pour "Publiposter des données d'un ODB par ligne" qui me semble plus clair.

Image
https://forum.openoffice.org/fr/forum/v ... 29&t=20402
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 17:28

Re: Publipostage depuis une base de données Base

Message par martinterrier »

Bonjour Dude,

Je ne pensais pas qu'il était acceptable, une fois le sujet lancé, de modifier son titre.

Je vais plutôt proposer comme titre "par enregistrement", qui me parait plus clair, un enregistrement pouvant susciter de multiples lignes.

merci pour le tutoriel, je ne connais pas la fonction catalogue de word.

Bon après-midi!
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 17:28

Re: Publiposter des données d'un ODB par enregistrement

Message par martinterrier »

exemple_table_dynamique.ods
Bonjour à tous,

J'ai enfin pris le temps de tester la solution proposée : je m'excuse pour ce long silence.

la fonction catalogue ne me semble pas répondre à mon interrogation : la fonction catalogue permet d'éviter la répétition de champs comme un en-tête, par exemple.

Cela n'est pas ce que je rechercher : c'est pour cela que je précisais "par enregistrement".

Dans mon exemple, il faut entendre par enregistrement, un PV. Mais au sein de ce PV, il y a une multitude d'enregistrements dans des tables qui sont reliées à la table PV (principale) via des relations (champs maitre et champs esclave).

Ainsi, à un enregistrement PV sont associés une multitude de "sous enregistrements" d'autres tables.
Concrètement : dans un seul procès verbal, plusieurs mis en cause et plusieurs infractions relevées.

Dans la Base, exportée par exemple vers libre calc, cela se traduit comme cela :
exemple.ods
J'ai donc, dans cet exemple, 8 enregistrements au sens de l'affiche page, alors que je n'ai que deux PV (ID_PV 0 et ID_PV 1).
Si j'utilise le publipostage "normal", j'obtiendrai 8 pages différentes (ou 8 segments).
Dans mon souhait de publipostage, je souhaite qu'il n'y ait que deux "segments" ou pages, contenant toutes les données relatives, respectivement au PV ID_PV 0 et ID_PV1), sachant bien entendu que je ne souhaite obtenir qu'une fois l'information ID_PV 0, qui n'aurait aucune valeur a être répétée à de nombreuses reprises sur une même page comme c'est le cas dans un tableau.

Formulé encore différemment, je souhaite obtenir ce que fait l'outil Rapports dans Base (c'est à dire : condenser les informations de la Base, sans redondance), mais sous Libre Writer, qui permet une mise en page de documents et des modifications beaucoup plus aisées.
l'équivalent sous Calc de cette agrégation de champs serait également la table dynamique: n'apparait dans la table qu'une fois le numéro d'ID_PV pour l'ensemble des enregistrements associés (5 pour ID_PV 0, 2 pour ID_PV_1).
Ex:
exemple_table_dynamique.ods

J'espère avoir été plus clair dans mon besoin!

Merci par avance et bonne journée!
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 946
Inscription : 19 août 2018 05:20

Re: Publiposter des données d'un ODB par enregistrement

Message par Dolev »

Re,

Pourquoi fournir un ODS qui ne permet pas de faire du relationnel ?
Tu dois créer une requête dans Base qui te permettra de faire ton catalogue (relire mon message du 04/09/21).
martinterrier a écrit :merci pour le tutoriel, je ne connais pas la fonction catalogue de word.
Pourquoi parler du logiciel de Microsoft ? :shock:
Open Office 4.1.15 sous Windows 11
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Publiposter des données d'un ODB par enregistrement

Message par jeanmimi »

Bonjour,
Si je comprends bien, tu veux, pour un PV, grouper plusieurs enregistrements, dans l'exemple il s'agit de plusieurs mis en cause ayant commis plusieurs infractions.
Tu as raison, le Rapport de Base le fait sans problème.
Le publipostage par numéro d’enregistrement est aussi sensé pouvoir le faire.
Comme tu fais le parallèle avec la Table dynamique, tu peux de la même façon Glisser/Déposer une requête dans une page Texte ou une Feuille Calc.
Pour le faire, dans la Base, tu crées une Requête qui permet de sélectionner le numéro du PV en insérant un point d'interrogation dans le critère. Au lancement de la requête, ce point d'interrogation sera compris comme une invite à ne sélectionner qu'un seul PV.
Requête pour sélectionner.png
Ensuite, tu fais glisser ta requête dans une page de Texte, ce qui lancera l'Assistant qui te demandera pour quel Numéro de PV tu souhaites ce Glisser/Déposer et pour quels champs.
Choix du PV lors du glisser déposer.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 17:28

Re: Publiposter des données d'un ODB par enregistrement

Message par martinterrier »

Merci jeanmimi, le "?" est en effet très simple et efficace à utiliser, j'y penserai pour mes futurs besoins!

Par contre je butte toujours pour trouver de la documentation sur la mise en oeuvre du "publipostage par numéro d'enregistrement".

J'ai bien trouvé l'existence du publipostage sous Insertion / Champ / autres champs / base de données, mais je trouve les instructions fort peu explicites.


L'aide indique :
Enregistrement par numéro

Insère, en tant que champ de mailing, le contenu du champ de base de données que vous avez spécifié dans la zone Numéro de l'enregistrement si la Condition que vous avez saisie est remplie. Seuls les enregistrements ayant été sélectionnés par une sélection multiple dans la vue de la source de données sont pris en compte.

Ce champ vous permet d'insérer plusieurs enregistrements dans un document. Il vous suffit d'insérer le champ Enregistrement par numéro juste avant les champs de lettre type qui utilisent un enregistrement donné.
J'avoue ne pas comprendre la phrase que je souligne. Est-ce la vue que l'on obtient depuis "Affichage / Source de données"? Si oui, je ne suis pas parvenu à un résultat probant, même en sélection multiple...


Si quelqu'un a une pratique du sujet... merci d'avance!
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10
martinterrier
Membre OOrganisé
Membre OOrganisé
Messages : 97
Inscription : 21 avr. 2021 17:28

Re: Publiposter des données d'un ODB par enregistrement

Message par martinterrier »

Bonjour à tous,

Après recherches et prise en main de l'outil "Rapports", j'ai trouvé, dans l'usage de cet outil, la satisfaction de mes besoins en matière de publipostage: s'il est vrai que l'outil est relativement instable, comme l'indique la documentation, et comporte un certain nombre de bugs (par exemple : difficulté / impossibilité de déplacer des champs dans les pieds de page de rapport lorsqu'un certain nombre de champs figurent déjà sur ledit rapport), je suis parvenu à créer des formulaires très satisfaisants, professionnels et, donc, alimentés de manière intelligente, sans redondance d'informations pour plusieurs enregistrements.

Ainsi, pour synthétiser mon expérience et si d'autres profanes lisent ce fil, je dirais :

- publipostage libre writer : parfait pour une utilisation de données "simples" d'une Base, c'est à dire de données uniques telles que les adresses, la civilité, etc.
- rapports : parfait pour l'exploitation automatisée des données contenues dans la Base, quand il y a plusieurs entrées qui ont des champs maitre et esclaves entre eux.

Bonne journée à tous et merci pour vos contributions, je considère ce fil comme résolu puisque je suis parvenu à un résultat satisfaisant.
Obligation de version :
Libre Office 7.1.8.1 (x64) sous Windows 10