Déclaration Intrastat luxembourgeoise détaillée

0000002242     -      27/11/2018

Ce paramétrage est rendu obsolète par les nouvelles fonctionnalités Intrastat de Mercator 10.4.

Par défaut, le module Intrastat de Mercator extrait les données afin de réaliser la déclaration Intrastat "standard". La déclaration luxembourgeoise détaillée requiert en plus le pays de fabrication. Ce pays est codé sur 2 caractères en majuscules. La liste de ces codes est disponible au point 7.3.5 de cette documentation. Le paramétrage requiert l'ajout du champ S_PAYS_ORI C(2) dans les tables STOCK, LIGNES_V et LIGNES_A. Il conviendra d'ajouter un textbox vers ce champ dans le signalétique des articles ainsi qu'une colonne dans les LinesEditor des séquences de ventes et d'achats concernées. Le système est toutefois conçu pour ne pas exiger que le pays soit spécifié au niveau de chaque article : en effet, si S_PAYS_ORI est vide, alors le pays spécifié dans le document (PIEDS_V/A.I_PAYS) sera pris en compte comme pays de fabrication. Le paramétrage utilise le mécanisme standard du transfert des valeurs des champs de STOCK vers LIGNES_V/A. Cela implique que lors de la mise en route du système, il sera nécessaire d'initialiser par requête SQL le champ S_PAYS_ORI dans LIGNES_V/A. Tout autre mécanisme pourra être facilement mis en place par adaptation de la programmation reprise ci-dessous.

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 le pays d'origine
  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 du pays d'origine

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 le pays d'origine du produit (stocké dans S_PAYS_ORI)
            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(",stock.s_intrastv as i_code", ",(case when lignes_v.s_pays_ori<>'' then lignes_v.s_pays_ori else i_pays end) as pays_ori,stock.S_INTRASTV as i_code") // dans les select
                    .Replace(",stock.s_intrastv", ",(case when lignes_v.s_pays_ori<>'' then lignes_v.s_pays_ori else i_pays end),stock.s_intrastv") // dans les clauses group
                    .Replace(",stock.s_intrasta as i_code", ",(case when lignes_a.s_pays_ori<>'' then lignes_a.s_pays_ori else i_pays end) as pays_ori,stock.S_INTRASTA as i_code") // dans les select
                    .Replace(",stock.s_intrasta", ",(case when lignes_a.s_pays_ori<>'' then lignes_a.s_pays_ori else i_pays end),stock.s_intrasta") // dans les clauses group
                    .Replace(",lignes_istat.code as i_code", ",pieds_c.i_pays as pays_ori,lignes_istat.code as i_code"); // pour la partie de la requête qui concerne la compta
            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 PAYS_ORI dans la grille
                MercatorUi.GridPro.DataGridViewUpperCaseTextBoxColumn colPays = new MercatorUi.GridPro.DataGridViewUpperCaseTextBoxColumn();
                colPays.Name = "pays_ori";
                colPays.HeaderText = _Divers.Iif_langue(Globals.Langue, "Land", "Land", "Pays");
                colPays.Width = 40;
                colPays.DataPropertyName = "pays_ori";
                istatDataForm.Grid.Columns.Add(colPays);

                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)
        {
            // sur chaque ligne du fichier, on ajoute une tabulation et une colonne supplémentaire avec le pays d'origine
            e.FileContent.Append("\t" + e.Dr["pays_ori"].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.