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

Ajouter les articles liés dans un inventaire

0000002297     -      29/03/2019

Ce paramétrage, sous forme d'un code C# placé dans un bouton dans l'écran d'inventaire, permet d'ajouter les articles liés dans un inventaire. La quantité ainsi inventoriée automatiquement pour les composants est égale au produit de l'inventaire de l'article "parent" par la quantité dans la nomenclature. 
 
Exemple : l'article A se vend avec X et Y. 1 A se compose d'1 X et de 5 Y. Si A est inventorié pour une quantité de 10, alors l'inventaire de X sera porté à 10 et celui d'Y à 50. 
 
Dans cet exemple, les articles ajoutés sont ceux pour lesquels la case à cocher "V" est cochée. Il est aisé de modifier la requête
"select id_lien,q from artliens where (id_art=@id_art) and (ven=1) order by suite"

si on souhaite tenir compte d'autres critères. (par exemple, articles liés sur achats)
 
Le code de ce bouton s'établit comme suit :
 
Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;

namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {

        public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
        {
            // enter your customized code here
            MercatorUi.Forms.Inventory.InventoryForm inventoryForm = (MercatorUi.Forms.Inventory.InventoryForm)clickedButton.Form;
            if (!MercatorUi.Dialogs.AnswerYesNo(MercatorUi._Divers.Iif_langue(MercatorUi.Globals.Langue, "Add linked items ?", "Samengestelde artikels bijvoegen ?", "Ajouter les articles liés ?")))
                return;
            DataTable LIGNES_D = inventoryForm.InventoryEngine.LIGNES_D;
            MercatorUi.Progress.ProgressCreate(LIGNES_D.Rows.Count);
            foreach (DataRow dr in LIGNES_D.Select())
            {
                MercatorUi.Progress.ProgressIncrement(1);
                string id_art = dr["id_art"].ToString();
                if (id_art != "")
                {
                    DataSet ds = Api.Zselect(MercatorUi.Globals.RepData, "select id_lien,q from artliens where (id_art=@id_art) and (ven=1) order by suite", new MercatorSqlParam("@id_art", id_art, SqlDbType.Char));
                    if ((ds != null) && (ds.Tables[0].Rows.Count > 0))
                    {
                        Api.TrimEndDataSet(ds);
                        foreach (DataRow dr2 in ds.Tables[0].Rows)
                        {
                            int n = inventoryForm.InventoryEngine.AppendLine(true);
                            if (!inventoryForm.InventoryEngine.InsertItem(dr2["id_lien"].ToString(), LIGNES_D.Rows[n], Math.Round(Convert.ToDouble(dr["q"]) * Convert.ToDouble(dr2["q"]), MercatorUi.Globals.N_DEC_Q)))
                                MercatorUi.Dialogs.Stop(MercatorUi._Divers.Iif_langue(MercatorUi.Globals.Langue, "Unable to add : ", "Onmogelijk bij te voegen : ", "Impossible d'insérer : ") + dr2["id_lien"].ToString());
                        }
                    }
                }
            }
            inventoryForm.InventoryEngine.UpdateAmounts();
            MercatorUi.Progress.ProgressDestroy();
        }
    }
}