Les rapports depuis la V1.9.0

Depuis la V1.9.0 les rapports ont maintenant la possibilité d'avoir de 1 à n pages de fond contre une seulement avant la V1.9.0
Il y a maintenant scission entre le rapport et la page de fond. Il n'y pas de changement de comportement au niveau de la page de fond, hormis que les propriétés et actions communes sont remontées au niveau du rapport, 


Cela permet de fusionner des éditions différentes dans un seul rapport avec des formats et mises en pages différentes.
Beaucoup de liberté s'offrent maintenant:   avoir des pages d'entêtes, des données hétérogènes et des pages de fin d'édition....
 

L'autre intérêt de l'utilisation de plusieurs pages de fonds est de structurer (chapitrer) le rapport, dans l'affichage final, un arbre de la structure du document apparaitra. Le nommage de ces sections se fait par la propriété "Tilte" du rapport et des pages de fond.

Une nouveauté également, la propriété "TagsInText"  a été rajoutée, si cochée,  elle permet de remplacer  les tags des fieldname inclus dans le texte par les valeurs de ces champs, le tag doit être du  type <#NOM_DU_CHAMP>, cette nouveauté simplifie et fluidifie la construction du rapport

La migration des rapports se fait automatiquement, et les anciens rapports sont compatibles sans les modifier. Par contre, les nouveaux rapports modifiés avec la V1.9.0 sont incompatibles avec les versions de niveaux inférieurs

LUA : Intégrer un graphique dans un rapport

Nous allons voir ici comment intégrer un graphique de type camembert dans un rapport.

NSBase ne permet pas nativement d'incorporer un graphique dans un  rapport, ce composant n'existe pas dans la palette d'édition des rapports.

Cependant, cela est possible. Pour cela il faut d'abord créer un formulaire qui servira de support à ce composant 

On y intégrera alors cet objet avec les  propriétés dûment documentée (datasource, series...), notamment la propriété "BuildPicture" à true, pour autoriser la construction de l'image (picture) (A partir de NSBase V.1.6.1)

Dans le rapport concerné, nous l'ouvrons en édition et y rajoutons un composant de type image

Dans le script sur l'action ActionOnLoaded du rapport, nous rajoutons le code suivant :

function rptCat:ActionOnLoaded()
  nsbase.window.show('frmStatCat')
  local content=nsbase.window.getProperty('frmStatCat.Chart.Picture')
  nsbase.window.close('frmStatCat')
  self.setProperty('RImage1.Picture',content)
end  

Ce qui donnera en exécution

 

 

 

 

 

Les rapports dans NSBase

Cet article va vous aider dans la construction des rapports sous NSBase

Il existe 2 types de rapports :

  • Fiche
  • Liste

La différence est faite par l'utlisation d'un "GridPanel" pour les listes et pas de "GridPanel" pour les fiches. On utilisera 1 "GridPanel" au maxi.

Il y aura donc 1 enregistrement par fiche (page) et de 1 à n enregistements par page pour les listes. Le maximun d'enregistrements par page pour les listes est précisé par "RowCount" * "ColCount", le sens de remplissage est indiqué par "PrintDirection".

La source d'un rapport doit être renseignée, elle peut être une table ou mieux une vue simple ou paramétrée.

L'ensemble des données à imprimer doit être présent dans chaque enregistrement, y compris les données variables d'entêtes et de bas de page pour les rapports de type liste.

Les champs sont fixes ou associés à un champ de la source par la propriété "FieldName". Les champs placés dans la cellule éditable du "GridPanel", seront répétés suivant "RowCount", "ColCount" et "PrintDirection"

Un seul "GridPanel" par report.

Des champs spéciaux sont disponibles:

  • Code bar
  • Qr code
  • Système : date, heure ou n° de page

Les actions (ou évènements) dans un rapport :

ActionOnLoaded:

Se produit apès le chargement du rapport, exemple dans le modèle "Facture", permet d'imprimer la facture active.

On utilise une requête paramétrée dans ce rapport. Le paramêtre est "reference". La valeur provient du composant "referenceToPrint" qui se trouve dans le formulaire "frmFacture" (Facture).

function rptFacture:ActionOnLoaded()
  if frmFACTURE~=nil then
    self.dataset.setParameter("reference",frmFACTURE.referenceToPrint)
  end
end 

 

ActionOnChange:

Se produit à chaque enregistrement, exemple dans le modèle FISH, pour la conversion inch/cm

function rptFish:ActionOnChange()
  local value=self.dataset.getFieldName('LENGTH_CM')
  if value~='' then
    value=value ..  'CM/' .. string.format("%6.2f",value/2.54) .. 'IN'
  end
  self.setProperty('lbLength.Caption',value)
end 

 

ActionOnError:

Se produit lors d'une erreur.