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

    From The Document Foundation Wiki
    < Macros‎ | Base


    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

    Document exemple