Bonjour,
Dans le cadre de l'intégration du futur taux de TVA à 20% qui n'est pas sociale, nous allons mettre en place une structure TAXES du type :
Ainsi, un type de taxe (TVA, Eco-participation, TPHBJO, etc.) pourra prendre différentes valeurs en fonction d'un code numérique et d'une date (par exemple le taux spécifique pour la restauration passée de 19.6 à 5.5 puis à 7 en est un bon exemple. DD_VALEUR correspond à la date à partir de laquelle le taux est applicable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE TAXES ( CI_ID INT IDENTITY (1, 1) NOT NULL , CC_TAXE CHAR(2) NOT NULL , CI_CODE SMALLINT NOT NULL , DD_VALEUR NOT NULL , QF_TAUX FLOAT NOT NULL , CONSTRAINT PK_TAXES PRIMARY KEY (CI_ID) )
Cette table contiendra différentes valeurs du type :
CC_TAXE = 'TVA'
CI_CODE = 1
DD_VALEUR = '1989-01-01'
QF_TAUX = 20.6
CC_TAXE = 'TVA'
CI_CODE = 1
DD_VALEUR = '2000-04-01'
QF_TAUX = 19.6
CC_TAXE = 'TVA'
CI_CODE = 1
DD_VALEUR = '2014-01-01'
QF_TAUX = 20.0
Dans ma table ARTICLES, j'ai un champ CI_TVA qui contient le code numérique relatif à la TVA applicable sur ledit article.
Je souhaiterais à tout moment pouvoir faire une requète qui me retourne pour un article donné le taux de TVA applicable.
Pour le moment nous employons une fonction :
Et nous employons donc des requêtes du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 CREATE FUNCTION fn_taux_date ( @cc_taxe CHAR(3), @ci_code SMALLINT, @dd_date SMALLDATETIME ) RETURNS FLOAT AS BEGIN DECLARE @qf_retour FLOAT SELECT @qf_retour = QF_TAUX FROM dba.TAXES t1 (NOLOCK) WHERE DD_VALEUR = (SELECT MAX(DD_VALEUR) FROM dba.TAXES t2 (NOLOCK) WHERE DD_VALEUR <= @dd_date AND t2.CC_TAXE = t1.CC_TAXE AND t2.CI_CODE = t1.CI_CODE) AND CC_TAXE = @cc_taxe AND CI_CODE = @ci_code RETURN ISNULL(@qf_retour, 0) END
Un des derniers papiers de maître Brouard m'a enseigné que l'utilisation des fonctions de cet acabit étaient à proscrire, y aurait-il un autre moyen ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT CHP1, CHP2, fn_taux_date('TVA', CI_TVA, @dd_date) FROM ARTICLES WHERE (...)
Partager