Tuesday, July 14, 2015

Determinar cuántas horas hay entre 2 fechas (vb.net)

Tengo dos fechas con horas, necesito saber cuántas horas en total hay en dicho rango.



Utilizaremos el tipo de datos TimeSpan. Con este tipo de datos podemos obtener lo siguiente:

Número de días (redondeando), número de horas (lo que sobra), número de días en total, número de horas en total, y otros datos más como se muestra en la siguiente captura.



El código en VB.NET sería de la siguiente manera:

 
 Dim fecha1 As DateTime = CDate(Me.dtpFsalida.Value.Date & " " & Me.dtpHsalida.Value.ToString("HH:mm"))
        Dim fecha2 As DateTime = CDate(Me.dtpFretorno.Value.Date & " " & Me.dtpHretorno.Value.ToString("HH:mm"))

        Dim diferencia As TimeSpan = fecha2.Subtract(fecha1)


Wednesday, June 24, 2015

Rdlc files open in Xml editor, not in Report Designer

O que es lo mismo, tengo un archivo de reporte RDLC en mi proyecto / solución de Visual Studio 9.0 que al darle doble clic o clic derecho Abrir Con no me sale la opción de "Report Designer" y me abre directamente el código XML.

Tal como se ve en la siguiente imagen, debería mostrarse en la primer opción "Report Designer (Default)"


Entonces, lo que probamos primero es ir al menú del Visual Studio Tools --> Import and Export Settings. Activar la opción "Reset all settings" y clic en Next. Ahora, en el caso de que les salga siguiente pantalla:


Después de haber cerrado todas las instancias del Visual Studio, o sea, todo lo abierto que tengamos, nos vamos al CMD y typeamos lo siguiente como se muestra en la imagen, esperamos 1 a 2 minutos y luego finalizamos el proceso mediante el Windows Task Manager

"%programfiles%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" /resetuserdata 


Finalmente, volvemos abrir el IDE, intentamos abrir nuestro reporte y felizmente volveremos a ver una ventanita como la siguiente:


En realidad también esta solución funciona si te sale el siguiente warning (en algún momento de buscar solución al problema de no poder abrir por el diseñador mi reporte, me salió esta advertencia):


Palabras claves:

Package Load Failure
Microsoft.VisualStudio.Xaml. has failed to load properly
CurrentSettings.vssettings is not available for write. You can change this file on the Import and Export Settings Tools Options Page.
The line endings in the following file are not consistent. Do you want to normalize the line endings?
Could not load type 'Microsoft.VisualStudio.DataDesign.SyncDesigner.SynFacade.SyncManager' from assembly ...
Failed to export settings for 'XAML Editor' ...



Friday, June 19, 2015

Reporting Services, mostrar dato solo una vez en una tabla

Tenemos el caso de un reporte, un listado de datos en una tabla común pero hay cierta columna que se va repitiendo a lo largo de todo el reporte y únicamente queremos que se muestre en la primer fila tal como se muestra en la siguiente imagen:


Ok, en el diseño de nuestro reporte hacemos clic derecho sobre la celda que no queremos que se repita y Properties. A continuación se mostrará un pop-up en el que activaremos la opción de "Hide Duplicates" y elegiremos la fuente de datos a la que pertenece nuestra tabla. Y eso es todo.



Friday, January 24, 2014

Convertir cadena a fecha (String to Date) en dd/MM/yyyy

Tengo una fecha en cadena

 Dim strFecha As String= "24/01/2014"



Necesito convertirla a tipo de datos Date. El siguiente pedazo de código realiza dicha conversión y valida si la cadena de entrada evidentemente es una fecha (ya que como se trata de una cadena, podría ser cualquier cosa).



 Dim fecha As Date
 Me.lblMessage.Text = String.Empty
      Try
         fecha = Date.ParseExact(dgvReserva.CurrentCell.Value, "dd/MM/yyyy", System.Globalization.DateTimeFormatInfo.InvariantInfo)

      Catch ex As FormatException
          dgvReserva.CurrentCell.Value = Now.Date.ToString("dd/MM/yyyy")
          Me.lblMessage.Text = "La fecha debe tener formato [dd/mm/yyyy]."
      Catch ex As Exception
          dgvReserva.CurrentCell.Value = Now.Date.ToString("dd/MM/yyyy")
          Me.lblMessage.Text = "La fecha debe tener formato [dd/mm/yyyy]."
      End Try

HaPPy Coding! =)

Wednesday, December 11, 2013

Cuántos domingos hay en un rango de fecha - Query

La pregunta es cómo determinar, dado un rango de fechas, cuántos días domingos hay.
SQL Server no tiene una función propia como tal, así que podemos utilizar la siguiente
función la cual le enviamos el rango de fechas. 
 
 
 CREATE FUNCTION fncCuantosDomingosHay (@inicio DATETIME, @fin DATETIME)
  RETURNS integer
  AS
  BEGIN
  DECLARE @dia_sem INT
  DECLARE @domingos INT
  DECLARE @fecha datetime
   
  SET @fecha=@inicio
  SET @domingos=0
  while @fecha <= @fin
  BEGIN    
   SELECT @dia_sem=datepart(weekday,@fecha) 
   IF @dia_sem=1
     SET @domingos=@domingos+1    
   SELECT @fecha=dateadd(dd,1,@fecha)     
  END
  return @domingos
    END


--EJECUTAMOS LA FUNCIÓN

declare @total integer

exec @total= fncCuantosDomingosHay '2013/10/16','2013/11/15'

print @total

--Resultado: 4