jueves, 20 de septiembre de 2018

Función SQL para convertir fecha UTC a cualquier Time Zone definido



CREATE FUNCTION [fun_ConvertUTCToDateTimeZone](@datetimeUTC datetime, @TimeZoneToConvert nvarchar(60))
RETURNS datetime
AS
BEGIN
       declare @fechaReturn datetime

       set @fechaReturn = (SELECT CONVERT(datetime,@datetimeUTC)
    AT TIME ZONE 'UTC'
       AT TIME ZONE @TimeZoneToConvert);

       Return @fechaReturn
END;



Ejemplo


Conocer TimeZone de Instancia de SQL


DECLARE @TimeZone VARCHAR(50)
EXEC MASTER.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'TimeZoneKeyName',@TimeZone OUT

SELECT @TimeZone



miércoles, 15 de agosto de 2018

Función SQL Server para calcular días hábiles,Contador De Dias Habiles

Sp Contador De Días Hábiles

CREATE FUNCTION [dbo].[DifDias](@fch_ini datetime, @fch_fin datetime)
RETURNS int
AS
BEGIN
DECLARE @TotalDias  DECIMAL(6,1) --Con esta variable calculamos cuantos dias "normales" hay en el rango de fechas
DECLARE @DiasNoLaborables INT --Con esta variable acumulamos los dias no laborables
DECLARE @DiasFeriados SMALLINT --Total dias feriados entre el rango de fechas
DECLARE @Cnt INT --esta variable nos sirve de contador para saber cuando lleguemos al ultimo dia del rango
DECLARE @EvalDate DATETIME --esta variable es la que comparamos para saber si el dia que esta calculando es sábado o domingo

SET @Cnt = 0
SET @DiasNoLaborables = 0
--Calculamos cuantos dias normales hay en el rango de fechas
SELECT @TotalDias = DATEDIFF(HOUR,@fch_ini,@fch_fin) / 24.0--Se maneja diferencia de dias a nivel horas
SELECT @DiasFeriados = COUNT(1) FROM Configuracion.DiasFestivos WHERE feFestiva >= @fch_ini AND feFestiva <= @fch_fin
WHILE @Cnt < @TotalDias
BEGIN
    SELECT @EvalDate = @fch_ini + @Cnt
    IF datepart(dw,@EvalDate) = 6 OR datepart(dw,@EvalDate) = 7
    BEGIN
        SET @DiasNoLaborables = @DiasNoLaborables + 1
    END
    SET @Cnt = @Cnt + 1
END
RETURN cast((@TotalDias - @DiasNoLaborables - @DiasFeriados) as int)
END

Leer Archivo Excel utilizando LinqToExcel



Ejemplo de implementacion:

        public int LeerDocumentoExcel(ref List<ComplementoPagoImportadoExcel> LCPIE, string RutaArchivo, out string MensajeError)
        {
            try
            {
                MensajeError = string.Empty;
                var book = new ExcelQueryFactory(RutaArchivo);
                var resultado = (from row in book.Worksheet("Hoja1")
                                 let item = new ComplementoPagoImportadoExcel
                                 {
                                     //ENCABEZADO DE DOCUMENTO
                                     Serie = row["SERIE"].Cast<string>(),
                                     Cliente = row["CLIENTE"].Cast<string>(),
                                     Bodega = row["BODEGA"].Cast<string>(),
                                     Fecha = row["FECHA"].Cast<DateTime>(),
                                     FormaPago = row["FORMAPAGO"].Cast<int>(),
                                     Expedido = row["EXPEDIDO"].Cast<string>(),
                                     FechaPago = row["FECHA DE PAGO"].Cast<DateTime>(),
                                     Moneda = row["MONEDA"].Cast<string>(),
                                     TipoCambio = row["TIPO DE CAMBIO"].Cast<int>(),
                                     CondicionesPago = row["CONDICIONES PAGO"].Cast<string>(),
                                     Referencia = row["REFERENCIA"].Cast<string>(),
                                     ExcentoIva = row["EXCENTO IVA"].Cast<string>(),
                                     TazaIva = row["TASA IVA"].Cast<decimal>(),
                                     TazarIva = row["TASAR IVA"].Cast<decimal>(),
                                     TipoRelacion = row["TIPO DE RELACION "].Cast<string>(),
                                     UsoDeCFDI = row["USO DE CFDI"].Cast<string>(),
                                     Notas = row["NOTAS"].Cast<string>(),
                                     Confirmacion = row["CONFIRMACIÓN"].Cast<string>(),
                                     MedioPago = row["MEDIO DE PAGO"].Cast<string>(),


                                     //COMPLEMENTO DE PAGO
                                     FechaPagoCP = row["FECHA DE PAGO"].Cast<DateTime>(),
                                     HoraPago = row["HORA PAGO"].Cast<DateTime>(),
                                     MonedaPago = row["MONEDA PAGO"].Cast<string>(),
                                     TipoPago = row["TIPO DE PAGO"].Cast<string>(),
                                     FormaPagoCP = row["FORMA DE PAGO"].Cast<string>(),
                                     Monto = row["MONTO"].Cast<decimal>(),
                                     NumeroOpera = row["NUMERO OPERACIÓN"].Cast<string>(),
                                     RFCEmisor = row["Rfc Emisor:"].Cast<string>(),
                                     NoBanco = row["Nom Banco:"].Cast<string>(),
                                     CuentaOrdenante = row["Cuenta Ordenante:"].Cast<string>(),
                                     RfcBeneficiario = row["Rfc Beneficiario:"].Cast<string>(),
                                     CuentaBeneficiaria = row["Cuenta Beneficiario:"].Cast<string>(),
                                     TipoCadenaPago = row["Tipo Cadena Pago:"].Cast<string>(),
                                     CertificadoPago = row["Certificado de Pago:"].Cast<string>(),
                                     CadenaPago = row["Cadena Pago:"].Cast<string>(),
                                     SelloPago = row["Sello Pago:"].Cast<string>(),


                                     //DETALLE COMPLEMENTO PAGO
                                     SerieDCP = row["SERIE"].Cast<string>(),
                                     FolioDCP = row["FOLIO"].Cast<string>(),
                                     UUIDDCP = row["UUID"].Cast<string>(),
                                     MonedaDCP = row["MONEDA"].Cast<string>(),
                                     TipoCambioDCP = row["TIPO CAMBIO"].Cast<int>(),
                                     ParcialidadCDP = row["PARCIALIDAD"].Cast<int>(),
                                     SaldoAnteriorDCP = row["SALDO ANTERIOR"].Cast<decimal>(),
                                     ImportePagadoDCP = row["IMPORTE PAGADO"].Cast<decimal>(),
                                     SaldoDCP = row["SALDO"].Cast<decimal>()
                                 }
                                 //where (item.Serie != null) || (item.Cliente != null) || (item.Bodega != null)
                                 select item).ToList();

                var aux = (from x in resultado
                           where (x.Serie != null) || (x.Cliente != null) || (x.Bodega != null)
                           select x).ToList();

                book.Dispose();
                LCPIE = aux;
                return 0;
            }
            catch (Exception e)
            {

                MensajeError = e.Message;
                return -1;
            }

        }

martes, 14 de agosto de 2018

Rellenar cadena con caracteres a la izquierda SQL SERVER



CREATE FUNCTION [Configuration].[fun_RellenaCadena] (@Cadena NVARCHAR(20), @CaraterRelleno AS NVARCHAR(1), @LongitudFinal INT)

RETURNS NVARCHAR(20) AS 
BEGIN

       WHILE (LEN(@Cadena) < @LongitudFinal)
       BEGIN
         SET @Cadena = @CaraterRelleno + @Cadena
       END

RETURN @Cadena

END



-------------------------

Ejemplo de ejecucion
select [Configuration].[fun_RellenaCadena] ('555','X',6)

Resultado:
XXX555

domingo, 12 de agosto de 2018

inhibir tecla de enter en aspx

Bloquear tecla enter ASP NET

<form runat="server" defaultbutton="DoNothing">
       
<asp:Button ID="DoNothing" runat="server" Enabled="false" style="display: none;" />