Jose Luis:
no entiendo bien, pero al imprimir un gráfico y los datos que construyen la gráfica yo lleno una dbf de paso con los resultados y al mismo tiempo el array que se asigna a la grafica lo hago asi:
Code: Select all
//--- utilizo todbcdirect para obtener los datos de mi db sqlserver "oDbf:Query_All()" es propia, pero basicamente solo obtengo los datos que necesito de una forma mas rápida
STATIC FUNCTION LlamarDatos( oBrw, oGraph )
LOCAL oDbf, n, nTot, aTemAct, aTemVis, aTempX
aTemAct := {} ; aTempX := {}
aTemVis := {} ; nTot := {0,0,0}
oGraph:aSeries := {} ; oGraph:aData := {}
SELECT PA12 ; __dbZap()
oDbf := oApp:oConnect:Query("SELECT Convert( VarChar, TE_Fecha, 103 ), TE_Temperatura_Camara, TE_Temperatura_Visor, TE_Camara, TE_Estado, TE_Camara_FK FROM CGE_Temperaturas_Camara WHERE TE_Camara='"+SUBSTR(cCamara, 1, 2)+"' AND TE_Temperatura_Camara <> '0' AND YEAR(TE_Fecha)='"+cAnoEs+"' ")
oDbf:Query_All()
IF oDbf:nRecord > 0
For n := 1 TO oDbf:nRecord
SELECT PA12 ; dbAppend()
PA12->FECH := CTOD(oDbf:aDataAll[n][ 1]) ; PA12->TCAM := oDbf:aDataAll[n][ 2]
PA12->TCON := oDbf:aDataAll[n][ 3] ; PA12->CCAM := oDbf:aDataAll[n][ 4]
PA12->ESTA := oDbf:aDataAll[n][ 5] ; PA12->CAMA := oDbf:aDataAll[n][ 6]
PA12->TOTA := IF(PA12->TCON = 0, PA12->TCAM, ( ( PA12->TCAM + PA12->TCON ) / 2 ) )
AADD( aTemAct , PA12->TCAM ) ; AADD( aTempX, "·" )
AADD( aTemVis , PA12->TOTA )
Next ; oDbf:End()
ENDIF
SELECT PA12
dbGotop()
oGraph:aSeries := { { " T° Real", nRGB(200, 68, 10) , , } , { " ~x Prm", nRGB( 34,177, 76 ), , } }
oGraph:aData := { aTemAct , aTemVis }
oGraph:SetYVals( aTempX )
oGraph:Refresh()
oBrw:Refresh() ; oBrw:MakeTotals() ; oBrw:Gotop() ; oBrw:SetFocus()
RETURN .T.
al imprimir uso un simple reporte
Code: Select all
STATIC FUNCTION ImprimeTemperatura( oGraph )
LOCAL oRpt, oFont[3], oPrn, aPos, aSiz, nContador
SET 3DLOOK OFF
PRINTER oPrn PREVIEW
IF EMPTY( oPrn:hDC )
RETURN NIL
ENDIF
aPos:=oPrn:Cmtr2Pix(1.0,12.5)
aSiz:=oPrn:Cmtr2Pix(9.0, 5.0)
oPrn:SetPage( 1 ) // 1=Papel Letter 8 1/2 x 11 in / 9=A4 210 x 297 mm
oPrn:cDocument := "Temperaturas registradas"
nContador := 0
DEFINE FONT oFont[1] NAME "Roboto" SIZE 0,-10
DEFINE FONT oFont[2] NAME "Roboto" SIZE 0,-12 BOLD
DEFINE FONT oFont[3] NAME "Roboto" SIZE 0,-6
SELECT PA12 ; DBGOTOP()
REPORT oRpt TITLE " "," "," "," "," ","TEMPERATURAS REGISTRADAS EN "+cCamara,"HISTORICO POR TEMPORADA"," "," "," " LEFT ;
HEADER oGraph:Print(oPrn,aPos[1],aPos[2],aSiz[1],aSiz[2]), oApp:cEmpresa, oApp:cDireccion, oApp:cCiudad, oApp:cTelefono ;
FOOTER ALLTRIM(oApp:cSigEmp)+" "+oApp:cRut+" Página Nro : "+STR(oRpt:nPage,3,0)+" ( Fecha :"+DTOC(ServerDate())+" Hora : "+SUBSTR(ServerTime(),1,5)+" )",__MAIN+" "+__VERSION+oApp:cVersion+" Proc.: ["+MAINPRO+" ver."+VERSIONPRO+"]" CENTER ;
FONT oFont[1], oFont[2], oFont[3] ;
TO DEVICE oPrn
GROUP ON PA12->ID HEADER "Grados Celcius (°C)" FOOTER "End of File" FONT 2
COLUMN TITLE "Fecha" ,"de Registro" DATA PA12->FECH FONT 1 SIZE 20
COLUMN TITLE " " ,"Estado" DATA PA12->ESTA FONT 1 SIZE 45
COLUMN TITLE " " ,"Registro" DATA PA12->TCON PICTURE "@E 9999.99" FONT 1 SIZE 12 CENTER GRID
COLUMN TITLE " " ,"Visor" DATA PA12->TCAM PICTURE "@E 9999.99" FONT 1 SIZE 12 CENTER GRID
COLUMN TITLE " " ,"Promedio" DATA PA12->TOTA PICTURE "@E 9999.99" FONT 1 SIZE 12 CENTER GRID
END REPORT
IF oRpt:lCreated
oApp:SetReportStandard ( oRpt )
oRpt:bStartRecord := {|| IIF( nContador = oApp:nConSep, ( oRpt:NewLine(), oRpt:Separator(), nContador := 1 ), ++nContador ) }
oRpt:oTitle:aFont [6] := {|| 2 }
oRpt:oFooter:aFont[2] := {|| 3 }
oRpt:Stabilize()
ENDIF
ACTIVATE REPORT oRpt ON STARTGROUP oRpt:NewLine() ON ENDGROUP oRpt:NewLine()
AEval( oFont, {|e| IIF(e!=Nil, e:End(), Nil )} )
SELECT PA12 ; DBGOTOP()
RETURN Nil
resultado:
saludos!