Mettre à jour le pied d'un document de la gestion commerciale dans l'AfterSave

0000003273     -      16/01/2025

Si du code met à jour l'enregistrement de pied d'un document de la gestion commerciale en cours de sauvegarde, cette erreur SQL sera rencontrée : 

Un ou plusieurs enregistrements de PIEDS_V sont en cours de modification par un autre utilisateur !
Een of meer records van PIEDS_V worden momenteel gewijzigd door een andere gebruiker!
One or more records of PIEDS_V are currently used by another SPID !

Pour éviter cette erreur, il faut utiliser ce pattern :

Zoom
private void BillingEngine_AfterSave(object sender, EventArgs e)
{
    MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;

    using (SqlCommand sqlCom = new SqlCommand())
    {
        sqlCom.CommandText = @"
            update DOCLOCK set spid = @@SPID where (ident = @IDENT) and (spid = @SPID)
            update PIEDS_V set ...
            update DOCLOCK set spid = @SPID where (ident = @IDENT) and (spid = @@SPID) ".UnIndent(5);
        sqlCom.Parameters.AddWithValue("@SPID", MercatorUi.Globals.CurrentSpId);
        sqlCom.Parameters.AddWithValue("@IDENT", billingEngine.DocLockIdent).SqlDbType = SqlDbType.Char;
        sqlCom.Parameters.AddWithValue("@ID", billingEngine.Id).SqlDbType = SqlDbType.Char;
        sqlCom.Parameters.AddWithValue("@JOURNAL", billingEngine.Journal).SqlDbType = SqlDbType.Char;
        sqlCom.Parameters.AddWithValue("@PIECE", billingEngine.Piece);
        
        Api.SqlExec(MercatorUi.Globals.RepData, sqlCom);
    }
}

 

Le même principe s'applique aux

  • Actions du CRM
  • Ecritures comptables
  • Transferts de dépôts
  • Inventaires


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)