Gedetailleerde Luxemburgse Intrastat-aangifte

0000002242     -      27-11-2018

Deze parametrering is verouderd door de nieuwe Intrastat-functies van Mercator 10.4.

Standaard onttrekt de Intrastat-module van Mercator de gegevens om de 'standaard' Intrastat-aangifte uit te voeren. Voor de gedetailleerde Luxemburgse aangifte moet ook het land van productie worden opgegeven. Dit land wordt in twee tekens in hoofdletters gecodeerd. De lijst van deze codes is beschikbaar op pagina 7.3.5 van deze documentatie. Om dit te configureren, moet het veld C_PAYS_ORI C(2) worden toegevoegd in de tabellen STOCK, LIGNES_V en LIGNES_A. Het volstaat om een textbox toe te voegen naar dit veld in het informatiebestand van de artikels, evenals een kolom in de LinesEditor van de sequenties van de betreffende verkopen en aankopen. Het systeem werd echter zo ontworpen dat het niet nodig is om voor elk artikel het land op te geven: indien C_PAYS_ORI immers leeg is, dan zal het land dat vermeld staat in het document (PIEDS_V/A.I_PAYS) als productieland worden genomen. De configuratie gebruikt het standaardmechanisme van de transfer van de waarden van de STOCK-velden naar LIGNES_V/A. Dat betekent dat het bij het opstarten van het systeem nodig zal zijn om het veld S_PAYS_ORI in LIGNESV/A te intialiseren aan de hand van een SQL-opdracht. Om het even welk ander mechanisme kan makkelijk worden toegepast door de onderstaande programmering aan te passen.

Deze configuratie gebeurt aan de hand van een Intrastat-customizer die de volgende interfaces implementeert:

 

Deze programmering voert drie afzonderlijke taken uit:

  1. Via de methode StringUpdate, wordt de standaard SQL-opdracht van Mercator veranderd zodat er een bijkomende kolom aan wordt toegevoegd waarin het land van oorsprong wordt opgenomen.
  2. Via de methode FormLoadCustomize wordt in de rooster van het Intrastat-venster een kolom toegevoegd die overeenstemt met deze informatie.
  3. Via het evenement LineAddedToFile van het venster, wordt de inhoud van het geëxporteerde bestand lijn per lijn gewijzigd, waarbij aan het einde van elke lijn een tabulatie wordt toegevoegd gevolgd door het land van oorsprong.

Om het bestand dat zo gegenereerd werd correct te gebruiken, is het nodig om de importparameters van de Idep-software aan te passen zodat deze de kolom die onder punt 3 werd toegevoegd, aanvaardt en herkent.

De code wordt als volgt samengesteld:

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)
        {
            // de SQL-opdracht wijzigen om een bijkomende kolom te hebben met het land van oorsprong van het product (opgeslagen in S_PAYS_ORI)
            string id = Api.StrExtract(StringToModify, "<ID>", "</ID>");
            if (id.StartsWith("INTRASTAT")) // INTRASTAT_V voor uitgaande goederen en INTRASTAT_A voor inkomende goederen
                StringToModify = StringToModify.Replace(",stock.s_intrastv as i_code", ",(case when s_pays_ori<>'' then s_pays_ori else i_pays end) as pays_ori,stock.S_INTRASTV as i_code") // in de select
                    .Replace(",stock.s_intrastv", ",(case when s_pays_ori<>'' then s_pays_ori else i_pays end),stock.s_intrastv") // dans les clauses group
                    .Replace(",stock.s_intrasta as i_code", ",(case when s_pays_ori<>'' then s_pays_ori else i_pays end) as pays_ori,stock.S_INTRASTA as i_code") // in de select
                    .Replace(",stock.s_intrasta", ",(case when s_pays_ori<>'' then s_pays_ori else i_pays end),stock.s_intrasta") // in de clauses group
                    .Replace(",lignes_istat.code as i_code", ",pieds_c.i_pays as pays_ori,lignes_istat.code as i_code"); // voor het deel van de opdracht dat betrekking heeft op de boekhouding
            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;

                // De kolom PAYS_ORI in de rooster toevoegen
                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)
        {
            // op elke lijn van het bestand, wordt een tabulatie en een extra kolom toegevoegd met het land van oorsprong
            e.FileContent.Append("\t" + e.Dr["pays_ori"].ToString());
        }

    }
}

Let op: het is niet mogelijk om de gegevens die voor de installatie van deze module werden opgeslagen 'over te nemen'. De toegevoegde kolom is daar immers niet aanwezig.