Uitgebreide Belgische Intrastat-aangifte

0000002243     -      20-08-2016

Vanaf Mercator 8.5 moet u deze informatie raadplegen.

Standaard onttrekt de Intrastat-module van Mercator de gegevens om de 'standaard' Intrastat-aangifte uit te voeren. De uitgebreide Belgische aangifte vereist bovendien de incoterms (gestandaardiseerde levervoorwaarden). Deze informatie wordt in drie tekens in hoofdletters gecodeerd. De lijst van deze codes is beschikbaar op pagina 7.12 van deze documentatie. Om dit in te stellen moet een veld INCOTERMS C(3) worden toegevoegd in de tabellen PIEDS_V, PIEDS_A en PIEDS_C Het volstaat om een combobox naar dit veld toe te voegen in de betreffende sequenties. In de eigenschap SqlQuery heeft deze Combobox de volgende XML-reeks:

<items>
   <item1>CFR</item1><item2>Kosten en vracht</item2>
   <item1>CIF</item1><item2>Kosten, verzekering en vracht</item2>
   <item1>CIP</item1><item2>Vrachtvrij inclusief verzekering tot een bepaalde bestemming</item2>
   <item1>CPT</item1><item2>Vrachtvrij tot een overeengekomen bestemming</item2>
   <item1>DAT</item1><item2>Franco terminal</item2>
   <item1>DAP</item1><item2>Franco bestemming</item2>
   <item1>DDP</item1><item2>Franco inclusief rechten</item2>
   <item1>EXW</item1><item2>Af fabriek</item2>
   <item1>FAS</item1><item2>Franco langszij schip</item2>
   <item1>FCA</item1><item2>Franco vervoerder</item2>
   <item1>FOB</item1><item2>Vrij aan boord</item2>
</items>

Deze instelling 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 de incoterms worden 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 event LineAddedToFile van het venster, wordt de inhoud van het geëxporteerde bestand lijn per lijn gewijzigd, waarbij bij elke lijn een tabulatie wordt toegevoegd gevolgd door de incoterms. In dit event wordt er ook nagegaan of er geen lijnen zijn met lege incoterms.

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)
        {
            // SQL-opdracht wijzigen om een bijkomende kolom met de incoterms te hebben
            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("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;

                // Voeg de kolom INCOTERMS toe in de rooster
                List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>();
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("", ""));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Kost en vracht", "CFR"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Kost, verzekering en vracht", "CIF"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Vrachtvrij inclusief verzekering tot tot een bepaalde bestemming", "CIP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Vrachtvrij inclusief verzekering tot een overeengekomen bestemming", "CPT"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco terminal", "DAT"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco bestemming", "DAP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco inclusief rechten", "DDP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Af fabriek", "EXW"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco langszij schip", "FAS"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco vervoerder", "FCA"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Vrij aan boord", "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)
        {
            // nagaan of de incoterms van deze lijn niet leeg zijn
            if (e.Dr["incoterms"].ToString() == "")
            {
                e.Cancel = true; // -> de opdracht geven om het genereren van het bestand te stoppen
                MercatorUi.Dialogs.Stop(string.Format("De incoterms van de lijn {0} zijn leeg!", e.NumLine));
            }
            else
            {
                // op elke lijn van het bestand wordt een tabulatie en een extra kolom met de incoterms toegevoegd
                e.FileContent.Append("\t" + e.Dr["incoterms"].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.