Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Dans une impression de la gestion commerciale, ajouter une table et un paramètre dans l'éditeur de rapports

0000002225     -      10/04/2019

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 :

  1. d'une datatable contenant l'extrait de compte du client dans le jeu de données disponibles
  2. 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 :

Zoom
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)