Page 1 of 1

Footer con TWBrowse de HC

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

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

Code: Select all  Expand view
   
            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

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

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

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

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

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

Hay que reformar el METHOD DrawFooters:


Code: Select all  Expand view

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

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

Re: Footer con TWBrowse de HC

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

Fiz pequenas alteracoes em minha HC-TWBrowse:
Code: Select all  Expand view
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  Expand view
...
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  Expand view
...
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]) ) }
...