elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Trabajar con FECHAS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Trabajar con FECHAS  (Leído 5,480 veces)
ka0s


Desconectado Desconectado

Mensajes: 308


Ver Perfil
Trabajar con FECHAS
« en: 9 Septiembre 2009, 00:55 am »

Bueno hace rato ya no tenía ninguna duda, así que vine a molestar de nuevo.
Espero que me puedan dar una mano.
Lo que estoy haciendo es una aplicación para un gimnasio.
Lo que intento hacer es que en una Grilla (MSHFLEXGRID) me figure si pagó o no pagó el socio ingresado.

O sea, yo cuando ingreso un socio nuevo, en un textbox figura la fecha que se inscribe (día que se crea el nuevo socio) y quiero que al MES siguiente, en la grilla me figure en ROJO si tiene que pagar NUEVAMENTE el mes o si ya pagó que figure en VERDE.

La verdad, no tengo idea como hacerlo.
Yo pensaba hacer:

Si fechainscripcion > fechaactual entonces
        GRILLA en color ROJO.
Sino
        GRILLA en color VERDE.

Obviamente TOMANDO con Mid o Left solamente los dos primeros valores de la fecha, pero no me salió.

Espero que me puedan dar una mano.
Desde ya muchas gracias!


En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Trabajar con FECHAS
« Respuesta #1 en: 9 Septiembre 2009, 01:45 am »

Hola, un ejemplo para que veas como seria:

Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.   With MSHFlexGrid1
  5.      .FixedCols = 0
  6.  
  7.      .FormatString = "Fecha Alta|Nombre Cliente"
  8.  
  9.      .AddItem "07/09/2009" & vbTab & "Sebastian"
  10.      .AddItem "08/09/2009" & vbTab & "Leandro"
  11.      .AddItem "09/09/2009" & vbTab & "Cobein"
  12.      .AddItem "01/06/2009" & vbTab & "Ivo"
  13.      .AddItem "15/06/2009" & vbTab & "Karcrack"
  14.  
  15.      .ColWidth(0) = 1500
  16.      .ColWidth(1) = 1500
  17.      .RowHeight(1) = 0
  18.   End With
  19.   Call ColorearFecha
  20. End Sub
  21.  
  22. Private Sub ColorearFecha()
  23.    Dim vFechaAlta As String, vFechaPago As String
  24.    Dim i As Integer
  25.    Dim vColumna As Integer
  26.  
  27.    MSHFlexGrid1.Redraw = False
  28.    For i = 2 To MSHFlexGrid1.Rows - 1
  29.        For vColumna = 0 To MSHFlexGrid1.Cols - 1
  30.            MSHFlexGrid1.Row = i
  31.            MSHFlexGrid1.Col = vColumna
  32.            vFechaAlta = CDate(Format(MSHFlexGrid1.TextMatrix(i, 0), "dd/MM/yyyy"))
  33.            vFechaPago = DateAdd("d", 30, vFechaAlta)
  34.            If Date > CDate(vFechaPago) Then
  35.               MSHFlexGrid1.CellBackColor = vbRed
  36.            Else
  37.                MSHFlexGrid1.CellBackColor = vbGreen
  38.            End If
  39.        Next vColumna
  40.    Next i
  41.    MSHFlexGrid1.Redraw = True
  42. End Sub

fijate ahi que esta la fecha de alta en cada cliente, lo recorre y se fija si la fehca actual es mayor a la fecha que debe pagar (fecha de alta + un mes).fijate que te los marca con color rojo los que se pasaron en la fecha de paga (Karcrack y Ivo )  :xD y los que todavia no les llego la fecha de pagar los marca en verde.igualemnte en la base de datos debes tener un campo que guarde la ultima fecha de pago, porque despues la fecha de alta una vez que ya pago no te va a servir mas, solo la primera vez sirve, pero despues te vas a tener que fijar en la fecha de ultimo pago, y para saber en que fecha debes fijarte te podes crear un campo que guarde si ya pago una vez o todavia no pago, me explico...si recien lo das de alta y no pago a ese campo le pones una "N" de nuevo, y fijas en la fecha de alta...y si ya pago una vez a ese campo le pones una "P" de pagado y entonces te fijas en la fecha de ultimo pago.

saludos.


« Última modificación: 9 Septiembre 2009, 02:18 am por seba123neo » En línea

ka0s


Desconectado Desconectado

Mensajes: 308


Ver Perfil
Re: Trabajar con FECHAS
« Respuesta #2 en: 9 Septiembre 2009, 05:51 am »

Te agradezco Seba siempre por ayudarme.
Pero la verdad se me complica entender el código. Y también traté de aplicarlo a mi proyecto que es con BASE DE DATOS pero tampoco pude hacerlo andar.

Cuando creo un nuevo socio le puse un campo que diga "Fecha Que Paga", como me indicaste vos.

Más que nada de el codigo que pusiste no entiendo el if.
Si no es mucho pedir, podrías comentarlo a ver si lo entiendo de esa manera?

Desde ya muchas gracias Seba!

Saludos!

PD: Dejo una imágen del proyecto así ven como es.

Form Principal


Form Nuevo


Saludos!!
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Trabajar con FECHAS
« Respuesta #3 en: 9 Septiembre 2009, 06:58 am »

es lo mismo simplemente yo lo hice asi nomas para que tengas una idea, pero bueno te explico:

Código
  1. Private Sub ColorearFecha()
  2.    Dim vFechaAlta As String, vFechaPago As String
  3.    Dim i As Integer
  4.    Dim vColumna As Integer
  5.  
  6.    MSHFlexGrid1.Redraw = False 'deshabilita el repintado para que no parpadee cuando se pintan las celdas
  7.    For i = 2 To MSHFlexGrid1.Rows - 1 ' recorre las filas de la grilla
  8.      For vColumna = 0 To MSHFlexGrid1.Cols - 1 'recorre las columnas de la fila actual
  9.            MSHFlexGrid1.Row = i 'posiciona la fila actual
  10.            MSHFlexGrid1.Col = vColumna 'posiciona la columna actual
  11.            vFechaAlta = CDate(Format(MSHFlexGrid1.TextMatrix(i, 0), "dd/MM/yyyy")) ' saca la fecha de alta de la columna 0
  12.            vFechaPago = DateAdd("d", 30, vFechaAlta) 'calcula la fecha de pago sumandole 30 dias a la fecha de alta
  13.            If Date > CDate(vFechaPago) Then 'si la fecha actual es mayor a la fecha de pago es porque el tipo no pago
  14.               MSHFlexGrid1.CellBackColor = vbRed 'marca en rojo
  15.            Else
  16.               MSHFlexGrid1.CellBackColor = vbGreen ' marca en verde
  17.            End If
  18.      Next vColumna 'siguiente columna
  19.    Next i 'siguiente fila
  20.    MSHFlexGrid1.Redraw = True ' habilita el repintado
  21. End Sub

en la grilla debe haber otra columna( que seria otro campo en la base de datos) que guarde la proxima fecha de pago, la calculas directamente cuando das de alta el cliente, por ejemplo ahi vos diste de alta 2 clientes cuya fecha de alta es la misma, bueno cuando das de alta el cliente debes guardar tambien la fecha de proximo pago (que seria la fecha de alta + 30 dias). y en la grilla para estos 2 te quedaria que la fecha de proximo pago seria el 08/10/2009.eso es para cuando das de alta, ahora debes hacer una pantalla que sea para hacer pagar el cliente o desde un boton ahi nomas , ni idea como tenes pensado hacerlo, pero la idea seria que si paga por segunda vez otra vez le sumes a la fecha de pago otros 30 dias y asi sucesivamente cada vez que el cliente paga.la funcion esta la llamas despues de que cargas la grilla siempre.

saludos.

En línea

ka0s


Desconectado Desconectado

Mensajes: 308


Ver Perfil
Re: Trabajar con FECHAS
« Respuesta #4 en: 9 Septiembre 2009, 07:06 am »

es lo mismo simplemente yo lo hice asi nomas para que tengas una idea, pero bueno te explico:

Código
  1. Private Sub ColorearFecha()
  2.    Dim vFechaAlta As String, vFechaPago As String
  3.    Dim i As Integer
  4.    Dim vColumna As Integer
  5.  
  6.    MSHFlexGrid1.Redraw = False 'deshabilita el repintado para que no parpadee cuando se pintan las celdas
  7.    For i = 2 To MSHFlexGrid1.Rows - 1 ' recorre las filas de la grilla
  8.      For vColumna = 0 To MSHFlexGrid1.Cols - 1 'recorre las columnas de la fila actual
  9.            MSHFlexGrid1.Row = i 'posiciona la fila actual
  10.            MSHFlexGrid1.Col = vColumna 'posiciona la columna actual
  11.            vFechaAlta = CDate(Format(MSHFlexGrid1.TextMatrix(i, 0), "dd/MM/yyyy")) ' saca la fecha de alta de la columna 0
  12.            vFechaPago = DateAdd("d", 30, vFechaAlta) 'calcula la fecha de pago sumandole 30 dias a la fecha de alta
  13.            If Date > CDate(vFechaPago) Then 'si la fecha actual es mayor a la fecha de pago es porque el tipo no pago
  14.               MSHFlexGrid1.CellBackColor = vbRed 'marca en rojo
  15.            Else
  16.               MSHFlexGrid1.CellBackColor = vbGreen ' marca en verde
  17.            End If
  18.      Next vColumna 'siguiente columna
  19.    Next i 'siguiente fila
  20.    MSHFlexGrid1.Redraw = True ' habilita el repintado
  21. End Sub

en la grilla debe haber otra columna( que seria otro campo en la base de datos) que guarde la proxima fecha de pago, la calculas directamente cuando das de alta el cliente, por ejemplo ahi vos diste de alta 2 clientes cuya fecha de alta es la misma, bueno cuando das de alta el cliente debes guardar tambien la fecha de proximo pago (que seria la fecha de alta + 30 dias). y en la grilla para estos 2 te quedaria que la fecha de proximo pago seria el 08/10/2009.eso es para cuando das de alta, ahora debes hacer una pantalla que sea para hacer pagar el cliente o desde un boton ahi nomas , ni idea como tenes pensado hacerlo, pero la idea seria que si paga por segunda vez otra vez le sumes a la fecha de pago otros 30 dias y asi sucesivamente cada vez que el cliente paga.la funcion esta la llamas despues de que cargas la grilla siempre.

saludos.


Muchas gracias campeón, no solo me ayudaste sino que me diste una idea más para mi programa.
Cualquier duda aparezco por acá.

Gracias Seba!! :)
En línea

ka0s


Desconectado Desconectado

Mensajes: 308


Ver Perfil
Re: Trabajar con FECHAS
« Respuesta #5 en: 10 Septiembre 2009, 05:06 am »

Bueno vuelvo de nuevo acá.
Usé tu código Seba adaptandolo a la base de datos que estoy usando yo, pero no me funcionó como esperaba.

Agregué un campo nuevo como dijiste vos que se llame PROXIMO PAGO y como DateAdd le di el valor de un mes.

Pero cuando puse el código tuyo, modificandolo, me pinto todas de ROJO.
Y tendría que haberme pintado LA 1ERA SOLAMENTE mientras que la 2da y la 3era FILA tendrían que estar en VERDE.

Les dejo el código modificado:

Código
  1. Private Sub ColorearFecha()
  2.    Dim vFechaAlta As String, vFechaPago As String
  3.    Dim i As Integer
  4.    Dim vColumna As Integer
  5.  
  6.    grilla.Redraw = False
  7.    For i = 1 To grilla.Rows - 1
  8.        For vColumna = 1 To grilla.Cols - 1
  9.            grilla.Row = i
  10.            grilla.Col = vColumna
  11.            If RST!inscripcion >= CDate(RST!proximopago) Then
  12.               grilla.CellBackColor = vbRed
  13.            Else
  14.                grilla.CellBackColor = vbGreen
  15.            End If
  16.        Next vColumna
  17.    Next i
  18.    grilla.Redraw = True
  19. End Sub

Y una imágen para que vean lo que les digo:



Están marcadas en verde las dos filas que tendrian que figurar como PAGO y en rojo los que tienen que pagar nuevamente.

Saludos y gracias!
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Trabajar con FECHAS
« Respuesta #6 en: 11 Septiembre 2009, 01:46 am »

tenes que poner el numero de la columna donde esta la fecha de pago..quedaria algo asi en tu caso es la columna 7.

Código
  1. Private Sub ColorearFecha()
  2.    Dim vFechaPago As String
  3.    Dim i As Integer
  4.    Dim vColumna As Integer
  5.  
  6.    MSHFlexGrid1.Redraw = False
  7.    For i = 2 To MSHFlexGrid1.Rows - 1
  8.        For vColumna = 0 To MSHFlexGrid1.Cols - 1
  9.            MSHFlexGrid1.Row = i
  10.            MSHFlexGrid1.Col = vColumna
  11.            vFechaPago = CDate(Format(MSHFlexGrid1.TextMatrix(i, 7), "dd/MM/yyyy"))
  12.            If Date > CDate(vFechaPago) Then
  13.               MSHFlexGrid1.CellBackColor = vbRed
  14.            Else
  15.                MSHFlexGrid1.CellBackColor = vbGreen
  16.            End If
  17.        Next vColumna
  18.    Next i
  19.    MSHFlexGrid1.Redraw = True
  20. End Sub

proba eso, y fijate que hay algo mal ahi, porque el primer registro tiene la misma fecha de pago que la fecha de inscripcion, y deberia tener 1 mes mas o sea 09/11/2009, cuando das de alta debes guardar en ese campo 1 mes mas.en realidad te tendrian que salir todas en verde porque la fecha de hoy no es mayor a la fecha de 09/10/2009

saludos.
En línea

ka0s


Desconectado Desconectado

Mensajes: 308


Ver Perfil
Re: Trabajar con FECHAS
« Respuesta #7 en: 11 Septiembre 2009, 06:06 am »

tenes que poner el numero de la columna donde esta la fecha de pago..quedaria algo asi en tu caso es la columna 7.

Código
  1. Private Sub ColorearFecha()
  2.    Dim vFechaPago As String
  3.    Dim i As Integer
  4.    Dim vColumna As Integer
  5.  
  6.    MSHFlexGrid1.Redraw = False
  7.    For i = 2 To MSHFlexGrid1.Rows - 1
  8.        For vColumna = 0 To MSHFlexGrid1.Cols - 1
  9.            MSHFlexGrid1.Row = i
  10.            MSHFlexGrid1.Col = vColumna
  11.            vFechaPago = CDate(Format(MSHFlexGrid1.TextMatrix(i, 7), "dd/MM/yyyy"))
  12.            If Date > CDate(vFechaPago) Then
  13.               MSHFlexGrid1.CellBackColor = vbRed
  14.            Else
  15.                MSHFlexGrid1.CellBackColor = vbGreen
  16.            End If
  17.        Next vColumna
  18.    Next i
  19.    MSHFlexGrid1.Redraw = True
  20. End Sub

proba eso, y fijate que hay algo mal ahi, porque el primer registro tiene la misma fecha de pago que la fecha de inscripcion, y deberia tener 1 mes mas o sea 09/11/2009, cuando das de alta debes guardar en ese campo 1 mes mas.en realidad te tendrian que salir todas en verde porque la fecha de hoy no es mayor a la fecha de 09/10/2009

saludos.

Me sigue sin funcionar Seba.
O sea lo que vos me dijiste arriba de que algo esta mal por lo del MES yo lo hice así A PROPÓSITO. Modifiqué LA BASE DE DATOS MANUALMENTE para que me muestre uno en ROJO y el resto en VERDE para corroborar el código.

Por otro lado probé lo que me dijiste pero no me funcionó. Me ponía todos en VERDE y como dije antes UNO LO MODIFIQUE A PROPÓSITO PARA VERLO EN ROJO pero lo sigue mostrando VERDE.

Y una cosa más, de tu código no se para que usas la variable FechadePago y tratás de obtenerla con TextMatrix si yo ya la tengo haciendo RST!ProximoPago.

Te dejo el código tuyo, modificado de nuevo:

Citar
Private Sub ColorearFecha()
    Dim i As Integer
    Dim vColumna As Integer
 
    grilla.Redraw = False
    For i = 1 To grilla.Rows - 1
        For vColumna = 1 To grilla.Cols - 1
            grilla.Row = i
            grilla.Col = vColumna
            If RST!inscripcion >= CDate(RST!proximopago) Then
               grilla.CellBackColor = vbRed
            Else
                grilla.CellBackColor = vbGreen
            End If
        Next vColumna
    Next i
    grilla.Redraw = True
End Sub

O sea si mirás bien, esta todo tal cual lo pusiste vos, SALVO QUE EN VEZ DE USAR LAS VARIABLES FECHAALTA Y FECHADEPAGO LO SACO DIRECTAMENTE CON RST!INSCRIPCION Y RST!PROXIMOPAGO

Espero que haya quedado claro, y desde ya muchas gracias por prestarle atención a esto
« Última modificación: 11 Septiembre 2009, 06:08 am por ka0s » En línea

ka0s


Desconectado Desconectado

Mensajes: 308


Ver Perfil
Re: Trabajar con FECHAS
« Respuesta #8 en: 11 Septiembre 2009, 19:41 pm »

Gente, finalmente un amigo me pudo solucionar el problema que tenía con el codigo de seba :)

Acá se los dejo como me quedó y funciono perfectamente.

Citar
Dim vFechaPago As String
    Dim i As Integer
    Dim vColumna As Integer
    grilla.Redraw = False
    For i = 1 To grilla.Rows - 1
        For vColumna = 0 To grilla.Cols - 1
            grilla.Row = i
            grilla.Col = vColumna
           
            If grilla.TextMatrix(i, 7) >= grilla.TextMatrix(i, 8) Then
               grilla.CellBackColor = vbRed
            Else
                grilla.CellBackColor = vbGreen
            End If
        Next vColumna
    Next i
    grilla.Redraw = True

Les dejo la imágen:



MUCHAS GRACIAS SEBA POR TODO!!
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Trabajar con FECHAS
« Respuesta #9 en: 11 Septiembre 2009, 19:49 pm »

Basicamente, todo es en base a un IF.. y si el IF es TRUE, cambia colores :P


Muy lindo te esta quedando..
Segui con eso!!
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Trabajar con Fechas C#
.NET (C#, VB.NET, ASP)
perico02 1 2,296 Último mensaje 6 Noviembre 2015, 03:21 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines