Afpunten via code bij het opslaan van een boekhoudkundige verrichting

0000003379     -      13-11-2025

Deze documentatie toont hoe u een afpunting (lettrage) uitvoert voor meerdere lijnen van een nieuwe boeking, tijdens het draaien van maatwerkcode die deze boeking aanmaakt. Deze code moet geplaatst worden tussen

Zoom
MercatorUi.Engine.Cpta.BookingEngine bookingEngine = MercatorUi.Engine.Cpta.BookingEngine.InitNew(3, jouFin)

en het bewaren via BookingEngine.Save() of het tonen van de BookingForm.

In een lus die de af te punten lijnen doorloopt (foreach) moet eerst het volgende afpuntnummer worden opgehaald met de stored procedure SP_GET_N_LETTRAGE. Vervolgens wordt een SQL-script opgebouwd dat de lijnen aan elkaar koppelt. Dit gebeurt met een StringBuilder sbReqSqlLettrage.
Zoom
List<Int64> l = Api.Zselect<Int64>(Globals.RepData, $"exec {MercatorUi.Globals.DatabaseName}.dbo.SP_GET_N_LETTRAGE -1");
if (l != null)
{
    Int64 n_lettrage = l[0];
    // n = lijnnummer
    // lijn van de huidige, nog niet bewaarde boeking -> piece = 0
    sbReqSqlLettrage.AppendFormat("insert into lettragtmp (spid,id_doc_ori,journal,piece,dl_id,lettrage) values ({0},'{1}','{2}',0,'{3}',{4}) \r\n", MercatorUi.Globals.CurrentSpId, bookingEngine.Id + bookingEngine.LIGNES_C.Rows[n]["dl_id"].ToString(), bookingEngine.LIGNES_C.Rows[n]["journal"].ToString(), bookingEngine.LIGNES_C.Rows[n]["dl_id"], n_lettrage);
    // lijn van de bestaande boeking die moet worden afgepunt
    sbReqSqlLettrage.AppendFormat("insert into lettragtmp (spid,id_doc_ori,journal,piece,dl_id,lettrage) values ({0},'{1}','{2}',{3},'{4}',{5}) \r\n", MercatorUi.Globals.CurrentSpId, bookingEngine.Id + bookingEngine.LIGNES_C.Rows[n]["dl_id"].ToString(), journal_autre_ecriture, piece_autre_ecriture, dl_id autre_ecriture, n_lettrage);
    bookingEngine.LignesCRecords[n].LETTRAGE = n_lettrage;
    bookingEngine.LignesCRecords[n].TOT_DV_LET = bookingEngine.LignesCRecords[n].TOT_DV;
    bookingEngine.LignesCRecords[n].TOT_LET = bookingEngine.LignesCRecords[n].TOT;
}

 

Wanneer alle lijnen zijn doorlopen, moet deze code (exact één keer) worden uitgevoerd:

Zoom
if (sbReqSqlLettrage.Length > 0)
{
    using (SqlCommand cmd = new SqlCommand(sbReqSqlLettrage.ToString()))
    {
        Api.SqlExec(MercatorUi.Globals.RepData, cmd);
    }
}

 

💡 Merk op dat er nooit rechtstreeks naar LIGNES_C.LETTRAGE in de database wordt geschreven. Deze code gebruikt de SQL-tabel LETTRAGTMP. Dat biedt de volgende voordelen:

  • De afpunting gebeurt binnen dezelfde SQL-transactie als het bewaren van de boeking.
  • De status “volledig afgepunt” / “gedeeltelijk afgepunt” wordt automatisch gecontroleerd en bepaald. (De code hoeft dus geen negatieve afpuntnummers te beheren voor gedeeltelijke afpuntingen.)
  • Er wordt ook gecontroleerd of de lijnen die moeten worden afgepunt nog beschikbaar zijn (om gelijktijdige, identieke afpuntingen op verschillende werkposten te voorkomen).


Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)