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

Codes postaux

Un nouvel exemple de base de données (Codes postaux) créé avec NSBase, est en ligne. Cet exemple met en oeuvre l'utilisation de la librairie CPLib, d'une utilisation simple 

Prérequis

  • Une table CP avec les champs CP et VILLE contenant les données des codes postaux, vous pouvez importer cette table dans votre application, elle est pratiquement complète.
  • L'incoporation de la librairie CPLib
  • Un ou plusieurs formulaires contenant des composants de type TextEdit  représentant les champs CP et VILLE
  • Dans le formulaire en action "ActionOnLoad" il faut rajouter pour chaque couple de composants 
  • CPLib:set("edtCode_postal","edtVille")

Cette exemple est une démonstration de l'emploi de la librairie CPLib

Il nécessite NSBase V.1.8.0 ou supérieure

Datasource et ControlDataSource

Quelle est la différence entre la propriété Datasource et ControlDataSource

DataSource est la source directe de données du composant. Elle est isolée des autres composants. La source peut être une vue ou une table. En mode édition, la liste déroulante indiquera les vues et tables possibles.

ControlDatasource précise le composant qui est porteur de la source de données. Sa propriété DataSource devra être vide. Il sera synchronisé sur le composant maître. En édition, la liste déroulante listera les composants éligibles.

Sur certains composants (exemple : DBNavigator ) , n'ayant pas de propriété DataSource, le ControlDataSource est lié au formulaire par défaut (propriété ControlDataSource à vide)

Une utilisation possible : avoir plusieurs DBGrids dans un même formulaire avec des sources de données différentes, on leur associera un DBNavigator chacun, pour naviguer, editer...

Le rôle de la propriété ControlDataSource a pris son sens avec l'arrivée des DBTreeView (arbres). Exemple : association d'un DBGRid au DBTreeView,  le DBTreeview affiche la structure des données, le DBGRid affiche le détail.

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