[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

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 :
 

Code :
  1. SET NOCOUNT ON
  2. DECLARE @DO_PIECE varchar(9)
  3. DECLARE @DO_TYPE smallint
  4. DECLARE @DO_DOMAINE smallint
  5. DECLARE @DO_cbMarq int
  6. DECLARE @DO_Dure_Contrat numeric
  7. DECLARE @DO_majorachat numeric
  8. DECLARE @lock int
  9. DECLARE MyCursor CURSOR FOR
  10. SELECT DO_PIECE,DO_TYPE,DO_DOMAINE,cbMarq,Dure_Contrat,majorachat FROM F_DOCENTETE
  11. WHERE crmsync='linesnotok' and DO_Ref = 'QT-298/4'
  12. ORDER BY cbMarq
  13. OPEN MyCursor -- j'initialise mon curseur
  14. -- je le rempli avec la première ligne retournée par la requête
  15. FETCH NEXT FROM MyCursor INTO @DO_PIECE, @DO_TYPE, @DO_DOMAINE, @DO_cbMarq,@DO_Dure_Contrat,@DO_majorachat
  16. -- Tant que je n'ai pas traité tous les enregistrements de le requête
  17. WHILE @@FETCH_STATUS  = 0
  18. BEGIN
  19.     exec CB_IsRecordLock 'F_DOCENTETE', @DO_cbMarq, @lock OUTPUT --Test si l'enregistrement est locké
  20.     IF @lock > 0
  21.       RAISERROR('Enregistrement Verrouillé',10,1)     
  22.     ELSE
  23.     BEGIN
  24.      
  25.       if((@DO_majorachat<>0) AND (@DO_majorachat is not null))
  26.       BEGIN
  27.         --  1- Majoration des Lignes de Rachat
  28.         UPDATE F_DOCLIGNE
  29.         SET F_DOCLIGNE.DL_QteBC = DL_Qte*1.1,
  30.         F_DOCLIGNE.DL_QteBL = DL_Qte*1.1,
  31.         F_DOCLIGNE.EU_Qte = DL_Qte*1.1,
  32.         F_DOCLIGNE.DL_MontantHT = DL_Qte*1.1,
  33.         F_DOCLIGNE.DL_MontantTTC = ROUND(DL_Qte*1.1*(1+(DL_Taxe1/100)),2),
  34.         F_DOCLIGNE.DL_Qte = DL_Qte*1.1
  35.         WHERE F_DOCLIGNE.DO_PIECE = @DO_PIECE AND F_DOCLIGNE.DO_TYPE = @DO_TYPE AND F_DOCLIGNE.DO_DOMAINE = @DO_DOMAINE
  36.         AND F_DOCLIGNE.AR_Ref = 'RACHVIDCST'
  37.      
  38.         --  2- Majoration Remise
  39.         UPDATE F_DOCLIGNE
  40.         SET F_DOCLIGNE.DL_MontantHT = F_DOCLIGNE.DL_MontantHT-@DO_majorachat,
  41.         F_DOCLIGNE.DL_MontantTTC = F_DOCLIGNE.DL_MontantTTC-ROUND(@DO_majorachat*(1+(DL_Taxe1/100)),2)
  42.         WHERE F_DOCLIGNE.DO_PIECE = @DO_PIECE AND F_DOCLIGNE.DO_TYPE = @DO_TYPE AND F_DOCLIGNE.DO_DOMAINE = @DO_DOMAINE
  43.         AND F_DOCLIGNE.AR_Ref = 'REM_VI'
  44.       END
  45.       --  3- Valorisation Loyer
  46.       UPDATE F_DOCLIGNE
  47.       SET F_DOCLIGNE.DL_PoidsBrut = ROUND(((F_DOCLIGNE.DL_MontantHT/(@DO_Dure_Contrat/1.2))*1000),2)
  48.       WHERE F_DOCLIGNE.DO_PIECE = @DO_PIECE AND F_DOCLIGNE.DO_TYPE = @DO_TYPE AND F_DOCLIGNE.DO_DOMAINE = @DO_DOMAINE
  49.      
  50.       -- 4 ReFlag de l'entête
  51.       UPDATE F_DOCENTETE
  52.       SET crmsync='linesok', majorachat = 0
  53.       WHERE F_DOCENTETE.DO_PIECE = @DO_PIECE AND F_DOCENTETE.DO_TYPE = @DO_TYPE AND F_DOCENTETE.DO_DOMAINE = @DO_DOMAINE
  54.    
  55.     END
  56.     FETCH NEXT FROM MyCursor INTO @DO_PIECE, @DO_TYPE, @DO_DOMAINE, @DO_cbMarq,@DO_Dure_Contrat,@DO_majorachat
  57. END
  58. CLOSE myCursor -- je ferme mon curseur
  59. DEALLOCATE myCursor -- je libère la mémoire allouée à ce curseur

Reply

Marsh Posté le 13-11-2009 à 12:16:31   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed