F.A.Q. Business-Objects
F.A.Q. Business-ObjectsConsultez toutes les FAQ
Nombre d'auteurs : 15, nombre de questions : 101, dernière mise à jour : 15 juin 2021
- Comment récupérer les réponses utilisateur aux invites ?
- Comment lister les variables créées dans le document ?
- Comment supprimer le message : La requête ne retourne aucune donnée ?
- Comment produire un pdf par rapport ?
- Quels formats d'Export en VBA selon les versions ?
- Comment poser un filtre complexe et exporter en pdf ?
Public
Sub
mesinvites
(
)
'Bruno Roman-Ruiz http://bruno-roman-ruiz.developpez.com/index/
'20080207 22:00 BO V6.5.1
'Lister les variables crées par l'utilisateur
Dim
Doc As
Document
Dim
DpVars As
Variables
Dim
DpVar As
Variable
Dim
txt As
String
Dim
nbv As
Integer
Application.Interactive
=
True
Set
Doc =
Application.ActiveDocument
Set
DpVars =
Doc.Variables
txt =
""
nbv =
0
For
Each
DpVar In
DpVars
nbv =
nbv +
1
txt =
Chr
(
10
)&
Chr
(
10
) &
" ["
&
nbv &
"] Variable "
&
DpVar.Name
&
Chr
(
10
) &
"Valeur : "
&
DpVar.Value
Debug.Print
txt
Next
Debug.Print
Chr
(
10
) &
Chr
(
10
) &
Doc.Name
&
" contient "
&
nbv &
" variables :"
End
Sub
Voici un petit script de procédure qui établit la liste dans la fenêtre d'exécution des variables créées par l'utilisateur :
Public
Sub
mesvariables
(
)
'Bruno Roman-Ruiz http://bruno-roman-ruiz.developpez.com/index/
'20080207 22:00 BO V6.5.1
'Lister les variables crées par l'utilisateur
Dim
Doc As
Document
Dim
DocVars As
DocumentVariables
Dim
DocVar As
DocumentVariable
Dim
txt As
String
Dim
nbv As
Integer
Application.Interactive
=
True
Set
Doc =
Application.ActiveDocument
Set
DocVars =
Doc.DocumentVariables
txt =
""
nbv =
0
For
Each
DocVar In
DocVars
If
DocVar.Name
élt; >
""
Then
nbv =
nbv +
1
txt =
Chr
(
10
) &
Chr
(
10
) &
" ["
&
nbv &
"] Variable "
&
DocVar.Name
&
Chr
(
10
) &
DocVar.Formula
Debug.Print
txt
End
If
Next
Debug.Print
Chr
(
10
) &
Chr
(
10
) &
Doc.Name
&
" contient "
&
nbv &
" variables :"
End
Sub
Attention ! Ne pas confondre :
Application.ActiveDocument.DocumentVariables Collection des objets Variables créées dans le document par l'utilisateur
Application.ActiveDocument.Variables Collection des objets Variables créées dans le fournisseur de données (requête)
Utiliser la propriétée Application.Interactive
Cette méthode supprime ou autorise (False/True) les demandes de confirmation et les notifications à l'utilisateur.
Private
Sub
Document_BeforeRefresh
(
Cancel As
Boolean
)
Application.Interactive
=
False
End
Sub
Private
Sub
Document_AfterRefresh
(
)
Application.Interactive
=
True
End
Sub
Attention ! Cette désactivation
* porte sur le rafraichissement du document (plus de message La Requête ne retourne pas de données)
* supprime également l'affichage des invites ! (conservant les réponses antérieures)
* ne fonctionne pas si on fait exécuter dans l'éditeur de requête
Pour désactiver l'interaction sur le SQL à la carte sans invite,
et la réactiver sur les autres requêtes avec invite,
il faudrait à l'ouverture par exemple :
* parcourir les dataproviders
* et avec un select case basé sur le nom ou le type faire précéder le refresh d'une gestion de l'interactivité
Dès la version 5 de Business Objects, il est possible d'appliquer la méthode ExportAsPdf à chaque rapport.
On peut également poser un test sur le non du rapport pour ne pas appliquer cet export à l'un d'entre eux.
Private
Sub
Document_AfterRefresh
(
)
Dim
Doc As
Document
Dim
reps As
Reports
Dim
rep As
Report
Dim
repname As
String
Dim
chemin As
String
chemin =
"C:\"
Set
Doc =
Application.ActiveDocument
'------- Récupération de la collection
Set
reps =
Doc.Reports
' -------- Récupérer les rapports -------
' -----Parcourir les objets de la collection rapports
For
Each
rep In
reps
' ----- Limitation au rapports à exporter
repname =
rep.Name
repname =
Replace
(
repname, Chr
(
34
), "_"
)
repname =
Replace
(
repname, Chr
(
42
), "_"
)
repname =
Replace
(
repname, Chr
(
47
), "_"
)
repname =
Replace
(
repname, Chr
(
58
), "_"
)
repname =
Replace
(
repname, Chr
(
60
), "_"
)
repname =
Replace
(
repname, Chr
(
62
), "_"
)
repname =
Replace
(
repname, Chr
(
63
), "_"
)
repname =
Replace
(
repname, Chr
(
92
), "_"
)
repname =
Replace
(
repname, Chr
(
124
), "_"
)
If
repname <
>
"PasCeluiLà"
Then
rep.ExportAsText
chemin &
repname &
".pdf"
End
If
Next
- DataProvider.ExportToRDBMS
- Document.ExportAsPDF
- Document.ExportSheetsAsHtml
- Report.ExportAsHtml
- Report.ExportAsPDF
- Report.ExportAsRtf
- Report.ExportAsText
- Document.ExportAsXML
- Report.ExportAsExcel
- Report.ExportAsHtmlPage
L'objectif est de réaliser automatiquement après chaque rafraichissement les tâches suivantes :
- Déterminer le nombre de rapports (onglets) dans le document.
- Parcourir ces différents rapports.
- Appliquer sur chacun d'eux un filtre.
- Recalculer le document BO.
- Exporter en pdf.
Document_AfterRefresh
(
)
Dim
Dpc As
Document
Dim
Reps As
Reports, Rep As
Report
Dim
nbr As
Integer
, nir As
Integer
'ces 3 premières déclarations seraient mieux positionnées
' dans Général Déclarations
Dim
AnneeRef As
String
Set
Doc =
Application.ActiveDocument
Set
Reps =
Doc.Reports
nbr =
Reps.Count
'pour exemple on posera un filtre sur l'année 2008
AnneeRef =
"2008"
'pose du filtre sur chaque rapport
For
Each
Rep In
Reps
Rep.Activate
Rep.AddComplexFilter
"Exercice"
, "[Exercice] = "
&
AnneeRef
'recalcul de l'ensemble du document
Rep.ForceCompute
Next
'export du document
Rep.ExportAsPDF
(
"C:\le chemin....\DocsPDF\NomFichier_"
&
AnneeRef &
".pdf"
)
End
Sub