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 une vente, empêcher la modification et la suppression d'une ligne déjà encodée

0000002800     -      21/03/2018

Cette programmation montre comment empêcher la modification et la suppression d'une ligne déjà encodée dans une vente de la gestion commerciale. Ce paramétrage est spécialement destiné à l'environnement "point de ventes" dans lequel les annulations/corrections se font habituellement par l'ajout d'une ligne avec quantité négative. Le code repris ci-dessous effectue ceci :

  • dans la grille du LinesEditor, si un article a été saisi, il n'est plus possible de modifier cet article ou de le remettre à blanc. Les autres colonnes restent toutefois éditables.
  • lors de la suppression d'une ou plusieurs lignes, cette suppression est remplacée par l'insertion de la même ligne, avec la quantité en négatif.

Cette programmation est un bon point de départ pour réaliser des variantes sur le même thème :

  • figer d'autres colonnes,
  • n'empêcher le retrait ou la modification que de certains articles,
  • ...

Cette version ne tient pas compte de la suppression automatique des articles liés éventuels.

Le code exploite notamment l'événement BeforeDeleteLine du BillingEngine, qui requiert une version 10.2 ou ultérieure de Mercator.

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;

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {

        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BillingFormLoaded += billingEngine_BillingFormLoaded;
            billingEngine.BeforeDeleteLine += BillingEngine_BeforeDeleteLine;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BillingFormLoaded -= billingEngine_BillingFormLoaded;
            billingEngine.BeforeDeleteLine -= BillingEngine_BeforeDeleteLine;
        }

        void billingEngine_BillingFormLoaded(object sender, EventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (!billingEngine.ReadOnly)
            {
                billingEngine.BillingForm.FormClosed += billingEngineBillingForm_FormClosed;
                MercatorUi.GridPro.DataGridViewXPro grid = ((MercatorUi.Forms.Billing.BillingObjects.LinesEditor)billingEngine.BillingForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Billing.BillingObjects.LinesEditor))[0]).Grid;
                grid.CellEnter += grid_CellEnter;
            }
        }

        void billingEngineBillingForm_FormClosed(object sender, EventArgs e)
        {
            MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)sender;
            if (!billingForm.BillingEngine.ReadOnly)
            {
                billingForm.FormClosed -= billingEngineBillingForm_FormClosed;
                MercatorUi.GridPro.DataGridViewXPro grid = ((MercatorUi.Forms.Billing.BillingObjects.LinesEditor)billingForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Billing.BillingObjects.LinesEditor))[0]).Grid;
                grid.CellEnter -= grid_CellEnter;
            }
        }

        // EMPÊCHER DE MODIFIER UN ID_ARTICLE DÉJÀ ENCODÉ

        void grid_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            MercatorUi.GridPro.DataGridViewXPro grid = (MercatorUi.GridPro.DataGridViewXPro)sender;
            if ((e.RowIndex > -1) && (e.ColumnIndex > -1) && (grid.Columns[e.ColumnIndex].Name == "id_article"))
                grid.Columns[e.ColumnIndex].ReadOnly = (grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value is string) && !string.IsNullOrWhiteSpace(grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
        }

        // INTERCEPTER LA SUPPRESSION DE LIGNE ET AJOUTER UNE LIGNE NÉGATIVE

        void BillingEngine_BeforeDeleteLine(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeDeleteLineEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (e.LignesVRecord.ID_ARTICLE != "")
            {
                var lv_new = new MercatorDatabase.LIGNES_V(billingEngine.LIGNES.NewRow());
                Api.DataRowMerge(lv_new.DataRow, e.DataRow);
                lv_new.DL_ID = Api.Ident();
                lv_new.QorQ_UNITE = -lv_new.QorQ_UNITE;
                int i = Api.DataRowIndexInDataTable(e.DataRow);
                if (i == billingEngine.LIGNES.Rows.Count - 1)
                    billingEngine.LIGNES.Rows.Add(lv_new.DataRow);
                else
                    billingEngine.LIGNES.Rows.InsertAt(lv_new.DataRow, i + 1);
                billingEngine.UpdateAmounts();
                e.Cancel = true; // empêcher la suppression de la ligne
            }
        }
    }
}

 

Voir également : Comment empêcher d'effacer un document de gestion commerciale ?