Comment paramétrer un rapport avec des champs d'un formulaire ?
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
Description
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.
Code
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