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 : rapport dont la requête SQL varie en fonction de la structure de la base de données.

0000001948     -      30/01/2014

Cette programmation montre la mise en place d'un customizer de reporting (du menu "Outils / Paramétrage Documents"). Le code de ce type de customizer peut être directement saisi dans la propriété "Customizer" du rapport. Lors de la compilation, il n'est pas matérialisé dans une DLL mais stocké dans la table Assemblies.

Le point de départ de ce paramétrage est la production d'un simple rapport qui reprend le total des factures par dépôt, pour une fourchette de dates. La requête associée à ce rapport est :

select pieds_v.id_depot as id_depot,sum(pieds_v.tot_bas_fb) as tot
    from pieds_v
    where (pieds_v.type=1) and (pieds_v.date>=@DATE_1) and (pieds_v.date<=@DATE_2)
    group by pieds_v.id_depot

L'objet de ce paramétrage est de permettre la création d'un rapport unique, que le dépôt à la ligne soit installé ou pas (dépôt à la ligne = champ optionnel ID_DEPOT C(10) dans LIGNES_V). Si tel est le cas, la requête doit être adaptée. Cela peut être fait très simplement avec le code ci-dessous. Il implémente l'interface IStringUpdater, dont la méthode StringUpdate va permettre de modifier la requête si le dépôt est installé à la ligne.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorController;

namespace MercatorUi.Reporting
{
     public class Customizer : MercatorUi.ICustomizers. IStringUpdater
    {

         public string StringUpdate( string reqSql)
        {
             if ( Api .ZfieldExists( "LIGNES_V" , "ID_DEPOT" )) // le dépot à la ligne est installé
            {
                reqSql = reqSql.Replace( "pieds_v.id_depot" , "case when lignes_v.id_depot>'' then lignes_v.id_depot else pieds_v.id_depot end" );
                reqSql = reqSql.Replace( "from pieds_v" , "from pieds_v inner join lignes_v on ((pieds_v.id=lignes_v.id) and (pieds_v.journal=lignes_v.journal) and (pieds_v.piece=lignes_v.piece))" );
            }
             return reqSql;
        }

    }
}

Le fichier STATX correspondant au paramétrage de ce document est dans le fichier zip ci-dessous.



A télécharger : 0000001948.zip (9 Kb - 30/01/2014)