[SAGE 100 SQL] Job SQL Agent de MAJ Lignes de devis
Job SQL Agent de MAJ Lignes de devis [SAGE 100 SQL] - SQL/NoSQL - Programmation
MarshPosté le 13-11-2009 à 12:16:31
Bonjour à tous, je me tourne vers ce forum car dans le cadre d'un projet sur une ligne 100 V15.5 SQL je dois effectuer des modifications sur la table F_DOCLIGNE sur des devis flagués .
J'ai essayé beaucoup beaucoup de choses mais je suis hélas en panne d'idée pour résoudre mon problème. Voici mon soucis :
Je dois modifier les lignes dans la table F_DOCLIGNE de certains devis dont l'entête est stockée dans la table F_DOCENTETE et flaguée grace a un champ crmsync qui est à 'LinesNotOk' quand le devis est à traiter et à LinesOk quand il est traité.
Suite à divers tests en trigger exécutés quand je flag l'entête se révélant infructueux j'ai décidé de faire passer un job SQL avec le SQL agent toutes les deux minutes pour aller traiter mes devis flaggés.
J'ai donc commencé par des update simples avec jointure entre les deux tables mais j'ai eu des gros soucis mon traitement se bloquant complètement et rendant la gescom inutilisable à priori a cause des verrous posés sur les devis en cours d'utilisation.
J'ai donc réécris mon Job pour traiter un par un les devis et pouvoir tester s'ils sont en cours d'utilisation : mais mon job est extrêmement long à s'exécuter et bloque complètement la ges com et là je ne maîtrise plus du tout la raison. C'est pourquoi j'en appelle à vous pour éclairer ma lanterne si vous pouvez jeter un oeil à mon script et détecter une erreur SQL ? Ou s'il y a des connaisseurs de la ligne 100 qui identifient une mauvaise façon de procéder ? Je vous remercie grandement d'avance. Je suis a votre disposition pour toute question.
Bonne journée à tous !
Voici mon job :
Code :
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,Dure_Contrat,majorachat FROM F_DOCENTETE
WHERE crmsync='linesnotok' and DO_Ref = 'QT-298/4'
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,@DO_Dure_Contrat,@DO_majorachat
-- 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
RAISERROR('Enregistrement Verrouillé',10,1)
ELSE
BEGIN
if((@DO_majorachat<>0) AND (@DO_majorachat is not null))
Marsh Posté le 13-11-2009 à 12:16:31
Bonjour à tous, je me tourne vers ce forum car dans le cadre d'un projet sur une ligne 100 V15.5 SQL je dois effectuer des modifications sur la table F_DOCLIGNE sur des devis flagués .
J'ai essayé beaucoup beaucoup de choses mais je suis hélas en panne d'idée pour résoudre mon problème. Voici mon soucis :
Je dois modifier les lignes dans la table F_DOCLIGNE de certains devis dont l'entête est stockée dans la table F_DOCENTETE et flaguée grace a un champ crmsync qui est à 'LinesNotOk' quand le devis est à traiter et à LinesOk quand il est traité.
Suite à divers tests en trigger exécutés quand je flag l'entête se révélant infructueux j'ai décidé de faire passer un job SQL avec le SQL agent toutes les deux minutes pour aller traiter mes devis flaggés.
J'ai donc commencé par des update simples avec jointure entre les deux tables mais j'ai eu des gros soucis mon traitement se bloquant complètement et rendant la gescom inutilisable à priori a cause des verrous posés sur les devis en cours d'utilisation.
J'ai donc réécris mon Job pour traiter un par un les devis et pouvoir tester s'ils sont en cours d'utilisation : mais mon job est extrêmement long à s'exécuter et bloque complètement la ges com et là je ne maîtrise plus du tout la raison. C'est pourquoi j'en appelle à vous pour éclairer ma lanterne si vous pouvez jeter un oeil à mon script et détecter une erreur SQL ? Ou s'il y a des connaisseurs de la ligne 100 qui identifient une mauvaise façon de procéder ? Je vous remercie grandement d'avance. Je suis a votre disposition pour toute question.
Bonne journée à tous !
Voici mon job :