--Hash:BA2B0EDD4934A91919CC843108E67CFC

-- 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 = 953)
BEGIN
    PRINT N'Scripts_953.sql: la version 953 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 < 953
)
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

GO
PRINT N'Rename refactoring operation with key 7b111f45-d79b-4621-9763-43cae7b5501b, 6437b43a-d141-4b13-9cf6-93839824df70, 57e932bf-1871-4075-91ea-509c4e3aba62 is skipped, element [dbo].[Encabezados_Mov].[FeRN] (SqlSimpleColumn) will not be renamed to FeRNCD_Es';


GO
PRINT N'Rename refactoring operation with key 9dfc0a7e-8857-4fca-909a-9d730638ec38, 7ebc2333-7e6e-42bb-ad22-dc795e870f61, d01f4230-6d8b-43e1-9802-946f0dcd8a1c is skipped, element [dbo].[Encabezados_Mov].[FeRNDC_Consignment] (SqlSimpleColumn) will not be renamed to FeRNCD_Radicado';


GO
PRINT N'Rename refactoring operation with key 61471031-cc24-41d8-97d5-20e5e62657b7, 4fad5aff-b63b-476f-be0c-795257a30c40, 3d6fdc12-959a-4b8f-9079-1ba29b0c2567 is skipped, element [dbo].[Encabezados_Mov].[FeRNDC_ConsigIdQuantity] (SqlSimpleColumn) will not be renamed to FeRNCD_Cantidad';


GO
PRINT N'Rename refactoring operation with key 171aedc0-2965-4cca-8a46-492c71818bc8, 5acf3658-f6b0-4965-9802-c5c5dedaf594 is skipped, element [dbo].[Encabezados_Mov].[FeRNDC_ConsigInternalNum] (SqlSimpleColumn) will not be renamed to FeRNCD_Consecutivo';


GO
PRINT N'Rename refactoring operation with key cd194987-f091-4853-8b16-228f02204a53, 2b4a82eb-d4c6-4136-828f-9043af2ceecb is skipped, element [dbo].[Encabezados_Mov].[FeRNDC_ConsigValue] (SqlSimpleColumn) will not be renamed to FeRNCD_Valor';


GO
PRINT N'Rename refactoring operation with key 44c31bce-1dd0-473d-8ffb-91a7e71ee4f5, 4de9765e-32bd-4a0c-99fe-a998b114e7a7 is skipped, element [dbo].[Encabezados_Mov].[FeRNDC_ConsigIdUnidad] (SqlSimpleColumn) will not be renamed to FeRNCD_Unidad';


GO
PRINT N'Dropping Index [dbo].[VInventarios_CostoPromedio_00].[IX_CostoProm]...';


GO
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
IF OBJECT_ID(N'dbo.Encabezados_Mov', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Encabezados_Mov', N'FeRNCD_Es') IS NULL
BEGIN
    ALTER TABLE [dbo].[Encabezados_Mov]
        ADD [FeRNCD_Es] BIT DEFAULT 0 NOT NULL;
END

IF OBJECT_ID(N'dbo.Encabezados_Mov', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Encabezados_Mov', N'FeRNCD_Radicado') IS NULL
BEGIN
    ALTER TABLE [dbo].[Encabezados_Mov]
        ADD [FeRNCD_Radicado] NUMERIC (28, 6) NULL;
END

IF OBJECT_ID(N'dbo.Encabezados_Mov', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Encabezados_Mov', N'FeRNCD_Consecutivo') IS NULL
BEGIN
    ALTER TABLE [dbo].[Encabezados_Mov]
        ADD [FeRNCD_Consecutivo] NVARCHAR (100) NULL;
END

IF OBJECT_ID(N'dbo.Encabezados_Mov', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Encabezados_Mov', N'FeRNCD_Valor') IS NULL
BEGIN
    ALTER TABLE [dbo].[Encabezados_Mov]
        ADD [FeRNCD_Valor] INT NULL;
END

IF OBJECT_ID(N'dbo.Encabezados_Mov', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Encabezados_Mov', N'FeRNCD_Unidad') IS NULL
BEGIN
    ALTER TABLE [dbo].[Encabezados_Mov]
        ADD [FeRNCD_Unidad] INT NULL;
END

IF OBJECT_ID(N'dbo.Encabezados_Mov', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Encabezados_Mov', N'FeRNCD_Cantidad') IS NULL
BEGIN
    ALTER TABLE [dbo].[Encabezados_Mov]
        ADD [FeRNCD_Cantidad] NUMERIC (28, 6) NULL;
END


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


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


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


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


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].[VInventarios_Existencia_Recursos]...';


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


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].[VCostoPromedio_Cruces]...';


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


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


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


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,

--campos de f.e. de transporte
--
FeRNCD_Es, 
FeRNCD_Radicado, 
FeRNCD_Consecutivo, 
FeRNCD_Valor, 
FeRNCD_Unidad, 
FeRNCD_Cantidad
--

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].[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 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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad)
		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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad
		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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad)
			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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad
			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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad)
		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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad
		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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad)
		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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad
		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].[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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad)
    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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad
    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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad
	 )
		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, FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad
	 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].[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, 
	  FeRNCD_Es, FeRNCD_Radicado, FeRNCD_Consecutivo, FeRNCD_Valor, FeRNCD_Unidad, FeRNCD_Cantidad

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
		WHEN DAY(tInicio) = 1 AND tFin = @FechaFinPeriodo AND (MONTH(tInicio) = MONTH(tFin)) THEN 30
		WHEN DAY(tInicio) <> 16 AND tFin = @FechaFinPeriodo AND (MONTH(tInicio) = MONTH(tFin)) THEN 30-DAY(tInicio) + 1
		ELSE DATEDIFF(DAY, tInicio, tFin) + 1 END tDifContrato1,
		DATEDIFF(DAY, tInicio, tFin) + 1 - @DiasNomina 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'Refreshing Function [dbo].[ufnContabilizacion_Normal]...';


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


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


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


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


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


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].[CalcularCostoVenta]...';


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


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


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


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


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


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


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


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].[GetComisiones]...';


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


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].[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 = '7b111f45-d79b-4621-9763-43cae7b5501b')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('7b111f45-d79b-4621-9763-43cae7b5501b')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '6437b43a-d141-4b13-9cf6-93839824df70')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('6437b43a-d141-4b13-9cf6-93839824df70')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '9dfc0a7e-8857-4fca-909a-9d730638ec38')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('9dfc0a7e-8857-4fca-909a-9d730638ec38')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '61471031-cc24-41d8-97d5-20e5e62657b7')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('61471031-cc24-41d8-97d5-20e5e62657b7')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '7ebc2333-7e6e-42bb-ad22-dc795e870f61')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('7ebc2333-7e6e-42bb-ad22-dc795e870f61')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '171aedc0-2965-4cca-8a46-492c71818bc8')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('171aedc0-2965-4cca-8a46-492c71818bc8')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'cd194987-f091-4853-8b16-228f02204a53')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('cd194987-f091-4853-8b16-228f02204a53')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '44c31bce-1dd0-473d-8ffb-91a7e71ee4f5')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('44c31bce-1dd0-473d-8ffb-91a7e71ee4f5')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '4fad5aff-b63b-476f-be0c-795257a30c40')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('4fad5aff-b63b-476f-be0c-795257a30c40')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '57e932bf-1871-4075-91ea-509c4e3aba62')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('57e932bf-1871-4075-91ea-509c4e3aba62')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'd01f4230-6d8b-43e1-9802-946f0dcd8a1c')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('d01f4230-6d8b-43e1-9802-946f0dcd8a1c')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '5acf3658-f6b0-4965-9802-c5c5dedaf594')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('5acf3658-f6b0-4965-9802-c5c5dedaf594')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '2b4a82eb-d4c6-4136-828f-9043af2ceecb')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('2b4a82eb-d4c6-4136-828f-9043af2ceecb')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '4de9765e-32bd-4a0c-99fe-a998b114e7a7')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('4de9765e-32bd-4a0c-99fe-a998b114e7a7')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '3d6fdc12-959a-4b8f-9079-1ba29b0c2567')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('3d6fdc12-959a-4b8f-9079-1ba29b0c2567')

GO

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

	update FacturacionElectronica_TipoOperacion set CodZiurOne = 21 where IdOperacion=19
GO

	--incluir campos de sector transporte
	--//
	IF NOT EXISTS(SELECT * FROM Documentos WHERE MovCamposDisp like '%FeRNCD_Es%' and EsMov=1 and EsCont=1)
	   UPDATE Documentos SET MovCamposDisp = MovCamposDisp + ',FeRNCD_Es' WHERE EsMov=1 and EsCont=1

	IF NOT EXISTS(SELECT * FROM Documentos WHERE MovCamposDisp like '%FeRNCD_Radicado%' and EsMov=1 and EsCont=1)
	   UPDATE Documentos SET MovCamposDisp = MovCamposDisp + ',FeRNCD_Radicado' WHERE EsMov=1 and EsCont=1

	IF NOT EXISTS(SELECT * FROM Documentos WHERE MovCamposDisp like '%FeRNCD_Consecutivo%' and EsMov=1 and EsCont=1)
	   UPDATE Documentos SET MovCamposDisp = MovCamposDisp + ',FeRNCD_Consecutivo' WHERE EsMov=1 and EsCont=1

	IF NOT EXISTS(SELECT * FROM Documentos WHERE MovCamposDisp like '%FeRNCD_Valor%' and EsMov=1 and EsCont=1)
	   UPDATE Documentos SET MovCamposDisp = MovCamposDisp + ',FeRNCD_Valor' WHERE EsMov=1 and EsCont=1

	IF NOT EXISTS(SELECT * FROM Documentos WHERE MovCamposDisp like '%FeRNCD_Cantidad%' and EsMov=1 and EsCont=1)
	   UPDATE Documentos SET MovCamposDisp = MovCamposDisp + ',FeRNCD_Cantidad' WHERE EsMov=1 and EsCont=1

GO
	--//
GO

GO
PRINT N'Update complete.';


GO



--Actualizar datos de la version
IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 953)
BEGIN
    INSERT INTO dbo.ZiurVersiones (IdVersion, NumVersion, Descripcion)
    VALUES (363, 953, 'Correcciones Nomina y FE Transporte');
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
