L'exemple ici montre comment intervenir sur les données transmises à l'éditeur de rapports dans le cadre de la prévisualisation/impression d'un document de la gestion commerciale. Ceci par l'ajout :
-
d'une datatable contenant l'extrait de compte du client dans le jeu de données disponibles
-
d'un paramètre supplémentaire contenant le nombre de lignes dans la datatable du point précédent
Le code doit être placé dans un customizer Billing créé à partir de la séquence correspondante. Il implémente les interfaces suivantes :
Il exploite essentiellement l'évènement PrintPrevPrepared du BillingEngine du document en cours.
Le code s'établit comme suit :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.PrintPrevPrepared += BillingEngine_PrintPrevPrepared;
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.PrintPrevPrepared -= BillingEngine_PrintPrevPrepared;
}
void BillingEngine_PrintPrevPrepared(object sender, MercatorUi.Engine.Gescom.BillingEngine.PrintPrevPreparedEventArgs e)
{
MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
if (billingEngine.CLI == null) // le client n'a pas été saisi
return;
string reqSql = "select journal,piece,date,(case when tot<0 then -tot else 0 end) as debit,(case when tot>0 then tot else 0 end) as credit \r\n"
+ " from lignes_c (NOLOCK) \r\n"
+ " where (id_cli=@id_cli) and (lettrage<=0) \r\n"
+ " order by date";
DataSet ds = Api.Zselect(Globals.RepData, reqSql, new MercatorSqlParam("@id_cli", BillingEngine.CLI["C_ID"], SqlDbType.Char, 10));
if (ds == null)
return;
ds.Tables[0].TableName = "ExtraitCompte";
e.DataSet.Tables.Add(ds.Tables[0].Copy()); // ajout d'une copie de la table de cet extrait de compte dans le dataset qui va être envoyé au générateur de rapports
e.Parameters.Add("NRowsExtraitCompte", ds.Tables[0].Rows.Count); // ajout d'un paramètre passé au générateur de rapports : le nombre de ligne dans cette datatable
}
}
}
Le fichier zip ci-joint contient un layout de vente compatible avec cette programmation.
Si on souhaite disposer dans le rapport de colonnes de la table "4ème signalétique" avec une relation sur les lignes, il suffit mettre en place ce code :
void BillingEngine_PrintPrevPrepared(object sender, MercatorUi.Engine.Gescom.BillingEngine.PrintPrevPreparedEventArgs e)
{
e.DestColumnsToAdd = new string[2] { "D_NOM", "D_CLE1" };
}
Si on souhaite disposer dans le rapport de colonnes de la table des projets avec une relation sur les lignes, il suffit mettre en place ce code :
void BillingEngine_PrintPrevPrepared(object sender, MercatorUi.Engine.Gescom.BillingEngine.PrintPrevPreparedEventArgs e)
{
e.ProjColumnsToAdd = new string[2] { "P_NOM", "P_CLE1" };
}
A télécharger :
0000002225.zip (38 Kb - 28/02/2023)