Buenos días!!!
Presento un dialogo con 2 Meters y 2 botones.
Al oprimir ACEPTAR ejecuta un listado que lee datos de 2 bases, la idea es que en cada METER se refleje el avance de dicha lectura.
El primer METER trabaja perfectamente, el segundo METER NO LOGRO que muestre el avance y creo haber probado de todas las formas y no veo cual es el problema.
este es mi código. si alguien ve mi ERROR agradecería me lo cuente.
Gracias.
function lstVentas2()
...
Private oMeter1
Private oMeter2
Private nActual1 := 0
Private nActual2 := 0
Private xtotCli := 0
Private xTotVtas := 0
Private oMensaje, cMensaje:=''
.....
if veoclifor(@nCliente,@cVeoCli,.t.)
if nCliente = 0
xTotCli := CliFor->(LastRec())
else
xTotCli := 1
endif
select DetVtaF
set filter to str(DetVtaF->Cliente,4) = str(CliFor->CodCliente,4) .and. DetVtaF->FecVenta>=dDesde .and. DetVtaF->FecVenta<=dHasta
DetVtaF->(DbGoTop())
set relation to Articulo into ArtFor
while !DetVtaF->(Eof())
xTotVtas += 1
DetVtaF->(DbSkip())
end
DEFINE DIALOG oDlgMed RESOURCE "Medidores"
REDEFINE SAY oMensaje PROMPT cmensaje ID Med_Mensaje OF oDlgMed color colorfw->ForeSay, colorfw->FondoSay
REDEFINE METER oMeter1 VAR nActual1 TOTAL xtotCli ID Med_Meter1 of oDlgMed
REDEFINE METER oMeter2 VAR nActual2 TOTAL xTotVtas ID Med_Meter2 of oDlgMed
REDEFINE BTNBMP oBtnAcep ID Med_Aceptar OF oDlgMed FILENAME "ACEPTAR.BMP" ACTION (LstVtasXCli(nCliente,cVeoCli,dDesde,dHasta, @oMensaje,@cMensaje),oDlgMed:end())
REDEFINE BTNBMP oBtnCanc ID Med_Cancelar OF oDlgMed FILENAME "CANCELA.BMP" CANCEL ACTION oDlgMed:End()
ACTIVATE DIALOG oDlgMed CENTERED
endif
dbcloseall()
return NIL
*-----------------------------------------------------------------------------------*
*----------------------------------------------------------------------------------------------*
/***
* emito informe de Ventas
*
*/
*
function lstVtasXCli(nCliente,cVeoCli,dDesde,dHasta,oMensaje,cMensaje)
local nhoja := 0
....
if lsigo
PRINT oPrn NAME "Ventas de Formularios" PREVIEW MODAL
if Empty( oPrn:hDC )
MsgStop( "Impresora Fuera de Linea" )
return nil
endif
....
while !CliFor->(Eof())
cMensaje := left(CliFor->RazonSoc,15)
oMensaje:Refresh()
//msginfo(str(Clifor->Codcliente,4),'Cliente')
if prow == 0
prow+=nrowstep
oPrn:Say(prow, pcol*4 ,'Fecha de Emisión: ' + dtoc( date() ),oCour_n_10)
......
prow+=nrowstep*1.5
endif
select DetVtaF
DetVtaF->(DbGoTop())
if DetVtaF->Cliente#0
oPrn:Say(prow, pcol*6 ,CliFor->RazonSoc,oCour_b_10)
prow+=nrowstep
else
Clifor->(DbSkip())
oMeter1:Set(nActual1+1)
oMeter1:Refresh()
loop
endif
oPrn:Say(prow, pcol*6 ,dtoc(DetVtaF->FecVenta),oCour_b_10)
dQueFec:=DetVtaF->FecVenta
prow+=nrowstep
While !DetVtaF->(EoF())
oMeter2:Set(nActual2+1)
oMeter2:Refresh()
oPrn:Say(prow, pcol*19 ,ArtFor->Abrevia),oCour_n_10)
prow+=nrowstep
if DetVtaF->TipoDoc#2
nTotCli += DetVtaF->TotVenta
.....
endif
if prow > nRowStep*55
oPrn:Line(pRow ,ncolStep,pRow,ncolstep*77)
EndPage
Page
PROW:=0
if prow == 0
prow+=nrowstep
oPrn:Say(prow, pcol*4 ,'Fecha de Emisión: ' + dtoc( date() ),oCour_n_10)
.....
prow+=nrowstep*1.5
endif
endif
DetVtaF->(DbSkip())
if !dQueFec=DetVtaF->FecVenta
prow+=nrowstep/2
......
endif
end
CLiFor->(DbSkip())
oMeter1:Set(nActual1+1)
oMeter1:Refresh()
nActual2 := 0
oMeter2:Set(nActual2)
oMeter2:Refresh()
end
oPrn:Line(pRow ,ncolStep,pRow,ncolstep*77)
....
endpage
EndPrint
endif
return NIL
*------------------------------------------------------------------------------*
Dificultad con METERS
Re: Dificultad con METERS
Puedes probar con:
y lo mismo deberias hacer para el nActual1
Code: Select all | Expand
While !DetVtaF->(EoF())
nActual2 ++
oMeter2:Set(nActual2)
oMeter2:Refresh()
...
-
- Posts: 212
- Joined: Wed Apr 07, 2021 3:56 pm
Re: Dificultad con METERS
Buen día Cesar!!!
Gracias por tu tiempo.
Probé tu sugerencia pero sigue igual.
El primer meter muestra el avance de forma correcta pero el segundo ni se entera.
Gracias
Gracias por tu tiempo.
Probé tu sugerencia pero sigue igual.
El primer meter muestra el avance de forma correcta pero el segundo ni se entera.
Gracias
Re: Dificultad con METERS
Code: Select all | Expand
// C:\FWH..\SAMPLES\JCAMILO.PRG
FUNCTION lstVentas2()
...
PRIVATE oMeter1
PRIVATE oMeter2
PRIVATE nActual1 := 0
PRIVATE nActual2 := 0
PRIVATE xtotCli := 0
PRIVATE xTotVtas := 0
PRIVATE oMensaje, cMensaje := ''
.....
IF veoclifor( @nCliente, @cVeoCli, .T. )
IF nCliente = 0
xTotCli := CliFor->( LastRec() )
ELSE
xTotCli := 1
ENDIF
SELECT DetVtaF
SET FILTER TO Str( DetVtaF->Cliente, 4 ) = Str( CliFor->CodCliente, 4 ) ;
.AND. DetVtaF->FecVenta >= dDesde .AND. DetVtaF->FecVenta <= dHasta
// USE INDEX ON... TEMPORARY / MEMORY es mejor y mas rapido.
DetVtaF->( dbGoTop() )
SET RELATION TO Articulo into ArtFor
WHILE !DetVtaF->( Eof() )
SYSREFRESH()
xTotVtas += 1
DetVtaF->( dbSkip() )
ENDDO
DEFINE DIALOG oDlgMed RESOURCE "Medidores"
REDEFINE SAY oMensaje PROMPT cmensaje ID Med_Mensaje OF oDlgMed COLOR colorfw->ForeSay, colorfw->FondoSay
REDEFINE METER oMeter1 VAR nActual1 TOTAL xtotCli ID Med_Meter1 of oDlgMed
REDEFINE METER oMeter2 VAR nActual2 TOTAL xTotVtas ID Med_Meter2 of oDlgMed
REDEFINE BTNBMP oBtnAcep ID Med_Aceptar OF oDlgMed FILENAME "ACEPTAR.BMP" ACTION ( LstVtasXCli( nCliente, cVeoCli, dDesde, dHasta, @oMensaje, @cMensaje ), oDlgMed:end() )
REDEFINE BTNBMP oBtnCanc ID Med_Cancelar OF oDlgMed FILENAME "CANCELA.BMP" CANCEL ACTION oDlgMed:End()
ACTIVATE DIALOG oDlgMed CENTERED
ENDIF
dbCloseAll()
RETURN NIL
/***
* emito informe de Ventas
*
*/
FUNCTION lstVtasXCli( nCliente, cVeoCli, dDesde, dHasta, oMensaje, cMensaje )
LOCAL nhoja := 0
....
IF lsigo
PRINT oPrn NAME "Ventas de Formularios" PREVIEW MODAL
IF Empty( oPrn:hDC )
MsgStop( "Impresora Fuera de Linea" )
RETURN NIL
ENDIF
....
WHILE !CliFor->( Eof() )
SYSREFRESH()
cMensaje := Left( CliFor->RazonSoc, 15 )
oMensaje:Refresh()
// msginfo(str(Clifor->Codcliente,4),'Cliente')
IF prow == 0
prow += nrowstep
oPrn:Say( prow, pcol * 4, 'Fecha de Emisión: ' + DToC( Date() ), oCour_n_10 )
......
prow += nrowstep * 1.5
ENDIF
SELECT DetVtaF
DetVtaF->( dbGoTop() )
IF DetVtaF->Cliente # 0
oPrn:Say( prow, pcol * 6, CliFor->RazonSoc, oCour_b_10 )
prow += nrowstep
ELSE
Clifor->( dbSkip() )
//oMeter1:Set( nActual1 + 1 )
//oMeter1:Refresh()
++nActual1
oMeter1:Set(nActual1)
oMeter1:Refresh()
LOOP
ENDIF
oPrn:Say( prow, pcol * 6, DToC( DetVtaF->FecVenta ), oCour_b_10 )
dQueFec := DetVtaF->FecVenta
prow += nrowstep
WHILE !DetVtaF->( Eof() )
SYSREFRESH()
//oMeter2:Set( nActual2 + 1 )
//oMeter2:Refresh()
++nActual2
oMeter2:Set(nActual2)
oMeter2:Refresh()
oPrn:Say( prow, pcol * 19, ArtFor->Abrevia ), oCour_n_10 )
prow += nrowstep
IF DetVtaF->TipoDoc # 2
nTotCli += DetVtaF->TotVenta
.....
ENDIF
IF prow > nRowStep * 55
oPrn:Line( pRow, ncolStep, pRow, ncolstep * 77 )
ENDPAGE
PAGE // NEW PAGE
PROW := 0
IF prow == 0
prow += nrowstep
oPrn:Say( prow, pcol * 4, 'Fecha de Emisión: ' + DToC( Date() ), oCour_n_10 )
.....
prow += nrowstep * 1.5
ENDIF
ENDIF
DetVtaF->( dbSkip() )
IF !dQueFec = DetVtaF->FecVenta
prow += nrowstep / 2
......
ENDIF
ENDDO
CLiFor->( dbSkip() )
// oMeter1:Set( nActual1 + 1 )
// oMeter1:Refresh()
++nActual1
// O:
// nActual1 := nActual1 + 1
oMeter1:Set(nActual1)
oMeter1:Refresh()
nActual2 := 0
oMeter2:Set( nActual2 )
oMeter2:Refresh()
ENDDO
oPrn:Line( pRow, ncolStep, pRow, ncolstep * 77 )
....
ENDPAGE
ENDPRINT
ENDIF
RETURN NIL
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
-
- Posts: 212
- Joined: Wed Apr 07, 2021 3:56 pm
Re: Dificultad con METERS
Buen día Joao!!!
Gracias por tu tiempo también.
Con tus cambios tampoco logro hacer funcionar el segundo METER.
Gracias.
Gracias por tu tiempo también.
Con tus cambios tampoco logro hacer funcionar el segundo METER.
Gracias.
Re: Dificultad con METERS
Mira \samples:
TESTMEX**
Saludos.
TESTMEX**
Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341