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 un document de la gestion commerciale, calculer des sous-totaux sur des colonnes supplémentaires

0000003221     -      11/04/2024

Mercator permet de calculer des sous-totaux dans les ventes et les achats. Par défaut, les colonnes quantité et total sont prises en compte lors du calcul du sous-total. Ce sous-total prend en considération l'option SS_TOT_CUM qui permet de déterminer si les sous-totaux doivent être cumulés ou pas.

Le code ci-dessous montre comme totaliser une autre colonne numérique selon le même principe. L'exemple est donné pour LIGNES_V.TOT_NET_HT.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;
using MercatorExtensions;
using MercatorDatabase;
using MercatorUi.Engine.Gescom;

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineClosed(BillingEngine billingEngine)
        {
            billingEngine.AfterUpdateAmounts += BillingEngine_AfterUpdateAmounts;
        }

        public void BillingEngineCreated(BillingEngine billingEngine)
        {
            billingEngine.AfterUpdateAmounts -= BillingEngine_AfterUpdateAmounts;
        }

        private void BillingEngine_AfterUpdateAmounts(object sender, BillingEngine.UpdateAmountsEventArgs e)
        {
            bool cumul = MercatorUi.Globals.Params["SS_TOT_CUM"] != "OUI";
            double tot_tot_net_ht = 0;
            foreach (var line in e.LignesVRecords)
            {
                if (line.SS_TOTAL)
                {
                    Api.SmartReplace(line.DataRow, "TOT_NET_HT", tot_tot_net_ht, 2);
                    if (!cumul)
                        tot_tot_net_ht = 0;
                }
                else
                {
                    tot_tot_net_ht += line.TOT_NET_HT;
                }
            }
        }
    }
}