· 8 years ago · Aug 04, 2018, 12:22 AM
1-- =============================================
2-- Author: <Alexis Rojas Hidalgo>
3-- Create date: <2017-08-26>
4-- Description: <Realiza mantenimiento de las tablas>
5-- =============================================
6USE db_analisis_bm;
7GO
8SET ANSI_NULLS ON;
9GO
10SET QUOTED_IDENTIFIER ON;
11GO
12
13-- Verify that the stored procedure does not already exist.
14IF OBJECT_ID('usp_GetErrorInfo', 'P') IS NOT NULL
15 DROP PROCEDURE usp_GetErrorInfo;
16GO
17
18-- Create procedure to retrieve error information.
19CREATE PROCEDURE usp_GetErrorInfo
20AS
21 SELECT ERROR_NUMBER() AS ErrorNumber,
22 --ERROR_SEVERITY() AS ErrorSeverity,
23 --ERROR_STATE() AS ErrorState,
24 --ERROR_PROCEDURE() AS ErrorProcedure,
25 --ERROR_LINE() AS ErrorLine,
26 ERROR_MESSAGE() AS ErrorMessage;
27GO
28
29-- Cambio de mes y carga de historia en ventas_diarias
30
31DECLARE @dia INT;
32DECLARE @mes INT;
33DECLARE @anno INT;
34SELECT @dia = DAY(CONVERT(DATE, DATEADD(day, -1, CONVERT(DATE, GETDATE()))));
35SELECT @mes = MONTH(CONVERT(DATE, CONVERT(DATE, GETDATE())));
36SELECT @anno = YEAR(CONVERT(DATE, CONVERT(DATE, GETDATE())));
37IF @dia = 1
38 BEGIN
39 --DECLARE @anno int = 2017
40 --DECLARE @mes int = 10
41 EXEC sp_insertar_ma_tbl_vtas
42 @anno;
43 DELETE dbo.tbl_vtas_diarias;
44 SET @anno = @anno - 1;
45 EXEC sp_insertar_mmaa_tbl_vtas_diarias
46 @anno,
47 @mes;
48 END;
49-- Crea tabla temporal encargada de almacenar la información obtenida del csv importado
50
51IF OBJECT_ID('tempdb..#tbl_temporal') IS NOT NULL
52 BEGIN
53 TRUNCATE TABLE [#tbl_temporal];
54 PRINT 'Tabla temporal de carga archivo csv fue limpiada';
55 END;
56 ELSE
57 BEGIN
58 CREATE TABLE [dbo].[#tbl_temporal]
59([cod_punto_venta] [VARCHAR](50) NULL,
60 [fecha] [VARCHAR](50) NULL,
61 [id_material] [VARCHAR](50) NULL,
62 [cod_barras] [VARCHAR](50) NULL,
63 [cod_proveedor] [VARCHAR](50) NULL,
64 [anno] [VARCHAR](50) NULL,
65 [mes] [VARCHAR](50) NULL,
66 [ventasnetas] [VARCHAR](50) NULL,
67 [unidades] [FLOAT] NULL,
68 [preciocosto] [VARCHAR](50) NULL,
69 [margenreal] [VARCHAR](50) NULL,
70 [margenteorico] [VARCHAR](50) NULL
71)
72 ON [PRIMARY];
73 PRINT 'Tabla temporal de carga archivo csv fue creada';
74 END;
75
76-- Creacion del nombre del archivo
77
78 BEGIN TRY
79 SET NOCOUNT ON;
80 DECLARE @nombre_archivo VARCHAR(50);
81 DECLARE @path VARCHAR(MAX);
82 SELECT @nombre_archivo = CONVERT(VARCHAR(50), CONVERT(DATE, DATEADD(day, -1, CONVERT(DATE, GETDATE()))), 112);
83 --SET @nombre_archivo = @nombre_archivo+'-'+@nombre_archivo;
84 PRINT 'El archivo que se va ejecutar es '+@nombre_archivo+'_SMK_vtas.csv';
85-- -------------------
86 SET @path = 'C:\Users\innova_retail_cloud\OneDrive\Documentos\'+@nombre_archivo+'_SMK_vtas.csv';
87 PRINT @path;
88 DECLARE @SQL_BULK VARCHAR(MAX);
89 SET @SQL_BULK = 'BULK INSERT #tbl_temporal FROM '''+@path+''' WITH
90 (
91 FIRSTROW = 2,
92 DATAFILETYPE = ''char'',
93 FIELDTERMINATOR = ''|'',
94 ROWTERMINATOR = ''\n'',
95 KEEPNULLS
96 )';
97 EXEC (@SQL_BULK);
98 PRINT 'Insertado';
99--WAITFOR DELAY '00:00:05';
100-- Quita los ceros en la tabla temporal de la base de datos
101UPDATE #tbl_temporal
102 SET
103 #tbl_temporal.cod_barras = replace(LTRIM(replace(#tbl_temporal.cod_barras, 0, ' ')), ' ', 0);
104
105-- Remplaza los codigos de granel
106UPDATE #tbl_temporal
107SET
108 #tbl_temporal.cod_barras = CAST(dbo.tbl_granel.[Nuevo codigo] AS VARCHAR(50))
109FROM #tbl_temporal, dbo.tbl_granel
110WHERE #tbl_temporal.cod_barras = cast(dbo.tbl_granel.[Cod# barras] AS VARCHAR(50))
111AND #tbl_temporal.cod_punto_venta = cast(dbo.tbl_granel.[Cod# punto de venta] AS VARCHAR(50));
112
113
114-- Inserta en la tabla diaria
115 INSERT INTO [dbo].[tbl_vtas_diarias]
116([codmat_vtas_diarias],
117 [codbar_vtas_diarias],
118 [codpdv_vtas_diarias],
119 [codprov_vtas_diarias],
120 [fecha_vtas_diarias],
121 [mes_vtas_diarias],
122 [anno_vtas_diarias],
123 [monto_vtas_diarias],
124 [unid_vtas_diarias],
125 [mreal_vtas_diarias],
126 [mteorico_vtas_diarias],
127 [pcosto_vtas_diarias]
128)
129 SELECT trim(tt.id_material),
130 trim(tt.cod_barras),
131 trim(tt.cod_punto_venta),
132 trim(tt.cod_proveedor),
133 CONVERT(DATE, tt.Fecha, 103),
134 trim(tt.mes),
135 trim(tt.anno),
136 cast(tt.ventasnetas as float),
137 cast(tt.unidades as float),
138 cast(tt.margenreal as float),
139 cast(tt.margenteorico as float),
140 cast(tt.preciocosto as float)
141 FROM #tbl_temporal tt
142 WHERE NOT EXISTS
143(
144 SELECT tvd.fecha_vtas_diarias
145 FROM dbo.tbl_vtas_diarias tvd
146 WHERE tvd.fecha_vtas_diarias = CONVERT(DATE, tt.Fecha, 103)
147 AND tvd.codpdv_vtas_diarias = trim(tt.cod_punto_venta)
148 AND tvd.codmat_vtas_diarias = trim(tt.id_material)
149);
150 PRINT 'Tabla tbl_vtas_diarias - 7 ha sido llenada';
151END TRY
152BEGIN CATCH
153 -- Execute error retrieval routine.
154 EXECUTE usp_GetErrorInfo;
155END CATCH;