L100 / Job SQL de MAJ F_DOCLIGNE bloque la gescom

Forum consacré aux développements d'applications interfacées avec les logiciels Sage

Modérateurs: Super Modérateur, Modérateurs

Règles du forum
Merci de prendre connaissance des règles d'utilisation du forum

Avant de poster un nouveau message, utilisez la fonction RECHERCHER. Indiquez la VERSION de votre logiciel et toutes informations utiles à la résolution de votre question. Ne rédigez pas vos messages en MAJUSCULES. Soyez courtois et pensez aux formules de POLITESSE d'usage. Les messages à vocation COMMERCIALE ou PUBLICITAIRE seront supprimés.

*** LORSQU'UN SUJET EST RESOLU, SON AUTEUR DOIT EDITER LE 1ER MESSAGE DU SUJET EN HAUT DE PAGE ET COCHER "SUJET RESOLU" ***

L100 / Job SQL de MAJ F_DOCLIGNE bloque la gescom

Messagede williamc » Ven 13 Nov 2009 15:22

Bonjour à tous, je me tourne vers ce forum car dans le cadre d'un projet sur une ligne 100 V15.5 SQL intégrée avec SAGE CRM, je dois effectuer des modifications sur la table F_DOCLIGNES sur les devis remontés de SAGE CRM.

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
williamc
Posteur néophyte
Posteur néophyte
 
Messages: 2
Inscription: Ven 13 Nov 2009 12:29

Re: L100 / Job SQL de MAJ F_DOCLIGNE bloque la gescom

Messagede williamc » Ven 13 Nov 2009 15:23

Merci d'avance Ă  ceux qui m'aideront !

Bonne journée !
williamc
Posteur néophyte
Posteur néophyte
 
Messages: 2
Inscription: Ven 13 Nov 2009 12:29


Retourner vers Développements ODBC, Objets métiers, SQL

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités