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 :
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