我有下一个问题。作为存储过程的结果,我有下一个文件:
CB0596201302 OP0596002 20130201V40V5E H1069004320928.80 48.88
存储过程是:
ALTER PROCEDURE [dbo].[PA_UYInformeTransacciones]
@mes INT,
@anio INT
AS
BEGIN
SET NOCOUNT ON;
DECLARE
DECLARE @EntidadesLimite TABLE (valorSUM DECIMAL(14,2), CIF NVARCHAR(18))
CREATE TABLE #tablatemporalFixing (tempfecha DATETIME, tempfixing DECIMAL(24,10))
DECLARE @EntidadResultado TABLE (CIF NVARCHAR(18), RegistroEntidad CHAR(530))
DECLARE @OperacionResultado TABLE (CIF NVARCHAR(18), RegistroOperacion CHAR(530))
DECLARE @Resultado TABLE (Resultado NVARCHAR(530))
IF @srv IS NULL SET @srv = ''
IF @srvgc IS NULL SET @srvgc=''
SELECT @idpais = P.IdPais, @idisoalocal = P.CodigoISOA
FROM Pais P
WHERE P.CodigoISOA = 'UYU'
IF (@mes < 10)
BEGIN
SET @fmes = '0'+CAST(@mes AS CHAR(1))
END
ELSE
BEGIN
SET @fmes = CAST(@mes AS CHAR(2))
END
SET @fanio = CAST(@anio AS CHAR(4))
SET @fecha = @fanio + @fmes + '01'
SET @finicio = CAST (@fecha as smalldatetime)
SET @ffin = dateadd(d,-1,dateadd(m,1, CAST (@fecha as smalldatetime)))
SET @aniomes = @fanio+@fmes
--Obtener los centros del país.
INSERT INTO @cts(IdCentro, Nombre, Bdv, FcambioVN, Bdn, FcambioNM, Bdm, idCentroMC)
SELECT IdCentro, Nombre, BaseDato, GlobalCash2010, BaseDatoGCH2010, FechaMulticentro, BaseDatoMulticentro, CodigoCentroMulticentro
FROM dbo.Centro
WHERE CodigoPais = @idpais
AND BaseDatoGCH2010 IS NOT NULL
AND Productivo = 1
WHILE EXISTS(SELECT 1 FROM @cts)
BEGIN
SELECT TOP 1 @idct = IdCentro, @nombre = Nombre, @bdvieja = Bdv, @fcambioVN = FcambioVN, @bdnueva = Bdn,
@fcambioNM = FcambioNM,@bdmmulticentro = Bdm, @idCentroMulticentro = idCentroMC
FROM @cts
SET @bdvieja = @srv + @bdvieja
SET @bdnueva = @srv + @bdnueva
IF @fcambioVN IS NULL OR (@fcambioVN IS NOT NULL AND @fcambioVN > @ffin) -- [(Versión Antigua)]
BEGIN -- VERSIÓN ANTIGUA
PRINT 'versión antigua:' + @bdvieja
-- fixing a ValorUSD de las operaciones que se realizan en el mes indicado
DELETE FROM #tablatemporalFixing
SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
FROM '+@bdvieja+'.dbo.DiarioCierre D
INNER JOIN '+@bdvieja+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
INNER JOIN '+@bdvieja+'.dbo.ISOACentro I ON I.IdISOACentro=L.CodigoISOACentro
WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN @finicio AND @ffin
AND I.CodigoISOA=''USD''
ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing'
EXEC sp_executesql @sqlFixing, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin
-- Entidades con las que se hacen operaciones en el mes indicado
SET @sql = 'SELECT '
+'CIF = E.CIF, '
+'Entidad = E.Entidad, '
+'Direccion = (CASE WHEN E.Provincia IS NULL THEN '''' WHEN E.Provincia = '''' THEN '''' ELSE E.Provincia + '','' END)
+ (CASE WHEN E.Direccion IS NULL THEN '''' WHEN E.Direccion = '''' THEN '''' ELSE E.Direccion + '' '' END)
+ ISNULL(E.Numero,'''') '
+' FROM '+@bdvieja+'.dbo.OperacionEntidad O '
--+' INNER JOIN '+@bdvieja+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
--+' INNER JOIN '+@bdvieja+'.dbo.ISOACentro C ON LO.CodigoISOACentro = C.IdISOACentro '
+' INNER JOIN '+@bdvieja+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' WHERE O.Fecha BETWEEN @finicio AND @ffin '
+' AND O.Anulada = 0 '
+' GROUP BY E.CIF, E.Entidad, E.Provincia, E.Direccion, E.Numero '
INSERT INTO @Entidad (CIF, Entidad, Direccion)
EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin
-- Operaciones que se realizan en el mes indicado con Entidades
SET @sql = 'SELECT '
+'CodigoSucursal = CASE WHEN (@nombre LIKE ''%Carrasco%'') THEN ''001'' ELSE ''002'' END, '
+'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,112), '
+'ReciboOperacion = CAST(O.Recibo AS NVARCHAR(18)),'
+'MonedaRecibida = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'')
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = C.CodigoISOA) END , '
+'MonedaEntregada = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = C.CodigoISOA)
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
+'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN CAST(ROUND(LO.Compensacion,2) AS DECIMAL(14,2)) ELSE CAST(ROUND(LO.Importe,2) AS DECIMAL(14,2))END , '
+'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN CAST(ROUND(LO.Importe,2) AS DECIMAL(14,2)) ELSE CAST(ROUND(LO.Compensacion,2) AS DECIMAL(14,2))END , '
+'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN
(CAST(''0'' AS DECIMAL(14,2)))
ELSE
(CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
FROM #tablatemporalFixing
WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
) AS MONEY)
,2) AS DECIMAL(14,2)))
END), '
+'NumeroDocumentoTitularOperacion = E.CIF, '
+'NumeroDocumentoRepresentanteLegal = '''' '
+' FROM '+@bdvieja+'.dbo.OperacionEntidad O '
+' INNER JOIN '+@bdvieja+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
+' INNER JOIN '+@bdvieja+'.dbo.ISOACentro C ON LO.CodigoISOACentro = C.IdISOACentro '
+' INNER JOIN '+@bdvieja+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' WHERE O.Fecha BETWEEN @finicio AND @ffin '
+' AND O.Anulada = 0 '
INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME, @nombre NVARCHAR(50)', @finicio, @ffin, @nombre
END
ELSE
BEGIN
IF (@fcambioVN < @finicio) -- [(Versión Nueva)]
BEGIN
PRINT 'versión nueva:'+@bdNueva
-- fixing a ValorUSD de las operaciones que se realizan en el mes indicado
DELETE FROM #tablatemporalFixing
SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
FROM '+@bdNueva+'.dbo.DiarioCierre D
INNER JOIN '+@bdNueva+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
INNER JOIN '+@bdNueva+'.dbo.ISOA I ON I.IdISOA=L.CodigoISOA
WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN @finicio AND @ffin
AND I.IdISOA=''USD''
AND L.CodigoTipoISOA=0
ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing '
EXEC sp_executesql @sqlFixing, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin
-- Entidades con las que se hacen operaciones en el mes indicado
SET @sql = 'SELECT '
+'CIF = E.CIF, '
+'Entidad = E.Entidad, '
+'Direccion = (CASE WHEN ED.Provincia IS NULL THEN '''' WHEN ED.Provincia = '''' THEN '''' ELSE ED.Provincia + '','' END)
+ (CASE WHEN ED.Direccion IS NULL THEN '''' WHEN ED.Direccion = '''' THEN '''' ELSE ED.Direccion + '' '' END)
+ (CASE WHEN ED.Numero IS NULL THEN '''' WHEN ED.Numero = '''' THEN '''' ELSE ED.Numero + '','' END)
+ (CASE WHEN E.Piso IS NULL THEN '''' WHEN E.Piso = '''' THEN '''' ELSE E.Piso + '' '' END)
+ ISNULL(E.Puerta,'''') '
+' FROM '+@bdNueva+'.dbo.OperacionEntidad O '
--+' INNER JOIN '+@bdNueva+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
+' INNER JOIN '+@bdNueva+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' INNER JOIN '+@bdNueva+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
+' WHERE O.Fecha BETWEEN @finicio AND @ffin '
+' AND O.CodigoEstadoOperacionEntidad = 1 '
+' GROUP BY E.CIF, E.Entidad, ED.Provincia, ED.Direccion, ED.Numero, E.Piso, E.Puerta '
INSERT INTO @Entidad (CIF, Entidad, Direccion)
EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin
-- Operaciones que se realizan en el mes indicado con Entidades
SET @sql = 'SELECT '
+'CodigoSucursal = CASE WHEN (@nombre LIKE ''%UYMVD%'') THEN ''001'' ELSE ''002'' END, '
+'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,112), '
+'ReciboOperacion = O.Recibo, '
+'MonedaRecibida = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'')
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA) END , '
+'MonedaEntregada = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA)
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
+'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN LO.Compensacion ELSE LO.Importe END , '
+'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN LO.Importe ELSE LO.Compensacion END , '
+'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN
(CAST(''0'' AS DECIMAL(14,2)))
ELSE
(CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
FROM #tablatemporalFixing
WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
) AS MONEY)
,2) AS DECIMAL(14,2)))
END), '
+'NumeroDocumentoTitularOperacion = E.CIF, '
+'NumeroDocumentoRepresentanteLegal = '''' '
+' FROM '+@bdNueva+'.dbo.OperacionEntidad O '
+' INNER JOIN '+@bdNueva+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
+' INNER JOIN '+@bdNueva+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' INNER JOIN '+@bdNueva+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
+' WHERE O.Fecha BETWEEN @finicio AND @ffin '
+' AND O.CodigoEstadoOperacionEntidad = 1 '
INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME, @nombre NVARCHAR(50)', @finicio, @ffin, @nombre
END
ELSE -- [(Entre Versiones)]
BEGIN
IF @bdvieja IS NOT NULL
BEGIN
PRINT 'versión antigua mixta:'+@bdvieja
-- fixing a ValorUSD de las operaciones que se realizan en el mes indicado
DELETE FROM #tablatemporalFixing
SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
FROM '+@bdvieja+'.dbo.DiarioCierre D
INNER JOIN '+@bdvieja+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
INNER JOIN '+@bdvieja+'.dbo.ISOACentro I ON I.IdISOACentro=L.CodigoISOACentro
WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN @finicio AND '''+CONVERT(NVARCHAR,@fcambioVN,103)+'''
AND I.CodigoISOA=''USD''
ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing'
EXEC sp_executesql @sqlFixing, N'@finicio DATETIME', @finicio
-- Entidades con las que se hacen operaciones en el mes indicado
SET @sql = 'SELECT '
+'CIF = E.CIF, '
+'Entidad = E.Entidad, '
+'Direccion = (CASE WHEN E.Provincia IS NULL THEN '''' WHEN E.Provincia = '''' THEN '''' ELSE E.Provincia + '','' END)
+ (CASE WHEN E.Direccion IS NULL THEN '''' WHEN E.Direccion = '''' THEN '''' ELSE E.Direccion + '' '' END)
+ ISNULL(E.Numero,'''') '
+' FROM '+@bdvieja+'.dbo.OperacionEntidad O '
--+' INNER JOIN '+@bdvieja+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
--+' INNER JOIN '+@bdvieja+'.dbo.ISOACentro C ON LO.CodigoISOACentro = C.IdISOACentro '
+' INNER JOIN '+@bdvieja+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' WHERE O.Fecha BETWEEN @finicio AND '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' '
+' AND O.Anulada = 0 '
+' GROUP BY E.CIF, E.Entidad, E.Provincia, E.Direccion, E.Numero '
INSERT INTO @Entidad (CIF, Entidad, Direccion)
EXEC sp_executesql @sql, N'@finicio DATETIME', @finicio
-- Operaciones que se realizan en el mes indicado con Entidades
SET @sql = 'SELECT '
+'CodigoSucursal = CASE WHEN (@nombre LIKE ''%Carrasco%'') THEN ''001'' ELSE ''002'' END, '
+'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,112), '
+'ReciboOperacion = O.Recibo, '
+'MonedaRecibida = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'')
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = C.CodigoISOA) END , '
+'MonedaEntregada = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = C.CodigoISOA)
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
+'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN LO.Compensacion ELSE LO.Importe END , '
+'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN LO.Importe ELSE LO.Compensacion END , '
+'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN
(CAST(''0'' AS DECIMAL(14,2)))
ELSE
(CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
FROM #tablatemporalFixing
WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
) AS MONEY)
,2) AS DECIMAL(14,2)))
END), '
+'NumeroDocumentoTitularOperacion = E.CIF, '
+'NumeroDocumentoRepresentanteLegal = '''' '
+' FROM '+@bdvieja+'.dbo.OperacionEntidad O '
+' INNER JOIN '+@bdvieja+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
+' INNER JOIN '+@bdvieja+'.dbo.ISOACentro C ON LO.CodigoISOACentro = C.IdISOACentro '
+' INNER JOIN '+@bdvieja+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' WHERE O.Fecha BETWEEN @finicio AND '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' '
+' AND O.Anulada = 0 '
INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
EXEC sp_executesql @sql, N'@finicio DATETIME, @nombre NVARCHAR(50)', @finicio, @nombre
END
IF @bdNueva IS NOT NULL
BEGIN
PRINT 'versión nueva mixta:'+@bdNueva
-- fixing a ValorUSD de las operaciones que se realizan en el mes indicado
DELETE FROM #tablatemporalFixing
SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
FROM '+@bdNueva+'.dbo.DiarioCierre D
INNER JOIN '+@bdNueva+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
INNER JOIN '+@bdNueva+'.dbo.ISOA I ON I.IdISOA=L.CodigoISOA
WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' AND @ffin
AND I.IdISOA=''USD''
AND L.CodigoTipoISOA=0
ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing '
EXEC sp_executesql @sqlFixing, N'@ffin DATETIME', @ffin
-- Entidades con las que se hacen operaciones en el mes indicado
SET @sql = 'SELECT '
+'CIF = E.CIF, '
+'Entidad = E.Entidad, '
+'Direccion = (CASE WHEN ED.Provincia IS NULL THEN '''' WHEN ED.Provincia = '''' THEN '''' ELSE ED.Provincia + '','' END)
+ (CASE WHEN ED.Direccion IS NULL THEN '''' WHEN ED.Direccion = '''' THEN '''' ELSE ED.Direccion + '' '' END)
+ (CASE WHEN ED.Numero IS NULL THEN '''' WHEN ED.Numero = '''' THEN '''' ELSE ED.Numero + '','' END)
+ (CASE WHEN E.Piso IS NULL THEN '''' WHEN E.Piso = '''' THEN '''' ELSE E.Piso + '' '' END)
+ ISNULL(E.Puerta,'''') '
+' FROM '+@bdNueva+'.dbo.OperacionEntidad O '
--+' INNER JOIN '+@bdNueva+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
+' INNER JOIN '+@bdNueva+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' INNER JOIN '+@bdNueva+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
+' WHERE O.Fecha BETWEEN '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' AND @ffin '
+' AND O.CodigoEstadoOperacionEntidad = 1 '
+' GROUP BY E.CIF, E.Entidad, ED.Provincia, ED.Direccion, ED.Numero, E.Piso, E.Puerta '
INSERT INTO @Entidad (CIF, Entidad, Direccion)
EXEC sp_executesql @sql, N'@ffin DATETIME', @ffin
-- Operaciones que se realizan en el mes indicado con Entidades
SET @sql = 'SELECT '
+'CodigoSucursal = CASE WHEN (@nombre LIKE ''%UYMVD%'') THEN ''001'' ELSE ''002'' END, '
+'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,112), '
+'ReciboOperacion = O.Recibo, '
+'MonedaRecibida = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'')
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA) END , '
+'MonedaEntregada = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA)
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
+'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN LO.Compensacion ELSE LO.Importe END , '
+'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN LO.Importe ELSE LO.Compensacion END , '
+'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN
(CAST(''0'' AS DECIMAL(14,2)))
ELSE
(CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
FROM #tablatemporalFixing
WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
) AS MONEY)
,2) AS DECIMAL(14,2)))
END), '
+'NumeroDocumentoTitularOperacion = E.CIF, '
+'NumeroDocumentoRepresentanteLegal = '''' '
+' FROM '+@bdNueva+'.dbo.OperacionEntidad O '
+' INNER JOIN '+@bdNueva+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
+' INNER JOIN '+@bdNueva+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' INNER JOIN '+@bdNueva+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
+' WHERE O.Fecha BETWEEN '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' AND @ffin '
+' AND O.CodigoEstadoOperacionEntidad = 1 '
INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
EXEC sp_executesql @sql, N'@ffin DATETIME, @nombre NVARCHAR(50)', @ffin, @nombre
END
END
END
DELETE FROM @cts WHERE IdCentro = @idct
END
INSERT INTO @cts(IdCentro, Nombre, Bdv, FcambioVN, Bdn, FcambioNM, Bdm)
SELECT IdCentro, Nombre, BaseDato, GlobalCash2010, BaseDatoGCH2010, FechaMulticentro, BaseDatoMulticentro
FROM dbo.Centro
WHERE CodigoPais = @idpais
AND BaseDatoGCH2010 IS NOT NULL
AND Productivo = 1
IF EXISTS(SELECT IdCentro FROM @cts WHERE (FcambioNM<=@ffin OR @ffin IS NULL) AND Bdm IS NOT NULL)
BEGIN -- **** VERSIÓN MULTICENTRO ****
WHILE EXISTS(SELECT IdCentro FROM @cts WHERE Bdm IS NOT NULL AND (FcambioNM<=@ffin OR @ffin IS NULL))
BEGIN
PRINT 'versión multicentro:'+ @bdmmulticentro
SELECT TOP 1 @fcambioNM=FcambioNM, @bdmmulticentro=Bdm FROM @cts WHERE Bdm IS NOT NULL AND (@fcambioNM<=@ffin OR @ffin IS NULL)
SET @bdmmulticentro = ''+@bdmmulticentro
-- Fixing a ValorUSD de las operaciones que se realizan en el mes indicado.
DELETE FROM #tablatemporalFixing
SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
FROM '+@bdmmulticentro+'.dbo.DiarioCierre D
INNER JOIN '+@bdmmulticentro+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
INNER JOIN '+@bdmmulticentro+'.dbo.ISOA I ON I.IdISOA=L.CodigoISOA
WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN @finicio AND @ffin
AND I.IdISOA=''USD''
AND L.CodigoTipoISOA=0
AND D.CodigoCentro = '+ @idCentroMulticentro
+ ' ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing '
EXEC sp_executesql @sqlFixing, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin
-- Entidades con las que se hacen operaciones en el mes indicado (del centro correspondiente).
SET @sql = 'SELECT '
+'CIF = E.CIF, '
+'Entidad = E.Entidad, '
+'Direccion = (CASE WHEN PR.Provincia IS NULL THEN '''' WHEN PR.Provincia = '''' THEN '''' ELSE PR.Provincia + '','' END)
+ (CASE WHEN ED.Direccion IS NULL THEN '''' WHEN ED.Direccion = '''' THEN '''' ELSE ED.Direccion + '' '' END)
+ (CASE WHEN ED.Numero IS NULL THEN '''' WHEN ED.Numero = '''' THEN '''' ELSE ED.Numero + '','' END)
+ (CASE WHEN ED.Piso IS NULL THEN '''' WHEN ED.Piso = '''' THEN '''' ELSE ED.Piso + '' '' END)
+ ISNULL(ED.Puerta,'''') '
+' FROM '+@bdmmulticentro+'.dbo.OperacionEntidad O '
--+' INNER JOIN '+@bdmmulticentro+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
+' INNER JOIN '+@bdmmulticentro+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' INNER JOIN '+@bdmmulticentro+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
+' INNER JOIN '+@bdmmulticentro+'.dbo.Provincia PR ON PR.IdProvincia = ED.CodigoProvincia '
+' WHERE O.Fecha BETWEEN @finicio AND @ffin '
+' AND O.CodigoEstadoOperacionEntidad = 1 '
+ 'AND ED.CodigoCentro = ' + @idCentroMulticentro
+' GROUP BY E.CIF, E.Entidad, PR.Provincia, ED.Direccion, ED.Numero, ED.Piso, ED.Puerta '
INSERT INTO @Entidad (CIF, Entidad, Direccion)
EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin
-- Operaciones que se realizan en el mes indicado con Entidades
SET @sql = 'SELECT '
+'CodigoSucursal = CASE WHEN (Ce.Centro LIKE ''%MVD%'') THEN ''001'' ELSE ''002'' END, '
+'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,103), '
+'ReciboOperacion = O.Recibo, '
+'MonedaRecibida = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'')
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA) END , '
+'MonedaEntregada = CASE WHEN O.Compra = 0 THEN
(SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA)
ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
+'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN LO.Compensacion ELSE LO.Importe END , '
+'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN LO.Importe ELSE LO.Compensacion END , '
+'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN
(CAST(''0'' AS DECIMAL(14,2)))
ELSE
(CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
FROM #tablatemporalFixing
WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
) AS MONEY)
,2) AS DECIMAL(14,2)))
END), '
+'NumeroDocumentoTitularOperacion = E.CIF, '
+'NumeroDocumentoRepresentanteLegal = '''' '
+' FROM '+@bdmmulticentro+'.dbo.OperacionEntidad O '
+' INNER JOIN '+@bdmmulticentro+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
+' INNER JOIN '+@bdmmulticentro+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
+' INNER JOIN '+@bdmmulticentro+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
+' INNER JOIN '+@bdmmulticentro+'.dbo.Centro CE ON CE.IdCentro = ED.CodigoCentro '
+' WHERE O.Fecha BETWEEN @finicio AND @ffin '
+' AND O.CodigoEstadoOperacionEntidad = 1 '
+' AND CE.IdCentro = ' + @idCentroMulticentro
INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME, @nombre NVARCHAR(50)', @finicio, @ffin, @nombre
UPDATE @cts SET Bdm=NULL WHERE Bdm=@bdmmulticentro
END
END
-- Insertamos en @EntidadesLimite la suma de las operaciones, el CIF y el Nombre de las Entidades
INSERT INTO @EntidadesLimite (valorSUM, CIF)
SELECT SUM(ImporteUSD),NumDocTitOp FROM @Operacion
GROUP BY NumDocTitOp
ORDER BY NumDocTitOp
-- Eliminamos todas las operaciones de la tabla @Operacion que pertenezcan a Entidades que no hayan superado el límite
DELETE FROM @Operacion WHERE NumDocTitOp NOT IN (SELECT CIF FROM @EntidadesLimite WHERE valorSUM > 10000)
-- Eliminamos todas las entidades de la tabla @Entidad que no hayan superado el límite
DELETE FROM @Entidad WHERE CIF NOT IN (SELECT CIF FROM @EntidadesLimite WHERE valorSUM > 10000)
INSERT INTO @EntidadResultado(CIF, RegistroEntidad)
SELECT
CIF = E.CIF,
RegistroEntidad = (('ID')
+('0596')
+('UY')
+('RUT')
+(E.CIF + SPACE(18-LEN(E.CIF))) --CIF.
+('J')
+('R')
+('65990')
+('F')
+(SPACE(2)) --vacío
+(SPACE(8)) --vacío
+(SPACE(20))--vacío
+(SPACE(20))--vacío
+(SPACE(40))--vacío
+(SPACE(20))--Siglas (pendiente).
+(E.Entidad + SPACE(80-LEN(E.Entidad))) --Razón Social.
+(SPACE(50)) --Nombre Fantasía (pendiente).
+(E.Direccion + SPACE(80-LEN(E.Direccion))) -- Dirección (localidad + dirección + piso + puerta).
+(SPACE(173))) --vacío
FROM @Entidad E
INSERT INTO @OperacionResultado(CIF, RegistroOperacion)
SELECT
CIF = O.NumDocTitOp,
RegistroOperacion = (('OP')
+('0596')
+(O.CodSucursal + SPACE(3-LEN(O.CodSucursal)))-- 001 ó 002
+(SPACE(18)) --vacío
+(O.Fecha + SPACE(8-LEN(O.Fecha))) --Fecha de la operación.
+(RTRIM(O.Recibo) + SPACE(18-LEN(RTRIM(O.Recibo))))--Nº de comprobante (recibo).
+('H10')
+(O.MonedaIN + SPACE(4-LEN(O.MonedaIN))) --Moneda recibida.
+(O.MonedaOUT + SPACE(4-LEN(O.MonedaOUT)))--Moneda entregada.
+(CAST(O.ImporteIN AS NVARCHAR(17)) + SPACE(17-LEN(CAST(O.ImporteIN AS NVARCHAR(17))))) --Importe en moneda original.
+(CAST(O.ImporteUSD AS NVARCHAR(17)) + SPACE(17-LEN(CAST(O.ImporteUSD AS NVARCHAR(17)))))--Importe en USD.
+('UY')
+('RUT')
+(O.NumDocTitOp + SPACE(18-LEN(O.NumDocTitOp)))--Nº documento del titular de la operación (CIF).
+('UY')
+('IDE')
--+(O.NumDocRepLeg + SPACE(18-LEN(O.NumDocRepLeg)))--Nº documento de quien realizó la operación (representante legal).
+(SPACE(18)) --Hasta saber qué campo será el nº documento del representante legal, se deja en blanco.
+(SPACE(240))--vacío
+(SPACE(80)) --vacío
+(SPACE(30)) --vacío
+(SPACE(15)) --vacío
+(SPACE(2)) --vacío
+(CAST(O.ImpDestino AS NVARCHAR(17)) + SPACE(17-LEN(CAST(O.ImpDestino AS NVARCHAR(17))))) --Importe de destino.
+('S')
+('S'))
FROM @Operacion O
ORDER BY O.Fecha
--Número de Registros (para el Registro de Fin).
SET @ContadorRegistros = (SELECT COUNT(A.CIF) FROM (SELECT DISTINCT CIF FROM @EntidadResultado)A) + (SELECT COUNT(CIF) FROM @OperacionResultado)
--Registro Cabezal
INSERT INTO @Resultado VALUES ('CB'+'0596'+CAST(@aniomes AS CHAR(6))+SPACE(518))
WHILE EXISTS (SELECT 1 FROM @EntidadesLimite)
BEGIN
SELECT TOP 1 @cifResultado = CIF FROM @EntidadesLimite ORDER BY CIF
--Registro de Persona Jurídica
INSERT INTO @Resultado
SELECT TOP 1 E.RegistroEntidad FROM @EntidadResultado E
WHERE E.CIF = @cifResultado
--INSERT INTO @Resultado VALUES (CHAR(13)+CHAR(10))
--Registro de Operaciones para Personas Jurídicas
INSERT INTO @Resultado
SELECT O.RegistroOperacion FROM @OperacionResultado O
WHERE O.CIF = @cifResultado
--INSERT INTO @Resultado VALUES (CHAR(13)+CHAR(10))
DELETE FROM @EntidadesLimite WHERE CIF = @cifResultado
END
--Registro de Fin
INSERT INTO @Resultado VALUES ('UL'+'0596'+CAST(@aniomes AS CHAR(6))+CAST(@ContadorRegistros AS CHAR(7))+SPACE(511))
SELECT * FROM @Resultado
--SELECT STUFF((SELECT CAST('#' AS varchar(MAX)) + A.Resultado
-- FROM @Resultado A
--FOR XML PATH('')), 1, 1, '') as Resultado
DROP TABLE #TablaTemporalFixing
SET NOCOUNT OFF;
END
我该怎么做才能从结果中替换“。” 通过“,”在结果中例如这里 48.88。谢谢