Comment savoir qu'un document est ouvert

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

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

Comment savoir qu'un document est ouvert

de atagleike » Mar 10 Sep 2013 09:21

Bonjour,

Je voudrais savoir, par l'utilisation des objets métier, si un document de vente est ouvert (en cours de modification ou de consultation) ou pas. J'ai essayé diverses méthodes, mais rien de vraiment efficace.

Quelqu'un a une idée ?

Merci

Hervé
Dernière édition par atagleike le Mer 30 Sep 2015 15:52, édité 1 fois.
Posteur néophyte
Posteur néophyte
 
Messages: 5
Inscription: Ven 14 Juin 2013 17:37

Re: Comment savoir qu'un document est ouvert

de nizarbraham » Dim 6 Oct 2013 14:32

Essaye ce code qui affiche tous les documents bloqués
Code: Tout sélectionner
SET NOCOUNT ON
DECLARE @DO_PIECE varchar(9)
DECLARE @DO_TYPE smallint
DECLARE @DO_DOMAINE smallint
DECLARE @DO_cbMarq int
DECLARE @DO_Dure_Contrat numeric
DECLARE @DO_majorachat numeric
DECLARE @lock int

DECLARE MyCursor CURSOR FOR
 SELECT DO_PIECE,DO_TYPE,DO_DOMAINE,cbMarq FROM F_DOCENTETE
 
 ORDER BY cbMarq

OPEN MyCursor -- j'initialise mon curseur
 
-- je le rempli avec la première ligne retournée par la requête
FETCH NEXT FROM MyCursor INTO @DO_PIECE, @DO_TYPE, @DO_DOMAINE, @DO_cbMarq
 
-- Tant que je n'ai pas traité tous les enregistrements de le requête
WHILE @@FETCH_STATUS  = 0
BEGIN
    exec CB_IsRecordLock 'F_DOCENTETE', @DO_cbMarq, @lock OUTPUT --Test si l'enregistrement est locké
    IF @lock > 0 print @DO_PIECE
           
   
   
    FETCH NEXT FROM MyCursor INTO @DO_PIECE, @DO_TYPE, @DO_DOMAINE, @DO_cbMarq
END
 
CLOSE myCursor -- je ferme mon curseur
DEALLOCATE myCursor -- je libère la mémoire allouée à ce curseur


Salutations
Avatar de l’utilisateur
Posteur néophyte
Posteur néophyte
 
Messages: 18
Inscription: Mer 28 Oct 2009 19:50

Re: Comment savoir qu'un document est ouvert

de Tim » Mar 5 Nov 2013 15:31

il y a la méthode CouldModified qui permet de vérifier si un document est verrouillé et si ce n'est pas le cas ça le verrouille.

ensuite les méthodes read, write ou writedefault déverrouillent
Développe en VB.NET sur Sage ligne 100 en SQL et en objets métiers.
Posteur actif
Posteur actif
 
Messages: 37
Inscription: Mer 25 Mai 2011 11:16

Re: Comment savoir qu'un document est ouvert

de DaliPieo » Jeu 28 Nov 2013 12:33

Bonjour à tous,

@Tim: avez vous un code à tester pour le dévérouillage..c'est intéressent! :D

Cordialement
Super Contributeur
Super Contributeur
 
Messages: 151
Inscription: Mar 19 Fév 2008 16:45

Re: Comment savoir qu'un document est ouvert

de nizarbraham » Mer 4 Déc 2013 19:45

Essaye ce code dont j'ai oublié l'origine
Code: Tout sélectionner
USE ma_base
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='d3004428' -- 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

Salut
Avatar de l’utilisateur
Posteur néophyte
Posteur néophyte
 
Messages: 18
Inscription: Mer 28 Oct 2009 19:50

Re: Comment savoir qu'un document est ouvert

de Tim » Lun 3 Mar 2014 12:25

Désolé ça faisait un moment que je n'étais pas venu sur le forum.

le test est tout simple :

try
monDoc.CouldModified
mondoc.read
catch ex as exception
msgbox ("Doc ouvert")
end try
Développe en VB.NET sur Sage ligne 100 en SQL et en objets métiers.
Posteur actif
Posteur actif
 
Messages: 37
Inscription: Mer 25 Mai 2011 11:16

Re: Comment savoir qu'un document est ouvert

de gremlins13 » Mer 30 Sep 2015 15:49

Merci à tous,

Je réponds très très très très très tard, J'ai pris en compte toutes vos propositions, et finalement j'ai opté pour une solution très simple mais qui satisfait à ce que demande mon programme : c'est à dire je tente un simple update sur le document (par exemple 'UPDATE F_DOCENTETE SET DO_STATUT=DO_STATUT WHERE DO_PIECE='BCXXXXX') encapsulé dans un try except. Si j'ai une exception, j'en déduis que le document est ouvert quelque part, à condition, bien sur, que le document existe, mais ça , c'est une autre requête.
Avatar de l’utilisateur
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Mar 26 Fév 2013 12:06

Re: Comment savoir qu'un document est ouvert

de romulus001 » Jeu 1 Oct 2015 14:24

La fonction dbo.CB_FntIsRecordLock permet de faire cela, si elle renvoie 0, le document n'est pas ouvert, 1 sinon.

1er paramètre en entrée : le nom de ta table où tu veux faire ton test (exemple: F_DOCENTETE)
2eme paramètre en entrée : la valeur du cbmarq de ta table concernée
Super Contributeur
Super Contributeur
 
Messages: 176
Inscription: Sam 28 Juin 2014 20:48


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités