Comment savoir qu'un document est ouvert
Modérateurs: Super-Apogea, Super Modérateur
8 messages
|Page 1 sur 1
Comment savoir qu'un document est ouvert
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é
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
- Messages: 5
- Inscription: Ven 14 Juin 2013 17:37
Re: Comment savoir qu'un document est ouvert
Essaye ce code qui affiche tous les documents bloqués
Salutations
- 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
Re: Comment savoir qu'un document est ouvert
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
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
- Messages: 37
- Inscription: Mer 25 Mai 2011 11:16
Re: Comment savoir qu'un document est ouvert
Bonjour à tous,
@Tim: avez vous un code à tester pour le dévérouillage..c'est intéressent!
Cordialement
@Tim: avez vous un code à tester pour le dévérouillage..c'est intéressent!
Cordialement
- Super Contributeur
- Messages: 151
- Inscription: Mar 19 Fév 2008 16:45
Re: Comment savoir qu'un document est ouvert
Essaye ce code dont j'ai oublié l'origine
Salut
- 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
Re: Comment savoir qu'un document est ouvert
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
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
- Messages: 37
- Inscription: Mer 25 Mai 2011 11:16
Re: Comment savoir qu'un document est ouvert
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.
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.
Re: Comment savoir qu'un document est ouvert
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
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
- Messages: 176
- Inscription: Sam 28 Juin 2014 20:48
8 messages
|Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité