Endor,
I think I ran into the same problem in a browse.
I got around it with visible .t. and .f.
when i pressed the tab it became visible .f. When I left the browse, tab visible became .t..
With multible choices you may use an option group and make it visible .t. or .f.
Hope this is what you where asking for ............... Franco
Como corrijo una grafica?
Moderator: Rathinagiri
Re: Como corrijo una grafica?
All The Best,
Franco
Canada
Franco
Canada
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Como corrijo una grafica?
No franco, creo que estamos hablando de cosas muy diferentes!
Eso creo!
Saludos
//////////////////////////////////////////////////////////////////////////////////////
No frank, I think we are talking about very different things!
I think so!
greetings
Eso creo!

Saludos
//////////////////////////////////////////////////////////////////////////////////////
No frank, I think we are talking about very different things!
I think so!

greetings
Re: Como corrijo una grafica?
The same problem appears when you use IMAGE control. You have to refresh window after changing tab, it should halp, I think
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Como corrijo una grafica?
Hola todos,
Por la necesidad de hacer una gráfica con las cantidades arriba de un millón y menos de 10 millones, hice esta humilde muestra, se que se puede mejorar mucho, pero por tiempo se las comparto así. Es solo de una serie.
El código tampoco esta del todo limpio, pero creo que funciona a pequeñas necesidades.
Saludos
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Hello all,
By the need to make a chart with amounts above one million and less than 10 million, made this humble sample, you can improve a lot, but time as well share them. It's just a number.
The code is not completely clean, but I think it works for small needs.
regards

Por la necesidad de hacer una gráfica con las cantidades arriba de un millón y menos de 10 millones, hice esta humilde muestra, se que se puede mejorar mucho, pero por tiempo se las comparto así. Es solo de una serie.
El código tampoco esta del todo limpio, pero creo que funciona a pequeñas necesidades.
Saludos
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Hello all,
By the need to make a chart with amounts above one million and less than 10 million, made this humble sample, you can improve a lot, but time as well share them. It's just a number.
The code is not completely clean, but I think it works for small needs.
regards
Code: Select all
#include "hmg.ch"
#define nWIDTH GetDeskTopWidth()
#define nHEIGHT GetDeskTopHeight()-40
FUNCTION MAIN
Local cColor := RED
*-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-SOLO ESTO HAY QUE MODIFICAR-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.-.-.-.-.//
LOCAL nRow := 10
LOCAL nCol := 10
LOCAL nW := 800
LOCAL nH := 300
LOCAL cTitulo := "VENTAS POR MES DURANTE 2014"
LOCAL aNombresS := {"Serie 1"}
*LOCAL aValoresS := {-114054.57 , -2141184.09 , -146106.72 , -11210.16 , -148153.12 , -140945.27 , -15857.91 ,-180792.10 , -16074.99}
*LOCAL aValoresS := {-14054.57 , +2141184.09 , -146106.72 , +11210.16 , -148153.12 , +140945.27 , +15857.91 ,-180792.10 , +16074.99}
*LOCAL aValoresS := {+14054.57 , -2141184.09 , +146106.72 , -11210.16 , +148153.12 , -140945.27 , +15857.91 ,-180792.10 , +16074.99}
LOCAL aValoresS := {14054.57 , 2141184.09 , 146106.72 , 11210.16 , 148153.12 , 140945.27 , 15857.91 ,180792.10 , 16074.99}
*LOCAL aValoresS := {1152391.62 , 1145743.14 , 1222495.43 , 1451246.80 , 1282571.94 , 1251319.02 , 1245945.15 , 1282475.94 , 1293606.78 }
*LOCAL aValoresS := {1.57 , 2.09 , 3.72 , 4.16 , 5.12 , 6.27 , 7.91 , 8.10 , 9.99}
*LOCAL aValoresS := {250.57 , 320.09 , 200.72 , 800.16 , 1200.12 , 400.27 , 300.91 ,150.10 , 800.99}
LOCAL aX := {"ENE","FEB","MAR","ABR","MAY","JUN","JUL","AGO","SEP"}
LOCAL aColores := {cColor,cColor,cColor,cColor,cColor,cColor,cColor,cColor,cColor}
LOCAL nWColumn := 50
LOCAL lLineas := .T.
LOCAL lMarco := .T.
*-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.//
LOCAL cFormat := "99,999,999.99"
LOCAL nY := 0
LOCAL nVecesY := 0
LOCAL nVecesP := 0
LOCAL nVecesN := 0
LOCAL nRowF := nRow + nH
LOCAL nColF := nCol + nW
LOCAL nAnchoVal := 0
LOCAL lNegativo := .F.
LOCAL lPositivo := .F.
LOCAL nValorP := 0
LOCAL nValorN := 0
LOCAL nValorM := 0
LOCAL nAltoP := 0
LOCAL nRowX := 0
LOCAL nColY := 0
LOCAL nRowG := 0
LOCAL nColG := 0
LOCAL nWG := 0
LOCAL nHG := 0
LOCAL nValDiv := 0
LOCAL cLabel := ""
LOCAL cLabel2 := ""
LOCAL nColYFija := 0
LOCAL nValorY := 0
LOCAL nAncho := 0
LOCAL nValorYN := 0
SET FIXED on
SET DECIMALS TO 6
*LONGITUD DE LOS VALORES
FOR n:= 1 To Len(aValoresS)
IF Len(AllTrim(STR(aValoresS[n]))) > nAnchoVal
nAnchoVal := Len(AllTrim(STR(aValoresS[n])))
ENDIF
NEXT n
*MsgInfo(nAnchoVal)
*AVERIGUAR SI HAY NEGATIVOS Y POSITIVOS
FOR n:= 1 TO Len(aValoresS)
IF aValoresS[n] < 0
lNegativo := .T.
ELSE
lPositivo := .T.
ENDIF
Next n
*----------------------------------------------------------------------------------------------------------------------------------------------------
IF !lNegativo .and. lPositivo //Solo +
*Obtener el Valor Maximo
FOR n:= 1 TO Len(aValoresS)
IF(aValoresS[n] > nValorP , nValorP := aValoresS[n] , )
Next n
nValorM := nValorP
nY := ValnY(nValorM)
*Obtener Row de las X y Col de las Y
nRowX := nRowF //-30
nColY := nCol+(nAnchoVal*10)
nWG := nColF-200-nColY-30
nHG := nRowF-nRow -80
*MsgInfo(nWG)
*MsgInfo(nHG)
nValDiv:= nHG/nValorP
*nAltoP := nValDiv * aValoresS[1]
nAltoP := nHG
nVecesP := Int(nValorP/nY) //Numero de veces que pone los valores en el Eje Y
* MsgInfo(nVecesP)
ELSEIF lNegativo .and. !lPositivo //Solo - *********************************************************************
*Obtener el Valor Maximo Negativo
FOR n:= 1 TO Len(aValoresS)
IF(Abs(aValoresS[n]) > (nValorN) , nValorN := Abs(aValoresS[n]) , )
Next n
*CALCULAR VALOR MAXIMO TOTAL
nValorM := nValorN
*MsgInfo(nValorN)
*MsgInfo(nValorM)
nY := ValnY(nValorM)
*Obtener Row de las X y Col de las Y
nRowX := nRow+40
nColY := nCol+(nAnchoVal*10)
nWG := nColF-200 - nColY-30
nHG := nRowF-nRow -80
*MsgInfo(nWG)
* MsgInfo(nHG)
* MsgInfo(nValorN)
nValDiv:= nHG/nValorN
* MsgInfo(nValDiv)
nAltoN := nHG
nRowX := nRow+60
nVecesN := Int(nValorN/nY) //Numero de veces que pone los valores en el Eje Y
ELSEIF lNegativo .and. lPositivo //Hay +- ************************************************************
*Obtener Row de las X y Col de las Y
nColY := nCol+(nAnchoVal*10)
nWG := nColF-200 - nColY-30
nHG := nRowF-nRow -80
*MsgInfo(nAnchoVal)
*OBTENER LOS VALORES MAXIMOS Negativos y Positivos
FOR n:= 1 TO Len(aValoresS)
IF aValoresS[n] < 0
* MsgBox("Si hay Negativos")
lNegativo := .T.
IF(Abs(aValoresS[n]) > nValorN , nValorN := Abs(aValoresS[n]) , )
ELSE
IF(aValoresS[n] > nValorP , nValorP := aValoresS[n] , )
lPositivo := .T.
ENDIF
Next n
*CALCULAR VALOR MAXIMO TOTAL
nValorM := nValorP + nValorN
nY := ValnY(nValorM)
nVecesP := Int(nValorP/nY) //Numero de veces que pone los valores en el Eje Y
IF( nVecesP = 0 , nVecesP := 1,)
nVecesN := Int(nValorN/nY) //Numero de veces que pone los valores en el Eje Y
IF( nVecesN = 0 , nVecesN := 1,)
*MsgInfo("Veces valores en Y : " + str(nVecesY))
*nAltoP := nValDiv * aValoresS[1]
nAltoN := (nHG * nValorN) / nValorM
nAltoP := (nHG * nValorP) / nValorM
nValDiv:= nAltoP/nValorP
nRowX := nRowF -nAltoN
* MsgInfo(nVecesP)
* MsgInfo(nVecesN)
ENDIF
IF nValorM < 10
cFormat := "99.99"
ELSEIF nValorM < 100
cFormat := "999.99"
ELSEIF nValorM < 1000
cFormat := "9,999.99"
ELSEIF nValorM < 10000
cFormat := "99,999.99"
ELSEIF nValorM < 100000
cFormat := "9,999,999.99"
ELSEIF nValorM > 1000000
cFormat := "99,999,999.99"
ENDIF
nColY := nColY + 1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DEFINE WINDOW Main AT 0 , 0 WIDTH nW+100 HEIGHT nH+150 TITLE "GRAPH" MAIN ON INIT NIL //(MsgBox(Main.HEIGHT) , MsgInfo(Main.WIDTH))
@ nRow+10,nCol LABEL Label_1 VALUE cTitulo WIDTH nRow + nW - 10 HEIGHT 30 FONT 'Arial' SIZE 15 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT CENTERALIGN
@ nRow+40,nColF-180 LABEL Serie VALUE "- "+aNombresS[1] WIDTH 200 HEIGHT 30 FONT 'Arial' SIZE 10 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT
IF lMarco
draw line in window Main at nRow,nCol to nRow,nColF pencolor aColores[1] penwidth 1
draw line in window Main at nRow,nCol to nRowF+50,nCol pencolor aColores[1] penwidth 1
draw line in window Main at nRow,nColF to nRowF+50,nColF pencolor aColores[1] penwidth 1
draw line in window Main at nRowF+50,nCol to nRowF+50,nColF pencolor aColores[1] penwidth 1
ENDIF
IF (!lNegativo .and. lPositivo) //+
draw line in window Main at nRowX,nColY-10 to nRowX,nColF-200 pencolor {0,0,0} penwidth 1 //EJE X
draw line in window Main at nRowF-20+50,nColY-1 to nRow+40,nColY-1 pencolor {0,0,0} penwidth 1 //EJE Y
nColYFija := nColY
@ nRowX,nColY-10 LABEL Label_2 VALUE "0" CENTERALIGN WIDTH 10 TRANSPARENT TOOLTIP "Label 5 CenterAlign Transparent" //el "0" entre los ejes
FOR n:= 1 TO Len(aValoresS) //Valores en las X y Barras
cLabel2:= "Label_" +StrZero(n,3,0)
nAltoP := nValDiv * aValoresS[n]
draw rectangle in window Main at nRowX-nAltoP,nColY to nRowX,nColY+nWColumn pencolor aColores[n] penwidth 0 fillcolor aColores[n]
@ nRowX,nColY LABEL &(cLabel2) VALUE aX[n] WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //RIGHTALIGN
nColY := nColY + nWColumn + 5
NEXT n
FOR n:= 1 TO nVecesP+1 //Valores en Y y Si se ponen Lineas o no.
cLabel := "Label_" +StrZero(n,2,0)
nValorY := nY * n
nValorY := nValorY * nValDiv
* MsgInfo(nValorY)
@ nRowX-nValorY-8,nCol+10 LABEL &(cLabel) VALUE Transform(nY*n,cFormat) WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //Valores en el eje Y
IF lLineas
draw line in window Main at nRowX-nValorY,nColYFija to nRowX-nValorY,nColF-200 pencolor {0,0,0} penwidth 1 //EJE X paralelas
ENDIF
Next n
IF lNegativo
*MsgBox("Si Hay Negativos")
nVecesY := Int(nValorN/nY) //Numero de veces que pone los valores en el Eje Y
IF (nVecesY = 0, nVecesY := 1, )
*MsgInfo(nVecesY)
FOR n:= 1 TO nVecesY
cLabel := "Label_" +StrZero(n,4,0)
nValorY := nY * n
nValorY := nValorY * nValDiv
* MsgInfo(nValorY)
@ nRowX+nValorY,nCol+10 LABEL &(cLabel) VALUE "-"+Transform(nY*n,cFormat) WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //Valores en el eje Y
IF lLineas
draw line in window Main at nRowX+nValorY,nColYFija to nRowX+nValorY,nColF-200 pencolor {0,0,0} penwidth 1 //EJE X paralelas
ENDIF
Next n
ENDIF
ELSEIF (lNegativo .and. !lPositivo) //-
draw line in window Main at nRowX,nColY-10 to nRowX,nColF-200 pencolor {0,0,0} penwidth 1 //EJE X
draw line in window Main at nRowF-20+50,nColY-1 to nRow+40,nColY-1 pencolor {0,0,0} penwidth 1 //EJE Y
nColYFija := nColY
@ nRowX,nColY-10 LABEL Label_2 VALUE "0" CENTERALIGN WIDTH 10 TRANSPARENT TOOLTIP "Label 5 CenterAlign Transparent" //el "0" entre los ejes
FOR n:= 1 TO Len(aValoresS)
cLabel2:= "Label_" +StrZero(n,3,0)
nAltoP := nValDiv * Abs(aValoresS[n])
* MsgInfo(nValDiv)
* MsgInfo(nAltoP)
draw rectangle in window Main at nRowX,nColY to nRowX+nAltoP,nColY+nWColumn pencolor aColores[n] penwidth 0 fillcolor aColores[n]
@ nRowX-15,nColY LABEL &(cLabel2) VALUE aX[n] WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //RIGHTALIGN
nColY := nColY + nWColumn + 5
NEXT n
IF lNegativo
*MsgBox("Si Hay Negativos")
nVecesY := Int(nValorN/nY) //Numero de veces que pone los valores en el Eje Y
IF (nVecesY = 0, nVecesY := 1, )
*MsgInfo(nVecesY)
FOR n:= 1 TO nVecesY
cLabel := "Label_" +StrZero(n,4,0)
nValorY := nY * n
nValorY := nValorY * nValDiv
* MsgInfo(nValorY)
@ nRowX+nValorY-8,nCol+10 LABEL &(cLabel) VALUE "-"+Transform(nY*n,cFormat) WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //Valores en el eje Y
IF lLineas
draw line in window Main at nRowX+nValorY,nColYFija to nRowX+nValorY,nColF-200 pencolor {0,0,0} penwidth 1 //EJE X paralelas
ENDIF
Next n
ENDIF
ELSEIF lNegativo .and. lPositivo //+-
draw line in window Main at nRowX,nColY-10 to nRowX,nColF-200 pencolor {0,0,0} penwidth 1 //EJE X
draw line in window Main at nRowF-20+50,nColY-1 to nRow+40,nColY-1 pencolor {0,0,0} penwidth 1 //EJE Y
nColYFija := nColY
@ nRowX,nColY-10 LABEL Label_2 VALUE "0" CENTERALIGN WIDTH 10 TRANSPARENT TOOLTIP "Label 5 CenterAlign Transparent" //el "0" entre los ejes
FOR n:= 1 TO Len(aValoresS) //Valores en las X y Barras
cLabel2:= "Label_" +StrZero(n,3,0)
nAltoP := nValDiv * aValoresS[n]
draw rectangle in window Main at nRowX-nAltoP,nColY to nRowX,nColY+nWColumn pencolor aColores[n] penwidth 0 fillcolor aColores[n]
@ nRowX,nColY LABEL &(cLabel2) VALUE aX[n] WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //RIGHTALIGN
nColY := nColY + nWColumn + 5
NEXT n
FOR n:= 1 TO nVecesP //Valores en Y y Si se ponen Lineas o no.
cLabel := "Label_" +StrZero(n,2,0)
nValorY := nY * n
nValorY := nValorY * nValDiv
* MsgInfo(nValorY)
@ nRowX-nValorY-8,nCol+10 LABEL &(cLabel) VALUE Transform(nY*n,cFormat) WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //Valores en el eje Y
IF lLineas
draw line in window Main at nRowX-nValorY,nColYFija to nRowX-nValorY,nColF-200 pencolor {0,0,0} penwidth 1 //EJE X paralelas
ENDIF
Next n
FOR n:= 1 TO nVecesN
cLabel := "Label_" +StrZero(n,4,0)
nValorN := nY * n
nValorN := nValorN * nValDiv
* MsgInfo(nValorN)
@ nRowX+nValorN-8,nCol+10 LABEL &(cLabel) VALUE "-"+Transform(nY*n,cFormat) WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD TOOLTIP "Esto es una gráfica" BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //Valores en el eje Y
IF lLineas
draw line in window Main at nRowX+nValorN,nColYFija to nRowX+nValorN,nColF-200 pencolor {0,0,0} penwidth 1 //EJE X paralelas
ENDIF
Next n
ENDIF
END WINDOW
Main.ACTIVATE
RETURN NIL
FUNCTION ValnY(nValorM)
LOCAL nValRet
IF nValorM <= 10
nValRet := 1
ELSEIF nValorM <= 100
nValRet := 10
ELSEIF nValorM <= 1000
nValRet := 100
ELSEIF nValorM <= 5000
nValRet := 100
ELSEIF nValorM <= 10000
nValRet := 1000
ELSEIF nValorM <= 500000
nValRet := 10000
ELSEIF nValorM <= 1000000
nValRet := 200000
ELSEIF nValorM <= 1500000
nValRet := 300000
ELSEIF nValorM <= 3000000
nValRet := 200000
ELSEIF nValorM <= 5000000
nValRet := 1000000
ELSEIF nValorM >= 10000000
nValRet := 1000000
ENDIF
RETURN nValRet

-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Como corrijo una grafica?
Hola Pablo César, Sr. Rathinagiri y Dr. Claudio Soto,
Quisiera que para la próximo versión de HMG hagan los siguientes cambios en el archivo C:\hmg.3.3.1\SOURCE\Graph\h_Graph.prg en la linea 238 cambiar DEFAULT cPicture := "999,999.99" por DEFAULT cPicture := "99,999,999.99" y en la linea 429-449 cambiar por esto.
Esto con el fin de que se incluyan valores en las gráficas mayores a 999,999.99 espero que sea atendida la solicitud, ya que varias gráficas tienen valores mayores a esa cantidad.
Por su atención muchas gracias!
////////////////////////////////////////////////////////////////////////////////////
Hi Pablo Cesar and Mr. Rathinagiri,
I wish for the next version of HMG make the following changes in the C: \ hmg.3.3.1 \ SOURCE \ Graph \ h_Graph.prg [/ b] on line 238 cPicture change DEFAULT: = "999,999.99" by DEFAULT cPicture: = "99,999,999.99" [/ b] and in line 429-449 changed by this.
This in order that values are included in the graphs larger than 999,999.99 I hope the request is treated as several graphs are in excess of that amount.
Thank you very much for your attention!
Quisiera que para la próximo versión de HMG hagan los siguientes cambios en el archivo C:\hmg.3.3.1\SOURCE\Graph\h_Graph.prg en la linea 238 cambiar DEFAULT cPicture := "999,999.99" por DEFAULT cPicture := "99,999,999.99" y en la linea 429-449 cambiar por esto.
Code: Select all
// xLabels
nRPos := nRNeg := nZero - nDeep
FOR nI := 0 TO nXRanges
IF lxVal
IF nRange*nI <= nXMax
cName := "xPVal_Name_"+LTRIM(STR(nI))
@ nRPos, nLeft-nDeep-70-100 LABEL &cName OF &parent ;
VALUE Transform(nRange*nI, cPicture) ;
WIDTH 150 ;
HEIGHT 14 ;
FONTCOLOR BLUE FONT "Arial" SIZE 8 TRANSPARENT RIGHTALIGN
ENDIF
IF nRange*(-nI) >= nXMin*(-1)
cName := "xNVal_Name_"+LTRIM(STR(nI))
@ nRNeg, nLeft-nDeep-70-100 LABEL &cName OF &parent ;
VALUE Transform(nRange*-nI, cPicture) ;
WIDTH 150 ;
HEIGHT 14 ;
FONTCOLOR BLUE FONT "Arial" SIZE 8 TRANSPARENT RIGHTALIGN
ENDIF
ENDIF
Por su atención muchas gracias!

////////////////////////////////////////////////////////////////////////////////////
Hi Pablo Cesar and Mr. Rathinagiri,
I wish for the next version of HMG make the following changes in the C: \ hmg.3.3.1 \ SOURCE \ Graph \ h_Graph.prg [/ b] on line 238 cPicture change DEFAULT: = "999,999.99" by DEFAULT cPicture: = "99,999,999.99" [/ b] and in line 429-449 changed by this.
Code: Select all
// xLabels
nRPos := nRNeg := nZero - nDeep
FOR nI := 0 TO nXRanges
IF lxVal
IF nRange*nI <= nXMax
cName := "xPVal_Name_"+LTRIM(STR(nI))
@ nRPos, nLeft-nDeep-70-100 LABEL &cName OF &parent ;
VALUE Transform(nRange*nI, cPicture) ;
WIDTH 150 ;
HEIGHT 14 ;
FONTCOLOR BLUE FONT "Arial" SIZE 8 TRANSPARENT RIGHTALIGN
ENDIF
IF nRange*(-nI) >= nXMin*(-1)
cName := "xNVal_Name_"+LTRIM(STR(nI))
@ nRNeg, nLeft-nDeep-70-100 LABEL &cName OF &parent ;
VALUE Transform(nRange*-nI, cPicture) ;
WIDTH 150 ;
HEIGHT 14 ;
FONTCOLOR BLUE FONT "Arial" SIZE 8 TRANSPARENT RIGHTALIGN
ENDIF
ENDIF
This in order that values are included in the graphs larger than 999,999.99 I hope the request is treated as several graphs are in excess of that amount.
Thank you very much for your attention!

Re: Como corrijo una grafica?
Hola Amigos
Estuve revisando algo y me topé con el problema que planteó el Amigo Javier Tovar hace muchos años, respecto a los valores en el gráfico.
A mí se me presentó el mismo problema, así que tomé su código y lo adapté para graficar el Balance General de una Empresa.
Hice unos pequeños cambios, exclusivamente para esta necesidad, ya que sólo se representan 4 Barras.
Les dejo el código y a lo mejor, le puede a alguien servir.
Por mi parte quedo agradecido al Amigo Javier Tovar, ya que esto me ayudó mucho en mi conocimiento.
Saludos
Estuve revisando algo y me topé con el problema que planteó el Amigo Javier Tovar hace muchos años, respecto a los valores en el gráfico.
A mí se me presentó el mismo problema, así que tomé su código y lo adapté para graficar el Balance General de una Empresa.
Hice unos pequeños cambios, exclusivamente para esta necesidad, ya que sólo se representan 4 Barras.
Les dejo el código y a lo mejor, le puede a alguien servir.
Por mi parte quedo agradecido al Amigo Javier Tovar, ya que esto me ayudó mucho en mi conocimiento.
Saludos
Code: Select all
#include "hmg.ch"
#define nWIDTH GetDeskTopWidth()
#define nHEIGHT GetDeskTopHeight()-40
FUNCTION MAIN
*-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-SOLO ESTO HAY QUE MODIFICAR-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.-.-.-.-.//
LOCAL nRow := 10
LOCAL nCol := 10
LOCAL nW := 800
LOCAL nH := 300
LOCAL aX := {"ACTIVO","PASIVO","CAPITAL","PER/GAN"}
LOCAL nWColumn := 50
LOCAL lLineas := .T.
LOCAL lMarco := .T.
*-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.//
LOCAL cFormat := "99,999,999"
LOCAL nY := 0
LOCAL nVecesY := 0
LOCAL nVecesP := 0
LOCAL nVecesN := 0
LOCAL nRowF := nRow + nH
LOCAL nColF := nCol + nW
LOCAL lNegativo := .F.
LOCAL lPositivo := .F.
LOCAL nValorP := 0
LOCAL nValorN := 0
LOCAL nValorM := 0
LOCAL nAltoP := 0
LOCAL nRowX := 0
LOCAL nColY := 0
LOCAL nRowG := 0
LOCAL nColG := 0
LOCAL nWG := 0
LOCAL nHG := 0
LOCAL nValDiv := 0
LOCAL cLabel := ""
LOCAL cLabel2 := ""
LOCAL nColYFija := 0
LOCAL nValorY := 0
LOCAL nAncho := 0
LOCAL nValorYN := 0
//////////////////////////////////////////////////////////////////
SET CENTURY ON
SET DATE BRIT
SET FIXED on
SET DECIMALS TO 6
SET LANGUAGE TO SPANISH
USE BG // TOMO VALORES DE LA DBF
SUM ALL VALOR TO ACT FOR SUBSTR(CUENTA,1,1)='1'
SUM ALL VALOR TO PAS FOR SUBSTR(CUENTA,1,1)='2'
SUM ALL VALOR TO CAP FOR SUBSTR(CUENTA,1,1)='3'
GAN = ACT + PAS + CAP
USE
*ACT=ACT*-1 // PARA HACER PRUEBA EN NEGATIVO
PAS=PAS*-1 // PARA QUE GRAFIQUE POSITIVO
CAP=CAP*-1 // PARA QUE GRAFIQUE POSITIVO
*GAN=GAN*-1 // PARA VER EL CAMBIO DE COLOR SI ES POSITIVO O NEGATIVO
nAnchoVal := 0
aValoresS := {ACT,PAS,CAP,GAN}
IF GAN>0
aColores := {{128,225,255},{220,125,80},WHITE,BLUE}
ELSE
aColores := {{128,125,255},{100,225,225},WHITE,RED}
ENDIF
CIA='MI EMPRESA LATINA S. A.'
****** LONGITUD DE LOS VALORES ******
FOR n:= 1 To Len(aValoresS)
IF Len(AllTrim(STR(aValoresS[n]))) > nAnchoVal
nAnchoVal := Len(AllTrim(STR(aValoresS[n])))
ENDIF
NEXT n
////// AVERIGUAR SI HAY NEGATIVOS Y POSITIVOS //////
FOR n:= 1 TO Len(aValoresS)
IF aValoresS[n] < 0
lNegativo := .T.
ELSE
lPositivo := .T.
ENDIF
Next n
*----------------------------------------------------------------------------------------------------------------------------------------------------
IF !lNegativo .and. lPositivo // TODAS LAS COLUMNAS SON POSITIVAS ***************
*Obtener el Valor Maximo
FOR n:= 1 TO Len(aValoresS)
IF(aValoresS[n] > nValorP , nValorP := aValoresS[n] , )
Next n
nValorM := nValorP
IF nValorM>9000000
nY := ValnY(nValorM)
ELSE
nY := ValnY2(nValorM)
ENDIF
*Obtener Row de las X y Col de las Y
nRowX := nRowF //-30
nColY := nCol+(nAnchoVal*10)
nWG := nColF-200-nColY-30
nHG := nRowF-nRow -80
*MsgInfo(nWG)
*MsgInfo(nHG)
nValDiv:= nHG/nValorP
*nAltoP := nValDiv * aValoresS[1]
nAltoP := nHG
*MSGINFO (STR(nValorP))
nVecesP := Int(nValorP/nY) // Veces que pone los valores en el Eje Y
* MsgInfo("CUANTAS VECES "+STR(nVecesP)) // CUANTAS COLUMNAS SON DE GRAFICAR
ELSEIF lNegativo .and. !lPositivo // TODAS LAS COLUMNAS SON NEGATIVAS ***************
*Obtener el Valor Maximo Negativo
FOR n:= 1 TO Len(aValoresS)
IF(Abs(aValoresS[n]) > (nValorN) , nValorN := Abs(aValoresS[n]) , )
Next n
*CALCULAR VALOR MAXIMO TOTAL
nValorM := nValorN
IF nValorM>9000000
nY := ValnY(nValorM)
ELSE
nY := ValnY2(nValorM)
ENDIF
*Obtener Row de las X y Col de las Y
nRowX := nRow+40
nColY := nCol+(nAnchoVal*10)
nWG := nColF-200 - nColY-30
nHG := nRowF-nRow -80
*MsgInfo(nWG)
* MsgInfo(nHG)
* MsgInfo(nValorN)
nValDiv:= nHG/nValorN
* MsgInfo(nValDiv)
nAltoN := nHG
nRowX := nRow+60
nVecesN := Int(nValorN/nY) //Numero de veces que pone los valores en el Eje Y
ELSEIF lNegativo .and. lPositivo // HAY COLUMNAS POSITIVAS Y NEGATIVAS ***************
*Obtener Row de las X y Col de las Y
nColY := nCol+(nAnchoVal*10)
nWG := nColF-200 - nColY-30
nHG := nRowF-nRow -80
*MsgInfo(nAnchoVal)
*OBTENER LOS VALORES MAXIMOS Negativos y Positivos
FOR n:= 1 TO Len(aValoresS)
IF aValoresS[n] < 0
lNegativo := .T.
IF(Abs(aValoresS[n]) > nValorN , nValorN := Abs(aValoresS[n]) , )
ELSE
IF(aValoresS[n] > nValorP , nValorP := aValoresS[n] , )
lPositivo := .T.
ENDIF
Next n
*CALCULAR VALOR MAXIMO TOTAL
nValorM := nValorP + nValorN
IF nValorM>9000000
nY := ValnY(nValorM)
ELSE
nY := ValnY2(nValorM)
ENDIF
nVecesP := Int(nValorP/nY) //Numero de veces que pone los valores en el Eje Y
IF( nVecesP = 0 , nVecesP := 1,)
nVecesN := Int(nValorN/nY) //Numero de veces que pone los valores en el Eje Y
IF( nVecesN = 0 , nVecesN := 1,)
*MsgInfo("Veces valores en Y : " + str(nVecesY))
*nAltoP := nValDiv * aValoresS[1]
nAltoN := (nHG * nValorN) / nValorM
nAltoP := (nHG * nValorP) / nValorM
nValDiv:= nAltoP/nValorP
nRowX := nRowF -nAltoN
*MsgInfo(nVecesP)
*MsgInfo(nVecesN)
ENDIF
IF nValorM < 10 // DIEZ
cFormat := "99"
ELSEIF nValorM < 100 // CIEN
cFormat := "999"
ELSEIF nValorM < 1000 // MIL
cFormat := "9,999"
ELSEIF nValorM < 10000 // 10 MIL
cFormat := "99,999"
ELSEIF nValorM < 100000 // 100 MIL
cFormat := "999,999"
ELSEIF nValorM < 1000000 // 1 MILLON
cFormat := "9,999,999"
ELSEIF nValorM > 10000000 // 10 MILLONES
cFormat := "99,999,999"
ENDIF
nColY := nColY + 1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DEFINE WINDOW MAIN AT 0,0 WIDTH 645 HEIGHT 645 BACKCOLOR {0,128,255} MAIN NOCAPTION NOSIZE
@ 20,200 LABEL L1 VALUE "GRAFICO AL: "+DTOC(DATE()) WIDTH 365 HEIGHT 30 FONT 'ARIAL' SIZE 16 BOLD UNDER FONTCOLOR WHITE TRANSP
IF lMarco
DRAW LINE IN WINDOW MAIN AT 010,010 TO 010,633 pencolor GREEN penwidth 1 // HORIZONTAL UP
DRAW LINE IN WINDOW MAIN AT 010,010 TO 360,010 pencolor GREEN penwidth 1 // VERTICAL IZQ
DRAW LINE IN WINDOW MAIN AT 010,633 TO 360,633 pencolor GREEN penwidth 1 // VERTICAL DER
DRAW LINE IN WINDOW MAIN AT 360,010 TO 360,633 pencolor GREEN penwidth 1 // HORIZONTAL DOWN
ENDIF
DRAW RECTANGLE IN WINDOW MAIN AT 365,10 TO 635,633 pencolor GREEN penwidth 1 FILLCOLOR {0,128,255}
@ 390,0 LABEL L2 VALUE CIA WIDTH 633 HEIGHT 35 FONT 'ARIAL' SIZE 24 BOLD FONTCOLOR WHITE TRANSP UNDER CENTERALIGN
@ 450,150 LABEL L3 VALUE "ACTIVOS" WIDTH 200 HEIGHT 30 FONT 'ARIAL' SIZE 20 BOLD FONTCOLOR WHITE TRANSP
@ 450,300 LABEL L3A VALUE (Transform(ACT,'$99,999,999')) WIDTH 400 HEIGHT 50 FONT "ARIAL" SIZE 20 BOLD FONTCOLOR WHITE TRANSP
@ 490,150 LABEL L4 VALUE "PASIVOS" WIDTH 550 HEIGHT 35 FONT 'ARIAL' SIZE 20 BOLD FONTCOLOR WHITE TRANSP
@ 490,300 LABEL L4A VALUE (Transform(PAS,'$99,999,999')) WIDTH 400 HEIGHT 50 FONT "ARIAL" SIZE 20 BOLD FONTCOLOR WHITE TRANSP
@ 530,150 LABEL L5 VALUE "CAPITAL" WIDTH 550 HEIGHT 35 FONT 'ARIAL' SIZE 20 BOLD FONTCOLOR WHITE TRANSP
@ 530,300 LABEL L5A VALUE (Transform(CAP,'$99,999,999')) WIDTH 400 HEIGHT 50 FONT "ARIAL" SIZE 20 BOLD FONTCOLOR WHITE TRANSP
IF GAN>0
@ 570,150 LABEL L6 VALUE "UTILIDAD" WIDTH 550 HEIGHT 35 FONT 'ARIAL' SIZE 20 BOLD FONTCOLOR WHITE TRANSP
ELSE
@ 570,150 LABEL L6 VALUE "PERDIDA" WIDTH 550 HEIGHT 35 FONT 'ARIAL' SIZE 20 BOLD FONTCOLOR WHITE TRANSP
ENDIF
@ 570,300 LABEL L6A VALUE (Transform(GAN,'$99,999,999')) WIDTH 400 HEIGHT 50 FONT "ARIAL" SIZE 20 BOLD FONTCOLOR WHITE TRANSP
IF (!lNegativo .and. lPositivo) // TODOS LOS VALORES POSITIVOS
draw line in window Main at nRowX,nColY-10 to nRowX,nColF-200 pencolor WHITE penwidth 1 //EJE X
draw line in window Main at nRowF-20+50,nColY-1 to nRow+40,nColY-1 pencolor WHITE penwidth 1 //EJE Y
@ nRowX-10,nColY-25 LABEL Label_2 VALUE "0" FONT 'Arial' SIZE 14 BOLD FONTCOLOR WHITE WIDTH 20 TRANSP //el "0" entre los ejes
nColYFija := nColY
FOR n:= 1 TO Len(aValoresS) //Valores en las X y Barras
cLabel2:= "Label_" +StrZero(n,3,0)
nAltoP := nValDiv * aValoresS[n]
DRAW RECTANGLE IN WINDOW MAIN at nRowX-nAltoP,nColY to nRowX,nColY+nWColumn pencolor aColores[n] penwidth 0 fillcolor aColores[n] //TODOS POSITIVOS
@ nRowX,nColY LABEL &(cLabel2) VALUE aX[n] WIDTH nColY-nRow-10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD BACKCOLOR nil FONTCOLOR WHITE TRANSPARENT //RIGHTALIGN
nColY := nColY + nWColumn + 5
NEXT n
FOR n:= 1 TO nVecesP+1 //Valores en Y y Si se ponen Lineas o no.
cLabel := "Label_" +StrZero(n,2,0)
nValorY := nY * n
nValorY := nValorY * nValDiv
*MsgInfo(nValorY)
@ nRowX-nValorY-8,nCol+10 LABEL &(cLabel) VALUE Transform(nY*n,cFormat) WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD BACKCOLOR nil FONTCOLOR WHITE TRANSPARENT //Valores en el eje Y
IF lLineas
DRAW LINE IN WINDOW MAIN at nRowX-nValorY,nColYFija to nRowX-nValorY,nColF-200 pencolor WHITE penwidth 1 //EJE X paralelas
ENDIF
Next n
IF lNegativo
*MsgBox("Si Hay Negativos")
nVecesY := Int(nValorN/nY) //Veces que pone los valores en el Eje Y
IF (nVecesY = 0, nVecesY := 1, )
*MsgInfo(nVecesY)
FOR n:= 1 TO nVecesY
cLabel := "Label_" +StrZero(n,4,0)
nValorY := nY * n
nValorY := nValorY * nValDiv
*MsgInfo(nValorY)
@ nRowX+nValorY,nCol+10 LABEL &(cLabel) VALUE "-"+Transform(nY*n,cFormat) WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD BACKCOLOR nil FONTCOLOR WHITE TRANSPARENT //Valores en el eje Y
IF lLineas
draw line in window Main at nRowX+nValorY,nColYFija to nRowX+nValorY,nColF-200 pencolor WHITE penwidth 1 //EJE X paralelas
ENDIF
Next n
ENDIF
ELSEIF (lNegativo .and. !lPositivo) // TODOS LOS VALORES NEGATIVOS
draw line in window Main at nRowX,nColY-10 to nRowX,nColF-200 pencolor WHITE penwidth 1 //EJE X
draw line in window Main at nRowF-20+50,nColY-1 to nRow+40,nColY-1 pencolor WHITE penwidth 1 //EJE Y
@ nRowX-10,nColY-25 LABEL Label_2 VALUE "0" FONT 'Arial' SIZE 14 BOLD FONTCOLOR WHITE WIDTH 20 TRANSPARENT //el "0" entre los ejes
nColYFija := nColY
FOR n:= 1 TO Len(aValoresS)
cLabel2:= "Label_" +StrZero(n,3,0)
nAltoP := nValDiv * Abs(aValoresS[n])
*MsgInfo(nValDiv)
*MsgInfo(nAltoP)
DRAW RECTANGLE IN WINDOW MAIN at nRowX,nColY to nRowX+nAltoP,nColY+nWColumn pencolor aColores[n] penwidth 0 fillcolor aColores[n] // TODOS NEGATIVOS
@ nRowX-15,nColY LABEL &(cLabel2) VALUE aX[n] WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD BACKCOLOR nil FONTCOLOR WHITE TRANSPARENT //RIGHTALIGN
nColY := nColY + nWColumn + 5
NEXT n
IF lNegativo
*MsgBox("Si Hay Negativos")
nVecesY := Int(nValorN/nY) //Numero de veces que pone los valores en el Eje Y
IF (nVecesY = 0, nVecesY := 1, )
*MsgInfo(nVecesY)
FOR n:= 1 TO nVecesY
cLabel := "Label_" +StrZero(n,4,0)
nValorY := nY * n
nValorY := nValorY * nValDiv
*MsgInfo(nValorY)
@ nRowX+nValorY-8,nCol+10 LABEL &(cLabel) VALUE "-"+Transform(nY*n,cFormat) WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD BACKCOLOR nil FONTCOLOR BLUE TRANSPARENT //Valores en el eje Y
IF lLineas
DRAW LINE IN window Main at nRowX+nValorY,nColYFija to nRowX+nValorY,nColF-200 pencolor WHITE penwidth 1 //EJE X paralelas
ENDIF
Next n
ENDIF
ELSEIF lNegativo .and. lPositivo // POSITIVO & NEGATIVO
draw line in window Main at nRowX,nColY-10 to nRowX,nColF-200 pencolor WHITE penwidth 1 //EJE X HORIZONTAL
draw line in window Main at nRowF-20+50,nColY-1 to nRow+40,nColY-1 pencolor WHITE penwidth 1 //EJE Y VERTICAL
@ nRowX-10,nColY-25 LABEL Label_2 VALUE "0" FONT 'Arial' SIZE 14 BOLD FONTCOLOR WHITE WIDTH 20 TRANSPARENT //el "0" entre los ejes
nColYFija := nColY
FOR n:= 1 TO Len(aValoresS) //Valores en las X y Barras
cLabel2:= "Label_" +StrZero(n,3,0)
nAltoP := nValDiv * aValoresS[n]
DRAW RECTANGLE IN WINDOW MAIN at nRowX-nAltoP,nColY to nRowX,nColY+nWColumn pencolor aColores[n] penwidth 0 fillcolor aColores[n] // POSITIVO & NEGATIVO
@ nRowX,nColY LABEL &(cLabel2) VALUE aX[n] WIDTH nColY-nRow - 10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD BACKCOLOR nil FONTCOLOR WHITE TRANSPARENT //RIGHTALIGN
nColY := nColY + nWColumn + 5
NEXT n
FOR n:= 1 TO nVecesP //Valores en Y y Si se ponen Lineas o no.
cLabel := "Label_" +StrZero(n,2,0)
nValorY := nY * n
nValorY := nValorY * nValDiv
*MsgInfo(STR(nCol))
@ nRowX-nValorY-8,nCol+30 LABEL &(cLabel) VALUE Transform(nY*n,cFormat) WIDTH nColY-nRow-10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD BACKCOLOR nil FONTCOLOR WHITE TRANSPARENT //Valores en el eje Y
IF lLineas
DRAW LINE IN WINDOW MAIN at nRowX-nValorY,nColYFija to nRowX-nValorY,nColF-200 pencolor WHITE penwidth 1 //EJE X paralelas
ENDIF
Next n
FOR n:= 1 TO nVecesN
cLabel := "Label_" +StrZero(n,4,0)
nValorN := nY * n
nValorN := nValorN * nValDiv
*MsgInfo(STR(nValorN))
@ nRowX+nValorN-8,nCol+30 LABEL &(cLabel) VALUE "-"+Transform(nY*n,cFormat) WIDTH nColY-nRow-10 HEIGHT 30 FONT 'Arial' SIZE 9 BOLD BACKCOLOR nil FONTCOLOR BLACK TRANSPARENT //Valores en el eje Y
IF lLineas
DRAW LINE IN WINDOW MAIN at nRowX+nValorN,nColYFija to nRowX+nValorN,nColF-200 pencolor WHITE penwidth 1 //EJE X paralelas
ENDIF
Next n
ENDIF
ON KEY ESCAPE ACTION ThisWindow.Release
END WINDOW
MAIN.CENTER
MAIN.ACTIVATE
RETURN NIL
*----------------------
FUNCTION ValnY(nValorM)
LOCAL nValRet
IF nValorM <= 10 // DIEZ
nValRet := 1
ELSEIF nValorM <= 100 // CIEN
nValRet := 10
ELSEIF nValorM <= 1000 // MIL
nValRet := 100
ELSEIF nValorM <= 10000 // 10 MIL
nValRet := 1000
ELSEIF nValorM <= 100000 // 100 MIL
nValRet := 10000
ELSEIF nValorM <= 1000000 // 1 MILLON
nValRet := 100000
ELSEIF nValorM <= 10000000 // 10 MILLONES
nValRet := 1000000
ELSEIF nValorM >= 100000000 // 100 MILLONES
nValRet := 1000000
ENDIF
RETURN nValRet
*-----------------------
FUNCTION ValnY2(nValorM)
LOCAL nValRet
IF nValorM <= 10 // DIEZ
nValRet := 1
ELSEIF nValorM <= 100 // CIEN
nValRet := 10
ELSEIF nValorM <= 1000 // MIL
nValRet := 100
ELSEIF nValorM <= 5000 // 5 MIL
nValRet := 100
ELSEIF nValorM <= 10000 // 10 MIL
nValRet := 1000
ELSEIF nValorM <= 100000 // 100 MIL
nValRet := 10000
ELSEIF nValorM <= 500000 // 500 MIL
nValRet := 10000
ELSEIF nValorM <= 1000000 // 1 MILLON
nValRet := 100000
ELSEIF nValorM <= 1500000 // 1.5 MILLON
nValRet := 150000
ELSEIF nValorM <= 3000000 // 3 MILLONES
nValRet := 300000
ELSEIF nValorM <= 5000000 // 5 MILONES
nValRet := 500000
ELSEIF nValorM >= 10000000 // 10 MILLONES
nValRet := 1000000
ENDIF
RETURN nValRet
- Attachments
-
- BG.rar
- (142.59 KiB) Downloaded 42 times
-
- BG-BIG.rar
- (442.09 KiB) Downloaded 48 times
-
- GRAPH1.jpg (101.15 KiB) Viewed 883 times
-
- GRAPH2.jpg (96.15 KiB) Viewed 883 times
Re: Como corrijo una grafica?
Hola Amigos
Hice unos cambios al código y se los dejo por si a alguien le puede ser útil.
Es para que no muestre PER/GAN sino UTILIDAD o PERDIDA
Saludos.
Hice unos cambios al código y se los dejo por si a alguien le puede ser útil.
Es para que no muestre PER/GAN sino UTILIDAD o PERDIDA
Saludos.
- Attachments
-
- GRAFICO_BG.rar
- (3.15 KiB) Downloaded 39 times
-
- GRAPH1.jpg (96.47 KiB) Viewed 571 times
-
- GRAPH2.jpg (100.49 KiB) Viewed 571 times