Macros

From The Document Foundation Wiki
< Macros‎ | Base
Jump to: navigation, search

Comment paramétrer un rapport avec des champs d'un formulaire ?

On souhaite filtrer un rapport avec des paramètres saisis dans un formulaire : l'utilisateur saisit des critères dans le formulaire, clique sur un bouton pour ouvrir un rapport qui utilisera les champs saisis pour filtrer les données en fonction des critères.

La solution présentée ici consiste à fonder le rapport sur une requête. Le programme modifiera le SQL de la requête avant d'ouvrir le rapport. Dans cet exemple le formulaire permet de saisir une date de début et une date de fin. On souhaite exécuter le rapport sur les données comprises entre ces dates.

Le principe est le suivant :

  • "Remonter" de l'événement appelant (le clic sur le bouton du formulaire) au "parent", puis à la connexion et de celle-ci à la requête.
  • Le SQL de la requête est modifié : modification de la clause BETWEEN.

La procédure est associée à l'événement Exécuter l'action du bouton :

sub GenererReport(PysEvent)

dim oConnexion As Object, oForm as Object
dim dbDoc As Object, monEtat As Object, lesEtats As Object

dim props(0) as new com.sun.star.beans.PropertyValue

dim DateDebut as date
dim DateFin as date

oConnexion = PysEvent.Source.Model.Parent.ActiveConnection

props(0).Name = "ActiveConnection"
props(0).Value = oConnexion

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

DateDebut = datevalue(oForm.getByName("ChampsDateDebut").Text)
DateFin = datevalue(oForm.getByName("ChampsDateFin").Text)

oConnexion.queries.getByName("Req_date").Command = _
        "SELECT ""Id"", ""Personne"", ""date"" FROM ""Table1"" WHERE ""date"" BETWEEN '" & _
        year(DateDebut) & "-" & month(DateDebut) & "-" & day(DateDebut) & _
        "' AND '" & _
        year(DateFin) & "-" & month(DateFin) & "-" & day(DateFin) & "'"

dbDoc = oConnexion.Parent.DatabaseDocument
lesEtats = dbDoc.ReportDocuments
monEtat = lesEtats.loadComponentFromURL("Req_date", "", 0, props())
'monEtat.print(Array())
'monEtat.CurrentController.Frame.close(True) ' fermer le rapport

end sub