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 :D

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.