Programación General > Visual Basic 6.0 e inferiores
Sentencia If No Se Cumpe, Pero Igual Entra
UserCode:
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 --- Dim HE1 As VariantDim HS1 As VariantDim HE2 As VariantDim HS2 As Variant '1er Turno:Dim HEA1 As Variant 'Hora Entrada "Asignada" del Empleado (1er Turno)Dim HSA1 As Variant 'Hora Salida "Asignada" del Empleado (1er Turno)'2do Turno:Dim HEA2 As Variant 'Hora Entrada "Asignada" del Empleado (2do Turno)Dim HSA2 As Variant 'Hora Salida "Asignada" del Empleado (2do Turno) Dim HrLOTD1 As Variant Dim HrLOTD2 As Variant Dim HrLOTN1 As Variant Dim HrLOTN2 As Variant 'LOT: Ley Organica del Trabajo (Jornada Laboral Diurna) HrLOTD1 = "5:00:00 AM" & " " & dtpHED1.Value HrLOTD2 = "7:00:00 PM" & " " & dtpHSD1.Value 'LOT: Ley Organica del Trabajo (Jornada Laboral Nocturna) HrLOTN1 = "7:00:00 PM" & " " & dtpHEN1.Value HrLOTN2 = "5:00:00 AM" & " " & CDate(Date) + 1 'La Fecha de hoy más 1 dia más, (siguiente dia) 'LAS SENTENCIAS IF: If Format(CDate(HS1), "dd-mmmm-yyyy hh:mm:ss AM/PM") >= Format(CDate(HrLOTN1), "dd-mmmm-yyyy hh:mm:ss AM/PM") _ And _ Format(CDate(HSA1), "dd-mmmm-yyyy hh:mm:ss AM/PM") <= Format(CDate(HrLOTN2), "dd-mmmm-yyyy hh:mm:ss AM/PM") Then HrsExtraN1 = HrsExtSal1 LbTotalHrsExtN.Caption = HrsExtraN1 Else HrsExtraN1 = 0 LbTotalHrsExtN.Caption = HrsExtraN1 End If
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.
F_Tanori:
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
UserCode:
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.
UserCode:
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)
UserCode:
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 --- Hrs1 = 0: Hrs2 = 0 If CmbEntradaD1 <> "" And CmbSalidaD1 <> "" Then Hr1 = CmbEntradaD1 & " " & dtpHED1 Hr2 = CmbSalidaD1 & " " & dtpHSD1 LbHorasTurnoD1 = Mid(CDate(Hr2) + (1 - CDate(Hr1)), 12, 5) Else LbHorasTurnoD1 = 0 End If 'Horas Extra: HoraTope = "05:00" If CDate(LbHorasTurnoD1) > CDate(HoraTope) Then HrLimiteD1 = Mid(CDate(LbHorasTurnoD1) + (1 - CDate(HoraTope)), 12, 5) LbHorasTurnoD1 = "05:00" Else HrLimiteD1 = 0 End If If HrLimiteD1 = 0 And HrLimiteD2 = 0 Then A = 0 Else A = CDate(HrLimiteD1) + CDate(HrLimiteD2) End If LbTotalHrsExtD(0) = Mid(A, 1, 5) '... C = CDate(LbHorasTurnoD1) + CDate(LbHorasTurnoD2) + CDate(LbHorasTurnoN1) + CDate(LbHorasTurnoN2) + CDate(LbTotalHrsExtD(0)) + CDate(LbTotalHrsExtN) LbTotalHrsLb = Mid(C, 1, 5)
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:
Navegación
[#] Página Siguiente
Ir a la versión completa