Domingo 22 de Diciembre de 2024, 22:20
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Sentencia If No Se Cumpe, Pero Igual Entra
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Sentencia If No Se Cumpe, Pero Igual Entra (Leído 1987 veces)
UserCode
Miembro MUY activo
Mensajes: 338
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
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 Variant
Dim HS1 As Variant
Dim HE2 As Variant
Dim 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
Esto es lo que uno indicaria estar, totalmente desconcertado, perplejo, en shock
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.
Tweet
Si esto es Leído por accidente, induzca al vomito
F_Tanori
Moderador
Mensajes: 1919
Nacionalidad:
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
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
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
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
Asi pueden tener aspectos como este, por ejemplo:
Con respecto a lo de la validación de horas, estare informando
Si esto es Leído por accidente, induzca al vomito
UserCode
Miembro MUY activo
Mensajes: 338
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
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.
Si esto es Leído por accidente, induzca al vomito
UserCode
Miembro MUY activo
Mensajes: 338
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
Si esto es Leído por accidente, induzca al vomito
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Sentencia If No Se Cumpe, Pero Igual Entra