Totalizar columna en el footer en wbrowse de HDC

Totalizar columna en el footer en wbrowse de HDC

Postby jose_murugosa » Wed Nov 18, 2009 4:42 pm

Hace un tiempo, un amigo me preguntó como colocar el total de una columna en el footer, francamente nunca había tenido necesidad de hacerlo, pero le mandé a un post del foro que refería a algo parecido pero con un Array....

Como no recuerdo quien me lo preguntó, no se si obtuvo buenos resultados..... :roll:
Lo cierto es que ahora soy yo el que necesita totalizar una columna de un browse en el footer (en el browse de HDC) y no doy con la solución. :oops:

Image

este es un pequeño ejemplo que resume el código que uso:
Code: Select all  Expand view

#include "Fivewin.ch"

#include "FiveWin.ch"
#include "WColors.ch"

external dbfcdx, ordkeyno, ordkeycount, ordkeygoto

#define HA_LEFT    0
#define HA_RIGHT   1
#define HA_CENTER  2
#define VA_TOP     4
#define VA_BOTTOM  8
#define VA_CENTER  32
//----------------------------------------------------------------------------//

function Main()

   local oWnd, oLbx
   local cKey:= "Upper(Nombre)", oItem
   local cDefaultMsg:= "(C) 1994-2002, CeSoTech PC Solutions"
   local oFont, oSay
   
   SET DEFAULT TO ".\data"
   REQUEST DBFCDX
   RddSetDefault("dbfcdx")
     
   DEFINE FONT oFont NAME GetSysFont() SIZE 0,-10 BOLD
     
   use clientes
   index on &cKey to clientes

   DEFINE DIALOG oWnd FROM 0,0 TO 33,47 + 25 ;
          TITLE "Y el footer?" ;


      @.2,.2 LISTBOX oLbx FIELDS clientes->nombre ,  ;
                               clientes->Telefono,   ;
                               Str(clientes->edad,2) ;
                               OF oWnd SIZE 280,210  ;
                               HEADERS "Apellido y Nombres",;
                                       "Telefono",          ;
               "Edad"               ;
                               SIZES 250,50,50

      oLbx:lAdjLastCol  := .F.
      oLbx:bSeek        := {|| oLbx:DbfSeek(.T.) }
      oLbx:nLineHeight:= 25
      oLbx:lDrawFooters:=.t.
      oLbx:aFooters:={ "Total:", " ", {|| TotEdad() } }
     
   ACTIVATE DIALOG oWnd CENTERED

   RELEASE FONT oFont

return nil

//----------------------------------------------------------------------------//
Function GetSysFont() ; return "MS Sans Serif"
//----------------------------------------------------------------------------//

FUNCTION TotEdad()
    LOCAL ntot:=0
    DbEval( {|| ntot+=CLIENTES->Edad } )
RETURN Transform( ntot, "999,999" )
 


El Exe y el Prg lo encuentran en:
http://www.box.net/shared/gc06xk59ad
Aceptaré agradecido cualquier ayuda que puedan brindarme para alcanzar mi objetivo.

Gracias desde Ya.
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1145
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Totalizar columna en el footer en wbrowse de HDC

Postby csincuir » Wed Nov 18, 2009 4:58 pm

Jose,
Porque no pruebas hacer estos cambios en tu codigo:

En donde tienes:
oLbx:aFooters:={ "Total:", " ", {|| TotEdad() } }

Cambialo por:
oLbx:aFooters:={ "Total:", " ", {|| TotEdad( oLbx ) } }

Luego en tu funcion TotEdad(), cambiala por:

FUNCTION TotEdad( oLbx )
LOCAL ntot:=0
DbEval( {|| ntot+=CLIENTES->Edad } )
oLbx:aFooters:={ "Total:", " ", Transform( ntot, "999,999") }
oLbx:Refresh()
RETURN .t.

Y me cuentas que tal.

Carlos Sincuir
csincuir
 
Posts: 400
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Totalizar columna en el footer en wbrowse de HDC

Postby csincuir » Wed Nov 18, 2009 5:07 pm

Jose,
Por contestar rápido, no vi bien tu codigo.

Creo que lo que tienes que hacer es lo siguiente:

Sumar primero el total de edades:
Code: Select all  Expand view

function Main()

   local oWnd, oLbx
   local cKey:= "Upper(Nombre)", oItem
   local cDefaultMsg:= "(C) 1994-2002, CeSoTech PC Solutions"
   local oFont, oSay
   local nTot // <---- Agregado

   SET DEFAULT TO ".\data"
   REQUEST DBFCDX
   RddSetDefault("dbfcdx")
     
   DEFINE FONT oFont NAME GetSysFont() SIZE 0,-10 BOLD
     
   use clientes
   index on &cKey to clientes

   nTot := 0
   while !clientes->( Eof( ) )
      nTot +) clientes->Edad
      clientes->( DbSkip() )
   End
   Clientes->( DbGotop() )
 


Luego en la definicion del footer:

Code: Select all  Expand view

oLbx:aFooters:={ "Total:", " ", Transform( ntot, "999,999") }
 


Y listo, ya no tienes que llamar a otra funcion adicional, a menos que agregues otro registro, tendras que volver a sumar las edades, volver a definir el footer, y hacerle un refresh al objeto del Browse.

Espero me entiendas.

Carlos Sincuir
csincuir
 
Posts: 400
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Totalizar columna en el footer en wbrowse de HDC

Postby jose_murugosa » Wed Nov 18, 2009 5:12 pm

csincuir wrote:Jose,
Por contestar rápido, no vi bien tu codigo.

Creo que lo que tienes que hacer es lo siguiente:

Sumar primero el total de edades:
Code: Select all  Expand view

function Main()

   local oWnd, oLbx
   local cKey:= "Upper(Nombre)", oItem
   local cDefaultMsg:= "(C) 1994-2002, CeSoTech PC Solutions"
   local oFont, oSay
   local nTot // <---- Agregado

   SET DEFAULT TO ".\data"
   REQUEST DBFCDX
   RddSetDefault("dbfcdx")
     
   DEFINE FONT oFont NAME GetSysFont() SIZE 0,-10 BOLD
     
   use clientes
   index on &cKey to clientes

   nTot := 0
   while !clientes->( Eof( ) )
      nTot +) clientes->Edad
      clientes->( DbSkip() )
   End
   Clientes->( DbGotop() )
 


Luego en la definicion del footer:

Code: Select all  Expand view

oLbx:aFooters:={ "Total:", " ", Transform( ntot, "999,999") }
 


Y listo, ya no tienes que llamar a otra funcion adicional, a menos que agregues otro registro, tendras que volver a sumar las edades, volver a definir el footer, y hacerle un refresh al objeto del Browse.

Espero me entiendas.

Carlos Sincuir



Carlos, Muchas gracias!!!!!, particularmente gracias por contestar tan rapido, lo pruebo y luego te informo. :D
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1145
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Totalizar columna en el footer en wbrowse de HDC

Postby jose_murugosa » Wed Nov 18, 2009 6:29 pm

Carlos,

Gracias por tu tiempo y voluntad de ayudar.

Quedó super bien!!!


Gracias. :D
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1145
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Totalizar columna en el footer en wbrowse de HDC

Postby rolando » Thu Nov 19, 2009 12:14 pm

Hola José,

Sólo para recordarte que si al totalizar en un footer necesitas que quede una sola columna, puedes hacerlo con la pequeña modificación que le efectué a la WBROWSE de HC.

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=14117&hilit=footer+twbrowse#p72713

Saludos.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 78 guests