Page 1 of 1

Footer con TWBrowse de HC

Posted: Tue Dec 30, 2008 9:00 pm
by rolando
Buenas tardes,

Tengo un browse (TWBROWSE HC) que tiene seis columnas con sus respectivos seis Headers.

De estas seis columnas, sólo una necesita un total a colocar en el Footer. Mi consulta es si se puede hacer que, teniendo seis columnas pueda dibujarse un solo footer marginado sobre la derecha para que se vea el total de la última columna.

Gracias.

Rolando :D

Re: Footer con TWBrowse de HC

Posted: Wed Dec 31, 2008 12:56 am
by csincuir
Rolando, si se puede, y lo hago de esta forma:

Code: Select all

    
            nTDebe := 0
            nTHaber := 0
            oLbx:lDrawFooters := .t.
            oLbx:aFooters := { "","Suma Iguales:", Transform( nTDebe, "999,999,999.99" )+" ", Transform( nTHaber, "999,999,999.99" )+" " }
            oLbx:aFJustify:={0,1,1,1}  //Justificación 0=Izquierda, 1=derecha, 2=Centro
Espero te sirva.

Saludos, y Feliz Año Nuevo!!

Carlos Sincuir

Re: Footer con TWBrowse de HC

Posted: Wed Dec 31, 2008 9:19 am
by rolando
Carlos,

Te agradezco por contestar, pero como tu indicas es justamente como lo hago y no es lo que quiero lograr.

Del modo que sugieres se obtienen cuatro columnas en el footer y lo que quiero hacer es que todo el footer sea una sola columna con el total.

Saludos y feliz año nuevo.

R :roll: lando

Re: Footer con TWBrowse de HC

Posted: Wed Dec 31, 2008 3:49 pm
by Francisco Horta
Rolando,
Lo que quieres hacer no se puede, yo lo trate de hacer, pero hay que meterle mano a la clase y directamente al programa en .c cosa que no se me da :-(
salu2
paco

Re: Footer con TWBrowse de HC

Posted: Wed Dec 31, 2008 7:16 pm
by rolando
Paco,

Gracias por responder. Seguiré como venía haciéndolo. Lo que pasa es que uno se entusiasma y está siempre queriendo cambiarle todo.

Feliza año nuevo para tí y para todo el foro.

R :D olando

Re: Footer con TWBrowse de HC

Posted: Wed Dec 31, 2008 8:13 pm
by rolando
Paco,

Tu me diste la idea. Retoqué un poquito la clase de Hernán y logré que haga lo que deseaba.

Image

Saludos.

Roland :D

Re: Footer con TWBrowse de HC

Posted: Thu Jan 01, 2009 11:01 pm
by rolando
Me olvidé de publicar la reforma,

Hay que reformar el METHOD DrawFooters:

Code: Select all


If Len( aFooters ) <> ( nLen:= Len( ::GetColSizes() ) )

	  * ASize( aFooters, nLen )
////////////////////////////////////////////////////////////////////////////////////////
	if len(aFooters) == 1                         // by R. Cerella para footer 1 sola columna
	   ASize( aFooters, 1 )                       
	else                                                 
	   ASize( aFooters, nLen )                 
	endif                                              
////////////////////////////////////////////////////////////////////////////////////////
	 AEval( aFooters, {|uElem,n| ;
                aFooters[n]:= If( !"C"$ValType(uElem),"",uElem) } )
EndIf


Saludos.

Rolando :D

Re: Footer con TWBrowse de HC

Posted: Fri Jan 02, 2009 7:01 pm
by Francisco Horta
Gracias Rolando, enseguida adapto la wbrowse
salu2
Paco

Re: Footer con TWBrowse de HC

Posted: Mon Jan 05, 2009 11:37 am
by Rochinha
Estimados,

Fiz pequenas alteracoes em minha HC-TWBrowse:

Code: Select all

CLASS TWBrowse FROM TControl

   DATA   bFooter
   DATA   lSumFooter INIT .f.
   ...

//----------------------------------------------------------------------------//
METHOD ReDefine( nId, bLine, oDlg, aHeaders, aColSizes, cField, uVal1, uVal2,;
                 bChange, bLDblClick, bRClick, oFont, oCursor,;
                 nClrFore, nClrBack, cMsg, lUpdate, cAlias,;
                 bWhen, bValid, bLClick, aActions ) CLASS TWBrowse

   ...
   ::bFooter    = {||.t.}
   ::lSumFooter = .f.
   ...

return Self

//----------------------------------------------------------------------------//
METHOD Paint() CLASS TWBrowse

   local n := 1, nSkipped := 1, nLines
   local nSkip, nRealSkip

   if ::lIconView
      ::DrawIcons()
      return 0
   endif

   if ::nRowPos == 1 .and. ! Empty( ::cAlias ) .and. ;
      Upper( ::cAlias ) != "ARRAY" .and. Upper( ::cAlias ) != "_TXT_"
      if ! ( ::cAlias )->( EoF() )
         ( ::cAlias )->( DbSkip( -1 ) )
         if ! ( ::cAlias )->( BoF() )
            ( ::cAlias )->( DbSkip() )
         endif
      endif
   endif

   // **********
   if ::lSumFooter
      ::lDrawFooters  := .t.                      
      ::aFJustify     := ::aJustify
   endif
   // **********

   ...

return 0

//----------------------------------------------------------------------------//
METHOD Refresh( lSysRefresh ) CLASS TWBrowse

    If ::Cargo != Nil .or. ; // Tree
       !( ::nLen := Eval( ::bLogicLen ) ) > 0
       Super:Refresh()
    Else // Si hay elementos en la tabla
       DEFAULT lSysRefresh:= .f.
       If "B"$ValType( ::aFooters )
          ::DrawFooters()
       EndIf
       Super:Refresh( .f. ) // No borrar fondo, WBrwPane se encarga de eso !!
       If lSysRefresh       // OJO Usar con cuidado porque puede hacer agotar
          SysRefresh()      // el Stack :-(
       EndIf

       // **********
       if ::lSumFooter
          eval( ::bFooter )
       endif
       // **********

    EndIf
   return 0
Em meus aplicativos uso:

Code: Select all

...
REDEFINE LISTBOX oLbx FIELDS ... ;
                    HEADERS ... ;
                    FIELDSIZES ... ;
                    ID 999 OF oDlg
                    //
                    oLbx:aJustify      := { .f., .f., 1, .f., 1, 1 }
                    //
                    oLbx:lSumFooter    := .t.                      
                    oLbx:bFooter       := {|| ( aSumFooter := nSumFooter( oLbx, "CLIENTS", {0,0,0,0,1,1} ) ) } 
                    oLbx:aFooters      := { "", "", "", "", 0, 0 }
                    //
...

Code: Select all

...
function nSumFooter( oSUMLbx, cSUMArea, aSUMArray )
   // oSUMLbx   - Objeto Browse
   // cSUMArea  - Alias usado no momento
   // aSUMArray - Array de 0s e 1s onde 0-Nao soma e 1-Soma
   local aSUMLbx := {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
   nSUMArea := Select()
   dbSelectArea( cSUMArea )
   dbGotop()
   do while .not. eof()
      for n = 1 to Len( aSUMArray )
          if aSUMArray[n] = 1 
             aSUMLbx[n] := aSUMLbx[n] + Eval( GenBlockN( oSUMLbx:bLine, n ) )
          endif
      next
      skip
   enddo
   for n = 1 to Len( aSUMArray )
       oSUMLbx:aFooters[n] := iif( aSUMArray[n] = 0, "", transf( aSUMLbx[n], "@E 999999.99" ) )
   next
   dbGotop()
   dbSelectArea( nSUMArea )
   return aSUMLbx

static function GenBlockN( bLine, nPos )
   return { || val( iif(","$Eval(bLine)[nPos],;
                    substr(Eval(bLine)[nPos],1,at(",",Eval(bLine)[nPos])-1)+"."+substr(Eval(bLine)[nPos],at(",",Eval(bLine)[nPos])+1,3),;
                    Eval(bLine)[nPos]) ) }
...