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:
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
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).
De onderstaande code is een aanpassing van de vorige code en toont hoe de boekhoudperiode kan worden gewijzigd als de periode die overeenkomt met de datum al het voorwerp is geweest van een regularisatieboeking.
bookingEngine.PiedsCRecord.DATE = …;
bookingEngine.PeriodFromDate(bookingEngine.PiedsCRecord.DATE);
object periode = Api.ZselectDirect(Globals.RepData,
"declare @max_per_regul char(6) \r\n"
+ "select @max_per_regul = isnull(max(periode), '') from PIEDS_C (NOLOCK) inner join sequenc (NOLOCK) on (pieds_c.journal=sequenc.journal) where (sequenc.type=4) and (sequenc.subtype=6) \r\n"
+ "if @max_per_regul >= @periode \r\n"
+ " select @periode = min(num) from PERIODES where (debut<>fin) and (num > @max_per_regul) \r\n"
+ "if @periode is null \r\n"
+ " RAISERROR('Geen boekhoudperiode gevonden na de laatste regularisatieperiode!',16,1) \r\n"
+ "select @periode as periode", new MercatorSqlParam("@periode", bookingEngine.PiedsCRecord.PERIODE, SqlDbType.Char));
if (periode == null)
{
Dialogs.Stop(Api.LastError);
return;
}
bookingEngine.PiedsCRecord.PERIODE = periode.ToString();