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

Déclaration Intrastat belge étendue

0000002243     -      20/08/2016

A partir de Mercator 8.5, il faut prendre en considération cette information.

Par défaut, le module Intrastat de Mercator extrait les données afin de réaliser la déclaration Intrastat "standard". La déclaration belge étendue requiert en plus les incoterms (conditions de livraison standardisées). Cette information est codée sur 3 caractères en majuscules. La liste de ces codes est disponible à la page 7.12 de cette documentation. Le paramétrage requiert l'ajout du champ INCOTERMS C(3) dans les tables PIEDS_V, PIEDS_A et PIEDS_C. Il conviendra d'ajouter un combobox vers ce champ dans les séquences concernées. Ce combobox aura dans la propriété SqlQuery cette chaîne XML :

<items>
   <item1>CFR</item1><item2>Coût et fret</item2>
   <item1>CIF</item1><item2>Coût, assurance et fret</item2>
   <item1>CIP</item1><item2>Port payé, assurance comprise jusqu'à un point de destination</item2>
   <item1>CPT</item1><item2>Port payé jusqu'à un point de destination convenu</item2>
   <item1>DAT</item1><item2>Rendu à terminal</item2>
   <item1>DAP</item1><item2>Rendu à destination</item2>
   <item1>DDP</item1><item2>Rendu droits acquittés</item2>
   <item1>EXW</item1><item2>A l'usine</item2>
   <item1>FAS</item1><item2>Franco le long du navire</item2>
   <item1>FCA</item1><item2>Franco transporteur</item2>
   <item1>FOB</item1><item2>Franco à bord</item2>
</items>

Ce paramétrage est construit autour d'un customizer Intrastat qui implémente les interfaces suivantes :

Cette programmation effectue trois tâches distinctes :

  1. Via la méthode StringUpdate, transformer la requête SQL standard de Mercator afin d'inclure une colonne supplémentaire qui va reprendre les incoterms
  2. Via la méthode FormLoadCustomize, ajouter dans la grille de la fenêtre Intrastat une colonne correspondant à cette information
  3. Via l'évènement LineAddedToFile de la fenêtre, modifier le contenu du fichier exporté, ligne par ligne, en ajoutant à la fin de chaque ligne une tabulation suivie des incoterms. Dans cet évènement, on contrôlera aussi qu'aucune ligne ne contient des incoterms vides.

Pour utiliser correctement le fichier ainsi généré, il sera nécessaire d'adapter les paramètres d'import du logiciel Idep afin qu'il accepte et reconnaisse cette colonne ajoutée au point 3.

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 Intrastat
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
    {

        public string StringUpdate(string StringToModify)
        {
            // modifier la requête SQL pour avoir une colonne supplémentaire avec les incoterms
            string id = Api.StrExtract(StringToModify, "<ID>", "</ID>");
            if (id.StartsWith("INTRASTAT")) // INTRASTAT_V pour les expéditions et INTRASTAT_A pour les arrivées
                StringToModify = StringToModify.Replace("unitesuppl,", "unitesuppl,incoterms,");
            return StringToModify;
        }

        public void FormLoadCustomize(System.Windows.Forms.Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Istat.IstatDataForm)
            {
                MercatorUi.Forms.Istat.IstatDataForm istatDataForm = (MercatorUi.Forms.Istat.IstatDataForm)WindowsForm;

                // Ajouter la colonne INCOTERMS dans la grille
                List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>();
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("", ""));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Coût et fret", "CFR"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Coût, assurance et fret", "CIF"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Port payé, assurance comprise jusqu'à un point de destination", "CIP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Port payé jusqu'à un point de destination convenu", "CPT"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Rendu à terminal", "DAT"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Rendu à destination", "DAP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Rendu droits acquittés", "DDP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("A l'usine", "EXW"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco le long du navire", "FAS"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco transporteur", "FCA"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco à bord", "FOB"));
                DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn colIncoterms = new DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn();
                colIncoterms.Name = "incoterms";
                colIncoterms.HeaderText = "Incoterms";
                colIncoterms.Width = 150;
                colIncoterms.DataPropertyName = "incoterms";
                colIncoterms.DisplayMember = "Description";
                colIncoterms.ValueMember = "Id";
                colIncoterms.DataSource = l;
                colIncoterms.DropDownStyle = ComboBoxStyle.DropDownList;
                istatDataForm.Grid.Columns.Add(colIncoterms);

                istatDataForm.LineAddedToFile += new MercatorUi.Forms.Istat.IstatDataForm.LineAddedToFileEventHandler(istatDataForm_LineAddedToFile);
            }
        }

        public void FormClosedCustomize(System.Windows.Forms.Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Istat.IstatDataForm)
            {
                MercatorUi.Forms.Istat.IstatDataForm istatDataForm = (MercatorUi.Forms.Istat.IstatDataForm)WindowsForm;
                istatDataForm.LineAddedToFile -= new MercatorUi.Forms.Istat.IstatDataForm.LineAddedToFileEventHandler(istatDataForm_LineAddedToFile);
            }
        }

        void istatDataForm_LineAddedToFile(object sender, MercatorUi.Forms.Istat.IstatDataForm.LineAddedToFileEventArgs e)
        {
            // vérifier que les incoterms de cette ligne ne sont pas vides
            if (e.Dr["incoterms"].ToString() == "")
            {
                e.Cancel = true; // -> donner l'ordre d'arrêter la génération du fichier
                MercatorUi.Dialogs.Stop(string.Format("Les incoterms de la ligne {0} sont vides !", e.NumLine));
            }
            else
            {
                // sur chaque ligne du fichier, on ajoute une tabulation et une colonne supplémentaire avec les incoterms
                e.FileContent.Append("\t" + e.Dr["incoterms"].ToString());
            }
        }

    }
}

Attention : il n'est pas possible de "reprendre" les données sauvegardées avant l'installation de ce module. En effet, la colonne ajoutée y est manquante.