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

Imprimer les étiquettes lors de la validation d'une fiche article si le prix a été modifié

0000002109     -      26/08/2017

L'exemple ci-dessous montre comment proposer l'impression des étiquettes lors de la validation d'une fiche article, si le prix de vente taxe inclue (S_PRIX_TI) a été modifié et si l'article requiert l'impression d'étiquettes (S_ETIQ>=2). Il se construit sous la forme d'un customizer SigStock qui implémente l'interface MercatorUi.ICustomizers.IFormValidateCustomizer. Nous utilisons la méthode FormValidateCustomize qui s'exécute au début du processus de validation.

Cette programmation utilise la possibilité que donne le framework .net pour trouver facilement la valeur avant modification d'un champ dans une DataRow.

double s_prix_ti_old = Convert.ToDouble(sigForm.DataSourceRow["S_PRIX_TI", DataRowVersion.Original]);

Le code s'entend comme suit :

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

namespace SigStock
{
    public class Customizer : MercatorUi.ICustomizers.IFormValidateCustomizer
    {
        public bool FormValidateCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
            if (sigForm.StockRecord.S_ETIQ <= 1) // si impression étiquettes "aucune"
                return true;
            double s_prix_ti_current = sigForm.StockRecord.S_PRIX_TI;
            double s_prix_ti_old = Convert.ToDouble(sigForm.DataSourceRow["S_PRIX_TI", DataRowVersion.Original]);
            if (s_prix_ti_current.CompareTo(s_prix_ti_old, 5) != 0) // quand on compare des doubles/floats, il faut obligatoirement arrondir, car tout réel ne peut être représenté
            {
                int i = MercatorUi.Dialogs.Answer3Buttons("Le prix de vente à changé. Voulez-vous imprimer des étiquettes ?", Api.Iif_langue(Globals.Langue, 2), Api.Iif_langue(Globals.Langue, 3), Api.Iif_langue(Globals.Langue, 1)); // Oui, Non, Annuler
                if (i == 3) // Annuler
                    return false;
                if (i == 1)
                    sigForm.Sig.Labels(sigForm, true, sigForm.DataSourceRow);
            }
            return true; // on ne bloque pas le processus de validation
        }
    }
}