• Lunes 23 de Diciembre de 2024, 04:52

Autor Tema:  Sentencia If No Se Cumpe, Pero Igual Entra  (Leído 1989 veces)

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Sentencia If No Se Cumpe, Pero Igual Entra
« en: Miércoles 5 de Septiembre de 2007, 21:25 »
0
Hola, nuevamente gente querida de solocodigo, hay que ver lo que hace no tener internet y 5 semanas sin monitor, hasta recuperarse de eso  B)

Me he encontrado con una verdadera inconcordancia de validación de datos en unas sentencias IF que tengo. Las sentencias IF evaluar unas Horas que estan en unas variables.

Las variables no estan como Date, sino Variant y se les trabaja con formato de hora/Fecha por Format.



Código: Text
  1.  
  2. Dim HE1 As Variant
  3. Dim HS1 As Variant
  4. Dim HE2 As Variant
  5. Dim HS2 As Variant
  6.  
  7. '1er Turno:
  8. Dim HEA1 As Variant 'Hora Entrada "Asignada" del Empleado (1er Turno)
  9. Dim HSA1 As Variant 'Hora Salida "Asignada" del Empleado (1er Turno)
  10. '2do Turno:
  11. Dim HEA2 As Variant 'Hora Entrada "Asignada" del Empleado (2do Turno)
  12. Dim HSA2 As Variant 'Hora Salida "Asignada" del Empleado (2do Turno)
  13.  
  14.  
  15.     Dim HrLOTD1 As Variant
  16.     Dim HrLOTD2 As Variant
  17.     Dim HrLOTN1 As Variant
  18.     Dim HrLOTN2 As Variant
  19.  
  20.     'LOT: Ley Organica del Trabajo (Jornada Laboral Diurna)
  21.     HrLOTD1 = "5:00:00 AM" & " " & dtpHED1.Value
  22.     HrLOTD2 = "7:00:00 PM" & " " & dtpHSD1.Value
  23.    
  24.     'LOT: Ley Organica del Trabajo (Jornada Laboral Nocturna)
  25.     HrLOTN1 = "7:00:00 PM" & " " & dtpHEN1.Value
  26.     HrLOTN2 = "5:00:00 AM" & " " & CDate(Date) + 1 'La Fecha de hoy más 1 dia más, (siguiente dia)
  27.  
  28. 'LAS SENTENCIAS IF:
  29.  
  30.             If Format(CDate(HS1), "dd-mmmm-yyyy hh:mm:ss AM/PM") >= Format(CDate(HrLOTN1), "dd-mmmm-yyyy hh:mm:ss AM/PM") _
  31.                And _
  32.                Format(CDate(HSA1), "dd-mmmm-yyyy hh:mm:ss AM/PM") <= Format(CDate(HrLOTN2), "dd-mmmm-yyyy hh:mm:ss AM/PM") Then
  33.                 HrsExtraN1 = HrsExtSal1
  34.                 LbTotalHrsExtN.Caption = HrsExtraN1
  35.             Else
  36.                 HrsExtraN1 = 0
  37.                 LbTotalHrsExtN.Caption = HrsExtraN1
  38.             End If
  39.  
  40.  

En el codigo IF haciendo una corrida en frio tengo lo siguiente:
IF (8:30 AM >= 7:00 PM) AND (7:00 AM <= 5:00 AM) THEN
     HrsExtraN1 = HrsExtSal1 = 1,5
ELSE
     HrsExtraN1 = 0
END IF

Claro, la validación es (05/09/2007 8:30 AM) etc... pero lo puse sin las fechas, ya que son horas del mismo dia, para verse más claro y sencillo.

Lo raro aqui es que la sentencia IF si se cumple cuando no deberia, deberia de pasarse al ELSE, pero por alguna extraña razón que desconozco, la sentencia si se cumple. Incluso las decisiones están por AND y no por OR, si se cumple una y otra no, igual no entra, pero ninguna se cumple y entra  :o

Esto es lo que uno indicaria estar, totalmente desconcertado, perplejo, en shock :blink:
PD: Los AM y PM si son los que se indican, lo he revisado una y otra vez para ver si es verdad lo que mis ojos ven, pero si, tengo una sentencia IF que no se cumple, pero que igual entra en ella, si se cumple lo cual no deberia de ser.

Los datos vienen de unos Combobox (indiferente si fuesen de unos Textbox) y los dtp son DTPicker, de esos controles de Fecha. Esos datos los meto en las variables que aqui aparecen y procedo con lo de los IF.
Si esto es Leído por accidente, induzca al vomito

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Sentencia If No Se Cumpe, Pero Igual Entra
« Respuesta #1 en: Miércoles 5 de Septiembre de 2007, 23:32 »
0
Hola no he podido revisar el código, porque no tengo VB :P


Pero tienes 2 variables que no inicializas HS1 y HSA1 en el IF



ademas la funcion format te devuelve cadena comparar cadenas con los operadores
 >= y <= esperando que se comporten como fechas y horas creo que no es muy recomendable deberias de tratarlo segun el tipo de dato correspondiente



Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Sentencia If No Se Cumpe, Pero Igual Entra
« Respuesta #2 en: Jueves 6 de Septiembre de 2007, 01:20 »
0
hola! que mas compadre!

Si esas variables si estan inicializadas lo que pasa es que los IF están en un procedimiento y las declaraciones de las variables estan al tope de todo el modulo, es que copie y pegue para esta oportunidad en el post. todas las variables tienen sus datos, creo que VB6 tiene problema en sus IF para evaluar datos de este tipo. No puedo trabajar las variables de otra forma porque precisamente necesito que sean horas con fecha.

Y no sé qué otra solución podría tener para evaluar estas horas con fecha en un IF.
Si esto es Leído por accidente, induzca al vomito

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Sentencia If No Se Cumpe, Pero Igual Entra
« Respuesta #3 en: Jueves 6 de Septiembre de 2007, 01:37 »
0
uhmmm.... no quiero apresurarme con la respuesta, pero igual coloco, comento, menciono que quita los Format que fueron colocados por algo necesario e importante, y parece que la inconcordancia de datos en la ventana al correr el programa parece haberse arreglado, pero espero no estar hablando tan pronto porque es lo primero que he visto.

Digo esto porque por ahora me retiro y procedere luego a seguirle revisando y evaluando a ver que tal trabajan y salen los resultados.

Ah! por cierto, quien quiera cambiar el Tema (aspecto) de su Firefox, esta esta web:
http://mashable.com/2007/08/26/firefox-themes/

En el Firefox, se van a Herramientas -> Complementos
Elijen la pestaña o icono de Temas
Y le dan a Usar o activar tema
Firefox no pedira reiniciar, cierra y lo vuelven a abrir y listo.
Muerete de envidia cochino y pesado Internet Explorer  :P

Asi pueden tener aspectos como este, por ejemplo:


Con respecto a lo de la validación de horas, estare informando  B)
Si esto es Leído por accidente, induzca al vomito

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Sentencia If No Se Cumpe, Pero Igual Entra
« Respuesta #4 en: Lunes 10 de Septiembre de 2007, 15:26 »
0
Hola nuevamente

Me volvia loco el enorme codigo de validacion de horas que tenia que crecio y creio hasta tal punto que daba miedo verlo y hacerle algo, basandome en una ecuacion para Excel para determinar entre una hora1 y una hora2 la cantidad de horas entre ambas, termine haciendo otro codigo nuevo.

Gracias a una ayuda de alguien que me pidio si podia conseguir la manera de calcular horas en excel encontre esto en internet: =SI(B1>A1;B1-A1;B1+(1-A1))
y basandome en eso arme esto:

Código: Text
  1.  
  2.     Hrs1 = 0: Hrs2 = 0
  3.     If CmbEntradaD1 &#60;&#62; &#34;&#34; And CmbSalidaD1 &#60;&#62; &#34;&#34; Then
  4.         Hr1 = CmbEntradaD1 & &#34; &#34; & dtpHED1
  5.         Hr2 = CmbSalidaD1 & &#34; &#34; & dtpHSD1
  6.         LbHorasTurnoD1 = Mid(CDate(Hr2) + (1 - CDate(Hr1)), 12, 5)
  7.     Else
  8.         LbHorasTurnoD1 = 0
  9.     End If
  10.    
  11.     'Horas Extra:
  12.     HoraTope = &#34;05:00&#34;
  13.     If CDate(LbHorasTurnoD1) &#62; CDate(HoraTope) Then
  14.         HrLimiteD1 = Mid(CDate(LbHorasTurnoD1) + (1 - CDate(HoraTope)), 12, 5)
  15.         LbHorasTurnoD1 = &#34;05:00&#34;
  16.     Else
  17.         HrLimiteD1 = 0
  18.     End If
  19.     If HrLimiteD1 = 0 And HrLimiteD2 = 0 Then
  20.         A = 0
  21.     Else
  22.         A = CDate(HrLimiteD1) + CDate(HrLimiteD2)
  23.     End If
  24.     LbTotalHrsExtD(0) = Mid(A, 1, 5)
  25.     '...
  26.     C = CDate(LbHorasTurnoD1) + CDate(LbHorasTurnoD2) + CDate(LbHorasTurnoN1) + CDate(LbHorasTurnoN2) + CDate(LbTotalHrsExtD(0)) + CDate(LbTotalHrsExtN)
  27.     LbTotalHrsLb = Mid(C, 1, 5)
  28.  
  29.  

Siendo LbHorasTurnoD1 = Mid(CDate(Hr2) + (1 - CDate(Hr1)), 12, 5) el que hace el asunto en cuestion.

Antes el resuntado entre ambas horas lo sacaba en dato numerico, pero era inestable, no era preciso, con el escrito nuevo el resultado lo volvi a poner y dejar en horas (el resultado entre ambas horas) asi no se pela en el resultado. Pero eso me ocasiona un problema, el que necesito sumar todos los resultados de Hora que estan en la tabla, de un empleado. Como el resultado no es numerico sino en formato de Texto, no puedo usar el Sum() de SQL. El resultado se guarda en la tabla en fomato Texto y no de hora, porque al resultado no le guardo ningun am o pm.

A los campos HoraEntrada y HoraSalida si se guardan con su am y pm, pero el resultado entre ambas horas solo guardo, por ejemplo, 05:00 o 04:30, es decir, el empleado trabajó 5Hrs o trabajo ese dia 4Hrs y 1/2.

Bueno, este tipo de cosas no es raro que pase, se resuelve un problema pero que ocasiona otro, voy a poner el asunto en el foro de bases de datos, haber si tiene solucion, fuera de eso, creo que este episodio termina aqui en este foro.

 :comp:
Si esto es Leído por accidente, induzca al vomito

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Sentencia If No Se Cumpe, Pero Igual Entra
« Respuesta #5 en: Lunes 10 de Septiembre de 2007, 19:07 »
0
Sobre mi problema de campos que son de Texto pero tienen como datos
05:00, 04:30, 03:00, etc... (como si fuesen horas pero sin am ni pm)

Pues probe con esto:
SELECT Sum(Hour(TotalHrsD1)) AS Horas, Sum(Minute(TotalHrsD1)) AS Minutos FROM chl_tb;

Era lo que estaba viendo, si podia tomar la porcion de hora y la de minutos por separado y sumarlas, habia visto con un Date_Format() pero no lo reconocia, pero con estos Hour() y Minute() ambos metidos en Sum() si da en un query sql la sumatoria de las horas y los minutos por separados.

Y yo que pense que no daria con la cuestion o que me tardaria mas de lo pensado  :rolleyes:

 :hola:  :comp:
Si esto es Leído por accidente, induzca al vomito