--Hash:7B7F2076A3DE11169DCCC78525BEFBBE

-- Bloqueo exclusivo por base de datos
--//
SET NOCOUNT ON;

DECLARE @__ZiurDbScriptLockResource NVARCHAR(200) = N'ZiurSoft:DbScriptLock:' + CAST(DB_ID() AS NVARCHAR(20));
DECLARE @__ZiurDbScriptLockResult INT;
EXEC @__ZiurDbScriptLockResult = sp_getapplock
    @Resource = @__ZiurDbScriptLockResource,
    @LockMode = N'Exclusive',
    @LockOwner = N'Session',
    @LockTimeout = 600000; -- 10 min

IF (@__ZiurDbScriptLockResult < 0)
BEGIN
    RAISERROR(N'No se pudo obtener el bloqueo exclusivo de actualizacion para esta base de datos.', 16, 1);
    SET NOEXEC ON;
END

/* Idempotencia a nivel de script: si la version ya existe, no ejecutar nada. */
IF EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 951)
BEGIN
    PRINT N'Scripts_951.sql: la version 951 ya esta aplicada. Se omite ejecucion.';
    EXEC sp_releaseapplock @Resource = @__ZiurDbScriptLockResource, @LockOwner = N'Session';
    SET NOEXEC ON;
END

SET XACT_ABORT ON;

GO

SET DATEFORMAT mdy;

--Validar que no existan scripts que no se hayan ejecutado
--//
IF EXISTS
(
	SELECT a.NumVersion + 1 AS HuecoInicio
	FROM ZiurVersiones a
	LEFT JOIN ZiurVersiones b ON a.NumVersion + 1 = b.NumVersion
	WHERE a.NumVersion>830 AND b.NumVersion IS NULL
	AND a.NumVersion + 1 < 951
)
RAISERROR('Error : hay un script que no se ejecuto , debe ejecutarlo manualmente.', 20, -1) with log
--//

--Colocar contenido de script diferencial aqui (Ziur.Database.publish.sql)

GO
/*
 Plantilla de script anterior a la implementación							
--------------------------------------------------------------------------------------
 Este archivo contiene instrucciones de SQL que se ejecutarán antes del script de compilación	
 Use la sintaxis de SQLCMD para incluir un archivo en el script anterior a la implementación			
 Ejemplo:      :r .\miArchivo.sql								
 Use la sintaxis de SQLCMD para hacer referencia a una variable en el script anterior a la implementación		
 Ejemplo:      :setvar TableName miTabla							
               SELECT * FROM [$(TableName)]					
--------------------------------------------------------------------------------------
*/
GO

IF EXISTS (
    SELECT 1
    FROM sys.indexes
    WHERE name = N'IX_CostoProm'
      AND object_id = OBJECT_ID(N'dbo.VInventarios_CostoPromedio_00')
)
    DROP INDEX [IX_CostoProm] ON [dbo].[VInventarios_CostoPromedio_00];


GO
PRINT N'Removing schema binding from [dbo].[VInventarios_CostoPromedio_00]...';
IF OBJECT_ID(N'dbo.VInventarios_CostoPromedio_00', N'V') IS NULL
    EXEC(N'CREATE VIEW [dbo].[VInventarios_CostoPromedio_00] AS SELECT 1 AS Dummy;');

GO
ALTER VIEW [dbo].[VInventarios_CostoPromedio_00]
AS
SELECT EncMov.IdInventario,
       EncMovCP.Orden,
       EncMov.IdEncabMov,
       Enc.IdEncab,
       EncMovCP.CostoProm,
       EncMovCP.CantAcum,
       EncMovCP.CostoAcum
FROM   dbo.Encabezados AS Enc
       INNER JOIN
       dbo.Encabezados_Mov AS EncMov
       ON Enc.IdEncab = EncMov.IdEncab
       INNER JOIN
       dbo.Encabezados_Mov_CostoProm AS EncMovCP
       ON EncMov.IdEncabMov = EncMovCP.IdEncabMov
WHERE  (NOT (EncMovCP.Orden IS NULL));


GO
PRINT N'Altering Table [dbo].[Encabezados_Mov]...';



GO
PRINT N'Altering Trigger [dbo].[TRG_Numeracion]...';

IF OBJECT_ID(N'dbo.TRG_Numeracion', N'TR') IS NULL
    EXEC(N'CREATE TRIGGER [dbo].[TRG_Numeracion] ON [dbo].[Encabezados] AFTER INSERT AS BEGIN SET NOCOUNT ON; END');


GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER TRIGGER TRG_Numeracion
   ON  Encabezados
   AFTER INSERT,DELETE,UPDATE
AS 
BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

DECLARE @IdEncab int
DECLARE @IdEmp int
DECLARE @Pref nvarchar(100)
DECLARE @IdDoc nvarchar(100)
DECLARE @NumNuevo int
DECLARE @NumLastSeq int
DECLARE @NumActual int
DECLARE @senAnulado bit
DECLARE @Anulados bit
DECLARE @senSequence int = 0
DECLARE @senAnuladoNum bit
DECLARE @rowsModified int = 0
DECLARE @senDeleted bit = 0

--indican si es una insercion, actualizacion o eliminacion
--//
DECLARE @in int, @de int
SELECT @in = COUNT(*) FROM inserted;
SELECT @de = COUNT(*) FROM deleted;
--//

IF (@in=0 and @de>0)
	--si es una operacion de eliminacion
	DECLARE curNums CURSOR LOCAL FOR
	SELECT IdEncab, IdEmpresa, IdPrefijo, IdDocumento, NumDocumento 
	FROM DELETED
ELSE
	--si es una operacion de insercion o actualizacion
	DECLARE curNums CURSOR LOCAL FOR
	SELECT IdEncab, IdEmpresa, IdPrefijo, IdDocumento, NumDocumento 
	FROM INSERTED


OPEN curNums
FETCH FROM curNums INTO @IdEncab, @IdEmp , @Pref , @IdDoc , @NumActual

--'Autonumerar Sin Anulados'
--//
SET @senAnulado = CAST((SELECT ValParametro FROM Parametros where CodParametro=46)AS BIT)

IF(@senAnulado=1)
	Set @Anulados=0
ELSE
	Set @Anulados= null
--//

WHILE @@FETCH_STATUS = 0
BEGIN
	SET @senDeleted = 0

	--insertar en tabla de secuencia sino existe un registro
	--//
	SELECT @NumLastSeq = NumDocumento, @senAnuladoNum = SenAnulado FROM Encabezados_Numeracion 
	WHERE 
	IdEmpresa = @IdEmp AND 
	IdDocumento = @IdDoc AND 
	COALESCE(IdPrefijo,'') = COALESCE(@Pref, '') 

	SET @rowsModified = @@ROWCOUNT

	--elimina el registro si se cambia la variable de esanulados en parametros
	--//
	IF (@rowsModified > 0 AND @senAnuladoNum <> @senAnulado)
	BEGIN
		DELETE FROM Encabezados_Numeracion 
		WHERE 
		IdEmpresa = @IdEmp AND 
		IdDocumento = @IdDoc AND 
		COALESCE(IdPrefijo,'') = COALESCE(@Pref, '') 
		SET @senDeleted = 1
	END
	--//

	--inicializa 
	IF (@rowsModified = 0 OR @senDeleted =1)
	BEGIN
		SELECT @NumLastSeq = COALESCE(MAX(NumDocumento),0)
		FROM Encabezados
		WHERE 
		IdEmpresa = @IdEmp AND
		IdDocumento = @IdDoc AND
		COALESCE(IdPrefijo,'') = COALESCE(@Pref, '') AND
		(@Anulados IS NULL OR EsAnulado = @Anulados)

		INSERT INTO Encabezados_Numeracion (IdEmpresa, IdDocumento, IdPrefijo, NumDocumento, SenAnulado)
		VALUES (@IdEmp, @IdDoc, @Pref, @NumLastSeq, @senAnulado)
	END
	--//

	SET @NumNuevo = @NumActual

	--> INSERTAR
	--//
	IF (@in>0 and @de=0)
	BEGIN
		IF @NumActual = 0
		BEGIN
			SET @NumNuevo = @NumLastSeq + 1
			SET @senSequence = 1
		END

		UPDATE Encabezados SET NumDocumento = @NumNuevo where IdEncab = @IdEncab
	END
	--//

	--> ACTUALIZAR
	--//
	IF (@in>0 and @de>0)
	BEGIN
		IF @NumActual > @NumLastSeq
		BEGIN
			SET @NumNuevo = @NumActual
			SET @senSequence = 1
		END
	END
	--//

	--> ELIMINAR
	--//
	IF (@in=0 and @de>0)
	BEGIN
		IF @NumActual = @NumLastSeq
		BEGIN
			SET @NumNuevo = @NumNuevo - 1
			SET @senSequence = 1
		END
	END
	--//

	IF (@senSequence = 1)
	BEGIN
		UPDATE Encabezados_Numeracion SET NumDocumento = @NumNuevo 
		WHERE 
		IdEmpresa = @IdEmp AND 
		IdDocumento = @IdDoc AND 
		COALESCE(IdPrefijo,'') = COALESCE(@Pref, '')
	END

	FETCH NEXT FROM curNums INTO @IdEncab, @IdEmp , @Pref , @IdDoc , @NumActual
END

CLOSE curNums
DEALLOCATE curNums

END
GO
PRINT N'Refreshing View [dbo].[VClientesPuntos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VClientesPuntos]';


GO
PRINT N'Altering View [dbo].[VContab_EncMov]...';
IF OBJECT_ID(N'dbo.VContab_EncMov', N'V') IS NULL
    EXEC(N'CREATE VIEW [dbo].[VContab_EncMov] AS SELECT 1 AS Dummy;');

GO
ALTER VIEW dbo.VContab_EncMov
AS
SELECT        EncMov.IdEncabMov, EncMov.IdEncab, EncMov.IdInventario, EncMov.IdBodega, EncMov.IdLote, EncMov.Cantidad, EncMov.ValorTRM, 
                         EncMov.Cantidad * EncMov.FactorCantidad AS CantConFactor, EncMov.CantidadFisica, EncMov.IdUnidad, EncMov.FactorCantidad, EncMov.FactorMovim, 
                         EncMov.ValorUnitario, EncMov.ValorUnitarioExt, EncMov.ValorIva, EncMov.TipoImptoConsumo, COALESCE (EncMov.ValorImptoConsumo, 0) AS ValorImptoConsumo, 
                         EncMov.TotalMov, EncMov.IdCliente, EncMov.Vence, EncMov.IdCentroCosto, EncMov.Dcto, EncMov.EsIvaAlCosto, 
                         EncMov.ValorUnitario * EncMov.Dcto / 100 AS ValorDctoUnit, (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100)
                         AS SubTotal, EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario AS SubTotalSinDcto, 
                         EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario * EncMov.Dcto / 100 AS ValorDcto, 
                         (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * EncMov.ValorIva / 100 AS SubIVA, 
                         CASE WHEN EncMov.TipoImptoConsumo = 0 THEN 1 ELSE 0 END AS FactorImpoConsPorc, 
                         CASE WHEN EncMov.TipoImptoConsumo = 1 THEN 1 ELSE 0 END AS FactorImpoConsValor, EncMov.ValorTRM AS Expr1, EncMov.IdMoneda, 
                         CASE WHEN EncMov.ValorIva = 0 THEN (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) ELSE 0 END AS SubTotExento,
                         CASE WHEN EncMov.ValorIva > 0 THEN (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) ELSE 0 END AS SubTotGravado,
                         ValorPuntos,
                         (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * EncMov.FactorImpuesto AS SubTotal2,
                         EncMov.ImptoSaludableTipo, 
                         EncMov.ImptoSaludableValor, 
                         CASE WHEN EncMov.ImptoSaludableTipo = 0 THEN 1 ELSE 0 END AS ImptoSaludableFactorPorc, 
                         CASE WHEN EncMov.ImptoSaludableTipo = 1 THEN 1 ELSE 0 END AS ImptoSaludableFactorValor
FROM            dbo.Encabezados_Mov AS EncMov INNER JOIN
                         dbo.Encabezados AS Enc ON EncMov.IdEncab = Enc.IdEncab
WHERE        (Enc.FinanDebe = 0 AND EncMov.EsVisible = 1) OR (Enc.FinanDebe = 1 AND EncMov.FactorMovim=0)
GO
PRINT N'Refreshing View [dbo].[VCostoProm_Historico_Agrup]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCostoProm_Historico_Agrup]';


GO
PRINT N'Refreshing View [dbo].[VCostoPromedio]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCostoPromedio]';


GO
PRINT N'Refreshing View [dbo].[VCruces_Origen]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCruces_Origen]';


GO
PRINT N'Refreshing View [dbo].[VCruces_Sumas]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCruces_Sumas]';


GO
PRINT N'Refreshing View [dbo].[VCruces_TodosDocs]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCruces_TodosDocs]';


GO
PRINT N'Refreshing View [dbo].[VIngresoProducto]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VIngresoProducto]';


GO
PRINT N'Adding schema binding to [dbo].[VInventarios_CostoPromedio_00]...';
IF OBJECT_ID(N'dbo.VInventarios_CostoPromedio_00', N'V') IS NULL
    EXEC(N'CREATE VIEW [dbo].[VInventarios_CostoPromedio_00] AS SELECT 1 AS Dummy;');

GO
ALTER VIEW VInventarios_CostoPromedio_00
with schemabinding 
AS
SELECT     EncMov.IdInventario, EncMovCP.Orden, EncMov.IdEncabMov, Enc.IdEncab, EncMovCP.CostoProm, EncMovCP.CantAcum, EncMovCP.CostoAcum
FROM         dbo.Encabezados AS Enc INNER JOIN
                      dbo.Encabezados_Mov AS EncMov ON Enc.IdEncab = EncMov.IdEncab INNER JOIN
                      dbo.Encabezados_Mov_CostoProm AS EncMovCP ON EncMov.IdEncabMov = EncMovCP.IdEncabMov
WHERE     (NOT (EncMovCP.Orden IS NULL))
GO
PRINT N'Creating Index [dbo].[VInventarios_CostoPromedio_00].[IX_CostoProm]...';


GO
CREATE UNIQUE CLUSTERED INDEX [IX_CostoProm]
    ON [dbo].[VInventarios_CostoPromedio_00]([IdInventario] ASC, [Orden] ASC, [IdEncabMov] ASC);


GO
PRINT N'Refreshing View [dbo].[VInventarios_Existencia]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VInventarios_Existencia]';


GO
PRINT N'Refreshing View [dbo].[VInventariosHistoricoCosto]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VInventariosHistoricoCosto]';


GO
PRINT N'Refreshing View [dbo].[VInventariosLotesCons01]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VInventariosLotesCons01]';


GO
PRINT N'Refreshing View [dbo].[VInvExistPorLote]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VInvExistPorLote]';


GO
PRINT N'Refreshing View [dbo].[VMov_Factor]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VMov_Factor]';


GO
PRINT N'Refreshing View [dbo].[VProduccion]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VProduccion]';


GO
PRINT N'Refreshing View [dbo].[VSeriales]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VSeriales]';


GO
PRINT N'Refreshing View [dbo].[VSesionesSaldos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VSesionesSaldos]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc____Totales]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc____Totales]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc____TRMPromedio]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc____TRMPromedio]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc_00]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc_00]';


GO
PRINT N'Refreshing View [dbo].[VTot_EncMov]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VTot_EncMov]';


GO
PRINT N'Refreshing View [dbo].[VCruces_Agrup]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCruces_Agrup]';


GO
PRINT N'Refreshing View [dbo].[VInventariosLotesCons02]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VInventariosLotesCons02]';


GO
PRINT N'Refreshing View [dbo].[VAgrupadoPorCliVend_01]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VAgrupadoPorCliVend_01]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc____TotPorCuentas_00]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc____TotPorCuentas_00]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc____TotPorCuentas_Fin]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc____TotPorCuentas_Fin]';


GO
PRINT N'Refreshing View [dbo].[VActivos_FijosContables]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VActivos_FijosContables]';


GO
PRINT N'Refreshing View [dbo].[VActivosFijos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VActivosFijos]';


GO
PRINT N'Altering View [dbo].[VInventarios]...';
IF OBJECT_ID(N'dbo.VInventarios', N'V') IS NULL
    EXEC(N'CREATE VIEW [dbo].[VInventarios] AS SELECT 1 AS Dummy;');

GO
ALTER VIEW dbo.VInventarios
AS
SELECT        dbo.Inventarios.IdInventario, dbo.Inventarios.CodInventario, dbo.Inventarios.CodigoBarras, dbo.Inventarios.NomInventario, dbo.Inventarios.EsActivo, dbo.Inventarios.EsEspecial, q.CantMaxima, q.CantMinima, q.PuntoReorden, 
                         dbo.Inventarios.IdUnidad, dbo.Inventarios.ValorIva, dbo.Inventarios.IdAgrup1, dbo.Inventarios.IdAgrup2, dbo.Inventarios.Observacion, dbo.Inventarios.IdContab, dbo.Inventarios.IdTipoInv, dbo.Inventarios.EsFactSinExistencia, 
                         dbo.Inventarios.EsIvaAlCosto, dbo.Inventarios.ValorImptoConsumo, dbo.Inventarios.ValorUtilidadEst, dbo.Inventarios.IdContCosto, dbo.Inventarios.EsSerialRequerido, dbo.Inventarios.TipoVentaKit, 
                         dbo.Inventarios.IdRecursoPOS, dbo.Inventarios_Unidades.NomUnidad, dbo.Inventarios_Unidades.IdTipoUnidad, dbo.Inventarios_Especial.Especial_01, dbo.Inventarios_Especial.Especial_03, 
                         dbo.Inventarios_Especial.Especial_02, dbo.Inventarios_Especial.Especial_04, dbo.Inventarios_Especial.Especial_05, dbo.Inventarios_Especial.Especial_06, dbo.Inventarios_Especial.Especial_07, 
                         dbo.Inventarios_Especial.Especial_08, dbo.Inventarios_Especial.Especial_09, dbo.Inventarios_Especial.Especial_10, dbo.Inventarios_Especial.Especial_11, dbo.Inventarios_Especial.Especial_12, 
                         dbo.Inventarios_Especial.Especial_13, dbo.Inventarios_Especial.Especial_14, dbo.Inventarios_Especial.Especial_15, dbo.Inventarios_Especial.Especial_16, dbo.Inventarios_Especial.Especial_17, 
                         dbo.Inventarios_Especial.Especial_18, dbo.Inventarios_Especial.Especial_19, dbo.Inventarios_Especial.Especial_20, dbo.Inventarios.IdClasifImpto, dbo.Inventarios.EsFactorMov, dbo.Inventarios.EsImptoNalCons, 
                         dbo.Inventarios.TipoImptoConsumo, dbo.Inventarios.EsIvaIncluido, Inventarios_Unidades_1.IdTipoUnidad AS IdTipoUnidad1, Inventarios_Unidades_1.NomUnidad AS NomUnidad1, dbo.Inventarios.EsKitConSerial, 
                         dbo.Inventarios.IdUnidad1, dbo.Inventarios_Agrup1.CodigoAgrup1, dbo.Inventarios_Agrup1.NomAgrup1, dbo.Inventarios_Agrup2.CodigoAgrup2, dbo.Inventarios_Agrup2.NomAgrup2, COALESCE (dbo.Inventarios.FactorEscala, 
                         dbo.Inventarios_Unidades.FactorEscala) AS FactorEscala, COALESCE (dbo.Inventarios.FactorEscala1, Inventarios_Unidades_1.FactorEscala) AS FactorEscala1, dbo.Inventarios.EsNoBalanza, dbo.Inventarios.EsControlado, 
                         dbo.Inventarios.CantDim1, dbo.Inventarios.CantDim3, dbo.Inventarios.CantDim2, dbo.Inventarios.CantDim4, dbo.Inventarios.EsPuntosAcumulados, dbo.Inventarios.PuntosAcumuladosValor, dbo.Inventarios.PuntosAcumuladosPuntos, 
                         dbo.Inventarios.EsPuntosRedimir, dbo.Inventarios.PuntosRedimir, dbo.Inventarios.ImptoSaludableValor, dbo.Inventarios.ImptoSaludableTipo, dbo.Inventarios.ImptoSaludableEs, 
                         dbo.Inventarios.EsImptoConsumoIncluido, dbo.Inventarios.EsImptoSaludIncluido
FROM            (SELECT        IdInventario, MAX(CantMaxima) AS CantMaxima, MIN(CantMinima) AS CantMinima, MAX(PuntoReorden) AS PuntoReorden
                          FROM            dbo.Inventarios_MaximosYMinimos AS maxi
                          WHERE        (EsPrincipal = 1)
                          GROUP BY IdInventario) AS q RIGHT OUTER JOIN
                         dbo.Inventarios ON q.IdInventario = dbo.Inventarios.IdInventario INNER JOIN
                         dbo.Inventarios_Unidades ON dbo.Inventarios.IdUnidad = dbo.Inventarios_Unidades.IdUnidad LEFT OUTER JOIN
                         dbo.Inventarios_Agrup2 ON dbo.Inventarios.IdAgrup2 = dbo.Inventarios_Agrup2.IdAgrup2 LEFT OUTER JOIN
                         dbo.Inventarios_Agrup1 ON dbo.Inventarios.IdAgrup1 = dbo.Inventarios_Agrup1.IdAgrup1 LEFT OUTER JOIN
                         dbo.Inventarios_Unidades AS Inventarios_Unidades_1 ON dbo.Inventarios.IdUnidad1 = Inventarios_Unidades_1.IdUnidad LEFT OUTER JOIN
                         dbo.Inventarios_Especial ON dbo.Inventarios.IdInventario = dbo.Inventarios_Especial.IdInventario
GO
PRINT N'Refreshing View [dbo].[VInventariosImagen]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VInventariosImagen]';


GO
PRINT N'Refreshing View [dbo].[VNominaFactura]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VNominaFactura]';


GO
PRINT N'Refreshing View [dbo].[VRips_Encabezados]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VRips_Encabezados]';


GO
PRINT N'Refreshing View [dbo].[VItemsPos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VItemsPos]';


GO
PRINT N'Refreshing View [dbo].[VItemsPosImagen]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VItemsPosImagen]';


GO
PRINT N'Altering View [dbo].[VIdAbonaComisiones]...';
IF OBJECT_ID(N'dbo.VIdAbonaComisiones', N'V') IS NULL
    EXEC(N'CREATE VIEW [dbo].[VIdAbonaComisiones] AS SELECT 1 AS Dummy;');

GO
ALTER VIEW VIdAbonaComisiones
AS
SELECT Enc2.IdEncab, Enc2.IdDocumento, EncCont1.IdAbonaDoc, EncCont1.Credito, EncCont1.Debito, Doc.CodDocumento, 
Enc2.IdPrefijo, Enc2.NumDocumento, EncCont1.DocReferencia, Enc2.IdMoneda, EncCont.IdCliente, 
Doc.CodDocumento + N' ' + COALESCE (Enc2.IdPrefijo, N'') + CAST(Enc2.NumDocumento AS NVARCHAR) + 
N' ' + COALESCE (EncCont.DocReferencia, N'') AS Descripcion,
EncCont1.IdCuenta, Enc.Fecha, 
Doc1.CodDocumento + N' ' + COALESCE (Enc.IdPrefijo, N'') + CAST(Enc.NumDocumento AS NVARCHAR) + 
N' ' + COALESCE (EncCont1.DocReferencia, N'') AS DescripcionAbona,
Enc.IdPrefijo AS PrefijoAbona, Enc.NumDocumento AS NumDocAbona, 
Doc1.IdDocumento AS IdDocumentoAbona,
CASE WHEN EncCont.Debito > 0 THEN EncCont1.Credito * CreditoIva / EncCont.Debito ELSE 0 END AS PropIva, 
CASE WHEN Doc1.FactorInventario = 0 THEN 1 ELSE Doc1.FactorInventario * - 1 END AS FactorInv, 
CASE WHEN Abon.Saldo >= 0 AND (Doc1.FactorInventario * - 1) = - 1 THEN 0 ELSE 1 END AS FactorSaldo,
CASE WHEN CAST(Enc.Fecha AS DATE) > CAST(EncCont.Vence AS DATE) THEN DATEDIFF(DAY, CAST(EncCont.Vence AS DATE) , CAST(Enc.Fecha AS DATE)) ELSE 0 END AS DiasMora
FROM (
    SELECT encCont.IdEncab, SUM(encCont.Credito) AS CreditoIva, SUM(encCont.Debito) AS DebitoIva
    FROM dbo.Encabezados_Cont AS encCont INNER JOIN
    dbo.Cuentas AS Cuent ON encCont.IdCuenta = Cuent.IdCuenta
    WHERE (Cuent.IdGrupoCuenta = 5)
    GROUP BY encCont.IdEncab
) AS q RIGHT OUTER JOIN
dbo.Encabezados_Cont AS EncCont ON EncCont.IdEncab = q.IdEncab INNER JOIN
dbo.Encabezados_Cont AS EncCont1 ON EncCont1.IdAbonaDoc = EncCont.IdEncabCont INNER JOIN
dbo.Cuentas AS Cta ON EncCont1.IdCuenta = Cta.IdCuenta INNER JOIN
dbo.Encabezados AS Enc ON EncCont1.IdEncab = Enc.IdEncab INNER JOIN
dbo.Encabezados AS Enc2 ON EncCont.IdEncab = Enc2.IdEncab AND Enc.IdEncab <> Enc2.IdEncab INNER JOIN
dbo.Documentos AS Doc ON Enc2.IdDocumento = Doc.IdDocumento INNER JOIN
dbo.Documentos AS Doc1 ON Enc.IdDocumento = Doc1.IdDocumento INNER JOIN
dbo.VIdAbonaDoc_02 AS Abon ON EncCont.IdEncabCont = Abon.IdEncabCont
WHERE (Cta.IdCuentaTipo IN (1, 2)) AND (Enc.EsAnulado = 0) AND (Enc2.EsAnulado = 0)
GO
PRINT N'Refreshing View [dbo].[VCostoPromedio_Cruces]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCostoPromedio_Cruces]';


GO
PRINT N'Altering View [dbo].[VEncabezadosMov]...';
IF OBJECT_ID(N'dbo.VEncabezadosMov', N'V') IS NULL
    EXEC(N'CREATE VIEW [dbo].[VEncabezadosMov] AS SELECT 1 AS Dummy;');

GO
ALTER VIEW dbo.VEncabezadosMov
AS
SELECT IdEncabMov,
       IdEncab,
       IdInventario,
       IdBodega,
       IdLote,
       Cantidad,
       IdUnidad,
       ValorUnitario,
       IVAporc,
       NotaMov,
       NomInventario,
       CodInventario,
       NomBodega,
       NomLote,
       NombresClienteMov,
       NombresEmpleadoMov,
       NomCentroCostoMov,
       VenceMov,
       TotalMov,
       ValorImptoConsumo,
       FactorCantidad,
       Dcto,
       IdCentroCostoMov,
       CodLote,
       EspecialInv_01,
       EspecialInv_02,
       EspecialInv_03,
       EspecialInv_04,
       EspecialInv_05,
       EspecialInv_06,
       EspecialInv_07,
       EspecialInv_08,
       EspecialInv_09,
       EspecialInv_10,
       EspecialInv_11,
       EspecialInv_12,
       EspecialInv_13,
       EspecialInv_14,
       EspecialInv_15,
       EspecialInv_16,
       EspecialInv_17,
       EspecialInv_18,
       EspecialInv_19,
       EspecialInv_20,
       NumSerial,
       IdEncabMov2,
       EsVisible,
       TotalMovCalExt AS TotalMovExt,
       ValorUnitarioExt,
       DocCruce,
       Abreviatura,
       EspecialMov_01,
       EspecialMov_02,
       EspecialMov_03,
       EspecialMov_04,
       EspecialMov_05,
       EspecialMov_06,
       EspecialMov_07,
       EspecialMov_08,
       EspecialMov_09,
       EspecialMov_10,
       EspecialMov_12,
       EspecialMov_11,
       EspecialMov_13,
       EspecialMov_14,
       EspecialMov_15,
       EspecialMov_16,
       EspecialMov_17,
       EspecialMov_18,
       EspecialMov_19,
       EspecialMov_20,
       NomUnidad,
       NumPlacaMov,
       NumChasisMov,
       NumMotorMov,
       ColorMov,
       KilometrajeMov,
       ModeloMov,
       IdMarcaMov,
       NomMarcaMov,
       VenceLote,
       IdClasifImpto,
       FactorMovim,
       IdCliente,
       IdInmueble,
       PeriodoIni,
       CostoPromCosto,
       CostoPromCant,
       CostoPromValor,
       FinanNumCuotas,
       FinanInteres,
       FinanAporte,
       PeriodoFin,
       FechaIniActividad,
       FechaFinActividad,
       IdEmpleado,
       SubTotalSinDcto,
       ValorDcto,
       ValorIva,
       ValorImptoConsumoMov,
       TipoImptoConsumo,
       SubTotalSinDcto + ValorImptoConsumoMov + ImptoSaludableValorMov AS TotalMovCal,
       SubTotalSinDcto - ValorDcto AS SubTotalMov,
       ValorUnitario - ValorDctoUnitario AS ValorUnitarioConDcto,
       SubTotalSinDcto - ValorDcto + ValorIva + ValorImptoConsumoMov + ImptoSaludableValorMov AS TotalMovMasIva, 
       CASE WHEN (qMov.Cantidad * qMov.FactorCantidad) > 0 THEN (SubTotalSinDcto - ValorDcto + ValorIva + ValorImptoConsumoMov + ImptoSaludableValorMov) / (qMov.Cantidad * qMov.FactorCantidad) ELSE 0 END AS ValorUnitConIva,
       Recurso AS ImagenInv,
       IdEncabMov3,
       CodigoBarras,
       NomAgrup1,
       NomAgrup2,
       EsRevisado,
       CantidadIni,
       CantidadFin,
       CantidadDcto,
       NotaDcto,
       IdUnidad1,
       NomUnidad1,
       Cantidad1,
       NomTipoInven AS TipoInv,
       EsExcluir,
       ValorUnitarioUnidad,
       FactorCantidad1,
       FactorCantidad2,
       NomTalla,
       TallaAgrup1,
       TallaAgrup2,
       TallaAgrup3,
       FactorCantidad3,
       FactorCantidad4,
       ValorComision,
       SubTotalSinDctoExt,
       ValorDctoExt,
       SubTotalSinDctoExt - ValorDctoExt AS SubTotalMovExt,
       ImptoSaludableValor,
       ImptoSaludableTipo,
       ImptoSaludableValorMov
FROM
(
    SELECT EncMov.IdEncabMov,
           EncMov.IdEncab,
           EncMov.IdInventario,
           EncMov.IdBodega,
           EncMov.IdLote,
           EncMov.Cantidad,
           EncMov.IdUnidad,
           EncMov.ValorUnitario,
           EncMov.ValorIva AS IVAporc,
           EncMov.Nota AS NotaMov,
           Inv.NomInventario,
           Inv.CodInventario,
           InvBod.NomBodega,
           InvLot.NomLote,
           COALESCE(Cli.Nombre1, N'') + N' ' + COALESCE(Cli.Nombre2, N'') + N' ' + COALESCE(Cli.Apellido1, N'') + N' ' + COALESCE(Cli.Apellido2, N'') AS NombresClienteMov,
           COALESCE(Cli2.Nombre1, N'') + N' ' + COALESCE(Cli2.Nombre2, N'') + N' ' + COALESCE(Cli2.Apellido1, N'')  + N' ' + COALESCE(Cli2.Apellido2, N'') AS NombresEmpleadoMov,
           CCosto.NomCentroCosto AS NomCentroCostoMov,
           EncMov.Vence AS VenceMov,
           EncMov.TotalMov,
           EncMov.ValorImptoConsumo,
           EncMov.FactorCantidad,
           EncMov.Dcto,
           CCosto.IdCentroCosto AS IdCentroCostoMov,
           InvLot.CodLote,
           InvEsp.Especial_01 AS EspecialInv_01,
           InvEsp.Especial_02 AS EspecialInv_02,
           InvEsp.Especial_03 AS EspecialInv_03,
           InvEsp.Especial_04 AS EspecialInv_04,
           InvEsp.Especial_05 AS EspecialInv_05,
           InvEsp.Especial_06 AS EspecialInv_06,
           InvEsp.Especial_07 AS EspecialInv_07,
           InvEsp.Especial_08 AS EspecialInv_08,
           InvEsp.Especial_09 AS EspecialInv_09,
           InvEsp.Especial_10 AS EspecialInv_10,
           InvEsp.Especial_11 AS EspecialInv_11,
           InvEsp.Especial_12 AS EspecialInv_12,
           InvEsp.Especial_13 AS EspecialInv_13,
           InvEsp.Especial_14 AS EspecialInv_14,
           InvEsp.Especial_15 AS EspecialInv_15,
           InvEsp.Especial_16 AS EspecialInv_16,
           InvEsp.Especial_17 AS EspecialInv_17,
           InvEsp.Especial_18 AS EspecialInv_18,
           InvEsp.Especial_19 AS EspecialInv_19,
           InvEsp.Especial_20 AS EspecialInv_20,
           EncMov.NumSerial,
           EncMov.IdEncabMov2,
           EncMov.EsVisible,
           EncMov.Cantidad * EncMov.ValorUnitarioExt AS TotalMovCalExt,
           EncMov.ValorUnitarioExt,
           VCruc.DescripcionDocs AS DocCruce,
           InvBod.Abreviatura,
           MovEsp.Especial_01 AS EspecialMov_01,
           MovEsp.Especial_02 AS EspecialMov_02,
           MovEsp.Especial_03 AS EspecialMov_03,
           MovEsp.Especial_04 AS EspecialMov_04,
           MovEsp.Especial_05 AS EspecialMov_05,
           MovEsp.Especial_06 AS EspecialMov_06,
           MovEsp.Especial_07 AS EspecialMov_07,
           MovEsp.Especial_08 AS EspecialMov_08,
           MovEsp.Especial_09 AS EspecialMov_09,
           MovEsp.Especial_10 AS EspecialMov_10,
           MovEsp.Especial_12 AS EspecialMov_12,
           MovEsp.Especial_11 AS EspecialMov_11,
           MovEsp.Especial_13 AS EspecialMov_13,
           MovEsp.Especial_14 AS EspecialMov_14,
           MovEsp.Especial_15 AS EspecialMov_15,
           MovEsp.Especial_16 AS EspecialMov_16,
           MovEsp.Especial_17 AS EspecialMov_17,
           MovEsp.Especial_18 AS EspecialMov_18,
           MovEsp.Especial_19 AS EspecialMov_19,
           MovEsp.Especial_20 AS EspecialMov_20,
           Uni.NomUnidad,
           RepAuto.NumPlaca AS NumPlacaMov,
           RepAuto.NumChasis AS NumChasisMov,
           RepAuto.NumMotor AS NumMotorMov,
           RepAuto.Color AS ColorMov,
           RepAuto.Kilometraje AS KilometrajeMov,
           RepAuto.Modelo AS ModeloMov,
           RepAuto.IdMarca AS IdMarcaMov,
           RepMarc.NomMarca AS NomMarcaMov,
           CONVERT(VARCHAR(10), InvLot.FechaVence, 110) AS VenceLote,
           Inv.IdClasifImpto,
           EncMov.FactorMovim,
           EncMov.IdCliente,
           EncMov.IdInmueble,
           EncMov.PeriodoIni,
           EncMov.CostoPromCosto,
           EncMov.CostoPromCant,
           EncMov.CostoPromValor,
           EncMov.FinanNumCuotas,
           EncMov.FinanInteres,
           EncMov.FinanAporte,
           EncMov.PeriodoFin,
           EncMov.FechaIniActividad,
           EncMov.FechaFinActividad,
           EncMov.IdEmpleado,
           EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario AS SubTotalSinDcto,
           EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario * EncMov.Dcto / 100 AS ValorDcto,
           EncMov.ValorUnitario * EncMov.Dcto / 100 AS ValorDctoUnitario,
           (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * (EncMov.ValorIva / 100) * EncMov.FactorImpuesto AS ValorIva,
           CASE WHEN EncMov.TipoImptoConsumo = 1 THEN (EncMov.Cantidad * EncMov.FactorCantidad) * COALESCE(EncMov.ValorImptoConsumo, 0) ELSE (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * COALESCE(EncMov.ValorImptoConsumo, 0) / 100 END AS ValorImptoConsumoMov,
           EncMov.TipoImptoConsumo,
           Rec.Recurso,
           EncMov.IdEncabMov3,
           Inv.CodigoBarras,
           invAgrup1.NomAgrup1,
           invAgrup2.NomAgrup2,
           EncMov.EsRevisado,
           EncMov.CantidadIni,
           EncMov.CantidadFin,
           EncMov.CantidadDcto,
           EncMov.NotaDcto,
           EncMov.IdUnidad1,
           Uni1.NomUnidad AS NomUnidad1,
           COALESCE(EncMov.Cantidad1, EncMov.Cantidad * Uni.FactorEscala / Uni1.FactorEscala) AS Cantidad1,
           Invtipos.NomTipoInven,
           EncMov.EsExcluir,
           EncMov.ValorUnitario * EncMov.FactorCantidad AS ValorUnitarioUnidad,
           EncMov.CantDim1 AS FactorCantidad1,
           EncMov.CantDim2 AS FactorCantidad2,
           Talla.NomTalla,
           Talla.Agrup1 AS TallaAgrup1,
           Talla.Agrup2 AS TallaAgrup2,
           Talla.Agrup3 AS TallaAgrup3,
           EncMov.ValorComision,
           EncMov.CantDim3 AS FactorCantidad3,
           EncMov.CantDim4 AS FactorCantidad4,
           EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitarioExt AS SubTotalSinDctoExt,
           EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitarioExt * EncMov.Dcto / 100 AS ValorDctoExt,
           EncMov.ImptoSaludableValor,
           EncMov.ImptoSaludableTipo,
           CASE WHEN EncMov.ImptoSaludableTipo = 1 THEN (EncMov.Cantidad * EncMov.FactorCantidad) * COALESCE(EncMov.ImptoSaludableValor, 0) ELSE (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * COALESCE(EncMov.ImptoSaludableValor, 0) / 100 END AS ImptoSaludableValorMov
    FROM dbo.Inventarios_Lotes AS InvLot
        RIGHT OUTER JOIN dbo.Clientes AS Cli
            RIGHT OUTER JOIN dbo.Encabezados_Mov AS EncMov
                INNER JOIN dbo.Inventarios_Bodegas AS InvBod
                    ON EncMov.IdBodega = InvBod.IdBodega
                INNER JOIN dbo.Inventarios AS Inv
                    ON EncMov.IdInventario = Inv.IdInventario
                LEFT OUTER JOIN dbo.Clientes AS Cli2
                    ON EncMov.IdEmpleado = Cli2.IdCliente
                ON Cli.IdCliente = EncMov.IdCliente
            ON InvLot.IdLote = EncMov.IdLote
        LEFT OUTER JOIN dbo.Reparacion_Automotores AS RepAuto
            ON EncMov.NumSerial = RepAuto.IdAutomotor
               AND EncMov.IdTipoReg = 1
        LEFT OUTER JOIN dbo.Reparacion_Marcas AS RepMarc
            ON RepAuto.IdMarca = RepMarc.IdMarca
        LEFT OUTER JOIN dbo.Inventarios_Unidades AS Uni
            ON EncMov.IdUnidad = Uni.IdUnidad
        LEFT OUTER JOIN dbo.Encabezados_MovEspecial AS MovEsp
            ON EncMov.IdEncabMov = MovEsp.IdEncabMov
        LEFT OUTER JOIN dbo.Inventarios_Especial AS InvEsp
            ON Inv.IdInventario = InvEsp.IdInventario
        LEFT OUTER JOIN dbo.CentroCostos AS CCosto
            ON EncMov.IdCentroCosto = CCosto.IdCentroCosto
        LEFT OUTER JOIN dbo.VCruces_Agrup AS VCruc
            ON EncMov.IdEncabMov = VCruc.IdEncabMov1
        LEFT OUTER JOIN dbo.Parametros_Recursos AS Rec
            ON Inv.IdRecursoPOS = Rec.IdRecurso
        LEFT OUTER JOIN dbo.Inventarios_Agrup1 AS invAgrup1
            ON invAgrup1.IdAgrup1 = Inv.IdAgrup1
        LEFT OUTER JOIN dbo.Inventarios_Agrup2 AS invAgrup2
            ON invAgrup2.IdAgrup2 = Inv.IdAgrup2
        LEFT OUTER JOIN dbo.Inventarios_Unidades AS Uni1
            ON EncMov.IdUnidad1 = Uni1.IdUnidad
        INNER JOIN dbo.Inventarios_Tipos AS Invtipos
            ON Inv.IdTipoInv = Invtipos.IdInvenTipo
        LEFT OUTER JOIN dbo.Inventarios_Colores_Tallas AS Talla
            ON EncMov.NumSerial = Talla.CodTalla
               AND EncMov.IdTipoReg = 2
) AS qMov
GO
PRINT N'Altering View [dbo].[VMovimientosFactElectronica]...';
IF OBJECT_ID(N'dbo.VMovimientosFactElectronica', N'V') IS NULL
    EXEC(N'CREATE VIEW [dbo].[VMovimientosFactElectronica] AS SELECT 1 AS Dummy;');

GO
ALTER VIEW [dbo].[VMovimientosFactElectronica]
	AS 
	
SELECT 
CAST(1 AS bigint) AS numLineas,
VEncMov.IdEncab,
VEncMov.IdEncabMov,
VEncMov.IdInventario,
VEncMov.Cantidad,
VEncMov.FactorCantidad,
VEncMov.FactorCantidad4,
VEncMov.NomInventario,
VEncMov.ValorUnitario,
VEncMov.CodInventario,
Mon.Abrev AS CodMoneda,
VEncMov.IVAporc,
VencMov.ValorIva,
CASE WHEN EncMov.ValorTRM <> 0 THEN VEncMov.ValorIva / EncMov.ValorTRM END ValorIvaExt,		
VEncMov.TipoImptoConsumo,
VEncMov.ValorImptoConsumo,
VEncMov.ValorImptoConsumoMov,
CASE WHEN EncMov.ValorTRM <> 0 THEN VEncMov.ValorImptoConsumoMov / EncMov.ValorTRM END ValorImptoConsumoMovExt,	
CASE WHEN VEncMov.SubTotalMov = 0 or VEncMov.SubTotalMov = NULL then 0 ELSE (VEncMov.ValorImptoConsumo * 100 / VEncMov.SubTotalMov) * 100 END PorcentajeImpCon,
VEncMov.Dcto,
CASE WHEN VEncMov.Dcto <> 0 THEN VEncMov.Dcto / 100 END AS DctoFactor,
VEncMov.ValorDcto,
VEncMov.ValorDctoExt,
VEncMov.SubTotalSinDcto,
VEncMov.SubTotalSinDctoExt,
VEncMov.TotalMovCal,
CASE WHEN EncMov.ValorTRM <> 0 THEN VEncMov.TotalMovCal / EncMov.ValorTRM END TotalMovCalExt,	
VEncMov.SubTotalMov,
VEncMov.SubTotalMovExt,
VEncMov.ValorUnitarioConDcto,
VEncMov.TotalMovMasIva,
VEncMov.ValorUnitConIva,
VEncMov.NotaMov,
VEncMov.EsVisible,

--Unidades de medida
--
InvUniDIAN.IdUnidadDIAN,
InvUniDIAN.CodUnidadDIAN,
InvUniDIAN.NomUnidadDIAN,
InvUni.IdUnidad,
InvUni.Abreviatura AS AbrevMedida,
--

ClasUNSPSC.CodUNSPSC,
EncMov.Nota AS NotaLinea,
VEncMov.NomAgrup1,
VEncMov.NomAgrup2,
VEncMov.ValorUnitarioUnidad,
VEncMov.ValorUnitarioExt,
VEncMov.Cantidad * VEncMov.ValorUnitarioUnidad - VEncMov.ValorDcto + VEncMov.ValorImptoConsumo + VEncMov.ValorIva + VEncMov.ImptoSaludableValor AS PrecioTotal,
VEncMov.NomLote,
VEncMov.VenceMov,
VEncMov.ImptoSaludableTipo,
VEncMov.ImptoSaludableValor,
VEncMov.ImptoSaludableValorMov,
CASE WHEN EncMov.ValorTRM <> 0 THEN VEncMov.ImptoSaludableValorMov / EncMov.ValorTRM END ImptoSaludableValorMovExt,	
CASE WHEN VEncMov.SubTotalMov = 0 or VEncMov.SubTotalMov = NULL then 0 ELSE (VEncMov.ImptoSaludableValor * 100 / VEncMov.SubTotalMov) * 100 END ImptoSaludablePorcentaje

FROM dbo.Inventarios_Unidades_DIAN AS InvUniDIAN RIGHT OUTER JOIN
dbo.Inventarios_Unidades AS InvUni ON InvUniDIAN.IdUnidadDIAN = InvUni.IdUnidadDIAN RIGHT OUTER JOIN
dbo.VEncabezadosMov AS VEncMov INNER JOIN
dbo.Encabezados_Mov AS EncMov ON VEncMov.IdEncabMov = EncMov.IdEncabMov LEFT OUTER JOIN
dbo.Monedas AS Mon ON EncMov.IdMoneda = Mon.IdMoneda INNER JOIN
dbo.Inventarios AS Inv ON Inv.IdInventario = EncMov.IdInventario ON InvUni.IdUnidad = EncMov.IdUnidad LEFT OUTER JOIN
dbo.FacturacionElectronica_ClasificacionUNSPSC AS ClasUNSPSC ON ClasUNSPSC.IdUNSPSC = Inv.FeIdUNSPSC
GO
PRINT N'Refreshing View [dbo].[VEncabezados]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VEncabezados]';


GO
PRINT N'Refreshing View [dbo].[VEncabezadosMov_Det]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VEncabezadosMov_Det]';


GO
PRINT N'Refreshing View [dbo].[VInventarios_Existencia_Recursos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VInventarios_Existencia_Recursos]';


GO
PRINT N'Refreshing View [dbo].[VEncabezadoFactElectronica]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VEncabezadoFactElectronica]';


GO
PRINT N'Refreshing View [dbo].[VEncabezadosCont_Det]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VEncabezadosCont_Det]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc_01]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc_01]';


GO
PRINT N'Refreshing View [dbo].[VCierresDocs]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCierresDocs]';


GO
PRINT N'Refreshing View [dbo].[VCierresDocsCont]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VCierresDocsCont]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc____TotRetes_Fin]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc____TotRetes_Fin]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc_01_01]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc_01_01]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc_02]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc_02]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc_03]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc_03]';


GO
PRINT N'Refreshing View [dbo].[VContabDoc_Fin]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[VContabDoc_Fin]';


GO
PRINT N'Refreshing Function [dbo].[CostoPromedioPorInventario_v2]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[CostoPromedioPorInventario_v2]';


GO
PRINT N'Refreshing Function [dbo].[CostoPromedioPorInventario]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[CostoPromedioPorInventario]';


GO
PRINT N'Altering Function [dbo].[ufnContabilizacion_Normal]...';


GO
ALTER FUNCTION [dbo].[ufnContabilizacion_Normal] (@IdEncab INT)
RETURNS @RetContab TABLE 
(
    IdEncab INT NOT NULL, 
    IdCuenta INT NULL, 
    IdInvActivoFijo INT NULL, 
    IdGrupoCuenta INT NULL, 
    IdCuentaTipo INT NOT NULL,
    SumDebitos NUMERIC(28,6) NOT NULL,
	SumCreditos NUMERIC(28,6) NOT NULL,
	C_IdCliente INT NOT NULL,
	TotCtaBase NUMERIC(28,6) NULL,
	TotCtaPorc NUMERIC(28,6) NULL,
	C_Vence DATETIME NULL, 
	C_IdCentroCosto INT NULL
)
AS

BEGIN

DECLARE @IdEncabT int
DECLARE @cte_VContabDoc_00 TABLE 
(
	IdEncab INT, 
	IdContab INT, 
	IdDocumento INT, 
	IdTipoRegimen INT, 
	IdInventario INT, 
	IdTipoInv INT, 
	CantConFactor NUMERIC(24,8), 
	ValorUnitario NUMERIC(24,8), 
	ValorIva NUMERIC(28,6), 
	SubTotal NUMERIC(24,8), 
	SubTotal2 NUMERIC(24,8), 
	ValorDcto NUMERIC(24,8), 
	C_ImptoConsumo NUMERIC(24,8),
	C_ImptoSaludable NUMERIC(24,8),
	IdCentroCosto INT, 
	Vence DATETIME, 
	VenceEnc DATETIME, 
	C_DctoDev SMALLINT, 
	C_AplicaICA BIT, 
	C_AplicaIVA BIT, 
	C_IdCliente INT, 
	C_AutoRetiene BIT, 
	EsNoHaceRete BIT, 
	EsCree BIT, 
	ValorTarifaCree NUMERIC(28,6), 
	IdCuentaCree INT, 
	ValorTarifaCree_CD NUMERIC(28,6), 
	EsExcluirRetencion BIT, 
	ValorTarifaICA NUMERIC(28,6), 
	FactorReteIca SMALLINT,
	IdClienteProp INT
)

SET @IdEncabT = @IdEncab

;WITH

cte_VContabDoc_Ini (IdEncab, IdInventario, IdCliente, IdCentroCosto, Vence, ValorIva, ValorDcto, CantConFactor, ValorUnitario, SubTotal, SubTotal2, C_ImptoConsumo, C_ImptoSaludable)
AS
(
	SELECT 
		IdEncab, 
		IdInventario, 
		IdCliente, 
		IdCentroCosto, 
		Vence, 
		ValorIva, 
		SUM(ValorDcto), 
		SUM(CantConFactor) AS CantConFactor, 
		SUM(ValorUnitario) AS ValorUnitario,
		SUM(SubTotal) AS SubTotal,
		SUM(SubTotal2) AS SubTotal2,
		SUM(CASE WHEN TipoImptoConsumo = 0 THEN SubTotal * (COALESCE (ValorImptoConsumo, 0) / 100) ELSE CantConFactor * COALESCE (ValorImptoConsumo, 0) END) AS C_ImptoConsumo,
		SUM(CASE WHEN ImptoSaludableTipo = 0 THEN SubTotal * (COALESCE (ImptoSaludableValor, 0) / 100) ELSE CantConFactor * COALESCE (ImptoSaludableValor, 0) END) AS C_ImptoSaludable
	FROM VContab_EncMov AS VEnc_M
	WHERE IdEncab = @IdEncabT
	GROUP BY IdEncab, IdInventario, IdCliente, IdCentroCosto, Vence, ValorIva
),

cte_VContabDoc_00 (IdEncab, IdContab, IdDocumento, IdTipoRegimen, IdInventario, IdTipoInv, CantConFactor, ValorUnitario, ValorIva, SubTotal, SubTotal2, ValorDcto, C_ImptoConsumo, C_ImptoSaludable, IdCentroCosto, Vence, VenceEnc, C_DctoDev, C_AplicaICA, C_AplicaIVA, C_IdCliente, C_AutoRetiene, EsNoHaceRete, EsCree, ValorTarifaCree, IdCuentaCree, ValorTarifaCree_CD, EsExcluirRetencion, ValorTarifaICA, FactorReteIca,IdClienteProp)
AS
(
	SELECT 
		Enc.IdEncab, 
		Inv.IdContab, 
		Enc.IdDocumento, 
		Cli_Enc.IdTipoRegimen, 
		VEnc_M.IdInventario, 
		Inv.IdTipoInv, 
		VEnc_M.CantConFactor, 
		VEnc_M.ValorUnitario, 
		VEnc_M.ValorIva,
		VEnc_M.SubTotal, 
		VEnc_M.SubTotal2, 
		VEnc_M.ValorDcto, 
		VEnc_M.C_ImptoConsumo, 
		VEnc_M.C_ImptoSaludable,
		VEnc_M.IdCentroCosto, 
		CASE WHEN FinanDebe = 0 THEN Enc.Vence ELSE VEnc_M.Vence END AS Vence, 
		Enc.Vence AS VenceEnc, 
		Doc.ContabDcto AS C_DctoDev, 
		CASE WHEN Doc.AgruparClientes2 = 1 THEN Cli_Enc.EsReteIca ELSE Cli_Enc_M.EsReteIca END AS C_AplicaICA, 
		~ Emp.EsExentoIVA AS C_AplicaIVA, 
		CASE WHEN Doc.AgruparClientes2 = 1 THEN Cli_Enc.IdCliente ELSE Cli_Enc_M.IdCliente END AS C_IdCliente, 
		Cli_Enc.EsAutoRetenedor AS C_AutoRetiene, 
		Emp.EsNoHaceRete,
		Cli_Enc.EsCree,
		CASE WHEN Enc.IdDocumento = 2 THEN COALESCE (ActivEmp.ValorTarifaCree, 0) ELSE COALESCE (ActivCli.ValorTarifaCree, 0) END AS ValorTarifaCree, 
		Cli_Enc.IdCuentaCree,
		COALESCE (ActivEmp.ValorTarifaCree_Pers, ActivEmp.ValorTarifaCree) AS ValorTarifaCree_CD,
		Doc.EsExcluirRetencion,
		CASE WHEN Doc.AgruparClientes2 = 1 THEN Cli_Enc.TarifaIca ELSE Cli_Enc_M.TarifaIca END AS ValorTarifaICA,
		Doc.FactorReteIca as FactorReteIca,
		IdClienteProp
	FROM            
		dbo.Encabezados AS Enc INNER JOIN
		dbo.Clientes AS Cli_Enc ON Enc.IdCliente1 = Cli_Enc.IdCliente INNER JOIN
		dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento INNER JOIN
		cte_VContabDoc_Ini AS VEnc_M ON Enc.IdEncab = VEnc_M.IdEncab INNER JOIN
		dbo.Inventarios AS Inv ON VEnc_M.IdInventario = Inv.IdInventario INNER JOIN
		dbo.Empresas AS Emp ON Enc.IdEmpresa = Emp.IdEmpresa LEFT OUTER JOIN
		dbo.Empresas_ActividadesEcon AS ActivEmp ON Emp.EmpresaIdActivEconPrinc = ActivEmp.IdActividad LEFT OUTER JOIN
		dbo.Clientes AS Cli_Enc_M ON VEnc_M.IdCliente = Cli_Enc_M.IdCliente LEFT OUTER JOIN
		dbo.Empresas_ActividadesEcon AS ActivCli ON Cli_Enc.IdActividad = ActivCli.IdActividad
	WHERE Enc.IdEncab = @IdEncabT
)

INSERT INTO @cte_VContabDoc_00 (IdEncab, IdContab, IdDocumento, IdTipoRegimen, IdInventario, IdTipoInv, CantConFactor, ValorUnitario, ValorIva, SubTotal, SubTotal2, ValorDcto, C_ImptoConsumo, C_ImptoSaludable, IdCentroCosto, Vence, VenceEnc, C_DctoDev, C_AplicaICA, C_AplicaIVA, C_IdCliente, C_AutoRetiene, EsNoHaceRete, EsCree, ValorTarifaCree, IdCuentaCree, ValorTarifaCree_CD, EsExcluirRetencion, ValorTarifaICA, FactorReteIca,IdClienteProp)
SELECT IdEncab, IdContab, IdDocumento, IdTipoRegimen, IdInventario, IdTipoInv, CantConFactor, ValorUnitario, ValorIva, SubTotal, SubTotal2, ValorDcto, C_ImptoConsumo, C_ImptoSaludable, IdCentroCosto, Vence, VenceEnc, C_DctoDev, C_AplicaICA, C_AplicaIVA, C_IdCliente, C_AutoRetiene, EsNoHaceRete, EsCree, ValorTarifaCree, IdCuentaCree, ValorTarifaCree_CD, EsExcluirRetencion, ValorTarifaICA, FactorReteIca,IdClienteProp
FROM cte_VContabDoc_00

;WITH 

cte_TotPorCuentasFin (IdEncab, IdCuenta, TotCtaValor, TotCtaBase, TotCtaPorc, TotPorCuenta, TotFactorCtaPorc)
AS
(
	SELECT q1.IdEncab, 
	q1.IdCuenta, 
	CASE WHEN q1.TotPorCuenta > COALESCE (Cta.ValorBase, 0) THEN q1.TotPorCuenta * Cta.ValorPorcentaje / 100 ELSE 0 END AS TotCtaValor, 
	CASE WHEN q1.TotPorCuenta > Cta.ValorBase THEN Cta.ValorBase ELSE 0 END AS TotCtaBase, 
	CASE WHEN q1.TotPorCuenta > Cta.ValorBase THEN Cta.ValorPorcentaje / 100 ELSE 0 END AS TotCtaPorc, 
	q1.TotPorCuenta,
	CASE WHEN q1.TotPorCuenta > Cta.ValorBase THEN 1 ELSE 0 END AS TotFactorCtaPorc
	FROM
	(
		SELECT r1.IdEncab, Cont_Det.IdCuenta, SUM(r1.SubTotal) AS TotPorCuenta
		FROM 
		(
			SELECT IdEncab, IdContab, IdDocumento, IdTipoRegimen, SUM(SubTotal) AS SubTotal
			FROM @cte_VContabDoc_00
			GROUP BY IdEncab, IdContab, IdDocumento, IdTipoRegimen
		) as r1 INNER JOIN dbo.Contabilizaciones_Det AS Cont_Det ON r1.IdContab = Cont_Det.IdContab AND r1.IdDocumento = Cont_Det.IdDocumento AND r1.IdTipoRegimen = Cont_Det.IdTipoRegimen
		GROUP BY r1.IdEncab, Cont_Det.IdCuenta
	) AS q1 INNER JOIN dbo.Cuentas AS Cta ON q1.IdCuenta = Cta.IdCuenta
) ,

cte_VContabDoc_01 (IdEncab, IdContab, IdInventario, IdInvActivoFijo, IdCuenta, CodCuenta, NomCuenta, CantConFactor, ValorIva, ValorDcto, SubTotal, IdGrupoCuenta, IdCuentaTipo, IdManejo, C_IdCliente, C_AplicaICA, C_DctoDev, C_SubTotal, C_SubTotalSinDcto, C_SubTotalDcto, C_ContDcto, C_TesoreriaIni, C_TesoreriaFactor, C_ReteFuente, C_ReteFuente_CREE, C_Iva, C_ReteIva, C_ReteIca, C_ReteIvaRSC, C_ReteIvaRSD, C_Porcentaje, C_ImptoConsumo, C_ImptoSaludable, C_IvaTotal, C_BaseRetNormal, C_Vence, C_VenceAll, C_IdCentroCosto, C_IdCentroCostoAgrup, TotCtaBase, TotCtaPorc, C_AutoReteCREE_C, C_AutoReteCREE_D)
AS
(
	SELECT T.IdEncab, 
	T.IdContab, 
	T.IdInventario, 
	CASE WHEN Cta.IdCuentaTipo = 6 AND T.IdTipoInv = 3 THEN T.IdInventario ELSE NULL END AS IdInvActivoFijo, 
	CASE WHEN Cta.IdGrupoCuenta = 30 THEN COALESCE (T.IdCuentaCree, Cont_D.IdCuenta) ELSE Cont_D.IdCuenta END AS IdCuenta, 
	Cta.CodCuenta, 
	Cta.NomCuenta, 
	T.CantConFactor, 
	T.ValorIva, 
	T.ValorDcto, 
	T.SubTotal, 
	Cta.IdGrupoCuenta, 
	Cta.IdCuentaTipo, 
	Cont_D.IdManejo, 
	CASE WHEN ISNULL(Cont_D.IdTipo,0) = 1 THEN ISNULL(T.IdClienteProp,C_IdCliente) ELSE T.C_IdCliente END AS C_IdCliente, 
	T.C_AplicaICA, 
	T.C_DctoDev, 
	CASE WHEN Cta.IdGrupoCuenta = 1 THEN T.SubTotal ELSE 0 END AS C_SubTotal, 
	CASE WHEN Cta.IdGrupoCuenta = 1 AND T.C_DctoDev = 0 THEN T.SubTotal ELSE 0 END AS C_SubTotalSinDcto, 
	CASE WHEN Cta.IdGrupoCuenta = 1 AND T.C_DctoDev = - 1 THEN T.CantConFactor * T.ValorUnitario ELSE 0 END AS C_SubTotalDcto, 
	CASE WHEN Cta.IdGrupoCuenta = 1 AND T.C_DctoDev = - 1 AND (Cta.IdCuentaTipo = 22 OR Cta.IdCuentaTipo = 23) THEN T.CantConFactor * T.ValorDcto ELSE 0 END AS C_ContDcto, 
	CASE WHEN Cta.IdGrupoCuenta = 2 THEN T.SubTotal + T.SubTotal2 * ValorIva / 100 + T.C_ImptoConsumo + T.C_ImptoSaludable ELSE 0 END AS C_TesoreriaIni, 
	CASE WHEN Cta.IdGrupoCuenta = 2 THEN 1 ELSE 0 END AS C_TesoreriaFactor, 
	CASE WHEN Cta.IdGrupoCuenta = 4 THEN T.SubTotal2 * Tot.TotCtaPorc ELSE 0 END * CASE WHEN ((T.IdDocumento = 1 AND 
							 CONVERT(INT, T.C_AutoRetiene) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 (T.IdDocumento = 15 AND CONVERT(INT, T.C_AutoRetiene) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 (T.IdDocumento = 16 AND CAST(T.C_AutoRetiene AS INT) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 ((T.IdDocumento = 2 AND CONVERT(INT, T.C_AutoRetiene) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 (T.IdDocumento = 44 AND CONVERT(INT, T.C_AutoRetiene) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 T.EsNoHaceRete = 1)) THEN 0 ELSE 1 END AS C_ReteFuente, 
	CASE WHEN Cta.IdGrupoCuenta = 30 THEN T.SubTotal * T.ValorTarifaCree / 100 ELSE 0 END * CASE WHEN T.EsCree = 1 THEN 1 ELSE 0 END AS C_ReteFuente_CREE, 
	CASE WHEN Cta.IdGrupoCuenta = 5 THEN (T.SubTotal2 * T.ValorIva / 100) * T.C_AplicaIVA ELSE 0 END AS C_Iva, 
	CASE WHEN Cta.IdGrupoCuenta = 6 THEN (T.SubTotal2 * Tot.TotCtaPorc * T.ValorIva / 100) * T.C_AplicaIVA ELSE 0 END AS C_ReteIva, 
	CASE WHEN Cta.IdGrupoCuenta = 7 THEN ( CASE WHEN T.FactorReteIca = 0 THEN T.C_AplicaICA * (T.SubTotal2 * Tot.TotCtaPorc) ELSE T.C_AplicaICA * (CASE WHEN T.ValorTarifaICA IS NULL THEN T.SubTotal2 * Tot.TotCtaPorc ELSE T.SubTotal2 * Tot.TotFactorCtaPorc * (T.ValorTarifaICA /100) END) END) ELSE 0 END AS C_ReteIca,
	CASE WHEN Cta.IdGrupoCuenta = 10 THEN (T.SubTotal * Tot.TotCtaPorc) * T.C_AplicaIVA ELSE 0 END AS C_ReteIvaRSC, 
	CASE WHEN Cta.IdGrupoCuenta = 9 THEN (T.SubTotal * Tot.TotCtaPorc)  * T.C_AplicaIVA ELSE 0 END AS C_ReteIvaRSD, 
	CASE WHEN Cta.IdGrupoCuenta = 5 THEN Cta.ValorPorcentaje ELSE 0 END AS C_Porcentaje, 
	CASE WHEN Cta.IdGrupoCuenta = 11 THEN T.C_ImptoConsumo ELSE 0 END AS C_ImptoConsumo, 
	CASE WHEN Cta.IdGrupoCuenta = 35 THEN T.C_ImptoSaludable ELSE 0 END AS C_ImptoSaludable, 
	T.SubTotal * T.ValorIva / 100 AS C_IvaTotal, 
	CASE WHEN Cta.IdGrupoCuenta = 5 THEN T.SubTotal WHEN Cta_G.EsRetencion = 1 THEN T.SubTotal * Tot.TotPorCuenta ELSE 0 END AS C_BaseRetNormal, 
	CASE WHEN Cta.IdGrupoCuenta = 2 THEN T.Vence ELSE NULL END AS C_Vence, 
	T.Vence AS C_VenceAll, 
	T.IdCentroCosto AS C_IdCentroCosto, 
	CASE WHEN Cta.EsIncluirCC = 1 THEN IdCentroCosto ELSE NULL END AS C_IdCentroCostoAgrup, 
	Tot.TotCtaBase,

	--Tot.TotCtaPorc,
	CASE WHEN Cta.IdGrupoCuenta = 7 AND T.FactorReteIca = 1 AND T.C_AplicaICA = 1 AND T.ValorTarifaICA IS NOT NULL THEN T.ValorTarifaICA/100 ELSE Tot.TotCtaPorc END AS TotCtaPorc,

	CASE WHEN Cta.IdGrupoCuenta = 33 THEN T.SubTotal * T.ValorTarifaCree_CD / 100 ELSE 0 END AS C_AutoReteCREE_C, 
	CASE WHEN Cta.IdGrupoCuenta = 34 THEN T.SubTotal * T.ValorTarifaCree_CD / 100 ELSE 0 END AS C_AutoReteCREE_D
	FROM            
		@cte_VContabDoc_00 AS T INNER JOIN
		dbo.Contabilizaciones_Det AS Cont_D ON T.IdContab = Cont_D.IdContab AND T.IdTipoRegimen = Cont_D.IdTipoRegimen AND T.IdDocumento = Cont_D.IdDocumento INNER JOIN
		dbo.Cuentas AS Cta ON Cont_D.IdCuenta = Cta.IdCuenta INNER JOIN
		dbo.Cuentas_Tipos AS Cta_Tip ON Cta.IdCuentaTipo = Cta_Tip.IdCuentaTipo INNER JOIN
		dbo.Cuentas_Clases AS Cta_Clase ON Cta_Tip.IdClase = Cta_Clase.IdClase INNER JOIN
		cte_TotPorCuentasFin AS Tot ON T.IdEncab = Tot.IdEncab AND Cont_D.IdCuenta = Tot.IdCuenta LEFT OUTER JOIN
		dbo.Cuentas_Grupos AS Cta_G ON Cta.IdGrupoCuenta = Cta_G.IdGrupoCuenta
),


cte_TotReteFin(IdEncab, IdJoin, MinFecha, IdInventario, C_IdCentroCosto, SumReteFuente, SumReteIva, SumReteIca, SumReteIvaRSC, SumReteFuente_CREE, SumReteFuente_CREE_C, SumReteFuente_CREE_D)
AS
(
	SELECT IdEncab, 
	CAST(IdInventario AS NVARCHAR(100)) + N' -' + COALESCE (CAST(C_IdCentroCosto AS NVARCHAR(100)), N'') AS IdJoin, 
	COALESCE (CONVERT(char(8), MIN(C_VenceAll), 112), N'') AS MinFecha, 
	IdInventario, 
	C_IdCentroCosto, 
	SUM(C_ReteFuente) AS SumReteFuente, 
	SUM(C_ReteIva) AS SumReteIva, 
	SUM(C_ReteIca) AS SumReteIca, 
	SUM(C_ReteIvaRSC) AS SumReteIvaRSC, 
	SUM(C_ReteFuente_CREE) AS SumReteFuente_CREE, 
	SUM(C_AutoReteCREE_C) AS SumReteFuente_CREE_C, 
	SUM(C_AutoReteCREE_D) AS SumReteFuente_CREE_D
	FROM cte_VContabDoc_01
	GROUP BY IdEncab, IdInventario, C_IdCentroCosto, CAST(IdInventario AS NVARCHAR(100)) + N' -' + COALESCE (CAST(C_IdCentroCosto AS NVARCHAR(100)), N'')
),

cte_VContabDoc_01_01 (IdEncab, IdJoin, IdContab, IdInventario, IdInvActivoFijo, IdCuenta, IdGrupoCuenta, IdCuentaTipo, C_IdCliente, C_IdCentroCosto, C_IdCentroCostoAgrup, C_VenceAll, C_Vence, C_TesoreriaFactor, TotCtaBase, TotCtaPorc, IdManejo, C_SubTotal, C_Iva, C_ReteFuente, C_ReteFuente_CREE, C_ReteIva, C_ReteIca, C_ReteIvaRSC, C_ReteIvaRSD, C_ImptoConsumo, C_ImptoSaludable, C_AutoReteCREE_C, C_AutoReteCREE_D, C_TesoreriaIni, FechaYYYYmmdd)
AS
(
	SELECT        
		IdEncab, 
		CAST(IdInventario AS NVARCHAR(100)) + N' -' + COALESCE (CAST(C_IdCentroCosto AS NVARCHAR(100)), N'') AS IdJoin, 
		IdContab, 
		IdInventario, 
		IdInvActivoFijo, 
		IdCuenta, 
		IdGrupoCuenta, 
		IdCuentaTipo, 
		C_IdCliente, 
		C_IdCentroCosto, 
		C_IdCentroCostoAgrup, 
		C_VenceAll, 
		C_Vence, 
		MAX(C_TesoreriaFactor) AS C_TesoreriaFactor, 
		MAX(TotCtaBase) AS TotCtaBase, 
		MAX(TotCtaPorc) AS TotCtaPorc, 
		MAX(IdManejo) AS IdManejo, 
		SUM(C_SubTotal) AS C_SubTotal, 
		SUM(C_Iva) AS C_Iva, 
		SUM(C_ReteFuente) AS C_ReteFuente, 
		SUM(C_ReteFuente_CREE) AS C_ReteFuente_CREE, 
		SUM(C_ReteIva) AS C_ReteIva, 
		SUM(C_ReteIca) AS C_ReteIca, 
		SUM(C_ReteIvaRSC) AS C_ReteIvaRSC, 
		SUM(C_ReteIvaRSD) AS C_ReteIvaRSD, 
		SUM(C_ImptoConsumo) AS C_ImptoConsumo, 
		SUM(C_ImptoSaludable) AS C_ImptoSaludable, 
		SUM(C_AutoReteCREE_C) AS C_AutoReteCREE_C, 
		SUM(C_AutoReteCREE_D) AS C_AutoReteCREE_D, 
		SUM(C_TesoreriaIni) AS C_TesoreriaIni, 
		COALESCE (CONVERT(char(8), C_VenceAll, 112), N'') AS FechaYYYYmmdd
	FROM
		cte_VContabDoc_01
	GROUP BY IdEncab, IdContab, IdInventario, IdCuenta, C_IdCentroCosto, C_IdCliente, C_VenceAll, CAST(IdInventario AS NVARCHAR(100)) + N' -' + COALESCE (CAST(C_IdCentroCosto AS NVARCHAR(100)), N''), C_Vence, COALESCE (CONVERT(char(8), C_VenceAll, 112), N''), IdGrupoCuenta, IdCuentaTipo, C_IdCentroCostoAgrup, IdInvActivoFijo
)

INSERT INTO @RetContab
SELECT IdEncab, IdCuenta, IdInvActivoFijo, IdGrupoCuenta, IdCuentaTipo, SUM(CASE WHEN IdManejo = 1 THEN ISNULL(C_Total,0) ELSE 0 END) AS SumDebitos, SUM(CASE WHEN IdManejo = 2 THEN ISNULL(C_Total,0) ELSE 0 END) AS SumCreditos, C_IdCliente, TotCtaBase, TotCtaPorc, C_Vence, C_IdCentroCostoAgrup AS C_IdCentroCosto
FROM  
(
	SELECT IdEncab, IdContab, IdInventario, IdInvActivoFijo, IdCuenta, IdGrupoCuenta, IdCuentaTipo, C_IdCliente, C_Vence, C_SubTotal, C_Iva, C_ReteFuente, C_ReteFuente_CREE, C_AutoReteCREE_C, C_AutoReteCREE_D, C_ReteIca, C_ReteIva, C_ReteIvaRSC, C_ReteIvaRSD, C_ImptoConsumo, C_ImptoSaludable, C_Tesoreria, C_SubTotal + C_Iva + C_ReteFuente + C_ReteFuente_CREE + C_AutoReteCREE_C + C_AutoReteCREE_D + C_ReteIca + C_ReteIva + C_ReteIvaRSC + C_ReteIvaRSD + C_ImptoConsumo + C_ImptoSaludable + C_Tesoreria AS C_Total, C_IdCentroCosto, C_IdCentroCostoAgrup, TotCtaBase, TotCtaPorc, IdManejo
	FROM  
	(
		SELECT T.IdEncab, T.IdContab, T.IdInventario, T.IdInvActivoFijo, T.IdCuenta, T.IdGrupoCuenta, T.IdCuentaTipo, T.C_IdCliente, T.C_IdCentroCosto, T.C_IdCentroCostoAgrup, T.C_Vence, T.IdManejo, T.C_SubTotal, T.C_Iva, T.C_ReteFuente, T.C_ReteFuente_CREE, T.C_AutoReteCREE_C, T.C_AutoReteCREE_D, T.C_ReteIva, T.C_ReteIca, T.C_ReteIvaRSC, T.C_ReteIvaRSD, T.C_ImptoConsumo, T.C_ImptoSaludable, (T.C_TesoreriaIni - (CASE WHEN MinFecha <> FechaYYYYMMdd THEN 0 ELSE 1 END) * (TotRet.SumReteFuente + TotRet.SumReteIva + TotRet.SumReteIca + TotRet.SumReteFuente_CREE)) * T.C_TesoreriaFactor AS C_Tesoreria, T.TotCtaBase, T.TotCtaPorc
		FROM cte_VContabDoc_01_01 AS T INNER JOIN cte_TotReteFin AS TotRet ON T.IdEncab = TotRet.IdEncab AND T.IdJoin = TotRet.IdJoin
	) u
) t
GROUP BY IdEncab, IdCuenta, C_IdCliente, TotCtaBase, TotCtaPorc, C_Vence, C_IdCentroCostoAgrup, IdGrupoCuenta, IdCuentaTipo, IdInvActivoFijo


RETURN;




END
GO
PRINT N'Creating Function [dbo].[ufnNominaHijos_01]...';


GO
ALTER FUNCTION [dbo].[ufnNominaHijos_01]
(
	@IdEncab INT = NULL,
	@IdEmpresa INT = NULL,
	@IdEmpleado NVARCHAR(MAX) = NULL,
	@IdEncabNomMovBase NVARCHAR(MAX) = NULL
)
RETURNS @RetContab TABLE 
(
	IdEncab	INT NOT NULL,
	EsVisible BIT NOT NULL,
	EsActivo BIT NULL,
	Items INT NULL,
	ParteSuperior NUMERIC(28,6) NULL,
	ParteInferior NUMERIC(28,6) NULL,
	IdItem INT NOT NULL,
	IdCliente INT NOT NULL,
	IdContrato INT NULL,
	ValorUnit	NUMERIC(28,6) NOT NULL,
	ValorUnitInferior NUMERIC(28,6) NOT NULL,
	Cantidad NUMERIC(28,6) NOT NULL,
	IdEncabNomMov INT NOT NULL,
	IdEmpresa INT NULL,
	IdCentroCostoBase INT NULL
)
AS

BEGIN

DECLARE

@tIdEncab INT,
@tIdEmpresa INT,
@tIdEmpleado NVARCHAR(MAX),
@tIdContrato NVARCHAR(MAX),
@tItems INT,
@tIdEncabNomMovBase NVARCHAR(MAX),
@tFechaIni DATETIME,
@tFechaFin DATETIME

SET @tIdEncab = @IdEncab 
SET @tIdEmpresa =@IdEmpresa
SET @tIdEmpleado = @IdEmpleado
SET @tIdEncabNomMovBase = @IdEncabNomMovBase

INSERT INTO @RetContab
SELECT * 
FROM VNominaHijos_01 v
WHERE
--parametros opcionales para filtrar
(v.EsVisible = 1) AND
(v.EsActivo = 1) AND
(v.IdEncab = @tIdEncab) AND
(v.IdCliente IN(select number from iter$simple_intlist_to_tbl(ISNULL(@tIdEmpleado,'')))) AND
(@tIdEmpresa IS NULL OR v.IdEmpresa = @tIdEmpresa) AND
(@tIdEncabNomMovBase IS NULL OR v.IdEncabNomMov IN(SELECT number FROM iter$simple_intlist_to_tbl(ISNULL(@tIdEncabNomMovBase,''))))

RETURN;

END
GO
PRINT N'Creating Function [dbo].[ufnNominaHijos_02]...';


GO
ALTER FUNCTION [dbo].[ufnNominaHijos_02]
(
	@IdEncab INT = NULL,
	@IdEmpresa INT = NULL,
	@IdEmpleado NVARCHAR(MAX) = NULL,
	@IdEncabNomMovBase NVARCHAR(MAX) = NULL
)
RETURNS @RetContab TABLE 
(
	IdEncab	INT NOT NULL,
	EsVisible BIT NOT NULL,
	EsActivo BIT NULL,
	Items	INT NULL,
	ParteSuperior NUMERIC(28,6) NULL,
	ParteInferior NUMERIC(28,6) NULL,
	IdItem INT NOT NULL,
	IdCliente INT NOT NULL,
	IdContrato INT NULL,
	ValorUnit	NUMERIC(28,6) NOT NULL,
	ValorUnitInferior NUMERIC(28,6) NOT NULL,
	Cantidad NUMERIC(28,6) NOT NULL,
	IdEncabNomMov INT NOT NULL,
	IdEmpresa INT NULL,
	IdCentroCostoBase INT NULL
)
AS

BEGIN

DECLARE

@tIdEncab INT,
@tIdEmpresa INT,
@tIdEmpleado NVARCHAR(MAX),
@tIdContrato NVARCHAR(MAX),
@tItems INT,
@tIdEncabNomMovBase NVARCHAR(MAX),
@tFechaIni DATETIME,
@tFechaFin DATETIME

SET @tIdEncab = @IdEncab 
SET @tIdEmpresa =@IdEmpresa
SET @tIdEmpleado = @IdEmpleado
SET @tIdEncabNomMovBase = @IdEncabNomMovBase

INSERT INTO @RetContab
SELECT * 
FROM VNominaHijos_02 v
WHERE
--parametros opcionales para filtrar
(v.EsVisible = 1) AND
(v.EsActivo = 1) AND
(v.IdEncab = @tIdEncab) AND
(v.IdCliente IN(select number from iter$simple_intlist_to_tbl(ISNULL(@tIdEmpleado,'')))) AND
(@tIdEmpresa IS NULL OR v.IdEmpresa = @tIdEmpresa) AND
(@tIdEncabNomMovBase IS NULL OR v.IdEncabNomMov IN(SELECT number FROM iter$simple_intlist_to_tbl(ISNULL(@tIdEncabNomMovBase,''))))

RETURN;

END
GO
PRINT N'Creating Function [dbo].[ufnNominaHijos_03]...';


GO
ALTER FUNCTION [dbo].[ufnNominaHijos_03]
(
	@IdEncab INT = NULL,
	@IdEmpresa INT = NULL,
	@IdEmpleado NVARCHAR(MAX) = NULL,
	@IdEncabNomMovBase NVARCHAR(MAX) = NULL
)
RETURNS @RetContab TABLE 
(
	IdEncab	INT NOT NULL,
	EsVisible BIT NOT NULL,
	EsActivo BIT NULL,
	Items	INT NULL,
	ParteSuperior NUMERIC(28,6) NULL,
	ParteInferior NUMERIC(28,6) NULL,
	IdItem INT NOT NULL,
	IdCliente INT NOT NULL,
	IdContrato INT NULL,
	ValorUnit	NUMERIC(28,6) NOT NULL,
	ValorUnitInferior NUMERIC(28,6) NOT NULL,
	Cantidad NUMERIC(28,6) NOT NULL,
	IdEncabNomMov INT NOT NULL,
	IdEmpresa INT NULL,
	IdCentroCostoBase INT NULL
)
AS

BEGIN

DECLARE

@tIdEncab INT,
@tIdEmpresa INT,
@tIdEmpleado NVARCHAR(MAX),
@tIdContrato NVARCHAR(MAX),
@tItems INT,
@tIdEncabNomMovBase NVARCHAR(MAX),
@tFechaIni DATETIME,
@tFechaFin DATETIME

SET @tIdEncab = @IdEncab 
SET @tIdEmpresa =@IdEmpresa
SET @tIdEmpleado = @IdEmpleado
SET @tIdEncabNomMovBase = @IdEncabNomMovBase

INSERT INTO @RetContab
SELECT * 
FROM VNominaHijos_03 v
WHERE
--parametros opcionales para filtrar
(v.EsVisible = 1) AND
(v.EsActivo = 1) AND
(v.IdEncab = @tIdEncab) AND
(v.IdCliente IN(select number from iter$simple_intlist_to_tbl(ISNULL(@tIdEmpleado,'')))) AND
(@tIdEmpresa IS NULL OR v.IdEmpresa = @tIdEmpresa) AND
(@tIdEncabNomMovBase IS NULL OR v.IdEncabNomMov IN(SELECT number FROM iter$simple_intlist_to_tbl(ISNULL(@tIdEncabNomMovBase,''))))

RETURN;

END
GO
PRINT N'Altering Procedure [dbo].[CopiarDocumentos]...';
IF OBJECT_ID(N'dbo.CopiarDocumentos', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[CopiarDocumentos] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE CopiarDocumentos
	@IdEncabBasado INT,
	@IdMoneda INT,
	@Nota NVARCHAR(max)= null,
	@Fecha datetime,
	@FechaVence datetime,
	@IdDocumento INT,
	@IdCliente1 INT,
	@IdCliente2 INT,
	@EsVisible BIT=NULL,
	@IdEncabPago INT=0,
	@InfoUsuario NVARCHAR(100)='0,--BASEDATOS--',
	@Exito INT = 0 output,
	@IdEncabNuevo INT = 0 output,
	@IdEncabMov_string nvarchar(max) = '',
	@IdClienteVend INT=NULL,
	@EsCont BIT = 0
As

DECLARE

 @CopiarEspc BIT= NULL

BEGIN
	--Información Usuario
	exec CrearContextoUsuario @InfoUsuario
	
	SET @CopiarEspc=(SELECT ValParametro FROM Parametros WHERE CodParametro=55)
	INSERT INTO Encabezados(IdEmpresa, IdDocumento, IdPrefijo, NumDocumento, NumDocumentoExt, Fecha, Vence, IdCliente1, IdCliente1_IdDir, IdCliente2, IdClienteVend, IdMoneda, Nota, IdFormaPago, NomPc, EsAnulado, EsBloqueado, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, IdEstado, IdClienteProp, IdInmueble, IdSucursal, IdMesa, ValorTRM, ValorNegoc, CantMin, ValorPago)
	SELECT IdEmpresa, @IdDocumento, IdPrefijo, 0, NumDocumentoExt, @Fecha, @FechaVence, @IdCliente1, IdCliente1_IdDir, @IdCliente2, IdClienteVend, @IdMoneda, @Nota, IdFormaPago, NomPc, 0, 0, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, IdEstado, IdClienteProp, IdInmueble, IdSucursal, IdMesa, ValorTRM, ValorNegoc, CantMin, ValorPago
	FROM encabezados
	WHERE IdEncab=@IdEncabBasado

	SET @IdEncabNuevo = IDENT_CURRENT('Encabezados')
	
	IF @IdDocumento=2 and @IdClienteVend is null
	UPDATE Encabezados
	SET IdClienteVend=(SELECT IdCliVendedor FROM dbo.Clientes WHERE IdCliente=@IdCliente1)
	WHERE IdEncab=@IdEncabNuevo
	
	IF @EsCont=0
	INSERT INTO Encabezados_Mov (IdEncab, IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, IdCliente, Nota, Vence, IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce,CantDim4,IdEncabMov2,IdUnidad1,Cantidad1, ValorTRM, IdMoneda, IdEncabMov3, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
    SELECT @IdEncabNuevo,IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, IdCliente, Nota, Vence, IdCentroCosto, Dcto, EsIvaAlCosto,coalesce(@EsVisible,EsVisible), EsImpreso, EsRevisado, EsExcluirCruce, CantDim4,
    CASE WHEN @IdEncabPago>0 then IdEncabMov else NULL end as IdEncabMov2,IdUnidad1,Cantidad1, ValorTRM, IdMoneda, IdEncabMov, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
    FROM Encabezados_Mov
    WHERE
    IdEncabMov IN(select number from dbo.iter$simple_intlist_to_tbl(@IdEncabMov_string))
    
    IF @EsCont=1
    INSERT INTO dbo.Encabezados_Cont (IdEncab, IdCuenta, Debito, Credito, Nota, IdCliente, IdClienteBanco, IdInventario, DocReferencia, RetencionBase, RetencionPorc, Vence, IdCentroCosto, IdAbonaDoc, IdAbonaDif, IdAbonaCheque, EsRevisado, EsDeducible, IdEmpleado, IdEncabMov, IdEncabContAgrup, DebitoExt, CreditoExt)
    SELECT @IdEncabNuevo, IdCuenta, Debito, Credito, Nota, IdCliente, IdClienteBanco, IdInventario, DocReferencia, RetencionBase, RetencionPorc, Vence, IdCentroCosto, IdAbonaDoc, IdAbonaDif, IdAbonaCheque, EsRevisado, EsDeducible, IdEmpleado, IdEncabMov, IdEncabContAgrup, DebitoExt, CreditoExt
    FROM Encabezados_Cont
    WHERE
    IdEncabCont IN(select number from dbo.iter$simple_intlist_to_tbl(@IdEncabMov_string))
   
    IF @CopiarEspc IS NOT NULL
	BEGIN
		INSERT INTO dbo.EncabezadosEspecial (IdEncab, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10,Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20, Especial_21, Especial_22, Especial_23, Especial_24, Especial_25, Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, Especial_31, Especial_32, Especial_33, Especial_34, Especial_35, Especial_36, Especial_37, Especial_38, Especial_39, Especial_40)
		SELECT @IdEncabNuevo, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20, Especial_21, Especial_22, Especial_23, Especial_24, Especial_25, Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, Especial_31, Especial_32, Especial_33, Especial_34, Especial_35, Especial_36, Especial_37, Especial_38, Especial_39, Especial_40   
		FROM EncabezadosEspecial
		WHERE IdEncab =(select max(IdEncab) from Encabezados_Mov where IdEncabMov IN(select number from dbo.iter$simple_intlist_to_tbl(@IdEncabMov_string)))
	
		-- Inventarios Especiales
		INSERT INTO Encabezados_MovEspecial(IdEncabMov, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20)
		SELECT  IdEncabMovNuevo, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20
		FROM 
		(
			SELECT mov.IdEncabMov as IdEncabMovNuevo, esp.IdEncabMov, mov.IdEncab, esp.Especial_01, esp.Especial_02, esp.Especial_03, esp.Especial_04, esp.Especial_05, esp.Especial_06, esp.Especial_07, esp.Especial_08, esp.Especial_09, esp.Especial_10, esp.Especial_11, esp.Especial_12, esp.Especial_13, esp.Especial_14, esp.Especial_15, esp.Especial_16,esp. Especial_17, esp.Especial_18, esp.Especial_19, esp.Especial_20  
			FROM 
				Encabezados_Mov mov INNER JOIN Encabezados_MovEspecial esp ON esp.IdEncabMov = mov.IdEncabMov3
			WHERE IdEncab = @IdEncabNuevo
		)temp	
	END

	UPDATE Encabezados_Mov
	SET IdEncabMov3 = NULL
	WHERE IdEncab = @IdEncabNuevo

    IF @@error <> 0 GOTO ERR_HANDLER
    
    SET @Exito = 1
    RETURN
    
ERR_HANDLER:
  SET @Exito = 0
       
END
GO
PRINT N'Altering Procedure [dbo].[CopiarDocumentosBasados]...';
IF OBJECT_ID(N'dbo.CopiarDocumentosBasados', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[CopiarDocumentosBasados] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[CopiarDocumentosBasados]

@IdEncabStr NVARCHAR(1000),
@IdCliente INT,
@IdElaboro INT,
@IdPrefijo NVARCHAR(50),
@Fecha NVARCHAR(20) = NULL,
@IdDocumento INT=NULL,
@FechaVence NVARCHAR(20) = NULL,
@Nota NVARCHAR(1000),
@InfoUsuario NVARCHAR(100)='0,--BASEDATOS--',
@Exito INT output

AS
BEGIN

 /*	OPERACION DE COPIAR ARCHIVOS */
  
 IF @IdEncabStr LIKE '%,'
	SET @IdEncabStr = SUBSTRING(@IdEncabStr,0,LEN(@IdEncabStr))
 
 DECLARE @InsertedIdEncabs	   TABLE (id INT, idPas INT)
 DECLARE @InsertedIdEncabMovs  TABLE (id INT, idE INT, idPas INT, idPasE INT)
 DECLARE @IdPas INT
 DECLARE @FechaT DATETIME, @esMov bit=null,@Escont bit=null
 DECLARE @FechaVenceT DATETIME
		 
 IF (@Fecha IS NOT NULL)
	SET @FechaT = CAST(CONVERT(DATETIME, @Fecha, 103) + ' 00:00:00' AS DATETIME)

IF (@FechaVence IS NOT NULL)
	SET @FechaVenceT = CAST(CONVERT(DATETIME, @FechaVence, 103) + ' 23:59:59' AS DATETIME)
	--Procedimiento para Usuario Auditoria
    exec CrearContextoUsuario @InfoUsuario

	IF(@IdDocumento is not null)
	BEGIN
		select @esMov=EsMov from Documentos where IdDocumento=@IdDocumento
		select @Escont=EsCont from Documentos where IdDocumento=@IdDocumento
	END 



ALTER INDEX XI_NumeracionUnica ON [dbo].[Encabezados]
DISABLE;	
 
 --Insertar los Nuevos Encabezados
 --//
 INSERT INTO Encabezados
  (IdEmpresa, IdDocumento, 
   IdPrefijo, 
   NumDocumento, NumDocumentoExt, 
   Fecha, Vence, 
   IdCliente1, 
   IdCliente1_IdDir, 
   IdCliente2, 
   IdClienteVend, IdMoneda, Nota, IdFormaPago, NomPc,EsBloqueado, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, IdSucursal, IdMesa, ValorTRM)
	OUTPUT inserted.IdEncab, 1
	INTO @InsertedIdEncabs
 SELECT 
  IdEmpresa, COALESCE(@IdDocumento,IdDocumento), 
  CASE WHEN COALESCE(@IdPrefijo, '-1') = '-1' THEN IdPrefijo ELSE @IdPrefijo END, 
  0, NumDocumentoExt, 
  CASE WHEN @Fecha IS NULL THEN Fecha ELSE @FechaT END AS Fecha, 
  CASE WHEN @FechaVence IS NULL THEN Vence ELSE @FechaVenceT END AS Vence, 
  CASE WHEN COALESCE(@IdCliente, -1) = -1 THEN IdCliente1 ELSE @IdCliente END, 
  IdCliente1_IdDir,
  CASE WHEN COALESCE(@IdElaboro, -1) = -1 THEN IdCliente2 ELSE @IdElaboro END,
  IdClienteVend, IdMoneda,
  CASE WHEN @Nota IS NULL THEN Nota ELSE @Nota END, 
  IdFormaPago, NomPc, EsBloqueado, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, IdSucursal, IdMesa, ValorTRM
 FROM Encabezados
 WHERE IdEncab IN (select  number from iter$simple_intlist_to_tbl(@IdEncabStr))
 ORDER BY Encabezados.IdEncab
 --// 

 ALTER INDEX XI_NumeracionUnica ON [dbo].[Encabezados]
REBUILD;
 
 --Relaciona IdEncab Nuevos con IdEncab Bases
 --//
 UPDATE @InsertedIdEncabs
 SET idPas = q.idPas
 FROM @InsertedIdEncabs ins INNER JOIN
	(SELECT q1.id, q2.number as idPas, q1.x, q2.x as xPas
	 FROM	
	 (SELECT id, ROW_NUMBER() over(order by id) as x
	  FROM @InsertedIdEncabs) q1 INNER JOIN
	 (SELECT number, ROW_NUMBER() over(order by number) as x 
	  FROM iter$simple_intlist_to_tbl(@IdEncabStr)) as q2
 	  ON q1.x = q2.x) as q ON q.id = ins.id
 --//
 
 --	Setea la Direccion con el IdClienteDir del Nuevo IdCliente
 --//
 IF COALESCE(@IdCliente, -1) <> -1
 BEGIN
  
  UPDATE Encabezados 
  SET [IdCliente1_IdDir] = 
  (SELECT MIN(cliDir.IdClienteDir)
   FROM Encabezados enc INNER JOIN @InsertedIdEncabs ins ON enc.IdEncab = ins.id 
						INNER JOIN VClientesDir cliDir ON Encabezados.IdCliente1 = cliDir.IdCliente)
  WHERE	IdEncab IN (select id from @InsertedIdEncabs)
    
 END
 --//
 


 -- Insertar Los Nuevos Encabezados_Mov
 --//
 IF COALESCE(@esMov,1)=1
 BEGIN
 
	 -- Inserta Los Encabezados_Mov que no son Hijos
	 --//
	 INSERT INTO Encabezados_Mov
	 (IdEncab, 
	 IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, 
	 IdCliente, 
	 Nota, Vence, IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce, CostoPromValor, CostoPromCosto, CostoPromCant, NumSerial, IdEncabMov2,
	 CantDim4, ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
	 )
		OUTPUT inserted.IdEncabMov, inserted.IdEncab, 1, 1
		INTO @InsertedIdEncabMovs
	 SELECT 
	 ins.id, 
	 IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, 
	 CASE WHEN COALESCE(@IdCliente, -1) = -1 THEN IdCliente ELSE @IdCliente END, 
	 Nota, CASE WHEN @FechaVenceT IS NULL THEN Vence ELSE @FechaVenceT END AS Vence, 
	 IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce, CostoPromValor, CostoPromCosto, CostoPromCant, NumSerial, IdEncabMov2,
	 CantDim4, ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
	 FROM Encabezados_Mov encMov INNER JOIN @InsertedIdEncabs ins
	 ON	  encMov.IdEncab = ins.idPas AND encMov.IdEncabMov2 IS NULL
	 ORDER BY encMov.IdEncabMov
	 --//
	 
	 -- Relaciona IdEncabMov Nuevos con IdEncabMov Base Incluyendo IdEncab
	 --// 
	 UPDATE @InsertedIdEncabMovs
	 SET idPas = q.idPas,
		 idPasE = q.idPasE
	 FROM @InsertedIdEncabMovs ins INNER JOIN
	 (SELECT q1.id,q1.idE,q2.IdEncabMov as idPas, q2.IdEncab as idPasE
	  FROM
	  (SELECT id, idE, ROW_NUMBER() over(order by id) as x
	   FROM @InsertedIdEncabMovs) AS q1 INNER JOIN 
	  (SELECT encMov.IdEncabMov, encMov.IdEncab, ROW_NUMBER() over(order by encMov.IdEncabMov)as x
	   FROM Encabezados_Mov encMov INNER JOIN @InsertedIdEncabs ins
	   ON encMov.IdEncab = ins.idPas AND encMov.IdEncabMov2 IS NULL) q2
	  ON q1.x = q2.x) q ON q.id = ins.id
	 --//
	 
	 -- Inserta Los Encabezados_Mov que son Hijos
	 --//
	 INSERT INTO Encabezados_Mov
	 (IdEncab, 
	 IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, 
	 IdCliente, 
	 Nota, Vence, IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce, CostoPromValor, CostoPromCosto, CostoPromCant, NumSerial, 
	 IdEncabMov2)
	 SELECT 
	 ins.idE, 
	 IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, 
	 CASE WHEN COALESCE(@IdCliente, -1) = -1 THEN IdCliente ELSE @IdCliente END, 
	 Nota,  CASE WHEN @FechaVenceT IS NULL THEN Vence ELSE @FechaVenceT END AS Vence, 
	 IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce, CostoPromValor, CostoPromCosto, CostoPromCant, NumSerial, 
	 ins.id
	 FROM Encabezados_Mov encMov INNER JOIN @InsertedIdEncabMovs ins
	 ON	  encMov.IdEncab = ins.idPasE AND encMov.IdEncabMov2 = ins.idPas
	 ORDER BY encMov.IdEncabMov
	 --//
 END	
 --//
 
 -- Insertar Los Nuevos Encabezados_Cont
 --//
  IF COALESCE(@Escont,1)=1
 BEGIN
	 INSERT INTO Encabezados_Cont
	 (IdEncab, 
	  IdCuenta, Debito, Credito, Nota, 
	  IdCliente, 
	  IdClienteBanco, IdInventario, DocReferencia, RetencionBase, RetencionPorc, Vence, IdCentroCosto, IdAbonaDif, IdAbonaCheque, EsRevisado, EsDeducible, IdEmpleado,
	  DebitoExt, CreditoExt)
	 SELECT 
	  ins.id, 
	  IdCuenta, Debito, Credito, Nota, 
	  CASE WHEN COALESCE(@IdCliente, -1) = -1 THEN IdCliente ELSE @IdCliente END, 
	  IdClienteBanco, IdInventario, DocReferencia, RetencionBase, RetencionPorc, 
	  CASE WHEN @FechaVenceT IS NULL THEN Vence ELSE @FechaVenceT END AS Vence,
	  IdCentroCosto, IdAbonaDif, IdAbonaCheque, EsRevisado, EsDeducible, IdEmpleado,
	  DebitoExt, CreditoExt
	 FROM Encabezados_Cont encCont INNER JOIN @InsertedIdEncabs ins
	 ON	  encCont.IdEncab = ins.idPas
	 --//
	 END

		INSERT INTO EncabezadosEspecial
		(IdEncab, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05,
		Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, 
		Especial_11, Especial_12, Especial_13, Especial_14, Especial_15,
		Especial_16, Especial_17, Especial_18, Especial_19, Especial_20,
		Especial_21, Especial_22, Especial_23, Especial_24, Especial_25,
		Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, 
		Especial_31, Especial_32, Especial_33, Especial_34, Especial_35,
		Especial_36, Especial_37, Especial_38, Especial_39, Especial_40)
		SELECT id, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05,
		Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, 
		Especial_11, Especial_12, Especial_13, Especial_14, Especial_15,
		Especial_16, Especial_17, Especial_18, Especial_19, Especial_20,
		Especial_21, Especial_22, Especial_23, Especial_24, Especial_25,
		Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, 
		Especial_31, Especial_32, Especial_33, Especial_34, Especial_35,
		Especial_36, Especial_37, Especial_38, Especial_39, Especial_40
		FROM EncabezadosEspecial enew INNER JOIN @InsertedIdEncabs ins
		ON ins.idPas=enew.IdEncab

	 /*	OPERACION EJECUTADA EXITOSAMENTE */
	 SET @Exito = 1 
	 Select IdEncab, IdDocumento From 
	 @InsertedIdEncabs ins INNER JOIN Encabezados enc
	 ON ins.id = enc.IdEncab


END
GO
PRINT N'Altering Procedure [dbo].[CrucesDocumentosInsertar]...';
IF OBJECT_ID(N'dbo.CrucesDocumentosInsertar', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[CrucesDocumentosInsertar] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[CrucesDocumentosInsertar]

    @IdEncabBasado INT,
	@IdMoneda INT,
	@Fecha datetime,
	@FechaVence datetime,
	@IdDocumento INT,
	@IdCliente1 INT,
	@IdCliente2 INT,
	@IdClienteVend INT=NULL, 
	@IdEncab nvarchar(100) = '',
	@Nota NVARCHAR(max)=NULL,
	@IdEncabMov nvarchar(100) = '',
	@SumCantidad numeric(24,8)= 0,
	@IdUnidad int= 0,
	@FactorCantidad numeric(28,6)= 0,
	@FactorMovim INT,
	@NotaMov NVARCHAR(600)=NULL,
	@IdBodegaTras INT,
	@InfoUsuario NVARCHAR(100),
	@IdServicio INT=Null,
	@CantidadSer numeric(24,8)= 0,
	@FactorCantidad1 numeric(24,8)= 0,
	@FactorCantidad2 numeric(24,8)= 0,
	@ValorUnit numeric(24,8)= 0,
	@EsVisible BIT = NULL,
	@Exito INT = 0 OUTPUT,
	@IdEncabNuevo INT = 0 OUTPUT,
	@IdMovNuevo INT = 0 OUTPUT
	
AS
BEGIN

	DECLARE 
	@Ident nvarchar(500),
	@IdCliente int,
	@IdInv int,
	@factMov int=null,
	@IdDocOrigen int=0,
	@IdDocCruc int=0,
    @CopiarEspc BIT= NULL,
    @ChildReg int=0,
	@EsInsertSubProductos INT = 0
	
    
    exec CrearContextoUsuario @InfoUsuario
	
	SET @CopiarEspc=(SELECT ValParametro FROM Parametros WHERE CodParametro=55)
	
	IF @IdEncab=''
	BEGIN
	INSERT INTO Encabezados(IdEmpresa, IdDocumento, IdPrefijo, NumDocumento, NumDocumentoExt, Fecha, Vence, IdCliente1, IdCliente1_IdDir, IdCliente2, IdClienteVend, IdMoneda, Nota, IdFormaPago, NomPc, EsAnulado, EsBloqueado, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, FinanNumCuotas, FinanInteres, FinanFechaIni, FinanDebe, IdEstado, IdClienteProp, IdInmueble, IdSucursal, IdMesa, ValorTRM, ValorNegoc, CantMin, ValorPago)
	SELECT IdEmpresa, @IdDocumento, IdPrefijo, 0, NumDocumentoExt, @Fecha, @FechaVence, @IdCliente1, IdCliente1_IdDir, @IdCliente2, IdClienteVend, @IdMoneda, @Nota, IdFormaPago, NomPc, 0, 0, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, FinanNumCuotas, FinanInteres, FinanFechaIni, FinanDebe, IdEstado, IdClienteProp, IdInmueble, IdSucursal, IdMesa, ValorTRM, ValorNegoc, CantMin, ValorPago
	FROM encabezados
	WHERE IdEncab=@IdEncabBasado
	SET @IdEncab = IDENT_CURRENT('Encabezados') 
	SET @IdEncabNuevo= @IdEncab
	SET @IdDocCruc=@IdDocumento 
	
	IF @IdDocumento=2 AND @IdClienteVend IS NULL
	UPDATE Encabezados
	SET IdClienteVend=(SELECT IdCliVendedor FROM dbo.Clientes WHERE IdCliente=@IdCliente1)
	WHERE IdEncab=@IdEncabNuevo
	
	IF @CopiarEspc IS NOT NULL
    INSERT INTO dbo.EncabezadosEspecial (IdEncab, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20, Especial_21, Especial_22, Especial_23, Especial_24, Especial_25, Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, Especial_31, Especial_32, Especial_33, Especial_34, Especial_35, Especial_36, Especial_37, Especial_38, Especial_39, Especial_40)
    SELECT @IdEncabNuevo, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20, Especial_21, Especial_22, Especial_23, Especial_24, Especial_25, Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, Especial_31, Especial_32, Especial_33, Especial_34, Especial_35, Especial_36, Especial_37, Especial_38, Especial_39, Especial_40   
	FROM EncabezadosEspecial
	WHERE IdEncab =(SELECT MAX(IdEncab) FROM Encabezados_Mov WHERE IdEncabMov=@IdEncabMov)
	END

	IF @IdEncab<>''
	BEGIN
	SET @IdDocCruc=(SELECT IdDocumento FROM Encabezados WHERE IdEncab=@IdEncab)
	END
	
	SELECT @IdCliente=IdCliente1 FROM Encabezados WHERE IdEncab=@IdEncab
	
	IF @FactorMovim<>0
	 SET @FactorMovim = (SELECT MIN(FactorMovim) FROM Encabezados_Mov WHERE IdEncabMov=@IdEncabMov)
	
	SET @IdInv=(SELECT IdInventario FROM  Encabezados_Mov WHERE IdEncabMov=@IdEncabMov)
	
	SET @IdDocOrigen=(SELECT IdDocumento FROM Encabezados_Mov mov INNER JOIN Encabezados enc ON mov.IdEncab=enc.IdEncab 
					  WHERE IdEncabMov=@IdEncabMov)
	
	SET @ChildReg=(SELECT COUNT(*) FROM dbo.Encabezados_Mov WHERE IdEncabMov2=@IdEncabMov AND IdInventario=@IdInv)
	
    IF @IdDocCruc=2 AND @IdDocOrigen=9
		SET @factMov=@FactorMovim
		
	IF @IdDocCruc=46 AND @IdDocOrigen=9
		SET @factMov=@FactorMovim

	IF @IdDocCruc=2 AND @IdDocOrigen=39
		SET @factMov=@FactorMovim
		
		
	IF @IdDocCruc=15 AND @IdDocOrigen=2 AND @ChildReg=0 
		 SET @FactorMovim=1
	 
	IF @IdDocCruc=15 AND @IdDocOrigen=2
		 SET @factMov=1
		 
		 
	-- Condiciones para orden de taller	 
	IF (@IdDocCruc=9 OR @IdDocCruc=2) AND @IdDocOrigen=43 AND @ChildReg=0 
		 SET @FactorMovim=1
		 
	IF (@IdDocCruc=9 OR @IdDocCruc=2)AND  @IdDocOrigen=43
		 SET @factMov=1
		 
	-- Condiciones para orden de produccion
	IF @IdDocCruc=45
		 SET @FactorMovim=-1
		 
	-- Parametro para insertar o no lo registros hijos (SUBPRODUCTOS)
	SELECT @EsInsertSubProductos = EsInsertSubProductos
	FROM Documentos
	WHERE IdDocumento = @IdDocCruc;

	BEGIN TRANSACTION CrearCruc;
	
		INSERT INTO Encabezados_Mov (IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,CantDim4,EsVisible,NumSerial,IdUnidad1,Cantidad1,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
		SELECT @IdEncab,IdInventario,IdBodega,IdLote,@SumCantidad,CantidadFisica,@IdUnidad,@FactorCantidad,@FactorMovim,@ValorUnit,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,@IdCliente,COALESCE(@NotaMov,Nota),Vence,IdCentroCosto,Dcto,EsIvaAlCosto,CantDim4,
		case when @IdDocOrigen=24 then 1 else ISNULL(@EsVisible,EsVisible) end, NumSerial,IdUnidad1,Cantidad1,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
		FROM  Encabezados_Mov Enc_Mov
		WHERE Enc_Mov.IdEncabMov=@IdEncabMov
	    
		SET @Ident= IDENT_CURRENT('Encabezados_Mov')
		SET @IdMovNuevo=@Ident
		-- Validacion para relizar el cruce especial entre factura de venta y remision 
		--IF @IdDocCruc=9 and @IdDocOrigen=2
		--EXEC dbo.DocsCrucesInsertar @IdEncabMov,@Ident,-1
		--ELSE
		EXEC dbo.DocsCrucesInsertar @Ident,@IdEncabMov,-1
		
		--Genera registros hijos (SUBPRODUCTOS) a documentos diferentes de ingreso producto terminado
		IF @IdDocCruc<>22 AND @EsInsertSubProductos = 1
			INSERT INTO Encabezados_Mov (IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,NumSerial,IdEncabMov2,IdUnidad1,Cantidad1,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
			SELECT @IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,COALESCE(@factMov,FactorMovim),ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,@IdCliente,COALESCE(@NotaMov,Nota),Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,NumSerial,@Ident,IdUnidad1,Cantidad1,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
			FROM  Encabezados_Mov Enc_Mov
			WHERE Enc_Mov.IdEncabMov2=@IdEncabMov

		--Insertar registros en traslado interno
		IF @IdDocCruc=45
		INSERT INTO Encabezados_Mov (IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,NumSerial,IdUnidad1,Cantidad1,IdEncabMov3,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
		SELECT IdEncab,IdInventario,coalesce(@IdBodegaTras,IdBodega),IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,1,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,NumSerial,IdUnidad1,Cantidad1,@Ident,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
		FROM  Encabezados_Mov Enc_Mov
		WHERE Enc_Mov.IdEncabMov=@Ident

		-- Insertar registro de servicio asociado al cruce con factores cantidad
		if @IdServicio IS NOT NULL
		INSERT INTO Encabezados_Mov (IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,CantDim1,CantDim2,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
		SELECT IdEncab,@IdServicio,IdBodega,IdLote,@CantidadSer,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,@FactorCantidad1,@FactorCantidad2,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
		FROM  Encabezados_Mov Enc_Mov
		WHERE Enc_Mov.IdEncabMov=@Ident
	
	COMMIT TRAN CrearCruc;
	
    IF @@error <> 0 GOTO ERR_HANDLER
    
    SET @Exito = 1
    RETURN
    
ERR_HANDLER:
  SET @Exito = 0
       
END
GO
PRINT N'Altering Procedure [dbo].[ActualizarAudit]...';
IF OBJECT_ID(N'dbo.ActualizarAudit', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[ActualizarAudit] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[ActualizarAudit]

@Exito INT = 0 output

AS
BEGIN

	declare @rows INT = 0
	declare @batchSize INT = 500
	declare @minutesExpire INT = 1440
	declare @done bit = 0
	declare @lastRunDate DATETIME
	declare @lastRunString nvarchar(20)
	declare @difInMinutes INT

	--Proceso de bloqueo para evitar que se ejecute mas de 1 vez
	--//
	declare @nomProceso varchar(100) = 'ActualizarAudit'

	declare @Lock int
    exec @Lock = sp_getapplock @Resource = @nomProceso,
                               @LockMode = 'Exclusive',
							   @LockTimeout = '5000',
							   @LockOwner = 'Session'
    -- already locked by another process
	if (@Lock < 0)
	begin
		set @Exito = 1
		return;
	end
	--//

	if not exists(select * from Parametros where CodParametro = -30)
		INSERT INTO dbo.Parametros (CodParametro, NomParametro, ValParametro, Descripcion, Grupo, EsActivo, IdTipoControl)
		VALUES (-30, N'Calculo Auditoria', CONVERT(VARCHAR(20), DATEADD(minute ,-1*(@minutesExpire+60), GETDATE()), 120), N'Calculo Auditoria', N'Documentos', 1, 1)

	select @lastRunString =ValParametro from Parametros where CodParametro = -30

	set @lastRunDate = CONVERT(DATETIME, @lastRunString, 120)
	set @difInMinutes = DATEDIFF(minute, @lastRunDate, GETDATE())

	--sale del proceso si no ha pasado mas de @minutesExpire desde la ultima ejecucion
	--//
	if ( @difInMinutes < @minutesExpire)
	begin
		set @Exito = 1
		exec sp_releaseapplock @Resource = @nomProceso,
							   @LockOwner = 'Session'
		return;
	end
	--//

	--Auditoria Encabezados	
	--//
	select @rows = count(*) from dbo.Audit_Encabezados where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Encabezados
		SET AdNomEmpresa=emp.EmpresaNombre,
		AdNomCliente1= cli.Identificacion+'-'+cli.Nombre1+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomCliente1_Dir=CliDir.Direccion,
		AdNomCliente2=cli2.Identificacion+'-'+cli2.Nombre1+' '+COALESCE(cli2.Nombre2,'')+' '+COALESCE(cli2.Apellido1,'')+' '+COALESCE(cli2.Apellido2,''),
		AdNomClienteVend=cliVend.Identificacion+'-'+cliVend.Nombre1+' '+COALESCE(cliVend.Nombre2,'')+' '+COALESCE(cliVend.Apellido1,'')+' '+COALESCE(cliVend.Apellido2,''),
		AdNomMoneda=mon.NomMoneda1,
		AdNomFormaPago= form.NomFormaPago,
		AdNomAutomotor=Autom.Modelo,
		AdNomContacto=con.Nombres,
		AdNomDocumento=doc.NomDocumento,
		Sist_EsProcesado=1,
		AdNomEstado=Estado.NomEstado,
		AdNomClienteProp=cliProp.Identificacion+'-'+cliProp.Nombre1+' '+COALESCE(cliProp.Nombre2,'')+' '+COALESCE(cliProp.Apellido1,'')+' '+COALESCE(cliProp.Apellido2,''),
		AdNomInmueble=inmueble.Direccion,
		AdNomSucursal=sucursal.NomSucursal,
		AdNomMesa=NomMesa,
		AdNomClienteVend2=clivend2.Identificacion+'-'+clivend2.Nombre1+' '+COALESCE(clivend2.Nombre2,'')+' '+COALESCE(clivend2.Apellido1,'')+' '+COALESCE(clivend2.Apellido2,''),
		AdNomEstadoMesa=EstadoMes.NomEstado
		FROM dbo.Audit_Encabezados AS audEnc LEFT JOIN dbo.Clientes as cli 
		ON  audEnc.IdCliente1 = cli.IdCliente LEFT JOIN dbo.Clientes as cli2
		ON  audEnc.IdCliente2 = cli2.IdCliente LEFT JOIN dbo.Clientes as cliVend
		ON  audEnc.IdClienteVend = cliVend.IdCliente LEFT JOIN Empresas as emp
		ON audEnc.IdEmpresa = emp.IdEmpresa LEFT JOIN Clientes_Direcciones as CliDir
		ON audEnc.IdCliente1_IdDir=CliDir.IdClienteDir LEFT JOIN dbo.Monedas AS mon
		ON audEnc.IdMoneda = mon.IdMoneda LEFT JOIN dbo.FormasPago as form
		ON audEnc.IdFormaPago=form.IdFormaPago LEFT JOIN dbo.Reparacion_Automotores as Autom
		ON audEnc.IdAutomotor = Autom.IdAutomotor LEFT JOIN dbo.Clientes_Contactos AS con
		ON audEnc.IdContacto = con.IdContacto INNER JOIN dbo.Documentos as doc
		ON audEnc.IdDocumento=doc.IdDocumento LEFT JOIN dbo.Encabezados_Estados AS Estado
		ON audEnc.IdEstado=Estado.IdEstado LEFT JOIN dbo.Clientes as cliProp
		ON audEnc.IdClienteProp=cliProp.IdCliente LEFT JOIN dbo.PH_Inmuebles inmueble
		ON audEnc.IdInmueble=inmueble.IdInmueble  LEFT JOIN dbo.Sucursales sucursal
		ON audEnc.IdSucursal=sucursal.IdSucursal  LEFT JOIN dbo.Encabezados_Mesas Mesa
		ON audEnc.IdMesa=Mesa.IdMesa LEFT JOIN dbo.Clientes as clivend2
		ON audEnc.IdClienteVend2=clivend2.IdCliente LEFT JOIN dbo.Encabezados_Estados AS EstadoMes
		ON audEnc.IdEstadoMesa=EstadoMes.IdEstado
		where audEnc.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Auditoria Encabezados Mov
	--//
	select @rows = count(*) from dbo.Audit_Encabezados_Mov where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Encabezados_Mov
		SET AdNomCliente= cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomInventario=inv.CodInventario+'-'+inv.NomInventario,
		AdNomBodega= bod.NomBodega,
		AdNomLote=lot.CodLote+'-'+lot.NomLote,
		AdNomUnidad=uni.NomUnidad,
		AdNomCentroCosto=cent.NomCentroCosto,
		AdNomEncabMov2=inv2.CodInventario+'-'+inv2.NomInventario,
		Sist_EsProcesado=1,
		AdNomInmueble=inmueble.Direccion,
		AdNomEmpleado=Emple.Identificacion+'-'+Emple.Nombre1+' '+COALESCE(Emple.Nombre2,'')+' '+COALESCE(Emple.Apellido1,'')+' '+COALESCE(Emple.Apellido2,''),
		AdNomEncabMov3=inv3.CodInventario+'-'+inv3.NomInventario,
		AdNomMoneda=moneda.NomMoneda1,
		AdNomUnidad1=uni1.NomUnidad,
		AdNomVendedor=Vend.Identificacion+'-'+Vend.Nombre1+' '+COALESCE(Vend.Nombre2,'')+' '+COALESCE(Vend.Apellido1,'')+' '+COALESCE(Vend.Apellido2,''),
		AdNomRutaEncMov=ProProc.NomProceso+'-'+CAST(EncaRutPro.Orden AS nvarchar(20))+' '+'('+CAST(EncaRutPro.IdEncabMov AS nvarchar(20))+')'
		FROM dbo.Audit_Encabezados_Mov AS audEncMov LEFT JOIN dbo.Clientes as cli 
		ON audEncMov.IdCliente = cli.IdCliente LEFT JOIN dbo.Inventarios as inv
		ON audEncMov.IdInventario=inv.IdInventario LEFT JOIN dbo.Inventarios_Bodegas AS bod
		ON audEncMov.IdBodega = bod.IdBodega LEFT JOIN dbo.Inventarios_Lotes as lot
		ON audEncMov.IdLote=lot.IdLote LEFT JOIN dbo.Inventarios_Unidades as uni
		ON audEncMov.IdUnidad = uni.IdUnidad LEFT JOIN dbo.CentroCostos AS cent
		ON audEncMov.IdCentroCosto = cent.IdCentroCosto LEFT JOIN dbo.Encabezados_Mov  AS encMov
		ON audEncMov.IdEncabMov2=encMov.IdEncabMov LEFT JOIN dbo.Inventarios as inv2
		ON audEncMov.IdInventario=inv2.IdInventario  LEFT JOIN dbo.PH_Inmuebles inmueble
		ON audEncMov.IdInmueble=inmueble.IdInmueble   LEFT JOIN dbo.Clientes as Emple
		ON audEncMov.IdEmpleado=Emple.IdCliente LEFT JOIN dbo.Encabezados_Mov  AS encMov3
		ON audEncMov.IdEncabMov3=encMov.IdEncabMov LEFT JOIN dbo.Inventarios as inv3
		ON audEncMov.IdInventario=inv3.IdInventario LEFT JOIN dbo.Monedas moneda
		ON audEncMov.IdMoneda=moneda.IdMoneda LEFT JOIN dbo.Inventarios_Unidades as uni1
		ON audEncMov.IdUnidad1 = uni1.IdUnidad LEFT JOIN dbo.Clientes as Vend
		ON audEncMov.IdVendedor=Vend.IdCliente LEFT JOIN dbo.Encabezados_Mov_RutasProduccion as EncaRutPro
		ON audEncMov.IdRutaEncMov=EncaRutPro.IdRutaEncMov LEFT JOIN dbo.Produccion_Procesos as ProProc
		ON EncaRutPro.IdProceso=ProProc.IdProceso
		where audEncMov.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Auditoria Encabezados Cont
	--//
	select @rows = count(*) from dbo.Audit_Encabezados_Cont where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Encabezados_Cont
		SET AdNomCliente= cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomCuenta=cuen.CodCuenta+'-'+cuen.NomCuenta,
		AdNomClienteBanco=cli2.Identificacion+'-'+cli2.Nombre1+' '+COALESCE(cli2.Nombre2,'')+' '+COALESCE(cli2.Apellido1,'')+' '+COALESCE(cli2.Apellido2,''),
		AdNomCentroCosto=cent.NomCentroCosto,
		AdNomAbonaDoc=abonaDoc.Descripcion,
		AdNomAbonaCheque=abonaCheq.Descripcion,
		Sist_EsProcesado=1,
		AdNomEmpleado=Emple.Identificacion+'-'+Emple.Nombre1+' '+COALESCE(Emple.Nombre2,'')+' '+COALESCE(Emple.Apellido1,'')+' '+COALESCE(Emple.Apellido2,''),
		AdNomInmueble=inmueble.Direccion,
		AdNomMoneda=moneda.NomMoneda1,
		AdNomAbonaDocDet=abonaDocDet.Descripcion
		FROM dbo.Audit_Encabezados_Cont AS audEncCont LEFT JOIN dbo.Clientes as cli 
		ON audEncCont.IdCliente = cli.IdCliente LEFT JOIN dbo.Cuentas as cuen
		ON audEncCont.IdCuenta= cuen.IdCuenta LEFT JOIN dbo.Clientes as cli2
		ON audEncCont.IdClienteBanco = cli2.IdCliente LEFT JOIN dbo.CentroCostos AS cent
		ON audEncCont.IdCentroCosto = cent.IdCentroCosto LEFT JOIN VIdAbonaDoc_02 AS abonaDoc
		ON audEncCont.IdAbonaDoc=abonaDoc.IdEncabCont LEFT JOIN dbo.VIdAbonaCheque_02 AS abonaCheq
		ON audEncCont.IdAbonaCheque=abonaCheq.IdEncabCont  LEFT JOIN dbo.Clientes as Emple
		ON audEncCont.IdEmpleado=Emple.IdCliente  LEFT JOIN dbo.PH_Inmuebles inmueble
		ON audEncCont.IdInmueble=inmueble.IdInmueble  LEFT JOIN dbo.Monedas moneda
		ON audEncCont.IdMoneda=moneda.IdMoneda LEFT JOIN dbo.VIdAbonaDoc_02 AS abonaDocDet
		ON audEncCont.IdAbonaDocDet=abonaDocDet.IdEncabCont
		where audEncCont.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//
	
	--AuditoriA Clientes
	--//
	select @rows = count(*) from dbo.Audit_Clientes where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Clientes
		SET AdNomTipoIdent=NomTipoIdent,AdNomCiudad=NomCiudad,AdNomTipoRegimen=NomTipoRegimen,
		AdNomVendedor=cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomAgrup1=NomAgrup1,AdNomAgrup2=NomAgrup2,AdNomAgrup3=NomAgrup3,AdNomZona1=NomZona1,AdNomZona2=NomZona2,AdNomZona3=NomZona3,AdNomLista=NomLista,AdNomPais=NomPais1,
		Sist_EsProcesado=1,AdNomActividad=NomActividad,AdNomRiesgo=NomRiesgo,AdNomCuentaCree=NomCuenta
		from dbo.Audit_Clientes AuditCli left join dbo.Clientes_TiposIdent Ident
		on AuditCli.IdTipoIdent=Ident.IdTipoIdent left join dbo.Ciudades Ciu
		on AuditCli.IdCiudad=Ciu.IdCiudad left join dbo.Clientes_TiposRegimen tipoReg
		on AuditCli.IdTipoRegimen=tipoReg.IdTipoRegimen left join dbo.Clientes cli
		on AuditCli.IdCliVendedor=cli.IdCliente left join dbo.Clientes_Agrup1 agrup1
		on AuditCli.IdAgrup1=agrup1.IdAgrup1 left join dbo.Clientes_Agrup2 agrup2
		on AuditCli.IdAgrup2=agrup2.IdAgrup2 left join dbo.Clientes_Agrup3 agrup3
		on AuditCli.IdAgrup3=agrup3.IdAgrup3 left join dbo.Clientes_Zona1 Zona1
		on AuditCli.IdZona1=Zona1.IdZona1 left join dbo.Clientes_Zona2 Zona2
		on AuditCli.IdZona2=Zona2.IdZona2 left join dbo.Clientes_Zona3 Zona3
		on AuditCli.IdZona3=Zona3.IdZona3 left join dbo.Inventarios_Listas List
		on AuditCli.IdLista=List.IdLista left join dbo.Paises Pais
		on AuditCli.IdPais=Pais.IdPais left join Empresas_ActividadesEcon Act
		on AuditCli.IdActividad=Act.IdActividad left join dbo.IFRS_Riesgos_Deterioro Riesgo
		on AuditCli.IdRiesgo=Riesgo.IdRiesgo left join dbo.Cuentas cuenta
		on AuditCli.IdCuentaCree=cuenta.IdCuenta
		where AuditCli.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//
	
	--Auditoria Productos
	--//
	select @rows = count(*) from dbo.Audit_Inventarios where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Inventarios
		SET AdNomUnidad=unidad.NomUnidad,AdNomAgrup1=agrup1.NomAgrup1,AdNomAgrup2=agrup2.NomAgrup2,AdNomContab=NomContab,
		AdNomTipoInv=NomTipoInven,AdNomContCosto=NomContCosto,
		Sist_EsProcesado=1,AdNomRecursoPOS=Recurs.Descripcion,AdNomClasifImpto=Clasif.NomClasifImpto,
		AdNomUnidad1=unidad1.NomUnidad,AdNomProdAgrup1=ProAgp1.NomAgrup1,AdNomProdAgrup2=ProAgp2.NomAgrup2
		from dbo.Audit_Inventarios AuditInv left join dbo.Inventarios_Unidades unidad
		on AuditInv.IdUnidad=unidad.IdUnidad left join dbo.Inventarios_Agrup1 agrup1
		on AuditInv.IdAgrup1=agrup1.IdAgrup1 left join dbo.Inventarios_Agrup2 agrup2
		on AuditInv.IdAgrup2=agrup2.IdAgrup2 left join dbo.Contabilizaciones contab
		on AuditInv.IdContab=contab.IdContab left join  dbo.Inventarios_Tipos invTipo
		on AuditInv.IdTipoInv=invTipo.IdInvenTipo left join  dbo.Contabilizaciones_Costos conCosto
		on AuditInv.IdContCosto=conCosto.IdContCosto left join dbo.Inventarios_DocRecursos  Recurs
		on AuditInv.IdRecursoPOS=Recurs.IdRecurso  left join dbo.Inventarios_ClasifImpto  Clasif
		on AuditInv.IdClasifImpto=Clasif.IdClasifImpto left join dbo.Inventarios_Unidades unidad1
		on AuditInv.IdUnidad1=unidad1.IdUnidad left join dbo.Produccion_Agrup1 ProAgp1
		on AuditInv.IdProdAgrup1=ProAgp1.IdAgrup1 left join dbo.Produccion_Agrup2 ProAgp2
		on AuditInv.IdProdAgrup2=ProAgp2.IdAgrup2
		where AuditInv.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Auditoria Cuentas
	--//
	select @rows = count(*) from dbo.Audit_Cuentas where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Cuentas
		SET AdNomCuentaTipo=NomCuentaTipo,AdNomClasif=NomClasif,AdNomGrupoCuenta=NomGrupoCuenta,AdNomTipoPuc=NomTipoPuc,
		Sist_EsProcesado=1
		from dbo.Audit_Cuentas AuditCuent left join dbo.Cuentas_Tipos cuenTipo
		on AuditCuent.IdCuentaTipo=cuenTipo.IdCuentaTipo left join dbo.Cuentas_Clasificacion clasif
		on AuditCuent.IdClasif=clasif.IdClasif left join dbo.Cuentas_Grupos grupo
		on AuditCuent.IdGrupoCuenta=grupo.IdGrupoCuenta left join dbo.Cuentas_TiposPuc tipoPuc
		on AuditCuent.IdTipoPuc=tipoPuc.IdTipoPuc
		where AuditCuent.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//
		
	--Auditoria Prospectos
	--//
	select @rows = count(*) from dbo.Audit_ClientesProspectos where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_ClientesProspectos
		set AdNomcliente1= cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomCiudad=ci.NomCiudad, AdNomEstado=cliprosest.NomEstado, AdNomGrupo=cliprosgrup.NomGrupo, AdNomMedio=cliprosmedios.NomMedio,AdNomProducto=cliprospro.NomProducto,
		AdNomClienteConv=cliconv.Identificacion+'-'+cliconv.Nombre1+' '+COALESCE(cliconv.Nombre2,'')+' '+COALESCE(cliconv.Apellido1,'')+' '+COALESCE(cliconv.Apellido2,''),
		Sist_EsProcesado=1,AdNomUsuario=Usu.NomUsuario,AdNomProductoComp=propComp.NomProductoComp,
		AdNomcliente2 = cli2.IdCliente
		from dbo.Audit_ClientesProspectos AuditPros left join dbo.Clientes cli
		on AuditPros.IdCliente1=cli.IdCliente left join dbo.Ciudades ci
		on AuditPros.IdCiudad=ci.IdCiudad left join dbo.Clientes_Prospectos_Estados cliprosest
		on AuditPros.IdEstado=cliprosest.IdEstado left join dbo.Clientes_Prospectos_Grupos cliprosgrup
		on AuditPros.IdGrupo=cliprosgrup.IdGrupo left join dbo.Clientes_Prospectos_Medios cliprosmedios
		on AuditPros.IdMedio=cliprosmedios.IdMedio left join dbo.Clientes_Prospectos_Productos cliprospro
		on AuditPros.IdProducto=cliprospro.IdProducto left join dbo.Clientes cliconv
		on AuditPros.IdClienteConv=cliconv.IdCliente left join dbo.Usuarios Usu
		on AuditPros.IdUsuario=Usu.IdUsuario left join dbo.Clientes_Prospectos_Productos_Comp propComp
		on AuditPros.IdProductoComp=propComp.IdProductoComp left join dbo.Clientes cli2
		on AuditPros.IdCliente2=cli2.IdCliente
		where AuditPros.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Auditoria Automotores
	--//
	select @rows = count(*) from dbo.Audit_Automotores where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Automotores
		SET AdNomMarca=NomMarca,AdNomAgrup=NomAgrup,AdNomUnidad=NomUnidad,AdNomServicio=NomInventario,
		AdNomCliente= cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		Sist_EsProcesado=1
		from [dbo].[Audit_Automotores] auditAut left join [dbo].[Reparacion_Marcas] Marca
		on auditAut.IdMarca=Marca.IdMarca left join [dbo].[Reparacion_Automotores_Agrup] Agrup
		on auditAut.IdAgrup=Agrup.IdAgrup left join [dbo].[Inventarios_Unidades] Uni
		on auditAut.IdUnidad=Uni.IdUnidad left join [dbo].[Inventarios] Inv
		on auditAut.IdServicio=Inv.IdInventario left join dbo.Clientes cli
		on auditAut.IdCliente=cli.IdCliente
		where auditAut.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Mantenimientos Registros
	--//
	select @rows = count(*) from dbo.Audit_Mantenimientos_Registros where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Mantenimientos_Registros
		SET AdNomTipoMant=NomTipoMant,AdNomAutomotor=NomAutomotor,AdNomUnidad=NomUnidad,
		Sist_EsProcesado=1
		from [dbo].[Audit_Mantenimientos_Registros] AuditReg left join  [dbo].[Reparacion_Automotores_Mant_Tipos] tipo
		on AuditReg.IdTipoMant=tipo.IdTipoMant left join [dbo].[Reparacion_Automotores] autom
		on AuditReg.IdAutomotor=autom.IdAutomotor left join [dbo].[Inventarios_Unidades] Uni
		on AuditReg.IdUnidad=Uni.IdUnidad
		where AuditReg.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//
	
	--Auditoria Tickets
	--//
	select @rows = count(*) from dbo.Audit_Tickets where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Tickets
		SET AdNomCliente=cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomAgrup1=agrup1.NomAgrup1,AdNomAgrup2=agrup2.NomAgrup2, AdNomEstado=NomEstado,
		AdNomResponsable=cli2.Identificacion+'-'+cli2.Nombre1+' '+COALESCE(cli2.Nombre2,'')+' '+COALESCE(cli2.Apellido1,'')+' '+COALESCE(cli2.Apellido2,''),
		Sist_EsProcesado=1
		from [dbo].[Audit_Tickets] as audiTicket inner join 
		Clientes as cli on audiTicket.IdCliente=cli.IdCliente left join
		[dbo].[Tickets_Agrup1] as agrup1 on audiTicket.IdAgrup1=agrup1.IdAgrup1 left join
		[dbo].[Tickets_Agrup2] as agrup2 on audiTicket.IdAgrup2=agrup2.IdAgrup2 inner join
		[dbo].[Tickets_Estados] as Estado on audiTicket.IdEstado= Estado.IdEstado inner join 
		Clientes as cli2 on audiTicket.IdResponsable=cli2.IdCliente
		where audiTicket.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

  --Actualizar con la fecha del final de la actualizacion
  --//
  update Parametros set ValParametro = CONVERT(VARCHAR(20), GETDATE(), 120) where CodParametro = -30
  --//
	
  exec sp_releaseapplock @Resource = @nomProceso,
						 @LockOwner = 'Session'

  IF @@error <> 0 GOTO ERR_HANDLER

    set @Exito = 1
    return
    
ERR_HANDLER:
	set @Exito = 0
	exec sp_releaseapplock @Resource = @nomProceso,
						   @LockOwner = 'Session'

END
GO
PRINT N'Altering Procedure [dbo].[CalcularCostoPromedio]...';
IF OBJECT_ID(N'dbo.CalcularCostoPromedio', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[CalcularCostoPromedio] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[CalcularCostoPromedio]
@FechaFin NVARCHAR(10) = '',
	@IdInventario INT = 0,
	@EsTodo BIT=1
As
BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON;

DECLARE 

@FechaFinT DATETIME,
@IdEncabMov INT,
@tCantConFactor NUMERIC(28,6),
@tFactorCosto INT,
@tFactorInv INT,
@tConsecutivo INT,
@tValorUnit NUMERIC(24,8),
@tDcto NUMERIC(28,6),
@tMov2 NUMERIC(28,6),
@tAcumCant NUMERIC(28,6),
@tAcumCostoPromNew NUMERIC(28,6),
@tAcumCosto NUMERIC(28,6),
@tAcumCostoPromOld NUMERIC(28,6),
@tFechaCorte DATETIME,
@IdEncabMovLast INT,
@tCostoAdicional NUMERIC(28,6),
@tOrden INT



--Fecha fin corte
SET @FechaFinT = CAST(CONVERT(DATETIME, @FechaFin, 103) + ' 23:59:59' AS DATETIME)

--Obtener registro ultimo corte
select top(1) @tFechaCorte=FechaCorteFin,@tAcumCant=CantAcum,@tAcumCosto=CostoAcum,@tAcumCostoPromOld=CostoProm,@tOrden=Orden
from dbo.Encabezados_Mov_CostoProm_Historicos hist inner join dbo.Encabezados_Mov mov
on hist.IdEncabMov=mov.IdEncabMov
where IdInventario=@IdInventario and FechaCorteFin<@FechaFinT 
order by FechaCorteFin desc

set @tFechaCorte=dateadd(second,1,@tFechaCorte)

--Eliminar los movimientos que no deben estar los que no sean productos y esten anulados y que no afecten inventario
--//
DELETE FROM Encabezados_Mov_CostoProm 
FROM    
dbo.Encabezados AS Enc INNER JOIN
dbo.Encabezados_Mov AS EncMov ON Enc.IdEncab = EncMov.IdEncab INNER JOIN
dbo.Encabezados_Mov_CostoProm AS EncMovCP ON EncMov.IdEncabMov = EncMovCP.IdEncabMov INNER JOIN
dbo.Inventarios AS Inv ON EncMov.IdInventario = Inv.IdInventario INNER JOIN
dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE 
(Enc.EsAnulado = 1 OR Doc.FactorInventario = 0 OR EncMov.FactorMovim = 0 OR Inv.IdTipoInv <> 1 ) AND EncMov.IdInventario = @IdInventario
and Fecha between coalesce(@tFechaCorte,Fecha) and @FechaFinT
--//


--Eliminar los movimientos historicos eliminados que no afectan el nuevo costeo
delete from [dbo].[Encabezados_Mov_CostoProm_Eliminados]
where Fecha between coalesce(@tFechaCorte,Fecha) and @FechaFinT

--Insertar en la tabla de costo promedio los movimientos
--//
INSERT INTO Encabezados_Mov_CostoProm (IdEncabMov, CostoProm, CantAcum, CostoAcum)
SELECT EncMov.IdEncabMov, 0, 0, 0
FROM
dbo.Encabezados AS Enc INNER JOIN
dbo.Encabezados_Mov AS EncMov ON Enc.IdEncab = EncMov.IdEncab INNER JOIN
dbo.Inventarios AS Inv ON EncMov.IdInventario = Inv.IdInventario INNER JOIN
dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE 
Enc.EsAnulado = 0 AND Doc.FactorInventario <> 0 AND EncMov.FactorMovim <> 0 AND Inv.IdTipoInv = 1 AND  Inv.IdInventario = @IdInventario AND
EncMov.IdEncabMov NOT IN(SELECT EncMov_Costo.IdEncabMov FROM dbo.Encabezados_Mov AS EncMov INNER JOIN dbo.Encabezados_Mov_CostoProm AS EncMov_Costo ON EncMov.IdEncabMov = EncMov_Costo.IdEncabMov WHERE EncMov.IdInventario = @IdInventario)
and Fecha between coalesce(@tFechaCorte,Fecha) and @FechaFinT
--//

  
SET @tAcumCant = coalesce(@tAcumCant,0)
SET @tAcumCosto = coalesce(@tAcumCosto,0)
SET @tConsecutivo = 0
SET @tAcumCostoPromOld = coalesce(@tAcumCostoPromOld,0)
SET @tConsecutivo = coalesce(@tOrden,0)

DECLARE CostoProm CURSOR FOR
SELECT EncMov.IdEncabMov, Doc.FactorCostoPromedio * EncMov.FactorCostoPromedio, EncMov.Cantidad * EncMov.FactorCantidad * EncMov.FactorMovim * Doc.FactorInventario AS CantConFactor,EncMov.ValorUnitario,(EncMov.ValorUnitario*EncMov.Cantidad*EncMov.Dcto/100)as Dcto,
Doc.FactorInventario,
CASE WHEN CostoPromTipo=1 THEN (CostoPromValor * EncMov.Cantidad * EncMov.FactorCantidad * Doc.FactorInventario) ELSE CostoPromValor END  AS TotCostoPromValor
FROM
dbo.Encabezados AS Enc INNER JOIN
dbo.Encabezados_Mov AS EncMov ON Enc.IdEncab = EncMov.IdEncab INNER JOIN
dbo.Inventarios AS Inv ON EncMov.IdInventario = Inv.IdInventario INNER JOIN
dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE Enc.EsAnulado = 0 AND Doc.FactorInventario <> 0 AND EncMov.FactorMovim <> 0 AND Inv.IdTipoInv = 1 AND Inv.IdInventario = @IdInventario
and Fecha between coalesce(@tFechaCorte,Fecha) and @FechaFinT
ORDER BY Cast(Enc.Fecha as date), (Doc.FactorInventario  * EncMov.FactorMovim) DESC, EncMov.IdEncabMov ASC

OPEN CostoProm

FETCH NEXT FROM CostoProm INTO @IdEncabMov, @tFactorCosto, @tCantConFactor, @tValorUnit, @tDcto,@tFactorInv,@tCostoAdicional


WHILE @@FETCH_STATUS = 0
BEGIN
    SET @tConsecutivo = @tConsecutivo + 1;

    UPDATE Encabezados_Mov_CostoProm SET Orden = @tConsecutivo WHERE IdEncabMov = @IdEncabMov

	IF @tFactorCosto = 1
		SET @tMov2 = (@tValorUnit * @tCantConFactor) - (case when @tCantConFactor>=0 then 1 else -1 end * @tDcto) + coalesce(@tCostoAdicional,0)
	ELSE
		SET @tMov2 = @tAcumCostoPromOld * @tCantConFactor

	SET @tAcumCant = @tAcumCant + @tCantConFactor 
	SET @tAcumCosto = @tAcumCosto + @tMov2
	
	IF @tFactorCosto = 1 AND @tAcumCant <> 0
		SET @tAcumCostoPromNew = @tAcumCosto / @tAcumCant
	ELSE
		SET @tAcumCostoPromNew = @tAcumCostoPromOld

	UPDATE Encabezados_Mov_CostoProm 
	SET
	CostoProm = COALESCE(@tAcumCostoPromNew,0),
	CantAcum = @tAcumCant,
	CostoAcum = @tAcumCosto
	WHERE IdEncabMov = @IdEncabMov

	SET @tAcumCostoPromOld = @tAcumCostoPromNew
	set @IdEncabMovLast=@IdEncabMov
	

	FETCH NEXT FROM CostoProm INTO @IdEncabMov, @tFactorCosto, @tCantConFactor, @tValorUnit,@tDcto,@tFactorInv,@tCostoAdicional
END

CLOSE CostoProm
DEALLOCATE CostoProm

--Update campos auditoria
update Encabezados_Mov_CostoProm
set H_IdInventario=IdInventario,H_Cantidad=Cantidad,H_FactorCantidad=FactorCantidad,H_FactorMovim=FactorMovim,
H_ValorUnitario=ValorUnitario,H_Dcto=Dcto,H_CostoPromValor=CostoPromValor,H_EsAnulado=EsAnulado,H_CostoPromTipo=CostoPromTipo
from
(
SELECT prom.IdEncabMov,IdInventario,Cantidad,FactorCantidad,FactorMovim,ValorUnitario,Dcto,CostoPromValor,EsAnulado,CostoPromTipo
from dbo.Encabezados_Mov_CostoProm as prom inner join dbo.Encabezados_Mov as mov
on prom.IdEncabMov=mov.IdEncabMov inner join Encabezados enc on
mov.IdEncab=enc.IdEncab inner join Documentos doc  on enc.IdDocumento=doc.IdDocumento
WHERE mov.IdInventario = @IdInventario and Fecha between coalesce(@tFechaCorte,Fecha) and @FechaFinT
)as q1
WHERE Encabezados_Mov_CostoProm.IdEncabMov=q1.IdEncabMov


if(@IdEncabMov is not null)
begin
--Eliminar historico si ya existe
delete from dbo.Encabezados_Mov_CostoProm_Historicos
where FechaCorteFin=@FechaFinT and
IdEncabMov in (select IdEncabMov from dbo.Encabezados_Mov where IdInventario=@IdInventario)
or IdEncabMov=@IdEncabMovLast

--Insertar movimiento historico
INSERT INTO dbo.Encabezados_Mov_CostoProm_Historicos (IdEncabMov, CostoProm, CantAcum, CostoAcum,FechaCorteFin,FechaCorteIni,EsTodo,Orden)
values(@IdEncabMovLast,COALESCE(@tAcumCostoPromNew,0),@tAcumCant,@tAcumCosto,@FechaFinT,@tFechaCorte,@EsTodo,@tConsecutivo)
end


END
GO
PRINT N'Altering Procedure [dbo].[CalcularCostoPromedioGeneral]...';
IF OBJECT_ID(N'dbo.CalcularCostoPromedioGeneral', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[CalcularCostoPromedioGeneral] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE CalcularCostoPromedioGeneral
	@FechaFin NVARCHAR(10) = '',
	@IdInvent int=null,
	@EsTodo BIT=1
AS

BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON;

DECLARE

@IdInventarioT INT,
@FechaFinT DATETIME,
@tCountReg INT=0,
@RegAcum INT,
@tValorTot INT

SET @FechaFinT = CAST(CONVERT(DATETIME, @FechaFin, 103) + ' 23:59:59' AS DATETIME)

--Eliminar los movimientos que no deben estar los que no sean productos y esten anulados y que no afecten inventario
--//
DELETE FROM [Encabezados_Mov_CostoProm_Historicos]
FROM    
dbo.Encabezados AS Enc INNER JOIN
dbo.Encabezados_Mov AS EncMov ON Enc.IdEncab = EncMov.IdEncab INNER JOIN
dbo.[Encabezados_Mov_CostoProm_Historicos] AS EncMovCPHis ON EncMov.IdEncabMov = EncMovCPHis.IdEncabMov INNER JOIN
dbo.Inventarios AS Inv ON EncMov.IdInventario = Inv.IdInventario INNER JOIN
dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE
Enc.EsAnulado = 1 OR Doc.FactorInventario = 0 OR EncMov.FactorMovim = 0 OR Inv.IdTipoInv <> 1
and EncMov.IdInventario= COALESCE(@IdInvent,EncMov.IdInventario)

DELETE FROM Encabezados_Mov_CostoProm
FROM    
dbo.Encabezados AS Enc INNER JOIN
dbo.Encabezados_Mov AS EncMov ON Enc.IdEncab = EncMov.IdEncab INNER JOIN
dbo.Encabezados_Mov_CostoProm AS EncMovCP ON EncMov.IdEncabMov = EncMovCP.IdEncabMov INNER JOIN
dbo.Inventarios AS Inv ON EncMov.IdInventario = Inv.IdInventario INNER JOIN
dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE
Enc.EsAnulado = 1 OR Doc.FactorInventario = 0 OR EncMov.FactorMovim = 0 OR Inv.IdTipoInv <> 1
and EncMov.IdInventario= COALESCE(@IdInvent,EncMov.IdInventario)
--//


--Insertar parametro de seguimiento
delete from dbo.Parametros
where CodParametro=-10

INSERT INTO dbo.Parametros (CodParametro, NomParametro, ValParametro, Descripcion, Grupo, EsActivo, IdTipoControl)
  VALUES (-10, N'Costo Prom en Proceso', N'0,'+CONVERT(VARCHAR(20), GETDATE(), 120), N'Costo Promedio en Proceso', N'Documentos', 1, 1)

select @tCountReg=COUNT(*)
from
(SELECT DISTINCT Inv.IdInventario
FROM Inventarios as Inv 
INNER JOIN Encabezados_Mov as EncMov ON inv.IdInventario = EncMov.IdInventario
INNER JOIN Encabezados as Enc ON EncMov.IdEncab = Enc.IdEncab
INNER JOIN dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE 
Enc.EsAnulado = 0 AND 
Doc.FactorInventario <> 0 AND 
EncMov.FactorMovim <> 0 AND
Inv.IdTipoInv = 1 AND 
Enc.Fecha <= @FechaFinT
and EncMov.IdInventario= COALESCE(@IdInvent,EncMov.IdInventario)
 )as q 
  
SET @RegAcum=0

DECLARE curCostoProm CURSOR FOR
SELECT DISTINCT Inv.IdInventario
FROM Inventarios as Inv 
INNER JOIN Encabezados_Mov as EncMov ON inv.IdInventario = EncMov.IdInventario
INNER JOIN Encabezados as Enc ON EncMov.IdEncab = Enc.IdEncab
INNER JOIN dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE 
Enc.EsAnulado = 0 AND 
Doc.FactorInventario <> 0 AND 
EncMov.FactorMovim <> 0 AND
Inv.IdTipoInv = 1 AND 
Enc.Fecha <= @FechaFinT
and EncMov.IdInventario= COALESCE(@IdInvent,EncMov.IdInventario)

OPEN curCostoProm

FETCH FROM curCostoProm INTO @IdInventarioT

WHILE @@FETCH_STATUS = 0
BEGIN
	EXEC dbo.CalcularCostoPromedio @FechaFin = @FechaFin, @IdInventario = @IdInventarioT,@EsTodo=@EsTodo
	
	--Calculo parametro de seguimiento
	set @RegAcum=@RegAcum+1
	set @tValorTot=(@RegAcum *100/@tCountReg)
	update dbo.Parametros
	set ValParametro=(cast(@tValorTot as nvarchar(20))+','+CONVERT(VARCHAR(20), GETDATE(), 120))
	where CodParametro=-10
	
	FETCH NEXT FROM curCostoProm INTO @IdInventarioT
	
	
END
CLOSE curCostoProm
DEALLOCATE curCostoProm

delete from dbo.Parametros
where CodParametro=-10

END
GO
PRINT N'Altering Procedure [dbo].[GetComisiones]...';
IF OBJECT_ID(N'dbo.GetComisiones', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetComisiones] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetComisiones]
	@IdEmpresas NVARCHAR(1000) = '',
	@FechaIni NVARCHAR(10) = '',
	@FechaFin NVARCHAR(10) = '',
	@IdDocs NVARCHAR(1000) = '',
    @IdEmpleado  NVARCHAR(max) = '',
    @IdProducto INT = NULL,
    @IdCliente INT = NULL,
    @TipoComi INT,
    @esCont INT,
    @conDcto BIT=0,
	@Detallar BIT = 0,
	@conIva BIT=0,
	@sinRecaudo BIT=0,
	@IdEncab INT= NULL,
	@EsFactorMov INT=NULL,
	@TipoVend INT=1 ,
	@TipoValorComiVenta INT=1
AS
BEGIN
    
DECLARE

@FechaIniT DATETIME,
@FechaFinT DATETIME,
@ctrRecuado INT=-1,
@IdNotCre INT=15,
@conNotCre INT= NULL,
@SepCuenta nvarchar(50),
@CodCuenta nvarchar(50)='',
@CodAgrup nvarchar(50)=''


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SET NOCOUNT ON;	

SET @FechaIniT = CAST(CONVERT(DATETIME, @FechaIni, 103) + ' 00:00:00' AS DATETIME)
SET @FechaFinT = CAST(CONVERT(DATETIME, @FechaFin, 103) + ' 23:59:59' AS DATETIME)

-- No incluir documentos sin recaudo
IF  @sinRecaudo=0 and @esCont=1
SET @ctrRecuado=0 

IF @IdNotCre NOT IN(select nstr from iter$charlist_to_tbl(@IdDocs,DEFAULT))
set @conNotCre=15


SELECT @SepCuenta = ValParametro FROM PARAMETROS WHERE CodParametro = 167

if @SepCuenta is not null
BEGIN
SELECT @CodAgrup=nstr from iter$charlist_to_tbl(@SepCuenta,DEFAULT) where listpos=1
SELECT @CodCuenta=nstr from iter$charlist_to_tbl(@SepCuenta,DEFAULT) where listpos=2
set @CodAgrup=replace(@CodAgrup,'*','')
END

SELECT IdEncab,PropIva,IdCuenta,IdEncabcont,ISNULL(Valor,0)Valor,Fecha,IdDocumento
into #tmpCont
FROM
(
	SELECT IdEncab, MAX(ISNULL(PropIva,0))as PropIva,MAX(IdCuenta) as IdCuenta,MAX(IdEncabcont)as IdEncabcont, SUM((Debito - Credito) * CASE WHEN Tipo = 1 THEN Factor ELSE - 1 END) as Valor,MAX(Fecha)as Fecha,MAX(IdDocumento)AS IdDocumento
	FROM
	(
		SELECT Enc.IdEncab, Enc.IdDocumento,Enc.IdPrefijo, EncCont.DocReferencia,Doc.CodDocumento,Enc.NumDocumento, Doc.CodDocumento + N' ' + ISNULL (Enc.IdPrefijo, N'') + CAST(Enc.NumDocumento AS NVARCHAR) + N' ' + ISNULL (EncCont.DocReferencia, N'') AS Descripcion, EncCont.Credito, EncCont.Debito, Enc.IdMoneda, EncCont.IdCliente, Enc.Fecha, CreditoIva as PropIva, tipo,Factor,EncCont.IdCuenta,IdEncabcont, CASE WHEN Doc.FactorInventario = 0 THEN 1 ELSE Doc.FactorInventario * - 1 END AS FactorInv
		FROM            
		(
			SELECT encCont.IdEncab, SUM(encCont.Credito) AS CreditoIva, SUM(encCont.Debito) AS DebitoIva
            FROM            
			dbo.Encabezados_Cont AS encCont INNER JOIN
			dbo.Cuentas AS Cuent ON encCont.IdCuenta = Cuent.IdCuenta
            WHERE        (Cuent.IdGrupoCuenta = 5)
            GROUP BY encCont.IdEncab
		) 
		AS q RIGHT OUTER JOIN
        dbo.Encabezados_Cont AS EncCont ON EncCont.IdEncab = q.IdEncab INNER JOIN
        dbo.Encabezados AS Enc ON EncCont.IdEncab = Enc.IdEncab INNER JOIN
        dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento INNER JOIN
		dbo.cuentas as cuen on cuen.IdCuenta=EncCont.IdCuenta INNER JOIN
        dbo.Cuentas_Tipos AS Cta_T ON cuen.IdCuentaTipo = Cta_T.IdCuentaTipo INNER JOIN
        dbo.Cuentas_Clases AS Cta_C ON Cta_T.IdClase = Cta_C.IdClase 
		WHERE  (CodCuenta=@CodCuenta or CodCuenta like @CodAgrup+'%' ) and (Enc.EsAnulado = 0) 
		--and EncCont.IdEncab not in (select IdEncab from VIdAbonaDoc_02) 
		and Fecha BETWEEN @FechaIniT AND @FechaFinT AND
		Enc.IdEmpresa IN(select number from iter$simple_intlist_to_tbl(@IdEmpresas)) AND
		Enc.IdDocumento IN(select nstr from iter$charlist_to_tbl(@IdDocs,DEFAULT))
	)
	AS q
	GROUP by IdEncab
) AS q1


SELECT Enc.IdEncab, Enc.IdCliente1, CASE WHEN @TipoVend=2 THEN  Enc.IdClienteVend2 ELSE COALESCE (VEncMov.IdVendedorMov, Enc.IdClienteVend) END AS IdClienteVend, VEncMov.IdInventario, SUM(VEncMov.ValorDcto) AS TotDcto, SUM(VEncMov.SubIVA) AS TotIva, SUM(VEncMov.SubTotalSinDcto) AS TotSubTotSinDcto, SUM(VEncMov.SubTotal) AS TotSubTotal, SUM(VEncMov.CantConFactor) AS TotCantConFactor, SUM(VEncMov.ValorUnitario) AS TotValorUnitario, VEncMov.IdCentroCosto, VEncMov.EsFactorMov, VEncMov.IdLote, SUM(VEncMov.ValorImptoConsumoMov) AS TotalImptoConsumoMov, MAX(Doc.CodDocumento) AS CodDocumento, MAX(Doc.FactorInventario) AS FactorInventario, SUM(VEncMov.SubTotal)+SUM(VEncMov.SubIVA) as TotSubTotConIva
into #tmpVend
FROM            
dbo.Encabezados AS Enc INNER JOIN 
dbo.VMov_Factor AS VEncMov ON Enc.IdEncab = VEncMov.IdEncab INNER JOIN
dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE        
(Enc.EsAnulado = 0)
GROUP BY Enc.IdCliente1, 
CASE WHEN @TipoVend=2 THEN  Enc.IdClienteVend2 ELSE COALESCE (VEncMov.IdVendedorMov, Enc.IdClienteVend) END, 
Enc.IdEncab, 
VEncMov.IdInventario, 
VEncMov.IdCentroCosto, 
VEncMov.EsFactorMov, 
VEncMov.IdLote

--Crear tabla temporal de comisiones y agregar indice para incrementar rendimiento
--//
SELECT * INTO #VIdAbonaComisiones FROM VIdAbonaComisiones 
CREATE NONCLUSTERED INDEX [IX_#VIdAbonaComisiones] ON #VIdAbonaComisiones([IdEncab] ASC)
--//

SELECT q3.*,Cli2.Identificacion as Cli2Identificacion, 
Cli2.Nombres as Cli2Nombres,
Cli2.Apellidos as Cli2Apellidos, 
LTRIM(RTRIM(Cli2.Nombres + ' ' + Cli2.Apellidos)) AS Cli2NomCompleto,
Cli1.Identificacion as Cli1Identificacion, 
LTRIM(RTRIM(Cli1.Nombres + ' ' + Cli1.Apellidos)) AS Cli1NomCompleto,
NomAgrup1,NomPrefijo,NomSucursal,EmpresaNombre,
case when iditem=0 then '111' else iditem end IdItemFinal
from
(
SELECT 
IdClienteVend,
CASE WHEN @TipoComi in (5,3,7,9) THEN IdInventario ELSE NULL END IdInventario,
CASE WHEN @TipoComi in (5,3,7,9) THEN NombreInventario ELSE NULL END NombreInventario,
CASE WHEN @TipoComi=2 THEN IdAgrup1 ELSE NULL END IdAgrup1,
TotDcto,
TotIva,
TotSubTotSinDcto,
TotSubTotal,
TotCantConFactor,
TotValorUnitario,
MAX(ValorComisionVentas)ValorComisionVentas,
MAX(PorcComisionVentas)PorcComisionVentas,
MAX(ValorComisionRecaudo)ValorComisionRecaudo,
MAX(PorcComisionRecaudo)PorcComisionRecaudo,
MAX(ValorComisionRecaudoCont)ValorComiRecCont,
MAX(PorcComisionRecaudoCont)PorcComiRecCont,
(CASE WHEN @esCont=1 or @Detallar=1  THEN IdEncab ELSE NULL END)IdEncab,
(CASE WHEN @esCont=1  THEN IdCuenta ELSE NULL END)IdCuenta,
(CASE WHEN @esCont=1  THEN IdAbonaDoc ELSE NULL END)IdAbonaDoc,
ISNULL((CASE WHEN @esCont=1  THEN ISNULL(ValorRecaudo,ValorRecaudoSinAbona) ELSE NULL END),0)ValorRecaudo,
(CASE WHEN @esCont=1 or @Detallar=1 THEN CodDocumento ELSE NULL END)CodDocumento,
(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN IdEmpresa ELSE NULL END)IdEmpresa,
(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN IdPrefijo  ELSE NULL END)IdPrefijo,
(CASE WHEN @esCont=1 or @Detallar=1  THEN NumDocumento ELSE NULL END)NumDocumento,
(CASE WHEN @esCont=1 or @Detallar=1  THEN fecha ELSE NULL END)fecha,
(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi in(7,8,9,10)  THEN IdCliente1 ELSE NULL END)IdCliente1,
(CASE WHEN @TipoComi=11 THEN IdSucursal ELSE NULL END)IdSucursal,
@TipoComi as TipoComi,@TipoVend as TipoVend,
(CASE WHEN @TipoValorComiVenta=1 THEN MAX(ISNULL(PorcComisionVentas,0)) ELSE MAX(ISNULL(ValorComisionVentas,0)) END)ComisionVentasTotal,
(CASE WHEN @esCont=1 THEN max(ISNULL(IdItemRecaudoCont,'')) ELSE max(ISNULL(IdItemVentas,'')) END) AS IdItem
FROM
(
--	-- Consulta para hallar valores y porcentajes de comision
	SELECT 
	IdClienteVend,
	IdInventario,
	IdAgrup1, 
	(CodInventario+' '+NomInventario) AS NombreInventario,
	TotDcto,
	TotIva,
	TotSubTotSinDcto,
	TotSubTotal,
	TotCantConFactor,
	TotValorUnitario,
	IdEncab,
	ValorRecaudo,
	ValorRecaudoSinAbona,
	CodDocumento,
	NumDocumento,
	fecha,
	IdCuenta,
	IdAbonaDoc,
	IdPrefijo,
	IdCliente1,
	IdEmpresa,
	IdSucursal,
	CASE WHEN ValorBase between BaseEntreVentas and BaseHastaVentas THEN ValorComisionVentas ELSE 0 END AS ValorComisionVentas,
	CASE WHEN ValorBase between BaseEntreVentas and BaseHastaVentas THEN ValorBase*(PorcComisionVentas/100) ELSE 0 END AS PorcComisionVentas,
	CASE WHEN ValorBase between BaseEntreRecaudo and BaseHastaRecaudo THEN ValorComisionRecaudo ELSE 0 END as ValorComisionRecaudo,
	CASE WHEN ValorBase between BaseEntreRecaudo and BaseHastaRecaudo THEN ValorBase*(PorcComisionRecaudo/100) ELSE 0 END AS PorcComisionRecaudo,
	CASE WHEN ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0) between BaseEntreRecaudoCont and BaseHastaRecaudoCont then ValorComisionRecaudoCont ELSE 0 END as ValorComisionRecaudoCont,
	CASE WHEN ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0) between BaseEntreRecaudoCont and BaseHastaRecaudoCont then ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0)*(PorcComisionRecaudoCont/100) ELSE 0 END AS PorcComisionRecaudoCont,
	CASE WHEN ValorBase between BaseEntreVentas and BaseHastaVentas THEN IdItemVentas ELSE 0 END IdItemVentas,
	CASE WHEN ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0) between BaseEntreRecaudoCont and BaseHastaRecaudoCont THEN IdItemRecaudoCont ELSE 0 END IdItemRecaudoCont
	from
		(
--		 --Consulta para escoger los rangos correspondientes
		SELECT 
		q.*,
		COALESCE (Vcomi.BaseEntre,Vcomi3.BaseEntre) BaseEntreVentas,
		ISNULL (Vcomi.BaseHasta,Vcomi3.BaseHasta) BaseHastaVentas,
		ISNULL (Vcomi.PorcComision,Vcomi3.PorcComision) PorcComisionVentas,
		ISNULL (Vcomi.ValorComision,Vcomi3.ValorComision) ValorComisionVentas,
		ISNULL (Vcomi2.BaseEntre,Vcomi4.BaseEntre) BaseEntreRecaudo,
		ISNULL (Vcomi2.BaseHasta,Vcomi4.BaseHasta) BaseHastaRecaudo,
		ISNULL (Vcomi2.PorcComision,Vcomi4.PorcComision) PorcComisionRecaudo,
		ISNULL (Vcomi2.ValorComision,Vcomi4.ValorComision) ValorComisionRecaudo,
		ISNULL (Vcomi5.BaseEntre,Vcomi6.BaseEntre) BaseEntreRecaudoCont,
		ISNULL (Vcomi5.BaseHasta,Vcomi6.BaseHasta) BaseHastaRecaudoCont,
		ISNULL (Vcomi5.PorcComision,Vcomi6.PorcComision) PorcComisionRecaudoCont,
		ISNULL (Vcomi5.ValorComision,Vcomi6.ValorComision) ValorComisionRecaudoCont,
		ISNULL(Vcomi.IdItem,Vcomi3.IdItem)IdItemVentas,
		ISNULL(Vcomi5.IdItem,Vcomi6.IdItem)IdItemRecaudoCont,
		(CASE WHEN @conDcto=1  THEN TotSubTotSinDcto ELSE
		(CASE WHEN @conIva=1 THEN TotSubTotConIva ELSE TotSubTotal END)END)ValorBase
		
		FROM
		(
--			 --Consulta para Valores totales deacuerdo al tipo de comision
			SELECT 
			IdClienteVend,
			CASE WHEN @TipoComi in (5,3,7,9) THEN IdInventario ELSE NULL END IdInventario,
			CASE WHEN @TipoComi in (5,3,7,9) THEN NomInventario ELSE NULL END NomInventario,
			CASE WHEN @TipoComi in (5,3,7,9) THEN CodInventario ELSE NULL END CodInventario,
			CASE WHEN @TipoComi=2 THEN IdAgrup1 ELSE NULL END IdAgrup1,
			(CASE WHEN @esCont=1  THEN MAX(TotDcto) ELSE sum(TotDcto) END)TotDcto,
			(CASE WHEN @esCont=1 THEN MAX(TotIva) ELSE sum(TotIva) END)TotIva,
			(CASE WHEN @esCont=1 THEN MAX(TotSubTotSinDcto) ELSE sum(TotSubTotSinDcto) END)TotSubTotSinDcto,
			(CASE WHEN @esCont=1 THEN MAX(TotSubTotal) ELSE sum(TotSubTotal) END)TotSubTotal,
			(CASE WHEN @esCont=1 THEN MAX(TotCantConFactor) ELSE sum(TotCantConFactor) END)TotCantConFactor,
			(CASE WHEN @esCont=1 THEN MAX(TotValorUnitario) ELSE sum(TotValorUnitario) END)TotValorUnitario,
			(CASE WHEN @esCont=1 THEN MAX(TotSubTotConIva) ELSE sum(TotSubTotConIva) END)TotSubTotConIva,
			(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.IdEncab ELSE NULL END)IdEncab,
			(CASE WHEN @esCont=1  THEN ISNULL(VIdAbon.IdCuenta,tmpCont.IdCuenta) ELSE NULL END)IdCuenta,
			(CASE WHEN @esCont=1  THEN ISNULL(VIdAbon.IdAbonaDoc,tmpCont.IdEncabCont) ELSE NULL END)IdAbonaDoc,
			(CASE WHEN @esCont=1  THEN (CASE WHEN @conIva=1 THEN sum(ISNULL(VIdAbon.Credito,1) * ISNULL(VIdAbon.FactorInv,1) * ISNULL(VIdAbon.FactorSaldo,1)) ELSE sum((ISNULL(VIdAbon.Credito,0)-ISNULL(VIdAbon.PropIva,0))*ISNULL(VIdAbon.FactorInv,1) * ISNULL(VIdAbon.FactorSaldo,1)) END)ELSE NULL END)ValorRecaudo,
			(CASE WHEN @esCont=1 THEN (CASE WHEN @conIva=1 THEN  sum(ISNULL(tmpCont.Valor,0)) ELSE sum(ISNULL(tmpCont.Valor,0)-ISNULL(tmpCont.PropIva,0)) END)ELSE NULL END)ValorRecaudoSinAbona,
		   	(CASE WHEN @esCont=1 or @Detallar=1 THEN qc.CodDocumento END)CodDocumento,
			(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN qc.IdPrefijo END)IdPrefijo,
			(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.NumDocumento ELSE NULL END)NumDocumento,
			(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.fecha ELSE NULL END)fecha,
			(CASE WHEN @esCont=1 or @Detallar=1 or  @TipoComi in(7,8,9,10)  THEN qc.IdCliente1 ELSE NULL END)IdCliente1,
			(CASE WHEN @TipoComi=11 THEN qc.IdSucursal END)IdSucursal,
			(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN qc.IdEmpresa END)IdEmpresa
			FROM
			(
			SELECT 
				V1.IdClienteVend as IdClienteVend,
				CASE WHEN @TipoComi in (5,3,7,9) THEN V1.IdInventario ELSE NULL END IdInventario,
				CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.NomInventario ELSE null END NomInventario,
				CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.CodInventario ELSE null END CodInventario,
				CASE WHEN @TipoComi=2 THEN Inv.IdAgrup1 ELSE NULL END IdAgrup1,
				sum(-(V1.TotDcto)*(isnull(@EsFactorMov,FactorInventario))) AS TotDcto,
				sum(-(V1.TotIva)*(isnull(@EsFactorMov,FactorInventario))) AS TotIva,
				sum(-(V1.TotSubTotSinDcto)*(isnull(@EsFactorMov,FactorInventario)))AS TotSubTotSinDcto,
				sum(-(V1.TotSubTotal)*(isnull(@EsFactorMov,FactorInventario)))AS TotSubTotal,
				sum(-(V1.TotCantConFactor)*(isnull(@EsFactorMov,FactorInventario)))AS TotCantConFactor,
				sum(-(V1.TotValorUnitario)*(isnull(@EsFactorMov,FactorInventario)))AS TotValorUnitario,
				sum(-(V1.TotSubTotConIva)*(isnull(@EsFactorMov,FactorInventario)))AS TotSubTotConIva,
				Enc.IdEncab,
				Enc.IdDocumento,
				Enc.NumDocumento,
				Enc.IdPrefijo,CodDocumento,
				V1.IdCliente1 as IdCliente1,
				enc.Fecha,enc.IdEmpresa,enc.IdSucursal
			FROM 
				#tmpVend AS V1 INNER JOIN
				dbo.Encabezados AS Enc ON V1.IdEncab = Enc.IdEncab  INNER JOIN
				dbo.Inventarios AS Inv ON V1.IdInventario = Inv.IdInventario
				WHERE  
				Enc.IdEmpresa IN(select number from iter$simple_intlist_to_tbl(@IdEmpresas)) AND
				Enc.IdDocumento IN(select nstr from iter$charlist_to_tbl(@IdDocs,DEFAULT)) AND
				(@IdEmpleado is null OR V1.IdClienteVend IN(select number from iter$simple_intlist_to_tbl(isnull(@IdEmpleado,''))))AND
				(@IdProducto is null OR V1.IdInventario=@IdProducto)AND
			    (@IdCliente is null OR V1.IdCliente1=@IdCliente)AND
			    (Enc.Fecha BETWEEN @FechaIniT AND @FechaFinT OR  @esCont=1) AND
				(@IdEncab is null OR V1.IdEncab=@IdEncab)

			GROUP BY V1.IdClienteVend,Enc.IdEncab,Enc.IdDocumento,
				CodDocumento,Enc.NumDocumento,Enc.IdPrefijo,V1.IdCliente1,enc.Fecha,enc.IdEmpresa,enc.IdSucursal,
				(CASE WHEN @TipoComi in (5,3,7,9) THEN V1.IdInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.NomInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.CodInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.NomInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.CodInventario END),
				(CASE WHEN @TipoComi=2  THEN Inv.IdAgrup1 END)

			)qc 
			-- Join para incluir parte contable
				LEFT OUTER JOIN
				#VIdAbonaComisiones as VIdAbon ON qc.IdEncab = VIdAbon.IdEncab and @esCont=1
				LEFT OUTER JOIN
				#tmpCont as tmpCont ON qc.IdEncab = tmpCont.IdEncab and @esCont=1
			WHERE 
			ISNULL(VIdAbon.Fecha,@FechaFinT) BETWEEN @FechaIniT AND @FechaFinT	AND
			ISNULL(VIdAbon.IdDocumentoAbona,-1) <> ISNULL(@conNotCre,0) AND
			ISNULL(tmpCont.Fecha,@FechaFinT) BETWEEN @FechaIniT AND @FechaFinT	AND
			ISNULL(tmpCont.IdDocumento,-1) <> ISNULL(@conNotCre,0)
			
			GROUP BY IdClienteVend,
				(CASE WHEN @TipoComi in (5,3,7,9) THEN IdInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN NomInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN CodInventario END),
				(CASE WHEN @TipoComi=2  THEN IdAgrup1 END),
				(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.IdEncab END),
				(CASE WHEN @esCont=1  THEN ISNULL(VIdAbon.IdAbonaDoc,tmpCont.IdEncabCont)END),
				(CASE WHEN @esCont=1  THEN ISNULL(VIdAbon.IdCuenta,tmpCont.IdCuenta) END),
				(CASE WHEN @esCont=1 or @Detallar=1 THEN qc.CodDocumento END),
				(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN qc.IdEmpresa END),
				(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN qc.IdPrefijo END),
				(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.NumDocumento END),
				(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.fecha END),
				(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi in(7,8,9,10)  THEN qc.IdCliente1 END),
				(CASE WHEN @TipoComi=11 THEN qc.IdSucursal END)

		) AS q 
			-- Join diferentes tipos de comision
			--JoinVentas
			left join dbo.VComisionPorCliVend Vcomi
			ON  ISNULL(Vcomi.IdTipo,1)=1 and Vcomi.EsEspecial=0 and (
	        (q.IdClienteVend=Vcomi.IdCliente and @TipoComi=4)
			or (q.IdClienteVend=Vcomi.IdCliente and q.IdInventario=Vcomi.IdInventario and q.IdCliente1=Vcomi.IdCliente2 and @TipoComi=7)
			or (q.IdCliente1=Vcomi.IdCliente2 and  @TipoComi=8)
			or (q.IdInventario=Vcomi.IdInventario and q.IdCliente1=Vcomi.IdCliente2 and @TipoComi=9 )
			or (q.IdClienteVend=Vcomi.IdCliente and q.IdCliente1=Vcomi.IdCliente2 and @TipoComi=10)
			or (q.IdClienteVend=Vcomi.IdCliente and q.IdInventario=Vcomi.IdInventario and @TipoComi=5 )
			or (q.IdAgrup1=Vcomi.IdAgrup1 and @TipoComi=2)
			or (q.IdInventario=Vcomi.IdInventario and @TipoComi=3)
			or (q.IdPrefijo=Vcomi.IdPrefijo and q.IdSucursal=Vcomi.IdSucursal and Vcomi.IdTipoVend=@TipoVend and @TipoComi=11 ))
			
			--Join Reacudo
			left join dbo.VComisionPorCliVend Vcomi2
			ON  ISNULL(Vcomi2.IdTipo,1)=1 and Vcomi2.EsEspecial=0 and (
	        (q.IdClienteVend=Vcomi2.IdCliente and @TipoComi=4)
			or (q.IdClienteVend=Vcomi2.IdCliente and q.IdInventario=Vcomi2.IdInventario and q.IdCliente1=Vcomi2.IdCliente2 and @TipoComi=7)
			or (q.IdCliente1=Vcomi2.IdCliente2 and  @TipoComi=8)
			or (q.IdInventario=Vcomi2.IdInventario and q.IdCliente1=Vcomi2.IdCliente2 and @TipoComi=9 )
			or (q.IdClienteVend=Vcomi2.IdCliente and q.IdCliente1=Vcomi2.IdCliente2 and @TipoComi=10)
			or (q.IdClienteVend=Vcomi2.IdCliente and q.IdInventario=Vcomi2.IdInventario and @TipoComi=5 )
			or (q.IdAgrup1=Vcomi2.IdAgrup1 and @TipoComi=2)
			or (q.IdInventario=Vcomi2.IdInventario and @TipoComi=3)
			or (q.IdPrefijo=Vcomi2.IdPrefijo and q.IdSucursal=Vcomi2.IdSucursal and Vcomi2.IdTipoVend=@TipoVend and @TipoComi=11 ))
			
		    --JoinVentas General
			inner join dbo.VComisionPorCliVend Vcomi3
			ON 
			Vcomi3.IdClase=@TipoComi and  ISNULL(Vcomi3.IdTipo,1)=1 and Vcomi3.EsEspecial=1
			
			--Join Reacudo General
			inner join dbo.VComisionPorCliVend Vcomi4
			ON 
			Vcomi4.IdClase=@TipoComi and ISNULL(Vcomi4.IdTipo,2)=2 and Vcomi4.EsEspecial=1

			--Parte contable
			left join dbo.VComisionPorCliVend Vcomi5
			ON (q.IdCuenta=Vcomi5.IdCuenta and @esCont=1)
			
			inner join dbo.VComisionPorCliVend Vcomi6
			ON (Vcomi6.IdClase=6)
			
			where 
			ISNULL(Vcomi3.IdTipo,1)=1 and ISNULL(Vcomi4.IdTipo,2)=2 AND
			ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0)>@ctrRecuado
			)as q1
			)as q2
				group by IdClienteVend,TotDcto,TotIva,TotSubTotSinDcto,TotSubTotal,TotCantConFactor,TotValorUnitario,
				(CASE WHEN @TipoComi in (5,3,7,9)  THEN IdInventario END),(CASE WHEN @TipoComi in (5,3,7,9) THEN NombreInventario END),
				(CASE WHEN @TipoComi=2 THEN IdAgrup1 END),
				(CASE WHEN @esCont=1 or @Detallar=1  THEN IdEncab END),
				(CASE WHEN @esCont=1  THEN IdCuenta END),
				(CASE WHEN @esCont=1  THEN IdAbonaDoc END),
				(CASE WHEN @esCont=1  THEN ISNULL(ValorRecaudo,ValorRecaudoSinAbona) END),
				(CASE WHEN @esCont=1 or @Detallar=1 THEN CodDocumento END),
			    (CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN IdEmpresa END),
				(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN IdPrefijo END),
				(CASE WHEN @esCont=1 or @Detallar=1 THEN NumDocumento END),
				(CASE WHEN @esCont=1 or @Detallar=1 THEN fecha END),
				(CASE WHEN @esCont=1 or @Detallar=1 or  @TipoComi in(7,8,9,10)   THEN IdCliente1 END),
			    (CASE WHEN @TipoComi=11 THEN IdSucursal END)
				) as q3 LEFT JOIN
				dbo.VClientes2 AS Cli1 ON q3.IdCliente1 = Cli1.IdCliente  LEFT  JOIN
				dbo.VClientes2 AS Cli2 ON q3.IdClienteVend = Cli2.IdCliente LEFT  JOIN
				dbo.Inventarios_Agrup1 AS Inv_Agrup1 ON q3.IdAgrup1 = Inv_Agrup1.IdAgrup1 
				LEFT JOIN
				dbo.Empresas AS emp ON emp.IdEmpresa = q3.IdEmpresa  LEFT  JOIN
				dbo.Sucursales  AS suc ON suc.IdSucursal=q3.IdSucursal  LEFT  JOIN
				dbo.Prefijos as pref ON pref.IdPrefijo=q3.IdPrefijo



END
GO
PRINT N'Altering Procedure [dbo].[GetMovimientosFactElec]...';
IF OBJECT_ID(N'dbo.GetMovimientosFactElec', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetMovimientosFactElec] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetMovimientosFactElec]
	@idEncab int
AS
BEGIN


	SELECT  
	ROW_NUMBER()OVER(PARTITION BY VEncMov.IdEncab ORDER BY VEncMov.IdEncabMov) AS numLineas, VEncMov.IdEncab, VEncMov.IdEncabMov, VEncMov.IdInventario, VEncMov.Cantidad, VEncMov.FactorCantidad, VEncMov.NomInventario, VEncMov.ValorUnitario, VEncMov.CodInventario, VEncMov.CodMoneda, VEncMov.IVAporc, VEncMov.ValorIva, ValorIvaExt, VEncMov.TipoImptoConsumo, VEncMov.ValorImptoConsumo, VEncMov.ValorImptoConsumoMov, VEncMov.ValorImptoConsumoMovExt, VEncMov.PorcentajeImpCon, VEncMov.Dcto, VEncMov.DctoFactor, VEncMov.ValorDcto, ValorDctoExt, VEncMov.SubTotalSinDcto, VEncMov.SubTotalSinDctoExt, VEncMov.TotalMovCal, VEncMov.TotalMovCalExt, VEncMov.SubTotalMov, VEncMov.SubTotalMovExt, VEncMov.ValorUnitarioConDcto, VEncMov.TotalMovMasIva, VEncMov.ValorUnitConIva, VEncMov.NotaMov, VEncMov.EsVisible, VEncMov.IdUnidadDIAN, VEncMov.CodUnidadDIAN, VEncMov.NomUnidadDIAN, VEncMov.CodUNSPSC, VEncMov.NotaLinea, VEncMov.NomAgrup1, VEncMov.NomAgrup2, VEncMov.ValorUnitarioUnidad, ValorUnitarioExt,
	  VEncMov.PrecioTotal, (Cantidad * ValorUnitarioExt - ValorDctoExt + ValorImptoConsumo + ValorIvaExt + ImptoSaludableValor) AS PrecioTotalExt, VEncMov.NomLote, VEncMov.VenceMov, VEncMov.FactorCantidad4,
	  VEncMov.ImptoSaludableTipo, VEncMov.ImptoSaludableValor, VEncMov.ImptoSaludableValorMov, VEncMov.ImptoSaludableValorMovExt

FROM VMovimientosFactElectronica AS VEncMov
WHERE VEncMov.IdEncab = @idEncab
END
GO
PRINT N'Altering Procedure [dbo].[GetCalcularDiasLiquidados]...';
IF OBJECT_ID(N'dbo.GetCalcularDiasLiquidados', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetCalcularDiasLiquidados] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE GetCalcularDiasLiquidados

@FechaIni DATE,
@FechaFin DATE,
@IdContrato NVARCHAR(MAX),
@DiasNomina NUMERIC(28,6)

AS
BEGIN

DECLARE

@FechaIniPeriodo DATE,
@FechaFinPeriodo DATE

SET @FechaIniPeriodo = DATEADD(DAY, 1, EOMONTH(@FechaIni, -1))
SET @FechaFinPeriodo = EOMONTH(@FechaFin)

;WITH tmpDaysLiquidated(IdCliente, IdContrato, LiquidatedDays, Descripcion) --Dias que ya fueron liquidados
AS
(
	SELECT s.IdCliente, s.IdContrato,
	CASE WHEN s.tDifContDias > 0 THEN @DiasNomina ELSE s.EstaEnRango * tDifContrato1 END tDifContrato,
	CASE WHEN s.tDifContDias <= 0 THEN 'Dias Contrato:' + CONVERT(NVARCHAR(20),s.EstaEnRango * tDifContrato1) + ' (' + CONVERT(NVARCHAR(20), s.FechaIni, 103) + '-' + CONVERT(NVARCHAR(20), s.tFin, 103) +')' ELSE NULL END AS Descripcion
	FROM 
	(
		SELECT 
		t.*,
		--Esta logica se debe mantener sincronizada con la funcion getDaysBetweenStartAndEnd()
		--en la clase BaseControlLiquidarNominaForm del proyecto Ziur.UI.Win
		CASE WHEN DAY(tInicio) = 16 AND tFin = @FechaFinPeriodo AND (MONTH(tInicio) = MONTH(tFin))
		THEN 15
		ELSE CASE WHEN DAY(tInicio) = 1 AND tFin = @FechaFinPeriodo AND (MONTH(tInicio) = MONTH(tFin))
		THEN 30
		ELSE DATEDIFF(DAY, tInicio, tFin) + 1 END END tDifContrato1,
		CASE WHEN DAY(tInicio) = 16 AND tFin = @FechaFinPeriodo AND (MONTH(tInicio) = MONTH(tFin)) 
		THEN 15
		ELSE CASE WHEN DAY(tInicio) = 1 AND tFin = @FechaFinPeriodo AND (MONTH(tInicio) = MONTH(tFin)) 
		THEN 30
		ELSE DATEDIFF(DAY, tInicio, tFin) + 1 - @DiasNomina END END tDifContDias
		--
		FROM 
		(
			SELECT 
			u.*,
			CASE WHEN u.tFin1<@FechaFin THEN u.tFin1 ELSE @FechaFin END AS tFin,
			CASE WHEN @FechaIni <= tFin1 and FechaIni <= @FechaFin THEN 1 ELSE 0 END as EstaEnRango
			FROM
			(
				SELECT 
				IdCliente, 
				IdContrato,
				FechaIni,
				FechaFin,
				CASE WHEN FechaIni>@FechaIni THEN FechaIni ELSE @FechaIni END AS tInicio, 
				COALESCE(FechaRetiro,FechaFin,@FechaFin) AS tFin1
				FROM Nomina_Contratos cont
				WHERE cont.IdContrato IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdContrato))
			) u
		) t
	) s


	UNION ALL

	--Dias Novedades
	SELECT q3.IdCliente, q3.IdContrato, -1*SUM(q3.Cantidad) AS Cantidad,
	(
		CASE WHEN SUM(q3.Cantidad) = 0 THEN NULL
		ELSE ('Novedades: ' + FORMAT(SUM(q3.Cantidad), '##,##')) END
	) AS Descripcion
	FROM
	(
		SELECT cont.IdCliente, cont.IdContrato, 
		(
			(DATEDIFF(DD, NoMo.FechaIniVac, NoMo.FechaFinVac) + 1) -
			CASE WHEN @FechaFin < NoMo.FechaIniVac OR @FechaIni > NoMo.FechaFinVac THEN (DATEDIFF(DD, NoMo.FechaIniVac, NoMo.FechaFinVac) + 1)
			ELSE
				( CASE WHEN @FechaIni > NoMo.FechaIniVac THEN DATEDIFF(DD, NoMo.FechaIniVac, @FechaIni) ELSE 0 END +
				CASE WHEN @FechaFin < NoMo.FechaFinVac THEN DATEDIFF(DD, @FechaFin, NoMo.FechaFinVac) ELSE 0 END )
			END
		) AS Cantidad
		FROM Nomina_Contratos cont
		INNER JOIN Nomina_Movimientos NoMo ON NoMo.IdContrato = cont.IdContrato
		INNER JOIN Nomina_Items NoIt ON NoIt.IdItem = NoMo.IdItem
		INNER JOIN Encabezados Enc ON  Enc.IdEncab = NoMo.IdEncab
		WHERE cont.IdContrato IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdContrato)) 
		AND FechaFinVac >= @FechaIniPeriodo AND FechaFinVac <= @FechaFinPeriodo
		AND NoIt.FactorProv = 1
		AND NoIt.IdClasif = 1
		AND Enc.EsAnulado = 0 
	) AS q3
	GROUP BY q3.IdCliente, q3.IdContrato

	UNION ALL

	--Dias Laborados
	SELECT q4.IdCliente, q4.IdContrato, -1*SUM(q4.Cantidad) AS Cantidad,
	(
		CASE WHEN SUM(q4.Cantidad) = 0 THEN NULL
		ELSE ('Dias Sueldo: ' + FORMAT(SUM(q4.Cantidad), '##,##')) END
	) AS Descripcion
	FROM 
	(	
		SELECT enc.IdEncab, cont.IdCliente, cont.IdContrato,  
		(
			Cantidad -
			CASE WHEN enc.FechaIni > @FechaFin OR enc.FechaFin < @FechaIni THEN Cantidad
			ELSE
				( CASE WHEN enc.FechaIni <= @FechaIni THEN (DATEDIFF(DD, enc.FechaIni, @FechaIni)) ELSE 0 END +
				CASE WHEN enc.FechaFin >= @FechaFin THEN (DATEDIFF(DD, @FechaFin, enc.FechaFin)) ELSE 0 END )
			END
		) AS Cantidad
		FROM Nomina_Contratos cont
		INNER JOIN Nomina_Movimientos NoMo ON NoMo.IdContrato = cont.IdContrato
		INNER JOIN Encabezados enc ON enc.IdEncab = NoMo.IdEncab
		WHERE cont.IdContrato IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdContrato))
		AND enc.FechaIni >= @FechaIniPeriodo AND enc.FechaFin <= @FechaFinPeriodo
		AND NoMo.IdItem = 101
		AND enc.EsAnulado = 0
	) AS q4
	GROUP BY q4.IdCliente, q4.IdContrato
)

--Crear tabla temporal para incrementar rendimiento
SELECT enc.IdCliente, enc.IdContrato, enc.LiquidatedDays, enc.Descripcion
INTO #tmpDaysLiquidated
FROM 
tmpDaysLiquidated enc

--Consulta Final
SELECT 
Cont.IdCliente, 
Cont.IdContrato,	
SUM(LiquidatedDays) AS LiquidatedDays,
(
	STUFF
	(	
		(
			SELECT Descripcion + ',' 
			FROM #tmpDaysLiquidated tmpDL
			WHERE tmpDL.IdContrato = Cont.IdContrato
			AND tmpDL.IdCliente = Cont.IdCliente
			FOR XML PATH ('')
		), 1, 0, ''
	) 
) AS Descripcion
FROM Nomina_Contratos Cont
LEFT JOIN #tmpDaysLiquidated tmp ON tmp.IdContrato = Cont.IdContrato
WHERE Cont.IdContrato IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdContrato))
GROUP BY Cont.IdCliente, Cont.IdContrato

END
GO
PRINT N'Altering Procedure [dbo].[GetLibroAuxiliar]...';
IF OBJECT_ID(N'dbo.GetLibroAuxiliar', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetLibroAuxiliar] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetLibroAuxiliar]
	@FechaIni NVARCHAR(10) = '',
	@FechaFin NVARCHAR(10) = '',
	@CuentaIni NVARCHAR(100)='',
	@CuentaFin NVARCHAR(100)='',
    @IdEmpresas NVARCHAR(1000) = '',
    @IdCliente INT = NULL,
    @SenAgrupCC BIT = 0,
    @IdCentroCosto INT = NULL,
    @EsNotGAAP BIT = NULL,
    @EsNotIFRS BIT = NULL,
	@EsAgrupIFRS BIT = NULL,
	@IdSucursal INT = NULL	

    
AS
BEGIN

DECLARE

@FechaIniT DATETIME,
@FechaFinT DATETIME,
@FechaIniT2 DATETIME,
@CuenIni NVARCHAR(100)='',
@CuenFin NVARCHAR(100)='',
@IdEmp NVARCHAR(1000) = '',
@IdCli INT = NULL,
@AgrupCC BIT = 0,
@IdCentroC INT = NULL,
@NotGAAP BIT = NULL,
@NotIFRS BIT = NULL,
@AgrupIFRS BIT = NULL,
@IdTipoPUC INT,
@IdSuc INT = NULL


SET NOCOUNT ON;	

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SET @FechaIniT = CAST(CONVERT(DATETIME, @FechaIni, 103) + ' 00:00:00' AS DATETIME)
SET @FechaFinT = CAST(CONVERT(DATETIME, @FechaFin, 103) + ' 23:59:59' AS DATETIME)
SET @FechaIniT2 = DATEADD(DAY,-1,@FechaIniT)
SET @CuenIni=@CuentaIni
SET @CuenFin =@CuentaFin
SET @IdEmp =@IdEmpresas
SET @IdCli =@IdCliente
SET @AgrupCC=@SenAgrupCC
SET @IdCentroC=@IdCentroCosto
SET @NotGAAP=@EsNotGAAP
SET @NotIFRS=@NotIFRS
SET @AgrupIFRS =@AgrupIFRS
SET @IdSuc =@IdSucursal


SELECT @IdTipoPUC = ValParametro FROM PARAMETROS WHERE CodParametro = 1
IF @IdTipoPUC IS NULL
	SET @IdTipoPUC = 1

;WITH tempCuentas(CodCuenta,NomCuentaBase)
		as(
			select CodCuenta,
			MAX(NomCuenta)NomCuenta
			from
			(
			select CodCuenta,NomCuenta
			from cuentas
			where idtipoPuc=@IdTipoPUC
			)as q1
			group by CodCuenta
		)

SELECT
0 AS Orden,
YEAR(@FechaIniT2) AS Anno,
MONTH(@FechaIniT2) AS Mess,
CASE WHEN @EsAgrupIFRS=1 and len(CodCuentaIFRS)>0 then coalesce(CodCuentaIFRS,VSaldo1.CodCuenta) else VSaldo1.CodCuenta END AS CodCuenta,
CASE WHEN @EsAgrupIFRS=1 then VSaldo1.CodCuenta else CodCuentaIFRS END AS CodCuenta2,
Cta.NomCuenta,
CASE WHEN @EsAgrupIFRS=1 and len(CodCuentaIFRS)>0 then coalesce(cta.CodCuentaIFRS,VSaldo1.CodCuenta) + '-' + coalesce(cta.NomCuentaIFRS,Cta.NomCuenta)  else VSaldo1.CodCuenta + '-' + Cta.NomCuenta END AS DescripCuenta,
VSaldo1.IdCliente,
LTRIM(RTRIM(Cli.Apellidos + ' ' + Cli.Nombres)) AS NomTercero,
'SALDO INICIAL' AS MesLetras,
@FechaIniT2 AS Fecha,
VSaldo1.Debito AS Debito,
VSaldo1.Credito AS Credito,
VSaldo1.DebitoExt AS DebitoExt,
VSaldo1.CreditoExt AS CreditoExt,
'SALDO INICIAL' AS Nota,
'' AS DocRef, 
'' AS Doc,
'' AS Doc_FC, 
0 AS IdEncabCont,
Cta_C.Factor,
VSaldo1.IdEmpresa,
'' AS CodDocumento,
Cta.IdCuentaTipo,
NULL AS IdInventario,
0 AS IdAbonaDoc,
NULL AS IdAbonaDif,
Emp.EmpresaCodigo,
Cta_T.IdClase,
VSaldo1.IdCentroCosto,
CC.NomCentroCosto,
0 AS IdDocumento,
0 AS IdEncab,
null as RetencionBase,
null as RetencionPorc,
null as RetencionBaseCuenta,
cli.Identificacion,
null as NomEmpleado,
ciud.NomCiudad,
DebitoGAAP,
CreditoGAAP,
DebitoIFRS,
CreditoIFRS,
NULL AS CodCtaUgpp,
NULL AS NomCtaUgpp,
NULL AS NumDocumento,
NULL AS NomDocumento,
NULL AS IdSucursal
FROM
(
	SELECT
	Enc.IdEmpresa,
	Cta.IdCuenta, 
	Cta.CodCuenta,
	CASE WHEN @IdCli IS NULL THEN NULL ELSE Enc_C.IdCliente END AS IdCliente, 
	SUM(CASE WHEN Factor = 1 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS Debito,
	SUM(CASE WHEN Factor = - 1 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS Credito,

	SUM(CASE WHEN Factor = 1 THEN ([DebitoExt] - [CreditoExt]) * [Factor] ELSE 0 END) AS DebitoExt,
	SUM(CASE WHEN Factor = - 1 THEN ([DebitoExt] - [CreditoExt]) * [Factor] ELSE 0 END) AS CreditoExt,

	SUM(CASE WHEN Factor = 1 and Enc_C.EsNotGAAP=0 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS DebitoGAAP,
	SUM(CASE WHEN Factor = - 1 and Enc_C.EsNotGAAP=0 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS CreditoGAAP,

	SUM(CASE WHEN Factor = 1 and Enc_C.EsIFRS=0 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS DebitoIFRS,
	SUM(CASE WHEN Factor = - 1 and Enc_C.EsIFRS=0 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS CreditoIFRS,
	--Enc_C.IdInventario,
	--Enc_C.IdAbonaDif,
	CASE WHEN @AgrupCC = 1 THEN Enc_C.IdCentroCosto ELSE NULL END AS IdCentroCosto
	FROM Encabezados_Cont AS Enc_C INNER JOIN Encabezados AS Enc ON Enc_C.IdEncab = Enc.IdEncab INNER JOIN Cuentas AS Cta ON Enc_C.IdCuenta = Cta.IdCuenta INNER JOIN Cuentas_Tipos AS Cta_T ON Cta.IdCuentaTipo = Cta_T.IdCuentaTipo INNER JOIN Cuentas_Clases AS Cta_C ON Cta_T.IdClase = Cta_C.IdClase
	WHERE
	Enc.Fecha < @FechaIniT AND
	Cta.CodCuenta Between @CuenIni And @CuenFin AND
	Debito - Credito <> 0 AND
	Enc.IdEmpresa IN(select number from iter$simple_intlist_to_tbl(@IdEmpresas)) AND
	Enc.EsAnulado=0 and 
    (@NotGAAP is null OR Enc_C.EsNotGAAP =@NotGAAP) AND
    (@EsNotIFRS is null OR Enc_C.EsIFRS =@EsNotIFRS) AND
	(@IdSuc is null OR Enc.IdSucursal = @IdSuc)
	GROUP BY 
	Cta.IdCuenta, 
	CASE WHEN @IdCli IS NULL THEN NULL ELSE Enc_C.IdCliente END, 
	Cta.CodCuenta, 
	Enc.IdEmpresa, 
	--Enc_C.IdInventario, 
	--Enc_C.IdAbonaDif,
	CASE WHEN @AgrupCC = 1 THEN Enc_C.IdCentroCosto ELSE NULL END
)
VSaldo1 INNER JOIN
Empresas AS Emp ON VSaldo1.IdEmpresa = Emp.IdEmpresa INNER JOIN 
Cuentas AS Cta ON VSaldo1.IdCuenta = Cta.IdCuenta LEFT OUTER JOIN
VClientes2 AS Cli ON VSaldo1.IdCliente = Cli.IdCliente INNER JOIN
Cuentas_Tipos AS Cta_T ON Cta.IdCuentaTipo = Cta_T.IdCuentaTipo INNER JOIN
Cuentas_Clases AS Cta_C ON Cta_T.IdClase = Cta_C.IdClase LEFT OUTER JOIN
dbo.CentroCostos AS CC ON VSaldo1.IdCentroCosto = CC.IdCentroCosto LEFT OUTER JOIN
dbo.Ciudades as ciud ON ciud.IdCiudad=cli.idciudad
WHERE 

(@IdCli is null OR VSaldo1.IdCliente =@IdCli) AND
(@IdCentroC is null OR VSaldo1.IdCentroCosto =@IdCentroC) 

--COALESCE(VSaldo1.IdCliente,'') = COALESCE(@IdCli,COALESCE(VSaldo1.IdCliente,'')) AND
--COALESCE(VSaldo1.IdCentroCosto,'') = COALESCE(@IdCentroC,COALESCE(VSaldo1.IdCentroCosto,''))


UNION ALL

select Orden, Anno, Mess,
u.CodCuenta,
CodCuenta2,
NomCuenta,
DescripCuenta,
IdCliente, NomTercero, MesLetras, Fecha, Debito, Credito, DebitoExt, CreditoExt, Nota, DocRef, Doc, Doc_FC, IdEncabCont, Factor, IdEmpresa, CodDocumento, IdCuentaTipo, IdInventario, IdAbonaDoc, IdAbonaDif, EmpresaCodigo, IdClase, IdCentroCosto, NomCentroCosto,IdDocumento,IdEncab,
RetencionBase,RetencionPorc,RetencionBase as RetencionBaseCuenta,Identificacion,NomEmpleado,NomCiudad,
DebitoGAAP,
CreditoGAAP,
DebitoIFRS,
CreditoIFRS,
isnull(Cta3.CodCuenta+', ' ,'')+isnull(Cta4.CodCuenta,'')  as CodCtaUgpp,
isnull(Cta3.NomCuentaBase+', ' ,'')+isnull(Cta4.NomCuentaBase,'')  as NomCtaUgpp,
NumDocumento,NomDocumento,Sucursal
from
(
	SELECT Orden, Anno, Mess, 
		CASE WHEN @EsAgrupIFRS=1 and len(CodCuentaIFRS)>0 then coalesce(CodCuentaIFRS,CodCuenta) else CodCuenta END AS CodCuenta,
		CASE WHEN @EsAgrupIFRS=1 then CodCuenta else  CodCuentaIFRS END AS CodCuenta2,
		NomCuenta, 
		CASE WHEN @EsAgrupIFRS=1 and len(CodCuentaIFRS)>0  then coalesce(CodCuentaIFRS,CodCuenta) + '-' + coalesce(NomCuentaIFRS,NomCuenta)  else CodCuenta + '-' + NomCuenta END AS DescripCuenta,
		IdCliente, NomTercero, MesLetras, Fecha, Debito, Credito, DebitoExt, CreditoExt, Nota, DocRef, Doc, Doc_FC, IdEncabCont, Factor, IdEmpresa, CodDocumento, IdCuentaTipo, IdInventario, IdAbonaDoc, IdAbonaDif, EmpresaCodigo, IdClase, IdCentroCosto, NomCentroCosto,IdDocumento,IdEncab,
		case when coalesce(RetencionPorc,0)> 0 then abs(Debito-Credito)*100/RetencionPorc else 0 end RetencionBase,RetencionPorc,RetencionBase as RetencionBaseCuenta,Identificacion,NomEmpleado,NomCiudad,
		case when VMov1.EsNotGAAP=0 THEN  Debito else 0 end DebitoGAAP,
		case when VMov1.EsNotGAAP=0 THEN  Credito else 0 end  CreditoGAAP,
		case when VMov1.EsIFRS=0 THEN  Debito else 0 end DebitoIFRS,
		case when VMov1.EsIFRS=0 THEN  Credito else 0 end CreditoIFRS,
		NumDocumento,NomDocumento,Sucursal
	FROM vLibroAuxiliar_Mov VMov1
	WHERE
	VMov1.Fecha>=@FechaIniT AND VMov1.Fecha<=@FechaFinT AND
	VMov1.CodCuenta Between @CuenIni And @CuenFin AND
	VMov1.IdEmpresa IN(select number from iter$simple_intlist_to_tbl(@IdEmpresas)) AND 

	(@IdCli is null OR VMov1.IdCliente =@IdCli) AND
	(@IdCentroC is null OR VMov1.IdCentroCosto =@IdCentroC) AND
	(@NotGAAP is null OR VMov1.EsNotGAAP =@NotGAAP) AND
	(@EsNotIFRS is null OR VMov1.EsIFRS =@EsNotIFRS) AND	
	(@IdSucursal is null OR VMov1.IdSucursal = @IdSuc) 
)as u
LEFT OUTER JOIN
	tempCuentas AS Cta3 ON SUBSTRING(u.CodCuenta,1,4) = Cta3.CodCuenta LEFT JOIN
	tempCuentas AS Cta4 ON SUBSTRING(u.CodCuenta,1,6) = Cta4.CodCuenta 

ORDER BY CodCuenta, Orden, Fecha

END
GO
PRINT N'Altering Procedure [dbo].[GetLiquidarNominaHijos]...';
IF OBJECT_ID(N'dbo.GetLiquidarNominaHijos', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetLiquidarNominaHijos] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetLiquidarNominaHijos]

@IdEncabNuevo INT,
@IdEmpresa INT,
@IdEmpleado NVARCHAR(max),
@IdEncabNomMovBase NVARCHAR(max),
@Exito INT = 0 output

As
BEGIN
   
   BEGIN TRY

   	--Eliminar registros hijos
	DELETE FROM Nomina_Movimientos
	WHERE IdEncab=Coalesce(@IdEncabNuevo,0) and IdCliente IN(select number from iter$simple_intlist_to_tbl(@IdEmpleado)) 
	and EsVisible=0 AND (@IdEncabNomMovBase IS NULL OR IdEncabNomMovBase IN(SELECT number FROM iter$simple_intlist_to_tbl(ISNULL(@IdEncabNomMovBase,'')))) 


INSERT INTO dbo.Nomina_Movimientos(IdEncab, IdCliente, IdItem, Cantidad, ValorUnit,ValorUnitInferior,EsVisible,IdEncabNomMovBase,IdCentroCosto,IdContrato)
	SELECT @IdEncabNuevo,IdCliente,Items,1,(ValorUnit*ParteSuperior)/cast((ValorUnitInferior* ParteInferior)as float) * Cantidad as ValorUnitario,1,0,IdEncabNomMov,CentroCosto,IdContrato
FROM		  
 (Select 
  CASE WHEN ParteSuperior=0 THEN NomItem.DivParteSuperior ELSE ParteSuperior END AS ParteSuperior,
  CASE WHEN ParteSuperior=0 THEN NomItem.DivParteInferior ELSE ISNULL(ParteInferior,1) END AS ParteInferior,
  q.IdCliente,Items,ValorUnit,ValorUnitInferior,Cantidad,IdEncabNomMov,ISNULL(IdCentroCostoBase,cliEmple.IdCentroCosto) as CentroCosto,IdContrato

 	from
	(
		select *
		from [ufnNominaHijos_01](@IdEncabNuevo, @IdEmpresa, @IdEmpleado, @IdEncabNomMovBase)

		union all

		select *
		from [ufnNominaHijos_02](@IdEncabNuevo, @IdEmpresa, @IdEmpleado, @IdEncabNomMovBase)
		      
		union all
		      
		select  *
		from [ufnNominaHijos_03](@IdEncabNuevo, @IdEmpresa, @IdEmpleado, @IdEncabNomMovBase)

	) as q 
	INNER JOIN
	
	dbo.Nomina_Items as NomItem ON q.Items=NomItem.IdItem
	INNER JOIN dbo.Clientes_Empleados as cliEmple ON cliEmple.IdCliente=q.IdCliente	 
	where q.Items<>0
	) as q2
   
    SET @Exito = 1
    RETURN
    END TRY
    
	BEGIN CATCH 
	IF @@error =547 SET @Exito = 0
    END CATCH

END
GO
PRINT N'Altering Procedure [dbo].[GetNominaHorasExtra]...';
IF OBJECT_ID(N'dbo.GetNominaHorasExtra', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetNominaHorasExtra] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetNominaHorasExtra]

@IdEncab INT,
@IdCliente INT

AS
BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

--SELECT 
--'' as ClienteNombre,
--'' as ClienteIdent,
--IdCliente, ValorUnitario as ValorBase, ValorUnitario as VlrHora,ValorUnitario as HED,ValorUnitario as HEN,ValorUnitario as RN,
--ValorUnitario as RDF,ValorUnitario as HEDD,ValorUnitario as HEND,ValorUnitario as HD
--From Encabezados_Mov

--RETURN;

declare @hMes INT
 		
Select @hMes = CAST(ValParametro AS INT)
From Parametros Where CodParametro = 47

IF COALESCE(@hMes,0) = 0 
 SET @hMes = 240
     
SELECT 
COALESCE(cli.Nombre1 + ' ','') + COALESCE(cli.Apellido1 + ' ','') as ClienteNombre,
cliTiId.NomTipoIdent + ' ' + CAST(cli.Identificacion as NVARCHAR(100)) + CASE WHEN COALESCE(cli.DVCliente, '-1') = '-1' THEN '' ELSE '-' + cli.DVCliente END as ClienteIdent,cliEmp.IdCentroCosto,
q1.*
FROM
(
SELECT 
 IdCliente, 
 SUM(ValorBase) as ValorBase,
 SUM(VlrHora) as VlrHora,
 SUM(HED) as HED, SUM(HED_Total) as HED_Total,
 SUM(HEN) as HEN, SUM(HEN_Total) as HEN_Total,
 SUM(RN) as RN, SUM(RN_Total) as RN_Total,
 SUM(RDF) as RDF, SUM(RDF_Total) as RDF_Total,
 SUM(HEDD) as HEDD, SUM(HEDD_Total) as HEDD_Total,
 SUM(HEND) as HEND, SUM(HEND_Total) as HEND_Total,
 SUM(HD) as HD, SUM(HD_Total) as HD_Total,
 SUM(HE1) as HE1, SUM(HE1_Total) as HE1_Total,
 SUM(HE2) as HE2, SUM(HE2_Total) as HE2_Total,
 SUM(HE3) as HE3, SUM(HE3_Total) as HE3_Total,
 SUM(HE4) as HE4, SUM(HE4_Total) as HE4_Total,
 SUM(HE5) as HE5, SUM(HE5_Total) as HE5_Total,
 SUM(HE6) as HE6, SUM(HE6_Total) as HE6_Total,
 SUM(HE7) as HE7, SUM(HE7_Total) as HE7_Total,
 SUM(HE8) as HE8, SUM(HE8_Total) as HE8_Total,
 SUM(HED_Total) + SUM(HEN_Total) + SUM(RN_Total) + SUM(RDF_Total) + SUM(HEDD_Total) + SUM(HEND_Total) + SUM(HD_Total)+ SUM(HE1_Total)+ SUM(HE2_Total)+ SUM(HE3_Total)+ SUM(HE4_Total) + SUM(HE5_Total)+ SUM(HE6_Total)+ SUM(HE7_Total)+ SUM(HE8_Total)as Totales
 FROM
 (
  SELECT 
   nomM.IdCliente,
   CASE WHEN nomI.IdItem in (100,101,102)  THEN COALESCE(nomM.ValorBase,0) ELSE 0 END as ValorBase,
   CASE WHEN nomI.IdItem in (100,101,102)  THEN COALESCE(nomM.ValorBase,0) / CAST(@hMes as FLOAT) ELSE 0 END as VlrHora,
   nomI.AbrevItem, 
   nomM.Cantidad,
   nomI.AbrevItem + '_Total' as abrev_Tot,
   COALESCE(nomM.Cantidad,0) * (COALESCE(nomM.ValorUnit,0) / COALESCE(nomM.ValorUnitInferior,1)) as Totales
  FROM 
   Nomina_Movimientos nomM LEFT JOIN Nomina_Items nomI ON
   nomM.IdItem = nomI.IdItem and nomI.IdClasif in (1,2)
  WHERE
   IdEncab = @IdEncab 
  UNION ALL 
  SELECT 
   nomM.IdCliente, 0, 0,
   nomI.AbrevItem, 0,nomI.AbrevItem + '_Total' as abrev_Tot, 0
  FROM 
   Nomina_Movimientos nomM CROSS JOIN Nomina_Items nomI
  WHERE
   IdEncab = @IdEncab and
   nomI.IdClasif = 2
  ) q
 PIVOT
 (
  SUM(Cantidad)
  FOR AbrevItem IN 
   ([HED],[HEN],[RN],[RDF],[HEDD],[HEND],[HD],[HE1],[HE2],[HE3],[HE4],[HE5],[HE6],[HE7],[HE8])
 ) as _pvtTable
 PIVOT
 (
  SUM(Totales)
  FOR Abrev_Tot IN
   ([HED_Total],[HEN_Total],[RN_Total],[RDF_Total],[HEDD_Total],[HEND_Total],[HD_Total],[HE1_Total],[HE2_Total],[HE3_Total],[HE4_Total],[HE5_Total],[HE6_Total],[HE7_Total],[HE8_Total])
 ) as pvtTable
 GROUP BY IdCliente
) q1 INNER JOIN Clientes cli ON
  q1.IdCliente = cli.IdCliente INNER JOIN Clientes_TiposIdent cliTiId ON
  cli.IdTipoIdent = cliTiId.IdTipoIdent INNER JOIN dbo.Clientes_Empleados AS cliEmp
  ON cliEmp.IdCliente=q1.IdCliente
  

END
GO
PRINT N'Altering Procedure [dbo].[GetNominaItemsProgramados]...';
IF OBJECT_ID(N'dbo.GetNominaItemsProgramados', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetNominaItemsProgramados] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetNominaItemsProgramados]

--@IdContratos nvarchar(500) = '',
@IdContrato INT,
@FechaIni NVARCHAR(10) = '',
@FechaFin NVARCHAR(10) = '',
@EsSinFiltro Bit=0

AS
BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

DECLARE
@FechaIniT DATETIME,
@FechaFinT DATETIME

SET @FechaIniT = CAST(CONVERT(DATETIME, @FechaIni, 103) + ' 00:00:00' AS DATETIME)
SET @FechaFinT = CAST(CONVERT(DATETIME, @FechaFin, 103) + ' 23:59:59' AS DATETIME)

IF @EsSinFiltro=0


SELECT IdProg,IdContrato,Empleado,NomItem,coalesce(ValorMaximo,0)ValorMaximo,ValorUnit,ValorPago,Saldo,
case when IdTipo = 0 then 'Dev/Deduccion' else 'Retefte' end Tipo,IdItem,IdCliente,SueldoIni,FechaIni,IdClasif,IdRipDiagnostico,IdCentroCosto
from
(
select prog.IdProg,prog.IdContrato,IdentiEmpleado+'-'+NombreEmpleado as Empleado,NomItem,prog.ValorMaximo,prog.ValorUnit,prog.IdTipo,prog.IdItem,cont.IdCliente,ISNULL(sum(mov.ValorUnit/mov.ValorUnitInferior*mov.Cantidad),0) as ValorPago,

CASE WHEN prog.IdItem IN (112,225,248)  THEN  ISNULL(prog.ValorMaximo,ISNULL(sum(mov.Cantidad),0))-ISNULL(sum(mov.Cantidad),0)
ELSE ISNULL(prog.ValorMaximo,ISNULL(sum(mov.ValorUnit/mov.ValorUnitInferior*mov.Cantidad),0) )-ISNULL(sum(mov.ValorUnit/mov.ValorUnitInferior*mov.Cantidad),0) END as Saldo,MAX(SueldoIni)SueldoIni,
max(prog.FechaIni)FechaIni,max(IdClasif)IdClasif,max(prog.IdRipDiagnostico)IdRipDiagnostico,max(cont.IdCentroCosto)IdCentroCosto

from [dbo].[Nomina_ItemsProgramados] prog left join 
Nomina_Movimientos mov on prog.IdProg=mov.IdProg left join 
VNominaContratos cont on prog.IdContrato=cont.IdContrato left join 
Nomina_Items item on prog.IdItem=item.IdItem
where--prog.IdContrato=@IdContrato and
(ISNULL(prog.fechaIni,@FechaIniT) between @FechaIniT and @FechaFinT OR ISNULL(prog.fechaFin,@FechaFinT) between @FechaIniT and @FechaFinT OR (ISNULL(prog.fechaIni,@FechaIniT)<=@FechaIniT AND ISNULL(prog.fechafin,@FechaFinT)>=@FechaFinT))
group by prog.IdProg,prog.IdContrato,IdentiEmpleado+'-'+NombreEmpleado,NomItem,prog.ValorMaximo,prog.ValorUnit,prog.IdTipo,prog.IdItem,cont.IdCliente
)as q
where ValorMaximo is null OR ValorMaximo=0 OR Saldo>0

ELSE

SELECT IdProg,IdContrato,Empleado,NomItem,coalesce(ValorMaximo,0)ValorMaximo,ValorUnit,ValorPago,Saldo,
case when IdTipo = 0 then 'Dev/Deduccion' else 'Retefte' end Tipo,IdItem,IdCliente,SueldoIni,FechaIni,IdClasif,IdRipDiagnostico,IdCentroCosto
from
(
select prog.IdProg,prog.IdContrato,IdentiEmpleado+'-'+NombreEmpleado as Empleado,NomItem,prog.ValorMaximo,prog.ValorUnit,prog.IdTipo,prog.IdItem,cont.IdCliente,ISNULL(sum(mov.ValorUnit/mov.ValorUnitInferior*mov.Cantidad),0) as ValorPago,

CASE WHEN prog.IdItem IN (112,225,248)  THEN  ISNULL(prog.ValorMaximo,ISNULL(sum(mov.Cantidad),0))-ISNULL(sum(mov.Cantidad),0)
ELSE ISNULL(prog.ValorMaximo,ISNULL(sum(mov.ValorUnit/mov.ValorUnitInferior*mov.Cantidad),0) )-ISNULL(sum(mov.ValorUnit/mov.ValorUnitInferior*mov.Cantidad),0) END as Saldo,MAX(SueldoIni)SueldoIni,
max(prog.FechaIni)FechaIni,max(IdClasif)IdClasif,max(prog.IdRipDiagnostico)IdRipDiagnostico,max(cont.IdCentroCosto)IdCentroCosto

from [dbo].[Nomina_ItemsProgramados] prog left join 
Nomina_Movimientos mov on prog.IdProg=mov.IdProg left join 
VNominaContratos cont on prog.IdContrato=cont.IdContrato left join 
Nomina_Items item on prog.IdItem=item.IdItem
group by prog.IdProg,prog.IdContrato,IdentiEmpleado+'-'+NombreEmpleado,NomItem,prog.ValorMaximo,prog.ValorUnit,prog.IdTipo,prog.IdItem,cont.IdCliente
)as q


END
GO
PRINT N'Altering Procedure [dbo].[GetPermisosUsuarios]...';
IF OBJECT_ID(N'dbo.GetPermisosUsuarios', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetPermisosUsuarios] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetPermisosUsuarios]
	@IdUsuario int,
	@InfoUsuario NVARCHAR(100)
AS
BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

DECLARE 
	@IdVersiones NVARCHAR(200),
	@IdModulos NVARCHAR(200)

	exec CrearContextoUsuario @InfoUsuario

	set @IdVersiones= (SELECT nstr FROM (SELECT ROW_NUMBER() OVER (ORDER BY listpos) AS numb, nstr from iter$charlist_to_tbl(@InfoUsuario,default))AS TABLA WHERE numb =3)
	set @IdModulos= (SELECT nstr FROM (SELECT ROW_NUMBER() OVER (ORDER BY listpos) AS numb, nstr from iter$charlist_to_tbl(@InfoUsuario,default))AS TABLA WHERE numb = 4)

	;with permVer
	as
	(
	   select * from [ufnPermisosPorVersion](@IdVersiones,@IdModulos)
	)

	select VPPU.IdInterface,
		case  max(cast(coalesce(~VPPV.EsConsultarDenegar,0) as int))
		when 0 then 0
		else
		case  max(cast(VPPU.EsConsultarDenegar as int))
			when 1 then 0
			else
			max(cast(VPPU.EsConsultar as int))
		End
		End as Consultar,

		case  max(cast(coalesce(~VPPV.EsEliminarDenegar,0) as int))
		when 0 then 0
		else
		case max(cast(VPPU.EsEliminarDenegar as int))
			when 1 then 0 
			else
			max(cast(VPPU.EsEliminar as int))
		End
		End as Eliminar,
		
		case  max(cast(coalesce(~VPPV.EsActualizarDenegar,0) as int))
		when 0 then 0
		else
		case max(cast(VPPU.EsActualizarDenegar as int))
			when 1 then 0
			else
			max(cast(VPPU.EsActualizar as int))
		End
		End as Actualizar,
		
		case  max(cast(coalesce(~VPPV.EsInsertarDenegar,0) as int))
		when 0 then 0
		else	
		case max(cast(VPPU.EsInsertarDenegar as int))
			when 1 then 0
			else
			max(cast(VPPU.EsInsertar as int))
			End
		End as Insertar,

	    max(cast(VPPU.EsPorUsuario as int)) EsPorUsuario,
		IdInterfaceParent,
		NomInterface,

		case  max(cast(coalesce(~VPPV.EsConsultarDenegar,0) as int))
		when 0 then 1 else 0 end esPorVersion

	 from VPermisosPorUsuarios VPPU
	 LEFT JOIN permVer VPPV ON VPPU.IdInterface = VPPV.IdInterface
     where  VPPU.IdUsuario = @IdUsuario or VPPU.IdUsuario in (select IdRol from Usuarios_RolesPertenece where IdUsuario=@IdUsuario)
	 group by VPPU.IdInterface, VPPU.IdInterfaceParent,NomInterface
	 order by VPPU.IdInterface
END
GO
PRINT N'Altering Procedure [dbo].[UsuariosRolesPerteneceSelect]...';
IF OBJECT_ID(N'dbo.UsuariosRolesPerteneceSelect', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[UsuariosRolesPerteneceSelect] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[UsuariosRolesPerteneceSelect]
	@IdUsuarios nvarchar(500) = '',
	@Exito INT = 0 output
As
BEGIN
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT IdUsuario,IdRol FROM Usuarios_RolesPertenece us
	WHERE
	us.IdUsuario IN(select number from dbo.iter$simple_intlist_to_tbl(@IdUsuarios))

   
    IF @@error <> 0 GOTO ERR_HANDLER
    
    SET @Exito = 1
    RETURN
    
ERR_HANDLER:
  SET @Exito = 0
       
END
GO
PRINT N'Refreshing Procedure [dbo].[TrasladarTerceros]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[TrasladarTerceros]';


GO
PRINT N'Refreshing Procedure [dbo].[EncabezadosDeleteALL]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[EncabezadosDeleteALL]';


GO
PRINT N'Refreshing Procedure [dbo].[ActualizarAbonaDoc]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[ActualizarAbonaDoc]';


GO
PRINT N'Refreshing Procedure [dbo].[TrasladarInventarios]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[TrasladarInventarios]';


GO
PRINT N'Refreshing Procedure [dbo].[FinanciarMovimientos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[FinanciarMovimientos]';


GO
PRINT N'Refreshing Procedure [dbo].[GenerarCierreInventario]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GenerarCierreInventario]';


GO
PRINT N'Refreshing Procedure [dbo].[CrucesDocumentosDeleteALL]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[CrucesDocumentosDeleteALL]';


GO
PRINT N'Refreshing Procedure [dbo].[CalcularCostoVenta]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[CalcularCostoVenta]';


GO
PRINT N'Refreshing Procedure [dbo].[CalcularRutasProduccionMov]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[CalcularRutasProduccionMov]';


GO
PRINT N'Refreshing Procedure [dbo].[CierresDocsUpdate]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[CierresDocsUpdate]';


GO
PRINT N'Refreshing Procedure [dbo].[CostoPromHistoDeleteALL]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[CostoPromHistoDeleteALL]';


GO
PRINT N'Refreshing Procedure [dbo].[ExcluirCruce]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[ExcluirCruce]';


GO
PRINT N'Refreshing Procedure [dbo].[GenerarAlertaMantenimientos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GenerarAlertaMantenimientos]';


GO
PRINT N'Refreshing Procedure [dbo].[GetClientesPuntos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetClientesPuntos]';


GO
PRINT N'Refreshing Procedure [dbo].[GetCostoPromedioDet]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetCostoPromedioDet]';


GO
PRINT N'Refreshing Procedure [dbo].[GetDocumentosCierre]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetDocumentosCierre]';


GO
PRINT N'Refreshing Procedure [dbo].[GetExistenciasPorProducto]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetExistenciasPorProducto]';


GO
PRINT N'Refreshing Procedure [dbo].[GetInventarios_Existencia_RecursosOrig]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetInventarios_Existencia_RecursosOrig]';


GO
PRINT N'Refreshing Procedure [dbo].[GetInvKardexPorLote]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetInvKardexPorLote]';


GO
PRINT N'Refreshing Procedure [dbo].[GetKardexInventario]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetKardexInventario]';


GO
PRINT N'Refreshing Procedure [dbo].[GetKardexInventarioPorAgrupaciones]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetKardexInventarioPorAgrupaciones]';


GO
PRINT N'Refreshing Procedure [dbo].[GetTablaAmortizacion]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetTablaAmortizacion]';


GO
PRINT N'Refreshing Procedure [dbo].[GetTareasCitas]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetTareasCitas]';


GO
PRINT N'Refreshing Procedure [dbo].[GetVEncabezados]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetVEncabezados]';


GO
PRINT N'Refreshing Procedure [dbo].[GetVentasAgrupadoPorCliVend]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetVentasAgrupadoPorCliVend]';


GO
PRINT N'Refreshing Procedure [dbo].[GetVentasPorMes]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetVentasPorMes]';


GO
PRINT N'Refreshing Procedure [dbo].[SaldoVentasClientesPorProducto]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[SaldoVentasClientesPorProducto]';


GO
PRINT N'Refreshing Procedure [dbo].[UltimoValorUnitario]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[UltimoValorUnitario]';


GO
PRINT N'Refreshing Procedure [dbo].[Ziur_CrearClienteDeSistema]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[Ziur_CrearClienteDeSistema]';


GO
PRINT N'Refreshing Procedure [dbo].[ValorUnitarioPorCostoPromedio]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[ValorUnitarioPorCostoPromedio]';


GO
PRINT N'Refreshing Procedure [dbo].[ContabilizarDoc_Validar]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[ContabilizarDoc_Validar]';


GO
PRINT N'Refreshing Procedure [dbo].[GetArqueoCaja]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetArqueoCaja]';


GO
PRINT N'Refreshing Procedure [dbo].[GetDocsDiferencias]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetDocsDiferencias]';


GO
PRINT N'Refreshing Procedure [dbo].[GetDocsSinCruzar]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetDocsSinCruzar]';


GO
PRINT N'Refreshing Procedure [dbo].[GetInformeRIPS]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetInformeRIPS]';


GO
PRINT N'Refreshing Procedure [dbo].[GetInventarios_Existencia_Recursos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetInventarios_Existencia_Recursos]';


GO
PRINT N'Refreshing Procedure [dbo].[GetCostoActual]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetCostoActual]';


GO
PRINT N'Refreshing Procedure [dbo].[ContabilizarDoc]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[ContabilizarDoc]';


GO
PRINT N'Refreshing Procedure [dbo].[GenerarCrucesCont]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GenerarCrucesCont]';


GO
PRINT N'Refreshing Procedure [dbo].[GetActivosFijosDet]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetActivosFijosDet]';


GO
PRINT N'Refreshing Procedure [dbo].[InventariosDeleteALL]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[InventariosDeleteALL]';


GO
PRINT N'Refreshing Procedure [dbo].[CrearCuposProductos]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[CrearCuposProductos]';


GO
PRINT N'Refreshing Procedure [dbo].[GetActivosFijosAgrup]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetActivosFijosAgrup]';


GO
PRINT N'Refreshing Procedure [dbo].[GetListaPrecios]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetListaPrecios]';


GO
PRINT N'Refreshing Procedure [dbo].[GetNominaFacturar]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetNominaFacturar]';


GO
PRINT N'Refreshing Procedure [dbo].[GetProyeccionesActivosPend]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetProyeccionesActivosPend]';


GO
PRINT N'Refreshing Procedure [dbo].[ActivosMatchManual]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[ActivosMatchManual]';


GO
PRINT N'Refreshing Procedure [dbo].[GetLiquidarNomina]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetLiquidarNomina]';


GO
PRINT N'Refreshing Procedure [dbo].[DispersarNomina]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[DispersarNomina]';


GO
PRINT N'Refreshing Procedure [dbo].[GenerarFormulaPorInventario]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GenerarFormulaPorInventario]';


GO
PRINT N'Refreshing Procedure [dbo].[ComisionesPorDoc]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[ComisionesPorDoc]';


GO
-- Refactoring step to update target server with deployed transaction logs
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'c7583810-7d05-4f38-9fcb-f06500a4093e')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('c7583810-7d05-4f38-9fcb-f06500a4093e')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'd2dcecef-eca7-4d8f-a308-7d6a7781eb56')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('d2dcecef-eca7-4d8f-a308-7d6a7781eb56')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '46e4add2-2fa7-4b7e-b5ef-b56d0e6a9f2d')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('46e4add2-2fa7-4b7e-b5ef-b56d0e6a9f2d')

GO

PRINT N'Update complete.';

--Actualizar datos de la version
IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 951)
BEGIN
    INSERT INTO dbo.ZiurVersiones (IdVersion, NumVersion, Descripcion)
    VALUES (361, 951, 'Sobreescribir sps y views desde 941');
END
GO
/* Liberar bloqueo exclusivo por base de datos */
DECLARE @__ZiurDbScriptLockResourceEnd NVARCHAR(200) = N'ZiurSoft:DbScriptLock:' + CAST(DB_ID() AS NVARCHAR(20));
EXEC sp_releaseapplock
    @Resource = @__ZiurDbScriptLockResourceEnd,
    @LockOwner = N'Session';
GO
