J'ai essayé beaucoup beaucoup de choses mais je suis hélas en panne d'idée pour résoudre mon problème n'ayant pas assez de connaissances L100. Voici mon soucis :
Je dois modifier certains devis remontés de SAGE CRM.
1- J'ai tout d'abord essayé de faire l'opération par trigger dans sage crm mais sans succès, l'update de mes lignes à la remontée du devis provoque un timeout SQL qui me coupe la synchro ( et ne modifie pas mes lignes).
2- J'ai ensuite décidé de flaguer les F_DOCENTETE des devis à traiter et créé un job SQL avec SQL Agent qui s'exécute toutes les 2 minutes qui effectue un update sur une jointure avec les F_DOCENTETE flagués. Problème : si le devis a modifier est en cours d'ulitsation sans la ges com , mon traitement est bloqué et ralentis la ges com considérablement ce qui n'est pas acceptable.
3 - 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êment long à exécuter et bloque complètement la ges comet là je ne maîtrise plus du tout la raison. C'est pourquoi j'en appelle à vous les gourous de SAGE L100 pour éclairer ma lanterne .
Voici mon job :
- 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,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))
BEGIN
-- 1- Majoration des Lignes de Rachat
UPDATE F_DOCLIGNE
SET F_DOCLIGNE.DL_QteBC = DL_Qte*1.1,
F_DOCLIGNE.DL_QteBL = DL_Qte*1.1,
F_DOCLIGNE.EU_Qte = DL_Qte*1.1,
F_DOCLIGNE.DL_MontantHT = DL_Qte*1.1,
F_DOCLIGNE.DL_MontantTTC = ROUND(DL_Qte*1.1*(1+(DL_Taxe1/100)),2),
F_DOCLIGNE.DL_Qte = DL_Qte*1.1
WHERE F_DOCLIGNE.DO_PIECE = @DO_PIECE AND F_DOCLIGNE.DO_TYPE = @DO_TYPE AND F_DOCLIGNE.DO_DOMAINE = @DO_DOMAINE
AND F_DOCLIGNE.AR_Ref = 'RACHVIDCST'
-- 2- Majoration Remise
UPDATE F_DOCLIGNE
SET F_DOCLIGNE.DL_MontantHT = F_DOCLIGNE.DL_MontantHT-@DO_majorachat,
F_DOCLIGNE.DL_MontantTTC = F_DOCLIGNE.DL_MontantTTC-ROUND(@DO_majorachat*(1+(DL_Taxe1/100)),2)
WHERE F_DOCLIGNE.DO_PIECE = @DO_PIECE AND F_DOCLIGNE.DO_TYPE = @DO_TYPE AND F_DOCLIGNE.DO_DOMAINE = @DO_DOMAINE
AND F_DOCLIGNE.AR_Ref = 'REM_VI'
END
-- 3- Valorisation Loyer
UPDATE F_DOCLIGNE
SET F_DOCLIGNE.DL_PoidsBrut = ROUND(((F_DOCLIGNE.DL_MontantHT/(@DO_Dure_Contrat/1.2))*1000),2)
WHERE F_DOCLIGNE.DO_PIECE = @DO_PIECE AND F_DOCLIGNE.DO_TYPE = @DO_TYPE AND F_DOCLIGNE.DO_DOMAINE = @DO_DOMAINE
-- 4 ReFlag de l'entĂŞte
UPDATE F_DOCENTETE
SET crmsync='linesok', majorachat = 0
WHERE F_DOCENTETE.DO_PIECE = @DO_PIECE AND F_DOCENTETE.DO_TYPE = @DO_TYPE AND F_DOCENTETE.DO_DOMAINE = @DO_DOMAINE
END
FETCH NEXT FROM MyCursor INTO @DO_PIECE, @DO_TYPE, @DO_DOMAINE, @DO_cbMarq,@DO_Dure_Contrat,@DO_majorachat
END
CLOSE myCursor -- je ferme mon curseur
DEALLOCATE myCursor -- je libère la mémoire allouée à ce curseur

