DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
Modérateurs: Super-Apogea, Super Modérateur
10 messages
|Page 1 sur 1
DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
Bonjour à tous,
Sur SAGE Gestion Co, quand nous sommes plusieurs sur la même base, il y a une question qui revient très souvent.
Qui est ouvert sur le document ? ou qui est ouvert sur la fiche client ?
Soit la personne n'est pas devant son poste,
Soit l'application à planté et le document ou la fiche client est bloquée.
Avant, si je devais débloquer un document urgemment, je devais faire sortir tout le monde de SAGE
et ensuite lancer le script dbcc cbsqlxp(free) directement en sql avec l'analyseur de requête en choisissant correctement la bonne base avant de l’exécuter.
cette procédure avait le mérite de bien débloquer TOUT les documents, mais était plutôt longue à entreprendre.
passer dans tous les bureaux pour demander de fermer.... ou fermer l'application des personnes qui n’était plus dans leurs bureaux
Après avoir chercher dans le scripting, j'ai fait un petit script pour pouvoir débloquer un seul document ou un seul client.
ces 2 scripts sql sont sans prétentions, ils me permettent surtout, de pouvoir débloquer très rapidement des documents ou fiche client.
----------------------------------------------------------------
DEBLOCAGE CLIENT : (a utiliser avec Analyseur de requêtes)
USE SA11MAE -- Nom de votre database sql serveur ou se trouvent la base comptable
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @spid int
DECLARE @sp int
SET @spid = 0
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_COMPTET where CT_Num='XXXXX' -- XXXXX = nom du client
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 @spid=@spid+1
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 la fiche client du processus
IF @lRes <> 0
RAISERROR(@lRes,11,1) WITH SETERROR
exec CB_IsRecordLock 'F_COMPTET', @ress, @LOCK OUTPUT -- test si la fiche client est toujours bloquée
print @LOCK -- renvoi 1 si bloqué et 0 pour debloqué
print @spid
print @ress
END
CLOSE myCursor
DEALLOCATE myCursor
----------------------------------------------------------------
----------------------------------------------------------------
DEBLOCAGE DOCUMENT : (a utiliser avec Analyseur de requêtes)
USE SA11GCM
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @spid int
DECLARE @sp int
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_DOCENTETE where DO_Piece='BCXXX' -- BCXXX = NUMERO DE PIECE (numero du document)
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ress
set @spid = 0
WHILE @spid < 200 -- on considère que 200 est un gros chiffre mais vous pouvez le mettre plus haut
BEGIN
set @spid=@spid+1
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é
print @LOCK -- renvoi 1 si bloqué et 0 pour debloqué
print @spid
END
CLOSE myCursor
DEALLOCATE myCursor
----------------------------------------------------------------
J'espère que cela pourra être utile à quelques personnes, car j'aurai bien aimé trouver cette méthode avant de la faire. (voilà pourquoi je poste ce sujet)
J'ai pas trop le temps de me pencher pour générer un script unique ou le faire de façon plus propre.
Bonne soirée à tous
Knarou
Sur SAGE Gestion Co, quand nous sommes plusieurs sur la même base, il y a une question qui revient très souvent.
Qui est ouvert sur le document ? ou qui est ouvert sur la fiche client ?
Soit la personne n'est pas devant son poste,
Soit l'application à planté et le document ou la fiche client est bloquée.
Avant, si je devais débloquer un document urgemment, je devais faire sortir tout le monde de SAGE
et ensuite lancer le script dbcc cbsqlxp(free) directement en sql avec l'analyseur de requête en choisissant correctement la bonne base avant de l’exécuter.
cette procédure avait le mérite de bien débloquer TOUT les documents, mais était plutôt longue à entreprendre.
passer dans tous les bureaux pour demander de fermer.... ou fermer l'application des personnes qui n’était plus dans leurs bureaux
Après avoir chercher dans le scripting, j'ai fait un petit script pour pouvoir débloquer un seul document ou un seul client.
ces 2 scripts sql sont sans prétentions, ils me permettent surtout, de pouvoir débloquer très rapidement des documents ou fiche client.
----------------------------------------------------------------
DEBLOCAGE CLIENT : (a utiliser avec Analyseur de requêtes)
USE SA11MAE -- Nom de votre database sql serveur ou se trouvent la base comptable
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @spid int
DECLARE @sp int
SET @spid = 0
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_COMPTET where CT_Num='XXXXX' -- XXXXX = nom du client
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 @spid=@spid+1
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 la fiche client du processus
IF @lRes <> 0
RAISERROR(@lRes,11,1) WITH SETERROR
exec CB_IsRecordLock 'F_COMPTET', @ress, @LOCK OUTPUT -- test si la fiche client est toujours bloquée
print @LOCK -- renvoi 1 si bloqué et 0 pour debloqué
print @spid
print @ress
END
CLOSE myCursor
DEALLOCATE myCursor
----------------------------------------------------------------
----------------------------------------------------------------
DEBLOCAGE DOCUMENT : (a utiliser avec Analyseur de requêtes)
USE SA11GCM
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @spid int
DECLARE @sp int
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_DOCENTETE where DO_Piece='BCXXX' -- BCXXX = NUMERO DE PIECE (numero du document)
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ress
set @spid = 0
WHILE @spid < 200 -- on considère que 200 est un gros chiffre mais vous pouvez le mettre plus haut
BEGIN
set @spid=@spid+1
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é
print @LOCK -- renvoi 1 si bloqué et 0 pour debloqué
print @spid
END
CLOSE myCursor
DEALLOCATE myCursor
----------------------------------------------------------------
J'espère que cela pourra être utile à quelques personnes, car j'aurai bien aimé trouver cette méthode avant de la faire. (voilà pourquoi je poste ce sujet)
J'ai pas trop le temps de me pencher pour générer un script unique ou le faire de façon plus propre.
Bonne soirée à tous
Knarou
- Posteur néophyte
- Messages: 11
- Inscription: Mar 23 Fév 2010 13:08
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
bonjour tt l monde je suis un nv membre
bon a propos de ce sujet tt va bien avec ce script saf que je vouler que le document etre bloquer chez le premier utilsateur!!
en effet aprés deblocage j'ai tt les modification faites ne sont pas enregistrer je voulais que mon document soit fermer chez le premier utisateur pour que je puisse faire de modification (pour le moment j'ai l'accé a faire des modifications mais ils ne sont pas enregistrer)
merci d'avance
cdt
adel
bon a propos de ce sujet tt va bien avec ce script saf que je vouler que le document etre bloquer chez le premier utilsateur!!
en effet aprés deblocage j'ai tt les modification faites ne sont pas enregistrer je voulais que mon document soit fermer chez le premier utisateur pour que je puisse faire de modification (pour le moment j'ai l'accé a faire des modifications mais ils ne sont pas enregistrer)
merci d'avance
cdt
adel
- Posteur habitué
- Messages: 20
- Inscription: Lun 21 Nov 2011 17:37
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
une réponse SVP c urgent
merci
merci
- Posteur habitué
- Messages: 20
- Inscription: Lun 21 Nov 2011 17:37
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
Je ne sais pas si j'ai tout compris dans ta demande.
enregistrer quel document.
un document enregistre des lignes
quand une ligne est validé, elle est sauvegardé et même si tu est toujours dans le document et que tu utilise le script pour le debloquer
mais si tu modifie le champ référence par exemple dans le document et que tu te sert du script pour debloquer le document.....oui je confirme, la modification de la ligne ne sera pas enregistré.
car les champs du documents ne sont enregistré quand tu sort du document en appuyant sur l'icone X pour fermer
sinon, si tu fais echap, rien ne s'enregistre...
mais je ne sais pas si j'ai bien compris la demande.....
K
enregistrer quel document.
un document enregistre des lignes
quand une ligne est validé, elle est sauvegardé et même si tu est toujours dans le document et que tu utilise le script pour le debloquer
mais si tu modifie le champ référence par exemple dans le document et que tu te sert du script pour debloquer le document.....oui je confirme, la modification de la ligne ne sera pas enregistré.
car les champs du documents ne sont enregistré quand tu sort du document en appuyant sur l'icone X pour fermer
sinon, si tu fais echap, rien ne s'enregistre...
mais je ne sais pas si j'ai bien compris la demande.....
K
- Posteur néophyte
- Messages: 11
- Inscription: Mar 23 Fév 2010 13:08
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
bonjour,
pour bien expliquer le problème :
par exemple je veux ouvrir la facture dont le piece est ' FA050636' appelant cette facture "factexple" qui déjà utilisé par un autre utilisateur X
en exécutant le script je peut ouvrir "factexple" et faire des modifications etc mais le problème que mes modification ne sont pas enregistrer seuls les modifications de l'utilisateur X sont enregistrées !!
je veux que ce script ferme le document "factexple" chez l'utilisateur X.
en ajoutant deux ligne a ce script:
if @lRes = 0
select spid,nt_username from master..sysprocesses where spid=@spid
je peut connaitre qui ouvre "factexple'' et le contacter pour lui dire de fermer ce fichier mais c'est pas une solution
puisque c 'est au niveau de base de données alors je penser a développer une application pour simple utilisateur avec VB en executant le meme script le probleme ici que VB ne peut pas executer le ligne:
EXECUTE @lRes = master..xp_CBUnLockrecord @spid,@lBase,@lTable, 3,@ress
(les deux points aprés master !!!)
pour résumer il me convient un de deux solutions soit un script qui permet de fermer un document bien precis chez un autre utilisateur soit une peite application en VB qui permettre d'executer le script pour que l'utlisateur puisse connaitre qui ouvre un le document el lui contacter pour le fermer
merci bien
ci dessous le nouveau script qui permet d'identifier l'utisateur qui bloque un document
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @spid int
DECLARE @sp int
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_DOCENTETE where DO_Piece='BCXXX' -- BCXXX = NUMERO DE PIECE (numero du document)
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ress
set @spid = 0
WHILE @spid < 200 -- on considère que 200 est un gros chiffre mais vous pouvez le mettre plus haut
BEGIN
set @spid=@spid+1
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é
print @LOCK -- renvoi 1 si bloqué et 0 pour debloqué
print @spid
if @lRes = 0
select spid,nt_username from master..sysprocesses where spid=@spid
END
CLOSE myCursor
DEALLOCATE myCursor
pour bien expliquer le problème :
par exemple je veux ouvrir la facture dont le piece est ' FA050636' appelant cette facture "factexple" qui déjà utilisé par un autre utilisateur X
en exécutant le script je peut ouvrir "factexple" et faire des modifications etc mais le problème que mes modification ne sont pas enregistrer seuls les modifications de l'utilisateur X sont enregistrées !!
je veux que ce script ferme le document "factexple" chez l'utilisateur X.
en ajoutant deux ligne a ce script:
if @lRes = 0
select spid,nt_username from master..sysprocesses where spid=@spid
je peut connaitre qui ouvre "factexple'' et le contacter pour lui dire de fermer ce fichier mais c'est pas une solution
puisque c 'est au niveau de base de données alors je penser a développer une application pour simple utilisateur avec VB en executant le meme script le probleme ici que VB ne peut pas executer le ligne:
EXECUTE @lRes = master..xp_CBUnLockrecord @spid,@lBase,@lTable, 3,@ress
(les deux points aprés master !!!)
pour résumer il me convient un de deux solutions soit un script qui permet de fermer un document bien precis chez un autre utilisateur soit une peite application en VB qui permettre d'executer le script pour que l'utlisateur puisse connaitre qui ouvre un le document el lui contacter pour le fermer
merci bien
ci dessous le nouveau script qui permet d'identifier l'utisateur qui bloque un document
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @spid int
DECLARE @sp int
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_DOCENTETE where DO_Piece='BCXXX' -- BCXXX = NUMERO DE PIECE (numero du document)
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ress
set @spid = 0
WHILE @spid < 200 -- on considère que 200 est un gros chiffre mais vous pouvez le mettre plus haut
BEGIN
set @spid=@spid+1
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é
print @LOCK -- renvoi 1 si bloqué et 0 pour debloqué
print @spid
if @lRes = 0
select spid,nt_username from master..sysprocesses where spid=@spid
END
CLOSE myCursor
DEALLOCATE myCursor
- Posteur habitué
- Messages: 20
- Inscription: Lun 21 Nov 2011 17:37
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
Pour répondre à ta question.
Je ne donnerai jamais un tel script a des utilisateurs.
La cas de blocage m'arrive en gros 1 fois / jour grand maximum.
Je n'ai pas essayé en VB mais il est possible que le script ne fonctionne pas.... a voir comment VB interprete le SQL de sql serveur. (peut etre juste une histoire de droit.....)
Quoi qu'il en soit, j'ai refait le script en un peu plus propre afin que le resultat soit plus jolie et que la boucle sorte quand le resultat est trouvé.....et mettre le user comme tu le préconisait
Une dernière chose, on ne peux pas savoir à l'avance quel utilisateurs est sur le document, on est obligé de débloquer le document pour savoir qui était dessus
Bon aprem !
Knarou
Je ne donnerai jamais un tel script a des utilisateurs.
La cas de blocage m'arrive en gros 1 fois / jour grand maximum.
Je n'ai pas essayé en VB mais il est possible que le script ne fonctionne pas.... a voir comment VB interprete le SQL de sql serveur. (peut etre juste une histoire de droit.....)
Quoi qu'il en soit, j'ai refait le script en un peu plus propre afin que le resultat soit plus jolie et que la boucle sorte quand le resultat est trouvé.....et mettre le user comme tu le préconisait
Une dernière chose, on ne peux pas savoir à l'avance quel utilisateurs est sur le document, on est obligé de débloquer le document pour savoir qui était dessus
- Code: Tout sélectionner
USE SA11GCM
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'
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
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
Bon aprem !
Knarou
- Posteur néophyte
- Messages: 11
- Inscription: Mar 23 Fév 2010 13:08
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
Juste pour info, c'est étonnant que cela ne fonctionne pas sur VB
Je viens de faire le test en php via la librairie mssql et le script fonctionne....
Je pourrais donner ce script sur notre intranet, mais trop dangereux je trouve.....c'est mieux qu'une seule personne centralise ce genre de deblocage.....
enfin moi je dis ça
Je viens de faire le test en php via la librairie mssql et le script fonctionne....
Je pourrais donner ce script sur notre intranet, mais trop dangereux je trouve.....c'est mieux qu'une seule personne centralise ce genre de deblocage.....
enfin moi je dis ça
- Posteur néophyte
- Messages: 11
- Inscription: Mar 23 Fév 2010 13:08
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
bnsoir knarou,
merci bien pour le script
merci bien pour le script
- Posteur habitué
- Messages: 20
- Inscription: Lun 21 Nov 2011 17:37
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
bonjour,
j'ai crée un procédure stocké :deblocage(@piece varchar(50),@table varchar (50)) dont j'ai inséré le script avec
@piece: est le pièce( do_piece, AR_ref etc...)
@table: est le nom de la table (f_docentete,article etc...)
maintenant je fais tout simplement un appel a ce procédure.
avec VB ça marche aussi sauf que n'y a pas l'affichage!!
c'est à dire qu'en exécutant ce procedure avec VB il fait le deblocage mais il n'affiche pas les messages :
Ce document n'est pas bloqué
ou
Le Document XXXX bloqué par SPID:YYY - Username:AAAAAAA a été debloqué
donc il me suffit de récupérer ces deux messages avec VB comment !!! j'en sais plus pour le moment
le script de procédure:
use bijou
go
create procedure deblocage(@piece varchar(50),@table varchar (50))
as
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=@piece
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
BEGIN
SET NOCOUNT ON
SELECT @lBase = DB_ID()
SELECT @lTable = OBJECT_ID(@table)
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 @table, @ress, @LOCK OUTPUT -- test si le document est toujours bloqué
IF @LOCK = 0
BEGIN
IF @spid = 0
BEGIN
return '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
bonne journée[/color]
j'ai crée un procédure stocké :deblocage(@piece varchar(50),@table varchar (50)) dont j'ai inséré le script avec
@piece: est le pièce( do_piece, AR_ref etc...)
@table: est le nom de la table (f_docentete,article etc...)
maintenant je fais tout simplement un appel a ce procédure.
avec VB ça marche aussi sauf que n'y a pas l'affichage!!
c'est à dire qu'en exécutant ce procedure avec VB il fait le deblocage mais il n'affiche pas les messages :
Ce document n'est pas bloqué
ou
Le Document XXXX bloqué par SPID:YYY - Username:AAAAAAA a été debloqué
donc il me suffit de récupérer ces deux messages avec VB comment !!! j'en sais plus pour le moment
le script de procédure:
use bijou
go
create procedure deblocage(@piece varchar(50),@table varchar (50))
as
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=@piece
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
BEGIN
SET NOCOUNT ON
SELECT @lBase = DB_ID()
SELECT @lTable = OBJECT_ID(@table)
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 @table, @ress, @LOCK OUTPUT -- test si le document est toujours bloqué
IF @LOCK = 0
BEGIN
IF @spid = 0
BEGIN
return '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
bonne journée[/color]
- Posteur habitué
- Messages: 20
- Inscription: Lun 21 Nov 2011 17:37
Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE
bonjour,
le script marche pour document,tiers,article..
maintenant je cherche a débloquer un règlement!!!
avez vous une idée SVP!!
merci d'avance
ADEL
le script marche pour document,tiers,article..
maintenant je cherche a débloquer un règlement!!!
avez vous une idée SVP!!
merci d'avance
ADEL
- Posteur habitué
- Messages: 20
- Inscription: Lun 21 Nov 2011 17:37
10 messages
|Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité