Erreur dépassement artithmétique via Trigger sur F_Docligne

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" ***

Erreur dépassement artithmétique via Trigger sur F_Docligne

Messagede Kolaite » Mer 23 Sep 2009 21:27

Bonsoir,

Lorsque les devis crées dans Sage CRM, s'ils comportent des remises en ligne, celles-ci sont déversées en montant (630 F)
J'ai crée un trigger pour recalculer une info libre (Rem_CRM) et transformer le montant de la remise en valeur (30 pour 30%).
Lorsque j'essaye d'importer un devis, j'ai le message suivant : "Erreur de dépassement arithmétique pour le type de données smallint, valeur = 151163"
Je suis en SQL 2000 sp2
Voici mon trigger :
CREATE TRIGGER SELF_UPDATE_REM_CRM ON F_DOCLIGNE
AFTER INSERT
AS
BEGIN
DECLARE @DL_NO SMALLINT,
@DO_TYPE SMALLINT,
@DO_DOMAINE SMALLINT,
@DO_PIECE VARCHAR(9),
@DL_PU NUMERIC(24,6),
@DL_QTE NUMERIC(24,6),
@DL_REM_VAL NUMERIC(24,6),
@DL_REM_TYPE SMALLINT,
@REM_CRM NUMERIC(24,6)

SELECT @DL_NO=DL_NO, @DO_DOMAINE=DO_DOMAINE, @DO_TYPE=DO_TYPE FROM INSERTED
IF (@DO_DOMAINE <>0) AND (@DO_TYPE <>0)
RETURN
SELECT @DO_TYPE=DO_TYPE, @DO_PIECE=DO_PIECE FROM F_DOCLIGNE WHERE DL_NO=@DL_NO
SELECT @DL_PU=DL_PRIXUNITAIRE, @DL_QTE=DL_QTE, @DL_REM_VAL=DL_Remise01REM_Valeur,@DL_REM_TYPE=DL_Remise01REM_Type, @REM_CRM=Rem_CRM FROM F_DOCLIGNE
WHERE DO_PIECE=@DO_PIECE AND DO_TYPE=@DO_TYPE
IF (@DL_REM_VAL <>0) AND (@DL_REM_TYPE=0)
UPDATE F_DOCLIGNE SET @REM_CRM =((@DL_PU*@DL_QTE)/@DL_REM_VAL)*100 WHERE DO_PIECE=@DO_PIECE AND DO_TYPE=@DO_TYPE
END

Auriez vous une idée ???
D'avance merci
Kolaite
Contributeur
Contributeur
 
Messages: 50
Inscription: Jeu 26 Mai 2005 07:21

Re: Erreur dépassement artithmétique via Trigger sur F_Docligne

Messagede Francis » Jeu 24 Sep 2009 08:35

Pas trop le temps de régarder dans le détail, mais si ton trigger est en entier, il me semble qu'il y a plusieurs soucis.
Peut-être faudrait-il le reprendre en s'aidant des nombreux exemples qui sont sur le forum.
Par exemple il me semble que tu vas chercher des valeurs dans f_docligne sans aller chercher une ligne bien spécifique
Code: Tout sélectionner
SELECT @DL_PU=DL_PRIXUNITAIRE, @DL_QTE=DL_QTE, @DL_REM_VAL=DL_Remise01REM_Valeur,@DL_REM_TYPE=DL_Remise01REM_Type, @REM_CRM=Rem_CRM FROM F_DOCLIGNE
WHERE DO_PIECE=@DO_PIECE AND DO_TYPE=@DO_TYPE
Je ne vois pas comment tu peux désigner la ligne concernée ?
Et ici tu fais un update de quoi ?
Code: Tout sélectionner
UPDATE F_DOCLIGNE SET @REM_CRM =((@DL_PU*@DL_QTE)/@DL_REM_VAL)*100 WHERE DO_PIECE=@DO_PIECE AND DO_TYPE=@DO_TYPE

Il se peut que je me trompe mais tu as encore un peu de boulot.
Pour l'erreur bien spécifique (mais est-ce le plus important), pense qu'en T-SQL le type d'un résultat est lié au type des opérandes, il ne faut pas hésiter à utliser les "cast".
Je vois surtout un DL_No en smallint, c'est un int.
Bon courage
Francis
Posteur actif
Posteur actif
 
Messages: 43
Inscription: Ven 31 Aoû 2007 14:30

Re: Erreur dépassement artithmétique via Trigger sur F_Docligne

Messagede Kolaite » Ven 25 Sep 2009 06:35

Bonjour,

Merci Francis de ces informations, j'ai repris mon trigger, l'ai modifié et n'ai plus mon message d'erreur......... Et, en plus, ça fonctionne

Merci de ton aide
Kolaite :D
Kolaite
Contributeur
Contributeur
 
Messages: 50
Inscription: Jeu 26 Mai 2005 07:21


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

Qui est en ligne

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