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

Lors de la facturation automatique clients, disposer d'une colonne supplémentaire dans l'écran de sélection des bons de livraison

0000002278     -      13/10/2021

Le module documenté ici permet d'ajouter une colonne dans l'écran de sélection des bons de livraison affichés dans le processus de facturation automatique clients. Cette programmation s'effectue en 2 étapes :

  • modifier la requête SQL de sélection des bons de livraison, via l'interface MercatorUi.ICustomizers.IStringUpdater
  • ajouter la colonne dans la grille de l'écran en question, via l'interface MercatorUi.ICustomizers.IDialogLoadCustomizer

Au niveau de la modification de la requête SQL, une difficulté réside dans le fait que le nom de la table SQL temporaire varie lors de chaque exécution. Dans le code, la chaîne "tmp" permet de récupérer cette partie variable.

L'exemple est donné ici pour l'ajout du champ ID_CLI_LIV de pieds_v. Toute autre adaptation est bien entendu possible.

Le code s'établit comme suit :

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

namespace Gescom
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.IDialogLoadCustomizer
    {

        // modifier la requête SQL pour obtenir une colonne supplémentaire
        public string StringUpdate(string StringToModify)
        {
            string id = Api.StrExtract(StringToModify, "<ID>", "</ID>");
            if ((id == "SEL_DOC_DELIVERIES_INVOICING") && StringToModify.Contains("id_cli"))
            {
                string tmp = Api.StrExtract(StringToModify, "tempdb..##pieds_auto_", "')"); // obtenir la partie variable du nom de la table ##pieds_auto
                StringToModify = StringToModify.Replace(string.Format("##pieds_auto_{0}.id,", tmp), string.Format("##pieds_auto_{0}.id,##pieds_auto_{0}.id_cli_liv,", tmp));
            }
            return StringToModify;
        }

        // ajouter une colonne dans l'écran de sélection des BL
        public void DialogLoadCustomize(System.Windows.Forms.Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Gescom.GescomDialogs.GescomAutomaticProceduresSelectDocs)
            {
                MercatorUi.Forms.Gescom.GescomDialogs.GescomAutomaticProceduresSelectDocs gescomAutomaticProceduresSelectDocs = (MercatorUi.Forms.Gescom.GescomDialogs.GescomAutomaticProceduresSelectDocs)WindowsForm;
                DataTable dt = (DataTable)gescomAutomaticProceduresSelectDocs.Grid.DataSource;
                if (dt.Columns.Contains("id_cli_liv")) // est-on bien dans le cas "facturation des livraisons clients" ?
                {
                    gescomAutomaticProceduresSelectDocs.Grid.Columns.Add("id_cli_liv", "Id Client Livr.");
                    gescomAutomaticProceduresSelectDocs.Grid.Columns["id_cli_liv"].Width = 75;
                    gescomAutomaticProceduresSelectDocs.Grid.Columns["id_cli_liv"].DataPropertyName = "id_cli_liv";
                }
            }
        }

    }
}