[Ayuda]Graficos estadisticos en tiempo real Hola a todos,
Estoy queriendo hacer un sistema de Tablero de Comandos con Graficos estadisticos actualizados en tiempo real (o lo mas real posible).
Ahora necesitaria ayuda con la forma o metodo en el que se actualizarian los graficos y los elementos que deberia utilizar.
Por ahora estaba usando un Chart, un Timer y un Data Set (común)
Con el timer actualizaba cada 5 minutos una consulta (consulta probada en vb 6, que llenando un recordset actualiza una grilla con los datos correspondientes).
Pero al utilizarlo en VB.Net solo la primera consulta era correcta y el Chart graficaba los datos de ese momento, al realizarlo por segunda vez, despues de vaciar el Data Set, este se llenaba con los datos de la 1 consulta, seguidos de los datos actuales, y el Chart no varia en nada.
Quisiera saber que puedo estar haciendo mal, o quizas hay elementos mas idoneos para este tipo de proyectos.
les dejo el codigo abajo:
Formulario
Código:
Imports System.Data.OleDb
Imports System.Windows.Forms.DataVisualization.Charting
Public Class frmTableroRec
Private DA As New OleDbDataAdapter(cmdSql)
Private sSql As String
Dim fecHasta As Date = Now
Dim fecDesde As Date = Now
Dim bPrimeraVez As Boolean
Private Sub frmTableroRec_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Conectarse()
CalcularRecDiaria()
End Sub
Private Sub CalcularRecDiaria()
Dim rsD As New DataSet
Dim rsServ As New DataSet
Dim cRedondeo As Double
Dim cTotalRendicion As Double
cmdSql.Connection = cnnSql
cmdSql.CommandType = CommandType.Text
On Error Resume Next
sSql = "drop table tmp_ResCob"
cmdSql.CommandText = sSql
cmdSql.ExecuteNonQuery()
On Error GoTo mensaje
Me.Cursor = Cursors.WaitCursor
lblProceso.Text = "Procesando Cajas..."
' Application.DoEvents()
'Creo la tabla auxiliar
sSql = "create table tmp_ResCob(IdCobro int, " & _
" IdUsuario int, " & _
" FecCobro datetime, " & _
" CobroParcial bit, " & _
" IntMora bit, " & _
" IntCh bit, " & _
" IdComprobante int, " & _
" IdServicio int, " & _
" DsComp char(50), " & _
" IdCtaFact int, " & _
" Nombre char(50), " & _
" FecEmision datetime, " & _
" FecVto datetime, " & _
" Total money)"
cmdSql.CommandText = sSql
cmdSql.ExecuteNonQuery()
'Redondeo
sSql = "select sum(D1.Importe)*-1 as Importe " & _
"from DET_COBRO D1, DET_COBRANZA D2, COBRANZA CZ " & _
"where D1.IdCobro = D2.IdCobro and " & _
" D2.IdCobranza = CZ.IdCobranza and " & _
" CZ.FecInicio between '" & Format(fecDesde, "yyyyMMdd") & "' and '" & Format(fecHasta, "yyyyMMdd 23:59") & "' AND " & _
" D1.IdTipoCobro = 5 "
cmdSql.CommandText = sSql
DA.Fill(rsD, "Recaudacion")
cRedondeo = IIf(rsD.Tables("Recaudacion").Rows.Count > 0, (rsD.Tables("Recaudacion").Rows(0)("Importe")), 0)
'Cobros Generales
lblProceso.Text = "Procesando Cobros..."
sSql = "insert into tmp_ResCob(IdCobro, IdUsuario, FecCobro, CobroParcial, IntMora, IntCh, IdComprobante,IdServicio, DsComp, IdCtaFact, Nombre, FecEmision, FecVto, Total) " & _
"select CB.IdCobro, CZ.IdUsuario, CB.FecCobro, CB.CobroParcial, CC.IntMora, CC.IntCh, CC.IdComprobante,IdServicio,rtrim(TC.Abreviatura) + ' '+ rtrim(convert(char(10), CV.Numero)), CV.IdCtaFact, CV.Nombre, CV.FecEmision, CV.FecVto, CV.Total * TC.Signo as Total " & _
"from DET_COBRANZA DC, COBRO CB, COMP_COBRO CC, COMP_VENTA CV, TIPO_COMPROBANTE TC, COBRANZA CZ " & _
"where DC.IdCobro = CB.IdCobro and " & _
" DC.IdCobranza = CZ.IdCobranza and " & _
" CZ.FecInicio between '" & Format(fecDesde, "yyyyMMdd") & "' and '" & Format(fecHasta, "yyyyMMdd 23:59") & "' and " & _
" CB.IdCobro = CC.IdCobro and " & _
" CC.IdComprobante = CV.IdComprobante and " & _
" CV.IdTipoComp = TC.IdTipoComp and " & _
" TC.IdTipoComp in(1,2,3,29,30,32,33,34,35) and " & _
" CB.CobroParcial = 0 " & _
"order by DC.IdCobro"
cmdSql.CommandText = sSql
cmdSql.ExecuteNonQuery()
lblProceso.Text = "Procesando Cobros Parciales..."
sSql = "select CB.IdCobro, CV.Total, CZ.IdUsuario " & _
"from DET_COBRANZA DC, COBRO CB, COMP_COBRO CC, COMP_VENTA CV, TIPO_COMPROBANTE TC, COBRANZA CZ " & _
"where DC.IdCobranza = CZ.IdCobranza and " & _
" CZ.FecInicio between '" & Format(fecDesde, "yyyyMMdd") & "' and '" & Format(fecHasta, "yyyyMMdd 23:59") & "' and " & _
" DC.IdCobro = CB.IdCobro and " & _
" CB.CobroParcial = 1 and " & _
" CB.IdCobro = CC.IdCobro and " & _
" CC.IdComprobante = CV.IdComprobante and " & _
" CV.IdTipoComp = TC.IdTipoComp and " & _
" TC.IdTipoComp = 34 " & _
"order by DC.IdCobro"
cmdSql.CommandText = sSql
rsD.Clear()
DA.Fill(rsD, "Recaudacion")
If rsD.Tables("Recaudacion").Rows.Count > 0 Then
Dim DT As New DataTable
DT = _
rsD.Tables("Recaudacion")
Dim nombre As Long
Dim cobro As Long
Dim total As Double
Dim i As Integer = 0
For Each row As DataRow In DT.Rows
nombre = rsD.Tables("Recaudacion").Rows(i)("IdUsuario")
cobro = rsD.Tables("Recaudacion").Rows(i)("IdCobro")
total = rsD.Tables("Recaudacion").Rows(i)("Total")
sSql = "insert into tmp_ResCob(IdCobro, IdUsuario, FecCobro, CobroParcial, IntMora, IntCh, IdComprobante,IdServicio, DsComp, IdCtaFact, Nombre, FecEmision, FecVto, Total) " & _
"select CB.IdCobro," & nombre & ", CB.FecCobro, CB.CobroParcial, CC.IntMora, CC.IntCh, CC.IdComprobante,IdServicio, rtrim(TC.Abreviatura) + ' '+ rtrim(convert(char(10), CV.Numero)), CV.IdCtaFact, CV.Nombre, CV.FecEmision, CV.FecVto, " & total & " " & _
"from COBRO CB, COMP_COBRO CC, COMP_VENTA CV, TIPO_COMPROBANTE TC " & _
"where CB.IdCobro = " & cobro & " and " & _
" CB.IdCobro = CC.IdCobro and " & _
" CC.IdComprobante = CV.IdComprobante and " & _
" CV.IdTipoComp = TC.IdTipoComp and " & _
" TC.IdTipoComp <> 34"
cmdSql.CommandText = sSql
cmdSql.ExecuteNonQuery()
i = i + 1
Next
End If
'Total General.
lblProceso.Text = "Procesando Resumen de Caja..."
sSql = "select Sum(Total) as Total " & _
"from tmp_ResCob RE "
cmdSql.CommandText = sSql
DA.Fill(rsServ, "Recaudacion")
'Resumen de Cobranza por Servicio.
sSql = "select SE.IdServicio, SE.DsServicio , Sum(Total) as Total " & _
"from SERVICIOS SE, tmp_ResCob RE " & _
"where SE.idServicio = RE.idServicio " & _
"group by SE.IdServicio, SE.DsServicio " & _
"order by SE.DsServicio"
rsServ.Clear()
cmdSql.CommandText = sSql
DA.Fill(rsServ, "Recaudacion")
Graficar(rsServ)
sSql = "drop table tmp_ResCob"
cmdSql.CommandText = sSql
cmdSql.ExecuteNonQuery()
Me.Cursor = Cursors.Arrow
lblProceso.Text = "PROCESO FINALIZADO!!!"
Exit Sub
mensaje:
MsgBox("Error Nº: " & Err.Number & Chr(13) & Err.Description, vbCritical, "Error")
End Sub
Private Sub Graficar(ByVal Origen As DataSet)
chrRecaudaciones.Show()
chrRecaudaciones.Series("Series1").XValueMember = "DsServicio"
chrRecaudaciones.Series("Series1").YValueMembers = "Total"
chrRecaudaciones.DataSource = Origen.Tables("Recaudacion")
lblTotal.Text = Origen.Tables("Recaudacion").Rows(0)(0)
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
CalcularRecDiaria()
End Sub
End Class
|