Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
896 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SAGE 100 SQL] Job SQL Agent de MAJ Lignes de devis

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SAGE 100 SQL] Job SQL Agent de MAJ Lignes de devis

n°1940359
willyboy73
Posté le 13-11-2009 à 12:16:31  profilanswer
 

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

mood
Publicité
Posté le 13-11-2009 à 12:16:31  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SAGE 100 SQL] Job SQL Agent de MAJ Lignes de devis

 

Sujets relatifs
[SQL Server 2000] : fichier de sortie "horodaté" (travail)vb excel - MAJ un tableau
requete SQL avec effacement du fichier concerné ?[RESOLU]Requête SQL: Afficher Gratuit/Payant en une seule fois
[RESOLU]Plusieurs requetes SQL en une seul sous forme de tableau[SQL] Design table "réseau social"
[SQL] Compter et additionner des occurences sous conditions[SQL Server 2008] Messages d'erreurs login
update mysql par lignes d'un tableau 
Plus de sujets relatifs à : [SAGE 100 SQL] Job SQL Agent de MAJ Lignes de devis


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR