Rapportering : rapport waarvan de SQL-opdracht varieert volgens de structuur van de database

0000001948     -      30-01-2014

Deze programmering betreft de invoering van een rapporteringcustomizer (menu "Tools / Parametrering documenten"). De code voor dit type customizer kan rechtstreeks worden ingevoerd in de "Customizer"-eigenschap van het rapport. Bij de compilatie wordt deze code niet omgezet in een DLL-bestand, maar opgeslagen in de tabel Assemblies.

Het vertrekpunt voor deze parameterinstelling is de aanmaak van een eenvoudig rapport dat het totale aantal facturen per magazijn weergeeft voor een bepaalde reeks data. De opdracht die bij dit rapport hoort, is:

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

Deze parameterinstelling is bedoeld om een uniek rapport te kunnen creëren, ongeacht of het magazijn per regel geïnstalleerd is of niet (magazijn per regel = optioneel veld ID_DEPOT C(10) in LIGNES_V). Als dat het geval is, moet de opdracht worden aangepast. Wat erg makkelijk kan met de onderstaande code. Deze implementeert de interface IStringUpdater, waarvan de methode StringUpdate de mogelijkheid biedt om de opdracht te wijzigen indien het magazijn per regel wordt geïnstalleerd.

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" )) // het magazijn per regel is geïnstalleerd
            {
                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;
        }

    }
}

 



Te laden : 0000001948.zip (9 Kb - 30-01-2014)