Automatisch een verkoopdocument per code genereren

0000002038     -      20-10-2017

De hier beschreven programmering laat zien hoe u een verkoopdocument creëert per code. Daarbij wordt hoofdzakelijk gebruik gemaakt van een BookingEngine-object, dat de abstracte weergave is (los van de gebruikersinterface) van een boekhoudkundig document en een hele reeks methodes omvat die het object verheffen tot de status van motor van een boekhoudkundig document.

We moeten erop wijzen dat als de gebruikte sequentie voorzien is van een customizer, deze ook geactiveerd en door de motor in deze code gebruikt zal worden. Ter informatie: wilt u niet dat er een customizercode wordt uitgevoerd terwijl u in de gebruikersinterface bezig bent, dan moet u deze test toevoegen:

Zoom
if (bookingEngine.BookingForm != null)
{
}

De onderstaande code voegt een verkoopdocument toe in het journaal VENc, voor de klant met als C_ID "MERCATOR" en voor een totaal bedrag incl. btw van 1210 EUR, met 2 boekingslijnen:

  • op rekening 700000: 1100 EUR tegen 21 % btw
  • op rekening 700010: -100 EUR tegen 21 % btw
Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;

namespace MyNameSpace
{
    public class Class1 : MercatorUi.Interfaces.IExec
    {

        public void Main()
        {
            using (MercatorUi.Engine.Cpta.BookingEngine bookingEngine = MercatorUi.Engine.Cpta.BookingEngine.InitNew(1, "VENc")) // 1 = verkoop, tweede parameter = journaal
            {
                if (!string.IsNullOrEmpty(bookingEngine.LastError))
                {
                    Dialogs.Stop("Init BookingEngine : " + bookingEngine.LastError);
                    return;
                }
                if (!bookingEngine.ApplyCustomerSupplier("MERCATOR"))
                {
                    Dialogs.Stop("ApplyCustomerSupplier : " + bookingEngine.LastError);
                    return;
                }

                // Gegevens van PIEDS_C
                bookingEngine.PiedsCRecord.REGIME = MercatorDatabase.RegimesEnum.Normal; // Facultatieve lijn, want het stelsel wordt geïnitialiseerd door ApplyCustomerSupplier
                bookingEngine.PiedsCRecord.DATE = new DateTime(2012, 1, 15);
                bookingEngine.PeriodFromDate(bookingEngine.PiedsCRecord.DATE); // Aanpassing van de periode in functie van de datum
                bookingEngine.PiedsCRecord.ECHEANCE = Api.AddDate(bookingEngine.PiedsCRecord.DATE, bookingEngine.CliRecord.C_PAIEM); // Berekening van de vervaldatum in functie van de betalingstermijn vermeld in de klantenfiche
                bookingEngine.PiedsCRecord.REFERENCE = "Ecriture générée par code";
                bookingEngine.PiedsCRecord.HEADERTOTAL = 1210;

                // Toevoeging van de lijnen
                MercatorUi.Sig.Sig sig_gen = MercatorUi.Sig._SigsStatic.SigByModule(MercatorUi.Sig._SigEnum.GEN); // Zal nodig zijn om aan te geven dat men een algemene rekening gaat invoegen.
                string id_tva = MercatorController.xFunctions.xLookUpString("TVACODES", "CODE_N", "21", "ID"); // Men moet enkel btw-code-ID's bewerken.

                int n = bookingEngine.AppendLine(); // Initialiseert een nieuwe lijn en vermeldt het nummer van de gecreëerde lijn.
                if (!bookingEngine.InsertAccount(sig_gen, "700000", bookingEngine.LIGNES_C.Rows[n]))
                {
                    Dialogs.Stop("InsertAccount 1 : " + bookingEngine.LastError);
                    return;
                }
                bookingEngine.LignesCRecords[n].TOT_DV = 1100;
                bookingEngine.LignesCRecords[n].SIGNE = "C"; // Facultatieve lijn, want het teken wordt geïnitialiseerd door AppendLine
                bookingEngine.LignesCRecords[n].ID_TVA = id_tva;
                bookingEngine.LignesCRecords[n].TVA_DV = 231;

                n = bookingEngine.AppendLine(); // Initialiseert een nieuwe lijn en vermeldt het nummer van de gecreëerde lijn.
                if (!bookingEngine.InsertAccount(sig_gen, "700010", bookingEngine.LIGNES_C.Rows[n]))
                {
                    Dialogs.Stop("InsertAccount 2 : " + bookingEngine.LastError);
                    return;
                }
                bookingEngine.LignesCRecords[n].TOT_DV = 100;
                bookingEngine.LignesCRecords[n].SIGNE = "D";
                bookingEngine.LignesCRecords[n].ID_TVA = id_tva;
                bookingEngine.LignesCRecords[n].TVA_DV = 21;


                // sauvegarde
                if (!bookingEngine.Save())
                {
                    Dialogs.Stop("Save : " + bookingEngine.LastError);
                    return;
                }
                Dialogs.Stop(string.Format("Het document wordt opgeslagen met als nummer {0}.", bookingEngine.SavedNumber));
            }
        }
    }
}

Opmerking: deze module werkt enkel als u beschikt over de optie ENGB (Engine op Bookings).