Lecture de l'article DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT DEJA OUVERT SUR SAGE LIGNE 100 SQL
DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT DEJA OUVERT SUR SAGE LIGNE 100 SQL
de Fabrice Mounin - le mercredi 07 décembre 2011 16:56:25
Script permettant de débloquer un document, client, article déjà ouvert sur SAGE.
On ne peux pas savoir à l'avance qui est ouvert sur une des fiches.
Par contre, nous pouvons savoir, une fois débloqué, qui était dessus....
Le script test si le document est bloqué,
Il fait une boucle pour essayer de débloquer suivant l'id qui est incrémenté dans la boucle.
et si le document est débloqué, on récupère le user suivant l'id, on sort de la boucle et on affiche le résultat.
on peux intégrer ce script sur une page web php qui gère le mssql
--------------------------------------------------------------------------------------------------------------------------------------------
DEBLOCAGE F_DOCENTETE
--------------------------------------------------------------------------------------------------------------------------------------------
USE SA11GCM -- Nom de la base Gesco
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @ress1 varchar (15)
DECLARE @spid int
DECLARE @sp int
DECLARE @DO_Piece varchar (8)
set @DO_Piece='DDE02298' -- Ici le numero du document à debloquer
set @spid = 0
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_DOCENTETE where DO_Piece=@DO_Piece -- BCXXX = NUMERO DE PIECE (numero du document)
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ress
WHILE @spid < 200 -- on considère que 200 est un gros chiffre mais vous pouvez le mettre plus haut si il ne trouve pas
BEGIN
SET NOCOUNT ON
SELECT @lBase = DB_ID()
SELECT @lTable = OBJECT_ID('F_DOCENTETE')
EXECUTE @lRes = master..xp_CBUnLockRecord @spid,@lBase,@lTable, 3,@ress -- essaye de débloquer le document du processus
--IF @lRes <> 0
-- RAISERROR(@lRes,11,1) WITH SETERROR
exec CB_IsRecordLock 'F_DOCENTETE', @ress, @LOCK OUTPUT -- test si le document est toujours bloqué
IF @LOCK = 0
BEGIN
IF @spid = 0
BEGIN
print 'Ce document n''est pas bloqué'
break
END
DECLARE Qui CURSOR FOR
select nt_username from master..sysprocesses where spid=@spid
OPEN Qui
FETCH NEXT FROM Qui INTO @ress1
-- print @LOCK
-- print @spid
print 'Le Document '+@DO_Piece + ' bloqué par SPID:' + convert(varchar,@spid) + ' - Username:' + @ress1 + ' a été debloqué'
CLOSE Qui -- je ferme mon curseur
DEALLOCATE Qui -- je libère la mémoire allouée à ce curseur
break
END
set @spid=@spid+1
END
CLOSE myCursor -- je ferme mon curseur
DEALLOCATE myCursor -- je libère la mémoire allouée à ce curseur
--------------------------------------------------------------------------------------------------------------------------------------------
DEBLOCAGE F_COMPTET
--------------------------------------------------------------------------------------------------------------------------------------------
USE SA11MAE -- nom de la base sage comptable
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @ress1 varchar (15)
DECLARE @spid int
DECLARE @sp int
DECLARE @CT_Num varchar (30)
set @CT_Num='TFABRICE' -- nom du client
set @spid = 0
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_COMPTET where CT_Num=@CT_Num
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ress
WHILE @spid < 200 -- on considère que 200 est un gros chiffre mais vous pouvez le mettre plus haut
BEGIN
SET NOCOUNT ON
SELECT @lBase = DB_ID()
SELECT @lTable = OBJECT_ID('F_COMPTET')
EXECUTE @lRes = master..xp_CBUnLockRecord @spid,@lBase,@lTable, 3,@ress -- essaye de débloquer le document du processus
--IF @lRes <> 0
-- RAISERROR(@lRes,11,1) WITH SETERROR
exec CB_IsRecordLock 'F_COMPTET', @ress, @LOCK OUTPUT -- test si le document est toujours bloqué
IF @LOCK = 0
BEGIN
IF @spid = 0
BEGIN
print 'Ce document n''est pas bloqué'
break
END
DECLARE Qui CURSOR FOR
select nt_username from master..sysprocesses where spid=@spid
OPEN Qui
FETCH NEXT FROM Qui INTO @ress1
-- print @LOCK
-- print @spid
print 'La Fiche Client '+@CT_Num + ' bloqué par SPID:' + convert(varchar,@spid) + ' - Username:' + @ress1 + ' a été debloquée'
CLOSE Qui -- je ferme mon curseur
DEALLOCATE Qui -- je libère la mémoire allouée à ce curseur
break
END
set @spid=@spid+1
END
CLOSE myCursor -- je ferme mon curseur
DEALLOCATE myCursor -- je libère la mémoire allouée à ce curseur
...c'est cool...
Un(e) certain(e): Willimam Wallace en date du jeudi 27 juin 2013 vers 10:13:53 à ecrit :
...Fonctionne parfaitement !! Merci :)...
Un(e) certain(e): hjk en date du mercredi 18 octobre 2017 vers 15:43:22 à ecrit :
...fefsefse...