DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

Modérateurs: Super-Apogea, Super Modérateur

TROUVEZ VOUS CE SUJET UTIL ?

OUI
2
67%
NON
0
Aucun vote
JE COMPREND RIEN
1
33%
 
Nombre total de votes : 3

DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de knarou » Mar 22 Mar 2011 18:03

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
Posteur néophyte
Posteur néophyte
 
Messages: 11
Inscription: Mar 23 Fév 2010 13:08

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de adel5586 » Lun 21 Nov 2011 17:49

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
Posteur habitué
Posteur habitué
 
Messages: 20
Inscription: Lun 21 Nov 2011 17:37

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de adel5586 » Mer 23 Nov 2011 16:18

une réponse SVP c urgent
merci
Posteur habitué
Posteur habitué
 
Messages: 20
Inscription: Lun 21 Nov 2011 17:37

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de knarou » Mer 23 Nov 2011 16:38

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
Posteur néophyte
Posteur néophyte
 
Messages: 11
Inscription: Mar 23 Fév 2010 13:08

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de adel5586 » Jeu 24 Nov 2011 11:50

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
Posteur habitué
Posteur habitué
 
Messages: 20
Inscription: Lun 21 Nov 2011 17:37

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de knarou » Jeu 24 Nov 2011 16:50

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

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
Posteur néophyte
 
Messages: 11
Inscription: Mar 23 Fév 2010 13:08

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de knarou » Jeu 24 Nov 2011 17:42

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 ;-)
Posteur néophyte
Posteur néophyte
 
Messages: 11
Inscription: Mar 23 Fév 2010 13:08

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de adel5586 » Jeu 24 Nov 2011 18:57

bnsoir knarou,
merci bien pour le script
Posteur habitué
Posteur habitué
 
Messages: 20
Inscription: Lun 21 Nov 2011 17:37

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de adel5586 » Ven 25 Nov 2011 11:30

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]
Posteur habitué
Posteur habitué
 
Messages: 20
Inscription: Lun 21 Nov 2011 17:37

Re: DEBLOQUER UN DOCUMENT OU UNE FICHE CLIENT OUVERT SUR SAGE

de adel5586 » Mer 30 Nov 2011 16:06

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
Posteur habitué
Posteur habitué
 
Messages: 20
Inscription: Lun 21 Nov 2011 17:37


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
cron