HOME - RADIO - LOGIN - AIDE
KNAROU#
Post-it Technique
>>http://www.knar.info

mars 2024
<<< RETOUR <<<

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


Votre nom :
Commentaire :

Recopiez le code svp :


COMMENTAIRES :
Un(e) certain(e): ELLO Pierre Anderson en date du mercredi 14 décembre 2011 vers 19:03:00 à ecrit :
...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...