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

Reporting : comment récupérer une donnée d'une fiche client en cours à partir d'un rapport basé sur les articles

0000002394     -      02/12/2016

Cet exemple montre comment, à partir d'un rapport basé sur les articles, récupérer une information provenant de la fiche client en cours.

Concrètement, l'utilisateur voudrait avoir la liste des articles liés à la fiche client en cours de consultation. Il faut pouvoir également tenir compte du filtre placé sur les articles.

La propriété "Module" du rapport sera donc initialisée à "Articles". La requête SQL pourrait ressembler à ceci :

    select cli.C_NOM, s_modele, s_cle1, s_cle2, s_prix_ht
        from STOCK
            inner join tarcli on stock.s_id = tarcli.ar_ref
            inner join CLI on tarcli.ID_CLI = cli.C_ID
        where FILTRE_STOCK and cli.C_ID = '%C_ID%'

Le code ci-dessous permet de récupérer l'identifiant de la fiche client en cours. L'exemple prévoit le fait que Mercator permet d'ouvrir plusieurs fiches clients. Dans notre exemple, il traite (de manière arbitraire) la première fichier trouvée.

Ce code doit être implémenté dans la propriété "Customizer" du rapport (selon le même que principe que cet exemple).

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorController;

namespace MercatorUi.Reporting
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater
    {
        public string StringUpdate(string reqSql)
        {
            string c_id = "??????????";
            foreach (Form f in Application.OpenForms)
            {
                if (f is MercatorUi.Forms.Sig.SigForm)
                {
                    MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)f;
                    if (sigForm.Sig.Module == MercatorUi.Sig._SigEnum.CLI)
                    {
                        c_id = sigForm.DataSourceRow["c_id"].ToString();
                        break;
                    }
                }
            }
            return reqSql.Replace("%C_ID%", Api.UnquoteSql(c_id));
        }
    }
}