Page 1 of 1
Una ayuda
Posted: Mon Apr 13, 2009 5:55 pm
by Pedro
Hola a todos
Voy a hacer el planteamiento que hice antes y al que no le encuentro solución.
Alguien ha hecho un scope a una tabla,( OrdScope(0,xValor) OrdScope(1,xValor) ), la ha presentado con Xbrowse y le ha funcionado bien?
Si es así me podríais indicar como lo habeis hecho para corregir mi módulo?
Re: Una ayuda
Posted: Mon Apr 13, 2009 7:41 pm
by Ricardo Ramirez E.
Pedro :
Funciona bien
Ahora es comun tener "problemas" de refresco, normalmente
hago un ( OrdScope(0,"") OrdScope(1,"") ) antes de "scopear" la tabla.
Despues deberas hacer un oBrw:Refresh() y si es necesario un oBrw:Gotop()
Re: Una ayuda
Posted: Mon Apr 13, 2009 7:56 pm
by Pedro
Mi problema no es ese Ricardo
Es que si pido 20 registros a la tabla (del 1 al 20) me los presenta bien, pero cuando bajo el cursor hacia el registro 21, tambien lo presenta y los sucesivos. Eso es lo que no averiguo
Re: Una ayuda
Posted: Mon Apr 13, 2009 8:14 pm
by Daniel Garcia-Gil
Pedro
Podrias colocar un ejemplo que represente el problema que tienes por favor
Re: Una ayuda
Posted: Mon Apr 13, 2009 8:17 pm
by Ricardo Ramirez E.
Pedro
Podrias colocar un ejemplo que represente el problema que tienes por favor
Si eso mismo
Re: Una ayuda
Posted: Tue Apr 14, 2009 7:17 am
by Pedro
Code: Select all
* ------------------------------------------------------------------
FUNCTION FiltraVarIva(aVarIva, aOpcion,oDlg)
* ------------------------------------------------------------------
Local aPie[9]
Local nIni , nFin
AFILL(aPie,0)
oDlg:End()
Do Case
Case aOpcion[3] == 1
FIVA->(OrdSetFocus(1))
FIVA->(dbGotop())
FIVA->(OrdScope(0,aVarIva[1]))
FIVA->(OrdScope(1,aVarIva[2]))
Case aOpcion[3] == 2
FIVA->(OrdSetFocus(2))
FIVA->(dbGotop())
FIVA->(ordScope(0,aVarIva[3]))
FIVA->(ordScope(1,aVarIva[4]))
Case aOpcion[3] == 3
FIVA->(OrdSetFocus(3))
FIVA->(dbGotop())
FIVA->(ordScope(0,aVarIva[5]))
FIVA->(ordScope(1,aVarIva[6]))
EndCase
FIVA->(dbGotop())
While FIVA->(!Eof())
aPie[1] += FIVA->(FieldGet(09))
aPie[2] += FIVA->(FieldGet(11))
aPie[3] += FIVA->(FieldGet(13))
aPie[4] += FIVA->(FieldGet(14))
aPie[5] += FIVA->(FieldGet(16))
aPie[6] += FIVA->(FieldGet(18))
aPie[7] += FIVA->(FieldGet(19))
aPie[8] += FIVA->(FieldGet(20))
aPie[9] += FIVA->(FieldGet(21))
FIVA->(dbSkip())
EndDo
FIVA->(dbGotop())
If aOpcion[1] == 1
PantFraIva(aVarIva,aOpcion,oDlg,aPie)
Else
ImprFraIva(aVarIva,aOpcion,oDlg)
EndIf
FIVA->(OrdScope(0,nil))
FIVA->(OrdScope(1,nil))
Return nil
*-------------------------------------------------------------------------------
FUNCTION PantFraIva(aVarIva,aOpcion,oDlg,aPie)
*-------------------------------------------------------------------------------
Local oWnd,oBar
Local oSay[3]
Local oBrw
Local cTexto1 := "Listado de Facturas "+If (aOpcion[2]= 1,"Emitidas","Recibidas")
Local cTexto2 := aDatEmp[2]+" "+Str(aDatEmp[7])
* oDlg:End()
* FIVA->(dbGotop())
DEFINE WINDOW oWnd MDICHILD of oWmain FONT oFont ;
TITLE cTexto1
DEFINE BUTTONBAR oBar1 OF oWnd SIZE 60, 50 2007
DEFINE BUTTON OF oBar1 ACTION oWnd:End() ;
RESOURCE "Salir" PROMPT "Salir" TOOLTIP "Salir de esta pantalla"
oBrw = TXBrowse():New( oWnd )
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:lRecordSelector := .t.
oBrw:nHeaderLines := 1
oBrw:nDataLines := 1
oBrw:nRowSel := 1
oBrw:nMarqueeStyle := 5
oBrw:bClrSelFocus := {||{RGB(255,204,204),RGB(176,196,222 )}}
oBrw:cAlias := "FIVA"
oBrw:bClrStd := {|| { nRGB( 0, 0, 51), nRGB(204,204,102) } } // colores para lineas normales
oBrw:bClrSel := {|| { nRGB(0,0,0), nRGB(241,222,088) } } // para barra de linea selecc cuando el control no tiene el foco
oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(153,204,255) } } // para barra de linea selecc cuando el control tiene el foco
oBrw:lFooter := .t.
oBrw:lFastEdit := .F.
oBrw:nFreeze := 5
oBrw:CreateFromCode()
For n := 22 to Len(oBrw:aCols())
oBrw:DelCol(n)
If(n > 22, n:= 22, n)
If n = Len(oBrw:aCols())
oBrw:DelCol(n)
exit
EndIf
sysrefresh()
EndFor
oBrw:aCols[5]:cFooter := "Totales..."
oBrw:aCols[09]:cFooter := Transform(aPie[1],"9,999,999.99")
oBrw:aCols[11]:cFooter := Transform(aPie[2],"9,999,999.99")
oBrw:aCols[13]:cFooter := Transform(aPie[3],"9,999,999.99")
oBrw:aCols[14]:cFooter := Transform(aPie[4],"9,999,999.99")
oBrw:aCols[16]:cFooter := Transform(aPie[5],"9,999,999.99")
oBrw:aCols[18]:cFooter := Transform(aPie[6],"9,999,999.99")
oBrw:aCols[19]:cFooter := Transform(aPie[7],"9,999,999.99")
oBrw:aCols[20]:cFooter := Transform(aPie[8],"9,999,999.99")
oBrw:aCols[21]:cFooter := Transform(aPie[9],"9,999,999.99")
oWnd:oClient := oBrw
ACTIVATE Window oWnd Maximized;
ON INIT oBrw:SetFocus();
valid(dbCloseAll(),.t.)
SysRefresh()
Return( nil )
Este es el módulo que me trae de cabeza. Despues de un dialogo donde se solicitan los datos para presentar o imprimir, al pulsar el boton aceptar del dialogo, lo envio a una funcion de comprobacion de los datos y de ésta a la funcion filtrariva que es la primera que teneis. Supuestamente en esa funcion (filtrariva) el scope funciona, pues los datos del pie, son buenos, y cuando pasa a la funcion pantfraiva el browse se genera y presenta bien los datos (siempre y cuando no superen la ventana del browse) pero una vez que has recorrido los datos visibles, llega la sorpresa, el resto de los datos tambien son presentados (el resto de los datos son aquellos que deben estar fuera del scope), y ese es mi problema
Re: Una ayuda
Posted: Tue Apr 14, 2009 8:26 am
by Daniel Garcia-Gil
Pedro...
Te dejo un ejemplo basico y sencillo... por favor trata de repoducir tu error en el mismo y publicalo... a mi no me genra ningun error
la base de datos que usa es la encontrada en los samples de FWH
Code: Select all
#include "FiveWin.ch"
#include "xbrowse.ch"
REQUEST DBFCDX
procedure main()
local oBrw, oWnd
CheckCustCdx()
USE CUSTOMER NEW SHARED VIA "DBFCDX"
SET ORDER TO TAG SALARY
customer->( OrdSetFocus(10) )
customer->( dbgotop() )
customer->(OrdScope(0,50000))
customer->(OrdScope(1,57800))
customer->( dbgotop() )
DEFINE WINDOW oWnd title "Change Edit font xbrowse"
oBrw := TxBrowse():New( oWnd )
oBrw:cAlias := "customer"
oBrw:CreateFromCode()
oWnd:oClient := oBrw
ACTIVATE WINDOW oWnd
return
//----------------------------------------------------------------------------//
static function CheckCustCdx()
local n
if File( "customer.cdx" )
FErase( "customer.cdx" )
endif
if !File( "customer.cdx" )
USE CUSTOMER EXCLUSIVE VIA "DBFCDX"
for n := 1 to FCount()
CreateTag( FieldName( n ) )
next
USE
endif
return nil
//----------------------------------------------------------------------------//
static function CreateTag( ctag )
INDEX ON &ctag TAG &ctag
return nil
//----------------------------------------------------------------------------//
Re: Una ayuda
Posted: Tue Apr 14, 2009 8:46 am
by Pedro
Creo que no me he explicado Daniel
El módulo al compilar y ejecutarse, no da ningun error, funciona. Lo que no funciona es el scope, que se salta su ámbito.
Para explicarme mejor.
Imagínate que en el dialogo tu escoges visualizar las facturas emitidas por registro. En los datos DESDE HASTA insertas 1 y 25 respectivamente, haces un scope a la tabla con su indice por registro desde el 1 al 25
Code: Select all
FIVA->(ordSetFocus(1))----> indice por registro
FIVA->(dbGotop())----> nos vamos al inicio de la tabla
FIVA->(OrdScope(0,nInicio))-----> nInicio vale 1
FIVA->(OrdScope(1,nFin))-------> nFin vale 25
Y ahora hacemos el Browse
Pues bien, al pintarse el browse nos aparecen los registros del 1 al 25, perfecto, pero cuando llegas al 25 y haces un Down() al Browse....¡¡¡¡¡Aparece el 26!!!! y así sucesivamente cada vez que haces un Down.
Si hay un Scope, un filtro, el 26 no debe aparecer, el 25 es el fin de la tabla en el scope. De todas formas compilaré tu ejemplo a ver si se salta el scope. Te digo algo en cuanto lo tenga
Re: Una ayuda
Posted: Tue Apr 14, 2009 10:35 am
by Pedro
He compilado tu ejemplo Daniel, y funciona OK, mi pregunta ahora sería, ¿es por culpa de la tabla?. Fue creada con clipper.
Haré una comprobación creando una tabla idéntica, le pasaré los datos y comprobaré si el scope hace lo mismo.
Pues hace lo mismo, presenta bien el scope, pero se lo salta a la torera. En cuanto pasas a un registro que no pertenece al ámbito del scope, lo presenta.