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 += new MercatorUi.Engine.Gescom.BillingEngine.PrintPrevPreparedEventHandler(BillingEngine_PrintPrevPrepared);
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
{
BillingEngine.PrintPrevPrepared -= new MercatorUi.Engine.Gescom.BillingEngine.PrintPrevPreparedEventHandler(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.
A télécharger :
0000002225.zip (38 Kb - 28/02/2023)