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 :
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)
)
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.

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 :
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
Et nous employons donc des requêtes du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT CHP1, CHP2, fn_taux_date('TVA', CI_TVA, @dd_date) FROM ARTICLES WHERE (...)
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 ?