Problema al crear un procedimiento almacenado
Publicado por Joaquin Gracia (1 intervención) el 04/11/2012 11:25:58
Buenos días.
Estoy creando un procedimiento almacenado que actualiza dos tablas mediante dos cursores.
al intentar crearlo me da el siguiente error:
Mens 207, Nivel 16, Estado 1, Procedimiento VGE_CorrigeIVAFacturas, Línea 0
El nombre de columna '@c1PorIva3' no es válido.
Gracias de antemano.
Estoy creando un procedimiento almacenado que actualiza dos tablas mediante dos cursores.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
USE [TRIGO]
GO
/****** Objeto: StoredProcedure [dbo].[VGE_RecalculaEstadisticas] Fecha de la secuencia de comandos: 11/02/2012 09:31:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[VGE_CorrigeIVAFacturas]
@TiendaInicial as nvarchar(255), @ClienteInicial as nvarchar(255), @SerieInicial as nvarchar(255),
@FechaInicial as nvarchar(255), @FechaFinal as nvarchar(255)
AS
--- Variables para recibir los valores del select
DECLARE @c1Año as int
DECLARE @c1Serie as nvarchar(3)
DECLARE @c1Numero as int
DECLARE @c1CodigoDeCliente as int
DECLARE @c1FechaDocumento as datetime
DECLARE @c1Tienda as int
DECLARE @c1BaseImponible1 as float
DECLARE @c1PorIva1 as float
DECLARE @c1CuotaIva1 as float
DECLARE @c1BaseImponible2 as float
DECLARE @c1PorIva2 as float
DECLARE @c1CuotaIva2 as float
DECLARE @c1BaseImponible3 as float
DECLARE @c1PorIva3 as float
DECLARE @c1CuotaIva3 as float
DECLARE @c1Total as float
DECLARE @c1BaseImponible1a as float
DECLARE @c1CuotaIva1a as float
DECLARE @c1BaseImponible2a as float
DECLARE @c1CuotaIva2a as float
DECLARE @c1BaseImponible3a as float
DECLARE @c1CuotaIva3a as float
DECLARE @c1TotalA as float
DECLARE @c1FactorCambio as float
DECLARE @c2Año as int
DECLARE @c2Serie as nvarchar(3)
DECLARE @c2Numero as int
DECLARE @c2NumLinea as int
DECLARE @c2TipoDeIva as nvarchar(1)
DECLARE @c2PorIva as real
DECLARE @FechaInicial2 as nvarchar(255)
DECLARE @FechaFinal2 as nvarchar(255)
DECLARE @CadenaError as nvarchar(255)
DECLARE @vImporteConIva as float
DECLARE @vNuevaBase as float
DECLARE @vNuevoIVA as float
SET @FechaInicial = @FechaInicial + ' 00:00:00'
SET @FechaFinal = @FechaFinal + ' 23:59:59'
SET @FechaInicial2 = @FechaInicial
SET @FechaFinal2 = @FechaFinal
DECLARE C0 CURSOR FOR SELECT Año, Serie, Numero, CodigoDecliente, FechaDocumento, Tienda, BaseImponible1, PorIva1, CuotaIva1, BaseImponible2, PorIva2, CuotaIva2, BaseImponible3, PorIva3, CuotaIva3, Total, BaseImponible1a, CuotaIva1a, BaseImponible2a, CuotaIva2a, BaseImponible3a, CuotaIva3a, TotalA, FactorCambio FROM FacturasClientes WHERE Año = 2012 AND Serie = @SerieInicial AND CodigoDeCliente = @ClienteInicial AND Tienda = @TiendaInicial AND [FechaDocumento] BETWEEN CONVERT(datetime, @FechaInicial2) AND CONVERT(datetime, @FechaFinal2)
OPEN C0 --- se abre el cursor
--- Se cargan los valores del cursor en las variables
FETCH NEXT FROM C0 INTO @c1Año, @c1Serie, @c1Numero, @c1CodigoDeCliente, @c1FechaDocumento, @c1Tienda, @c1BaseImponible1, @c1PorIva1, @c1CuotaIva1, @c1BaseImponible2, @c1PorIva2, @c1CuotaIva2, @c1BaseImponible3, @c1PorIva3, @c1CuotaIva3, @c1Total, @c1BaseImponible1a, @c1CuotaIva1a, @c1BaseImponible2a, @c1CuotaIva2a, @c1BaseImponible3a, @c1CuotaIva3a, @c1TotalA, @c1FactorCambio
WHILE(@@FETCH_STATUS=0)
BEGIN
DECLARE C2 CURSOR FOR SELECT [Año], [Serie], [Numero], [NumLinea], [TipoDeIva], [PorIva] FROM DetalleFacturaCliente WHERE [Año] = @c1Año AND [Serie] = @c1Serie AND [Numero] = @c1Numero
OPEN C2 --- se abre el cursor
FETCH NEXT FROM C2 INTO @c2Año, @c2Serie, @c2Numero, @c2NumLinea, @c2TipoDeIva, @c2PorIva
WHILE(@@FETCH_STATUS=0)
BEGIN
IF @c2TipoDeIva = 'N'
BEGIN
SET @c2TipoDeIva = 'R'
IF @c2PorIva = 18
BEGIN
SET @c2PorIva = 8
END
IF @c2PorIva = 21
BEGIN
SET @c2PorIva = 10
END
UPDATE [DetalleFacturaCliente] SET [TipoDeIva] = @c2TipoDeIva, [PorIva] = @c2PorIva WHERE CURRENT OF C2
END
FETCH NEXT FROM C2 INTO @c2Año, @c2Serie, @c2Numero, @c2NumLinea, @c2TipoDeIva, @c2PorIva
END
CLOSE C2
DEALLOCATE C2
IF (@c1PorIva3 = 18 OR @c1PorIva3 = 21) AND @c1CuotaIva3 <> 0
BEGIN
SET @vImporteConIva = @c1BaseImponible3 + @c1CuotaIva3
SET @vNuevaBase = ROUND((@vImporteConIva / ((100 + @c1PorIva1) / 100)), 2)
SET @vNuevoIVA = @vImporteConIva - @vNuevaBase
SET @c1BaseImponible1 = @c1BaseImponible1 + @vNuevaBase
SET @c1CuotaIva1 = @c1CuotaIva1 + (@c1Total - (@c1BaseImponible1 + @c1CuotaIva1 + @c1BaseImponible2 + @c1CuotaIva2))
SET @c1BaseImponible3 = 0
SET @c1PorIva3 = 0
SET @c1CuotaIva3 = 0
SET @c1BaseImponible1a = ROUND( (@c1BaseImponible1 * @c1FactorCambio), 0)
SET @c1CuotaIva1a = ROUND( (@c1CuotaIva1 * @c1FactorCambio), 0)
SET @c1BaseImponible3a = 0
SET @c1CuotaIva3a = 0
UPDATE [dbo].[FacturasClientes] SET [BaseImponible1] = @c1BaseImponible1, [CuotaIva1] = @c1CuotaIva1, [BaseImponible3] = @c1BaseImponible3, [@c1PorIva3] = @c1PorIva3, [CuotaIva3] = @c1CuotaIva3, [BaseImponible1a] = @c1BaseImponible1a, [CuotaIva1a] = @c1CuotaIva1a, [BaseImponible3a] = @c1BaseImponible3a, [CuotaIva3a] = @c1CuotaIva3a WHERE CURRENT OF C1
END
FETCH NEXT FROM C0 INTO @c1Año, @c1Serie, @c1Numero, @c1CodigoDeCliente, @c1FechaDocumento, @c1Tienda, @c1BaseImponible1, @c1PorIva1, @c1CuotaIva1, @c1BaseImponible2, @c1PorIva2, @c1CuotaIva2, @c1BaseImponible3, @c1PorIva3, @c1CuotaIva3, @c1Total, @c1BaseImponible1a, @c1CuotaIva1a, @c1BaseImponible2a, @c1CuotaIva2a, @c1BaseImponible3a, @c1CuotaIva3a, @c1TotalA, @c1FactorCambio
END
-- cerramos el cursor
CLOSE C0
DEALLOCATE C0
al intentar crearlo me da el siguiente error:
Mens 207, Nivel 16, Estado 1, Procedimiento VGE_CorrigeIVAFacturas, Línea 0
El nombre de columna '@c1PorIva3' no es válido.
Gracias de antemano.
Valora esta pregunta


0