Lettrage par code lors de la sauvegarde d'une écriture comptable

0000003379     -      13/11/2025

Cette documentation montre comment effectuer un lettrage de plusieurs lignes d'une nouvelle écriture comptable, lors de l'exécution d'un code sur mesure qui génère cette écriture. Ce code devra se placer entre 

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

et la sauvegarde via BookingEngine.Save() ou l'affichage de la BookingForm.

Dans une boucle qui énumère les lignes à lettrer (foreach), il faut d'abord récupérer le prochain numéro de lettrage avec la procédure stockée SP_GET_N_LETTRAGE. Il faut ensuite construire un script SQL qui va associer les lignes à lettrer. Cela se fait via un 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 = numéro de la ligne
    // ligne de l'écriture en cours non déjà sauvegardée -> 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);
    // ligne de l'écriture existante qu'il faut lettrer
    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;
}

 

Une fois l'énumération des lignes terminée, ce code doit être exécuté (une seule fois) :

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

 

💡 Vous observez qu'on ne s'adresse jamais directement à LIGNES_C.LETTRAGE dans la base de données. Ce code utilise la table SQL LETTRAGTMP. Cela présente ces avantages :

  • Le lettrage sera effectué dans la même transaction SQL que la sauvegarde de l'écriture.
  • Le statut "lettrage complet" - "lettrage partiel" sera vérifié et déterminé automatiquement. (Le code ne doit donc PAS gérer les numéros de lettrage négatifs pour les lettrages partiels.)
  • Il vérifie aussi la disponibilité des lignes à lettrer (lettrages identiques et simultanés sur différents postes).


Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)