viernes, 25 de agosto de 2017

SQL - Transacciones y errores

USE [leaseoper]
GO

/****** Object:  StoredProcedure [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]    Script Date: 08/25/2017 17:43:58 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]
GO

USE [leaseoper]
GO

/****** Object:  StoredProcedure [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]    Script Date: 08/25/2017 17:43:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/*
-- =============================================
 Author:        Joel Castillo
 Create date: 25-08-2017
 Description: Obtiene bienes que pueden ser reemplazados   
 Ejecución:
            --salta error
            leaseoper..pa_lo_sel_bienes_pozo_solicitud_reemplazo 17
            --trae bienes
            leaseoper..pa_lo_sel_bienes_pozo_solicitud_reemplazo 333

 Utilizado en: /Paginas/AdmContratos/ReemplazoBienPorGarantia/SolicitudReemplazoBien.aspx
-- =============================================
*/
CREATE PROCEDURE [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]
@operacion NUMERIC(20,0)
AS
BEGIN

BEGIN TRANSACTION
BEGIN TRY
----------------------------------------------
--VARIABLES
----------------------------------------------
DECLARE @estado_operacion TINYINT
       ,@msg_error VARCHAR(MAX)


----------------------------------------------
--VALIDACIONES
----------------------------------------------

SELECT @estado_operacion = ISNULL(estado_operacion,99)
FROM leaseoper..t_contratos
WHERE operacion = @operacion

IF(@estado_operacion NOT IN (1,2))
BEGIN 
--CAE AL CATCH
 RAISERROR('Operación debe estar Vigente...',16,1)
END

----------------------------------------------
--SALIDA
----------------------------------------------

SELECT d.cod_material
      ,d.num_material
      ,d.descripcion
      ,d.rut_proveedor
      ,d.num_factura
      ,d.fecha_compra_mat
      ,d.valor_libro_inicial_mat
      ,d.cod_est_mat
      ,d.cod_rubro
      ,d.cod_rubro_especifico
      ,(SELECT ISNULL(r.descripcion,'')
       FROM leasecom..p_rubros_especificos r
       WHERE r.cod_rubro = d.cod_rubro AND r.cod_rubro_especifico = d.cod_rubro_especifico) AS descripcion_rubro      
FROM  leaseoper..t_bienes_detalle d
WHERE operacion = @operacion


COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
--RESCATA ERROR Y LO MUESTRA
    SET @msg_error = (SELECT CONVERT(varchar(max), ERROR_MESSAGE()))
     RAISERROR (@msg_error,16,1)
     RETURN
END CATCH
   
END

GO



miércoles, 23 de agosto de 2017

SQL - Insertar columna en tabla.-

USE leaseoper
GO

SELECT * FROM  leaseoper..t_correccion_estado_pago


/* Para evitar posibles problemas de pérdida de datos, debe revisar este script detalladamente antes de ejecutarlo fuera del contexto del diseñador de base de datos.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_t_correccion_estado_pago
                (
                periodo int NOT NULL,
                fecha_proceso smalldatetime NOT NULL,
                operacion numeric(20, 0) NOT NULL,
                origen_docto tinyint NULL, --CAMPO NUEVO
                id_documento int NOT NULL,
                fecha_compra smalldatetime NULL,
                factor_rev float(53) NOT NULL,
                monto_total_documento float(53) NOT NULL,
                mto_reval_ejercicio float(53) NULL,
                mto_reval_total float(53) NULL,
                fecha_ingreso datetime NULL,
                estado tinyint NULL
                )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_t_correccion_estado_pago SET (LOCK_ESCALATION = TABLE)
GO
GRANT DELETE ON dbo.Tmp_t_correccion_estado_pago TO Usuarios  AS dbo
GO
GRANT INSERT ON dbo.Tmp_t_correccion_estado_pago TO Usuarios  AS dbo
GO
GRANT SELECT ON dbo.Tmp_t_correccion_estado_pago TO Usuarios  AS dbo
GO
GRANT UPDATE ON dbo.Tmp_t_correccion_estado_pago TO Usuarios  AS dbo
GO
IF EXISTS(SELECT * FROM dbo.t_correccion_estado_pago)
                EXEC('INSERT INTO dbo.Tmp_t_correccion_estado_pago (periodo, fecha_proceso, operacion, id_documento, fecha_compra, factor_rev, monto_total_documento, mto_reval_ejercicio, mto_reval_total, fecha_ingreso, estado)
                               SELECT periodo, fecha_proceso, operacion, id_documento, fecha_compra, factor_rev, monto_total_documento, mto_reval_ejercicio, mto_reval_total, fecha_ingreso, estado FROM dbo.t_correccion_estado_pago WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.t_correccion_estado_pago
GO
EXECUTE sp_rename N'dbo.Tmp_t_correccion_estado_pago', N't_correccion_estado_pago', 'OBJECT'
GO
ALTER TABLE dbo.t_correccion_estado_pago ADD CONSTRAINT
                pk_t_correccion_estado_pago PRIMARY KEY CLUSTERED
                (
                periodo,
                id_documento
                ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT
--Compruebo el cambio
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[t_correccion_estado_pago]') AND type in (N'U'))
SELECT * FROM  leaseoper..t_correccion_estado_pago



viernes, 11 de agosto de 2017

C# - Obtener el número menor de un arreglo

private int ObtenerMenorValor(int[] arrCorrelativo)
        {
            int rest = arrCorrelativo[0]; //resultado
            for (int n = 1; n < arrCorrelativo.Length; n++)
            {
                if (arrCorrelativo[n] < rest)
                {
                    rest = arrCorrelativo[n];
                }
            }

            return rest;
        }

//Llenado y declaracion del array 
 var arrCorrelativo = new int[gv.VisibleRowCount]; //inicializa el arreglo con el numero de datos en grilla
            for (int i = 0; i < gv.VisibleRowCount; ++i)
            {
                arrCorrelativo[i] = Convert.ToInt32(gv.GetRowValues(i, "correlativo_pago"));
            }



  var correlativoMasAntiguo = ObtenerMenorValor(arrCorrelativo);

viernes, 4 de agosto de 2017

C# - Obtener el máximo número (entity)

//previamente la tabla (con su respectiva PRIMARY KEY) debe estar incluida en el MODELO.


 private int NewCodJuzgado()
        {
            var newId = 0;
            using (var context = new leaOperModel())
            {
                newId = context.p_juzgados.Select(p => p.cod_juzgado).Max() + 1;
            }
            return newId;
        }