Saludos estimados colegas
Feliz año nuevo 2022 para todos
Existe alguna clase para hacer graficas?
Algun ejemplo basico en caso de que exista?
Me piden graficas de los articulos mas vendidos en los ultimos 30 dias y al final de año.
#Include "FiveWin.Ch"
#Include "TGraph.Ch"
#include "Tdolphin.ch"
STATIC oFont
**************************************************************************************************************************************
** C O M P R A S
PROCEDURE Grafica21()
LOCAL oGet3, oGet4, mrta := .f., mtotal, ant, mdesde := DATE(), mhasta := DATE(),;
oGraf,aSerie := {}, aLeyen := {}, oDlg, oBot1, oBot2, acor, oQry
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-11.5
DEFINE DIALOG oDlg TITLE "Compras por fecha" FROM 03,15 TO 11,45 ;
OF oWnd FONT oFont
acor := AcepCanc(oDlg)
@ 07, 05 SAY "Desde Fecha:" OF oDlg PIXEL SIZE 40,12 RIGHT
@ 22, 05 SAY "Hasta Fecha:" OF oDlg PIXEL SIZE 40,12 RIGHT
@ 05, 50 GET oGet3 VAR mdesde OF oDlg PIXEL CENTER
@ 20, 50 GET oGet4 VAR mhasta OF oDlg PIXEL VALID(mhasta >= mdesde) CENTER
@ acor[1],acor[2] BUTTON oBot1 PROMPT "&Generar" OF oDlg SIZE 30,10 ;
ACTION ((mrta := .t.), oDlg:End() ) PIXEL
@ acor[3],acor[4] BUTTON oBot2 PROMPT "&Cancelar" OF oDlg SIZE 30,10 ;
ACTION ((mrta := .f.), oDlg:End() ) PIXEL
ACTIVATE DIALOG oDlg CENTER ON INIT oGet3:SetFocus()
IF !mrta
RETURN
ENDIF
oQry := oServer:Query( "SELECT DAY(fecfac) as dia, SUM(importe * IF(tipocomp='NC' OR tipocomp='DE',-1,1)) as cant FROM compras WHERE fecfac >= " + ClipValue2SQL(mdesde) +;
" AND fecfac <= " + ClipValue2SQL(mhasta) + " GROUP BY fecfac")
DO WHILE !oQry:EOF()
AADD(aSerie,oQry:cant)
AADD(aLeyen,STR(oQry:dia))
oQry:SKIP()
ENDDO
oQry:End()
IF LEN(aSerie) = 0
MsgStop("Sin datos para mostrar","Atencion")
oQry:End()
RETURN
ENDIF
DEFINE DIALOG oDlg RESOURCE "GRAFICA" OF oWnd
oDlg:lHelpIcon := .f.
REDEFINE GRAPH oGraf OF oDlg ID 111 TITLE "Compras por dia" 3D XGRID;
YGRID XVALUES YVALUES LEGENDS TYPE 2
oGraf:cTitle := "Compras del " + DTOC(mdesde) + " al " + DTOC(mhasta)
oGraf:cSubTit:= "En Pesos"
oGraf:cTitX := "Pesos"
oGraf:cTitY := "Dias"
oGraf:lPopUp := .T.
oGraf:AddSerie(aSerie, "Compras por dia", RGB(128,128,255))
oGraf:SetYVals(aLeyen)
oGraf:Refresh()
REDEFINE BUTTON oBot1 ID 102 OF oDlg ACTION Imprime(oDlg)
REDEFINE BUTTON oBot2 ID 104 OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTER
RETURN
PROCEDURE Grafica22()
LOCAL oGet3, mrta := .f., mdesde := YEAR(DATE()), ;
oGraf,aSerie := {0,0,0,0,0,0,0,0,0,0,0,0},;
aLeyen := {"Ene","Feb","Mar","Abr","May","Jun",;
"Jul","Ago","Sep","Oct","Nov","Dic"},;
oDlg, oBot1, oBot2, acor, oQry
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-11.5
DEFINE DIALOG oDlg TITLE "Compras Anuales" FROM 03,15 TO 10,45 OF oWnd FONT oFont
acor := AcepCanc(oDlg)
@ 12, 05 SAY "Año:" OF oDlg PIXEL SIZE 40,12 RIGHT
@ 10, 50 GET oGet3 VAR mdesde PICTURE "9999" OF oDlg PIXEL
@ acor[1],acor[2] BUTTON oBot1 PROMPT "&Generar" OF oDlg SIZE 30,10 ;
ACTION ((mrta := .t.), oDlg:End() ) PIXEL
@ acor[3],acor[4] BUTTON oBot2 PROMPT "&Cancelar" OF oDlg SIZE 30,10 ;
ACTION ((mrta := .f.), oDlg:End() ) PIXEL
ACTIVATE DIALOG oDlg CENTER ON INIT oGet3:SetFocus()
IF !mrta
RETURN
ENDIF
oQry :=oServer:Query( "SELECT MONTH(fecfac) as mes, SUM(importe * IF(tipocomp='NC' OR tipocomp='DE',-1,1)) as cant FROM compras WHERE YEAR(fecfac) = " + ClipValue2SQL(mdesde) +;
" GROUP BY MONTH(fecfac)")
DO WHILE !oQry:EOF()
aSerie[oQry:mes] := oQry:cant
oQry:Skip()
ENDDO
oQry:End()
IF LEN(aSerie) = 0
MsgStop("Sin datos para mostrar","Atencion")
RETURN
ENDIF
DEFINE DIALOG oDlg RESOURCE "GRAFICA" OF oWnd
oDlg:lHelpIcon := .f.
REDEFINE GRAPH oGraf OF oDlg ID 111 TITLE "Compras por mes" 3D XGRID;
YGRID XVALUES YVALUES LEGENDS TYPE 1
oGraf:cTitle := "Compras Anuales " + STR(mdesde)
oGraf:cSubTit:= "En Pesos"
oGraf:cTitX := "Pesos"
oGraf:cTitY := "Mes"
oGraf:lPopUp := .T.
oGraf:AddSerie(aSerie, "Mes", RGB(255,128,255))
oGraf:SetYVals(aLeyen)
oGraf:Refresh()
REDEFINE BUTTON oBot1 ID 102 OF oDlg ACTION Imprime(oDlg)
REDEFINE BUTTON oBot2 ID 104 OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTER
RETURN
PROCEDURE Grafica23()
LOCAL oGet3, oGet4, mrta := .f., mtotal, ant, mdesde := DATE(), mhasta := DATE(),;
oGraf,aSerie := {}, aLeyen := {}, oDlg, oBot1, oBot2, acor,;
aRubro := {}, aPreci := {}, j, oQry
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-11.5
DEFINE DIALOG oDlg TITLE "Compras por cuenta" FROM 03,15 TO 11,45 OF oWnd
acor := AcepCanc(oDlg)
@ 07, 05 SAY "Desde Fecha:" OF oDlg PIXEL SIZE 40,12 RIGHT
@ 22, 05 SAY "Hasta Fecha:" OF oDlg PIXEL SIZE 40,12 RIGHT
@ 05, 50 GET oGet3 VAR mdesde OF oDlg PIXEL CENTER
@ 20, 50 GET oGet4 VAR mhasta OF oDlg PIXEL VALID(mhasta >= mdesde) CENTER
@ acor[1],acor[2] BUTTON oBot1 PROMPT "&Generar" OF oDlg SIZE 30,10 ;
ACTION ((mrta := .t.), oDlg:End() ) PIXEL
@ acor[3],acor[4] BUTTON oBot2 PROMPT "&Cancelar" OF oDlg SIZE 30,10 ;
ACTION ((mrta := .f.), oDlg:End() ) PIXEL
ACTIVATE DIALOG oDlg CENTER ON INIT oGet3:SetFocus()
IF !mrta
RETURN
ENDIF
oQry := oServer:Query( "SELECT r.nombre as rubro, SUM(v.importe* IF(v.tipocomp='NC' OR v.tipocomp='DE',-1,1)) as cant FROM compras v "+;
"LEFT JOIN plancont r ON r.codigo = v.codcue "+;
"WHERE v.fecfac >= " + ClipValue2SQL(mdesde) +;
" AND v.fecfac <= " + ClipValue2SQL(mhasta) + " GROUP BY r.nombre")
DO WHILE !oQry:Eof()
AADD(aLeyen,oQry:rubro)
AADD(aPreci,oQry:cant)
oQry:Skip()
ENDDO
IF LEN(aLeyen) = 0
MsgStop("Sin datos para mostrar","Atencion")
RETURN
ENDIF
DEFINE DIALOG oDlg RESOURCE "GRAFICA" OF oWnd
oDlg:lHelpIcon := .f.
REDEFINE GRAPH oGraf OF oDlg ID 111 TITLE "Compras por cuenta" 3D XGRID;
YGRID XVALUES YVALUES LEGENDS TYPE 4
oGraf:cTitle := "Compras por cuenta del " + DTOC(mdesde) + " al " + DTOC(mhasta)
oGraf:cSubTit:= "En Pesos"
oGraf:cTitX := "Pesos"
oGraf:cTitY := "Cuenta"
oGraf:lPopUp := .T.
oGraf:AddSerie(aPreci, "Cuenta", RGB(255,128,255))
oGraf:SetYVals(aLeyen)
oGraf:Refresh()
REDEFINE BUTTON oBot1 ID 102 OF oDlg ACTION Imprime(oDlg)
REDEFINE BUTTON oBot2 ID 104 OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTER
RETURN
GRAFICA DIALOG DISCARDABLE 58, 37, 670, 367
STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Gráficos"
FONT 8, "Tahoma"
{
CONTROL "", 111, "TGRAPH", WS_TABSTOP|0x000000a1, 0, 13, 668, 335
CONTROL "&Impimir", 102, "Button", WS_TABSTOP, 212, 352, 50, 14
CONTROL "&Salir", 104, "Button", WS_TABSTOP, 324, 352, 50, 14
}
#Include "tgraph.ch"
...
...
...
...
STATIC FUNCTION Grafica()
LOCAL oGraph
LOCAL oIcono
DEFINE ICON oIcono RESOURCE "AppLogo"
DEFINE WINDOW oWnd FROM 15, 60 TO 45, 180 TITLE "Consumo por producto";
ICON oIcono
oGraph:=TGraph():New(0,0,oWnd,oWnd:nWidth()-15,oWnd:nHeight()-40)
WITH Object oGraph
:aFont[1] := TFont():New( "Arial", 0, -16, .F., .T., 0 , 0, , .F., .F., .F., 0, 3, 2, 1, ,34 ) // Título de la gráfica
:aFont[2] := TFont():New( "Arial", 0, -18, .F., .T., 0 , 0, , .F., .F., .F., 0, 3, 2, 1, , 2 ) // Eje de las X
:aFont[3] := TFont():New( "Arial", 0, -08, .F., .T., 0, 0, , .F., .F., .F., 0, 3, 2, 1, ,34 ) // Eje de las Y
:aFont[4] := TFont():New( "Arial", 0, -16, .F., .T., 0 , 0, , .F., .F., .F., 0, 3, 2, 1, , 2 ) // Leyendas
:aFont[5] := TFont():New( "Arial", 0, -16, .F., .F., 0 , 0, , .F., .F., .F., 0, 3, 2, 1, , 2 ) // Sub titulo
:aFont[6] := TFont():New( "Arial", 0, -18, .F., .T., 900, 0, , .F., .F., .F., 0, 3, 2, 1, , 2 ) // Texto de las X
:aFont[7] := TFont():New( "Arial", 0, -14, .F., .T., 0 , 0, , .F., .F., .F., 0, 3, 2, 1, ,34 ) // Texto de las Y
:aFont[8] := TFont():New( "Arial", 0, -20, .F., .T., 0 , 0, , .F., .F., .F., 0, 3, 2, 1, ,34 ) // Valores
:nType := GRAPH_TYPE_BAR // GRAPH_TYPE_BAR,GRAPH_TYPE_LINE,GRAPH_TYPE_POINT,GRAPH_TYPE_PIE
:cTitle := "Consumo por producto"
:cSubTit := "Del " + Date2Txt(oVar:INI) + " al " + Date2Txt(oVar:FIN)
:lCTitle := (.T.)
:cPicture := "999,999" // Picture para el eje X (Línea vertical)
:cXPicture := "999" // Picture para el eje X (Línea vertical)
:SetYVals(acPro) // Valores del eje Y (Línea horizontal)
:cTitX := "Cantidad" // Título del eje X (Línea vertical)
:cTitY := "Productos" // Título del eje Y (Línea horizontal)
:lXVal := (.T.) // Muestra los valores en el eje X (la línea horizontal)
:lYVal := (.T.) // Muestra los valores en el eje Y (la línea horizontal)
:lTitle := (.T.) // Muestra el título y sub titulo de la gráfica
:lLegends := (.F.) // Para que muestre que significan las barras
:lPopUp := (.T.)
:lDegrade := (.T.)
:l3D := (.T.)
// :lLine := (.T.) // Pinta una línea amarilla sobre todas la barras
:AddSerie(anVez,"Consumo por producto",CLR_HBLUE) // Leyenda y color de las barras
:Refresh()
END
ACTIVATE WINDOW oWnd CENTERED;
ON PAINT (oGraph:nWidth := oWnd:nWidth() - 15, ;
oGraph:nHeight := oWnd:nHeight - 40, ;
oGraph:Refresh(.F.))
oIcono:END()
RETURN(.T.)
Querido César,
muchas gracias por tu constantes ayudas y muy feliz 2022 a todos
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Enrico Maria Giordano and 75 guests