Insertion dans un rapport d'un champ de formulaire non stocké dans une table

Bonjour.

J’imprime des relevés mensuels individuels qui tirent les coordonnées de chaque personne dans une requête (une requête fixe, qui n’est jamais paramétrée, filtrée ou rien d’autre). En entête du rapport, doivent figurer un mois et une année (généralement les suivants mais pas toujours) ainsi qu’une date limite d’échéance. Pour le moment, j’ai ajouté ça dans la requête avec une UNION avec une table spécifique mais je trouve que ça n’est pas très “élégant”.

Ainsi j’aimerais savoir si il est possible d’insérer dans un rapport le contenu d’un (ou plus) contrôle de champ de formulaire qui ne serait stocké dans aucune table ?

Merci.

Bonjour @Primus (@reginacoco pour info.)

Pas sûr que ce soit plus “élégant” (n’étant pas un arbitre dans ce domaine) mais enfin tu peux inclure ce que tu veux dans le rapport généré par un programme du type :

sub GenererReport(oEvent)

dim oForm as Object, oCell as object, oEtat As Object
dim DateDebut as date, DateFin as date

oForm = thisComponent.DrawPage.Forms.getByName("F_report")

DateDebut = CDateFromUnoDate(oForm.getByName("ChampsDateDebut").date)
DateFin = CDateFromUnoDate(oForm.getByName("ChampsDateFin").date)

oEtat = ThisDatabaseDocument.ReportDocuments.getByName("ParamParMacro").open

oCell = oEtat.TextTables.getByName("En-tête_de_rapport0").getCellByName("B1")
oCell.setString(DateDebut)

oCell = oEtat.TextTables.getByName("En-tête_de_rapport0").getCellByName("E1")
oCell.setString(DateFin)

oCell = oEtat.TextTables.getByName("Detail").getCellByName("C3")
oCell.setString("essai")

end sub

Explications

  • Les rapports générés sont des documents de type Writer
  • Les sections du rapport (en-têtes, pieds, détail) sont des tableaux Writer
  • On peut donc accéder aux cellules concernées pour les modifier.

Voir ParamDansRapport.odb (30,0 Ko)

Cordialement

C’est ça. :slightly_smiling_face: J’avais recherché et trouvé une base tuto du même genre mais il fallait indiquer les valeurs voulues (dans des contrôles étiquettes) dans la macro, ce qui fait qu’on devait les modifier à chaque fois en mode édition. Pas pratique du tout… Et là effectivement, comme la requête est toujours la même, pas besoin de la relier au formulaire, juste dans le rapport.

Une nouvelle fois merci pour ton aide…

Je crois que j’ai parlé trop vite. Ça fonctionne pour un document unique, du genre listing. Dans mon cas il s’agit de fiches, avec entêtes individuelles où doivent figurer les champs, comme ceci :

Que je place les champs dans l’entête de page ou comme ici, dans l’entête de groupe, ils ne s’affichent que sur le premier rapport. Ici, pour le premier champ :

oCell = oEtat.TextTables.GetByName("En-tête_de_groupe").GetCellByName("C7")

Et évidemment, ensuite il y aura:

En-tête_de_groupe1
En-tête_de_groupe2
En-tête_de_groupe3
Etc.

Qui ne sont pas codés dans la macro.

Et les personnes qui essaient d’aider sont supposées concevoir une base conforme à tes données et créer un rapport de toute pièces susceptibles de tomber pile-poil sur ton besoin ?

Je crains que tu ne surestimes nos capacités de divination :slight_smile:

C’est vrai que je n’ai pas creusé beaucoup (et les plantages à répétition de LO avec les rapports en mode édition n’encouragent pas à faire beaucoup d’essais). Mais je devrais pouvoir y arriver en plaçant les champs dans une entête de groupe, placé différemment dans le rapport, où l’ID est alors répété…

Ça n’était finalement pas grand-chose : dans l’entête de groupe PER_NOM_1, paramétrer “Répéter la section” sur Oui. Ou directement dans l’entête de page.