FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Totalizar columnas en footer de TXBrowse
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Totalizar columnas en footer de TXBrowse
Posted: Sun Nov 22, 2009 10:18 AM
Buenas compañeros!

Estoy comenzando a utilizar la TXBrowse. Dada su versatilidad, una de las cosas por las que quiero usarla son los pies de columna, en los que quiero poner unos totales. He revisado algunos ejemplos en \Samples pero son demasiado complejos aún para mí. He definido un TXBrowse donde muestro algunos campos de una base de datos:
Code (fw): Select all Collapse
  REDEFINE XBrowse oBrwRec ;
           FIELDS DToC( Tem1->Rec_Fec ), Tem1->Rec_Num, Tem1->Rec_Nal, Tem1->Rec_Des, Str( Tem1->Rec_Pen ), Str( Tem1->Rec_Imp ), Str( Tem1->Rec_Par ); 
           HEADERS "Fecha", "NºRecibo", "Almacén", "Tipo", "Pendiente", "Imp.Ini.", "Imp.Pag";
           ID 1000 OF oDlg ;
           UPDATE


Lo que me gustaría es saber cómo se totalizarían en los footers los campos numéricos. Si alguien tiene un ejemplo sencillo de esto, se lo agradeceré.

Saludos!!!
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Sun Nov 22, 2009 06:34 PM
Above code is better written as
Code (fw): Select all Collapse
REDEFINE XBROWSE oBrwRec ID 1000 OF oDlg ;
   COLUMNS 'REC_FEC', 'REC_NUM', 'REC_NAL', 'REC_DES', 'REC_PEN', ;
           'REC_IMP', 'REC_PAR' ;
   HEADERS "FECHA", "NºRECIBO", "ALMACÉN", "TIPO", "PENDIENTE", "IMP.INI.", "IMP.PAG";
   ALIAS 'TEM1' ;
   CELL LINES FOOTERS UPDATE

// It is not necessary to convert the fields in to Character values
// Better we do not convert. If we do not convert, XBrowse knows the correct
// Data type.
// xBrowse automatically formats and displays depending on the data type
// and DBStruct info of the alias

// Assuming we want totals of two columns REC_IMP and REC_PAR

   WITH OBJECT oBrwRec:oCol( 'IMP.INI' )
      :lTotal  := .t.
      :nTotal  := 0
   END   

   WITH OBJECT oBrwRec:oCol( 'IMP.PAG' )
      :lTotal  := .t.
      :nTotal  := 0
   END   

   oBrwRec:MakeTotals()       // xBrowse calculates the totals
   
   oBrwRec:CreateFromCode()
   
   ACTIVATE DIALOG oDlg CENTERED


Para xbrowse, debemos utilizar los valores del campo, sin
como la conversión de los valores de carácter. Entonces Xbrowse sabe sus valores y formatos de ellos adecuadamente. Xbrowse también puede convierte automáticamente los totales
Regards



G. N. Rao.

Hyderabad, India
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 07:31 AM
nageswaragunupudi,

Thank you very much for your example and speed. I'm very impressed with the help offered by the fellows of this forum. The example is simple enough and seems to be what I'm looking for, but I get a runtime error:
Error description: Error BASE/1005 Class: 'NIL' has no property: LTOTAL
It happens in the line:
Code (fw): Select all Collapse
   WITH OBJECT oBrwRec:oCol( 'IMP.INI' )
      :lTotal  := .t.
      :nTotal  := 0
   END

I repeat, thank you very much for the example.

Best Regards!

nageswaragunupudi,

Muchas gracias por tu ejemplo y rapidez. Estoy muy impresionado con la ayuda que brindan los compañeros del foro. El ejemplo es bastante sencillo y parece ser lo que busco, pero obtengo un error en tiempo de ejecución:
Error description: Error BASE/1005 Class: 'NIL' has no property: LTOTAL
Esto sucede en la línea:
Code (fw): Select all Collapse
   WITH OBJECT oBrwRec:oCol( 'IMP.INI' )
      :lTotal  := .t.
      :nTotal  := 0
   END

Repito: muchas gracias por el ejemplo.

Saludos!
Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 07:57 AM

triumvirato,

Al parecer la columna que mencionas no está definida, el Header no existe, esa es la razón por la cual te envía error.

William, Morales

Saludos



méxico.sureste
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 08:12 AM
William,

Gracias por tu ayuda. Pues la definición de la columna entiendo que se hace en el REDEFINE, tal como me ha indicado el compañero nageswaragunupudi:

Code (fw): Select all Collapse
REDEFINE XBROWSE oBrwRec ID 1000 OF oDlg ;
   COLUMNS 'REC_FEC', 'REC_NUM', 'REC_NAL', 'REC_DES', 'REC_PEN', ;
           'REC_IMP', 'REC_PAR' ;
   HEADERS "FECHA", "NºRECIBO", "ALMACÉN", "TIPO", "PENDIENTE", "IMP.INI.", "IMP.PAG";
   ALIAS 'TEM1' ;
   CELL LINES FOOTERS UPDATE


No obstante, por si hubiese algún tipo de incompatibilidad en nombres, he cambiado los HEADERS por:
Code (fw): Select all Collapse
   HEADERS "FECHA", "NºRECIBO", "ALMACÉN", "TIPO", "PENDIENTE", "IMP1", "IMP2";


Después de los cambios, tengo entonces el siguiente código:
Code (fw): Select all Collapse
  SELECT 200
  GO TOP

  DEFINE DIALOG oDlg RESOURCE "Dlg_Prueba"

  REDEFINE XBROWSE oBrwRec ID 1000 OF oDlg ;
   COLUMNS 'REC_FEC', 'REC_NUM', 'REC_NAL', 'REC_DES', 'REC_PEN', ;
           'REC_IMP', 'REC_PAR' ;
   HEADERS "FECHA", "NºRECIBO", "ALMACÉN", "TIPO", "PENDIENTE", "IMP1", "IMP2";
   ALIAS 'TEM1' ;
   CELL LINES FOOTERS UPDATE

   WITH OBJECT oBrwRec:oCol( 'Imp1' )
      :lTotal  := .t.
      :nTotal  := 0
   END   

   WITH OBJECT oBrwRec:oCol( 'Imp2' )
      :lTotal  := .t.
      :nTotal  := 0
   END   

   oBrwRec:MakeTotals()       // xBrowse calculates the totals

   oBrwRec:CreateFromCode()
     
  ACTIVATE DIALOG oDlg CENTERED


El error que comentaba antes desaparece, pero ahora me arroja este nuevo error:

Error description: Error BASE/1004 Message not found: TXBROWSE:MAKETOTALS

Stack Calls
===========
Called from: .\source\function\HARBOUR.PRG => _CLSSETERROR(0)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:MAKETOTALS(0)
Called from: C:\Users\David\DOCUME~2\MISPRO~1\Gesco\PROC_1.PRG => CONREC(817)


Alguna sugerencia???


MUCHAS GRACIAS!!!!
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 11:21 AM

MakeTotals() was introduced in version FWH 9.03

Earlier versions we should calculate the totals ourselves.
From version 8.06 to 9.02, we calculate the total and assign it to oBrw:nTotal.

Versions upto 8.05, we should calculate the total ourselves and assign it as codeblock oBrw:bFooter := { || ntotal }

Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 11:27 AM
triumvirato wrote:nageswaragunupudi,

Error description: Error BASE/1005 Class: 'NIL' has no property: LTOTAL
It happens in the line:
Code (fw): Select all Collapse
   WITH OBJECT oBrwRec:oCol( 'IMP.INI' )
      :lTotal  := .t.
      :nTotal  := 0
   END

I repeat, thank you very much for the example.


Regret my spelling mistake. Header name is 'IMP.INI.' not 'IMP.INI'.
Please use oBrwRec:oCol( 'IMP.INI.' ). The argument should be the exact name of header.
Or you may use oBrwRec:aCols[ 6 ].
With this correction, the code will work.

If I know your FWH version, I can suggest correct syntax for your version

<SPANISH TRANSLATION>
Lamento mi error de ortografía. Nombre de encabezado es "IMP.INI."
no 'IMP.INI.
Por favor, use oBrwRec: Ocol ( 'IMP.INI.'). El argumento
debe ser el nombre exacto de cabecera.
O puede utilizar oBrwRec: aCols [6].
Con esta corrección, el código de trabajo.

Si conozco la versión de FWH, puedo sugerir correcta
la sintaxis para su versión
Regards



G. N. Rao.

Hyderabad, India
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 12:20 PM

nageswaragunupudi,

Thank you very much again for your help.
That little error you mentioned, has been solved changing correctly the HEADERS, the fact remains that commented on a previous post:
Error description: Error Message BASE/1004 not found: TXBROWSE: MAKETOTALS

Stack Calls

Called from:. \ Source \ function \ HARBOUR.PRG => _CLSSETERROR (0)
Called from:. \ Source \ classes \ XBROWSE.PRG => TXBROWSE: MAKETOTALS (0)
Called from: C: \ Users \ David \ PROGRA ~ 2 \ MISPRO ~ 1 \ Gesco \ PROC_1.PRG => CONREC (817)

So i think that the problem is with my version of FWH, that is October 2008.

Best Regards!

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 03:35 PM
for 8.10 fwh:

MakeTotals() does not work.

You should calculate the totals in advance.
Code (fw): Select all Collapse
WITH OBJECT oBrwRec:oCol( 'IMP.INI' )
      :lTotal  := .t.
      :nTotal  := <your total>
END


Footers will show this total.
Regards



G. N. Rao.

Hyderabad, India
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 04:24 PM
nageswaragunupudi wrote:for 8.10 fwh:

MakeTotals() does not work.

You should calculate the totals in advance.
Code (fw): Select all Collapse
WITH OBJECT oBrwRec:oCol( 'IMP.INI' )
      :lTotal  := .t.
      :nTotal  := <your total>
END


Footers will show this total.


nageswaragunupudi,

Thanks for your help, i supposed that METHOD would not be available in my version. I'll see how to do the calculation with an example.
Thanks again!

Best regards.
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 04:33 PM
Bueno, pues después de hacer correcciones, tengo el siguiente código:

Code (fw): Select all Collapse
  DEFINE DIALOG oDlg RESOURCE "Dlg_Prueba"
  
  REDEFINE XBROWSE oBrwRec ID 1000 OF oDlg ;
     COLUMNS 'Rec_Fec', 'Rec_Num', 'Rec_Nal', 'Rec_Des', 'Rec_Pen', ;
             'Rec_Imp', 'Rec_Par' ;
     HEADERS "FECHA", "NºRECIBO", "ALMACÉN", "TIPO", "PENDIENTE", "IMP.INI.", "IMP.PAG.";
     ALIAS 'TEM1' ;
     CELL LINES FOOTERS UPDATE

   WITH OBJECT oBrwRec:oCol( 'IMP.INI.' )
      :lTotal  := .t.
      :nTotal  := 0
   END   

   WITH OBJECT oBrwRec:oCol( 'IMP.PAG.' )
      :lTotal  := .t.
      :nTotal  := 0
   END   
 
   oBrwRec:CreateFromCode()
     
  ACTIVATE DIALOG oDlg CENTERED


Y al ejecutarlo, me presenta el siguiente error:

Error description: Error FiveWin/2 Duplicated Id: No: 107

Stack Calls
===========
Called from: .\source\classes\DIALOG.PRG => TDIALOG:DEFCONTROL(0)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:CREATEFROMCODE(0)
Called from: C:\Users\David\DOCUME~2\MISPRO~1\Gesco\PROC_1.PRG => CONREC(796) -------> oBrwRec:CreateFromCode()

Creo que la Xbrowse se me está resistiendo en demasía... si alguien me puede ayudar con este nuevo error antes de que desista en su uso... Si suprimo dicha línea, funciona perfectamente. Entonces ese método no está disponible en la version de octubre 2008 tampoco?

Saludos!
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 05:15 PM
triumvirato wrote:Bueno, pues después de hacer correcciones, tengo el siguiente código:

Code (fw): Select all Collapse
  DEFINE DIALOG oDlg RESOURCE "Dlg_Prueba"
  
  REDEFINE XBROWSE oBrwRec ID 1000 OF oDlg ;
     COLUMNS 'Rec_Fec', 'Rec_Num', 'Rec_Nal', 'Rec_Des', 'Rec_Pen', ;
             'Rec_Imp', 'Rec_Par' ;
     HEADERS "FECHA", "NºRECIBO", "ALMACÉN", "TIPO", "PENDIENTE", "IMP.INI.", "IMP.PAG.";
     ALIAS 'TEM1' ;
     CELL LINES FOOTERS UPDATE

   WITH OBJECT oBrwRec:oCol( 'IMP.INI.' )
      :lTotal  := .t.
      :nTotal  := 0
   END   

   WITH OBJECT oBrwRec:oCol( 'IMP.PAG.' )
      :lTotal  := .t.
      :nTotal  := 0
   END   
 
   oBrwRec:CreateFromCode()
     
  ACTIVATE DIALOG oDlg CENTERED


Y al ejecutarlo, me presenta el siguiente error:

Error description: Error FiveWin/2 Duplicated Id: No: 107

Stack Calls
===========
Called from: .\source\classes\DIALOG.PRG => TDIALOG:DEFCONTROL(0)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:CREATEFROMCODE(0)
Called from: C:\Users\David\DOCUME~2\MISPRO~1\Gesco\PROC_1.PRG => CONREC(796) -------> oBrwRec:CreateFromCode()

Creo que la Xbrowse se me está resistiendo en demasía... si alguien me puede ayudar con este nuevo error antes de que desista en su uso... Si suprimo dicha línea, funciona perfectamente. Entonces ese método no está disponible en la version de octubre 2008 tampoco?

Saludos!


Hola, triumvirato.
Según veo (dijo el ciego), estás utilizando recursos, por lo tanto, creo que debes usar:

oBrwRec:CreateFromResource(nNum_ID)
Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Mon Nov 23, 2009 10:01 PM
FranciscoA wrote:
Hola, triumvirato.
Según veo (dijo el ciego), estás utilizando recursos, por lo tanto, creo que debes usar:

oBrwRec:CreateFromResource(nNum_ID)
Saludos.


Francisco,

Muchas gracias por tu ayuda. Efectivamente funciona perfectamente con CreateFromRedource( nNum_ID ). Y también sin ella :-) , lo cual me lleva a pensar que no hace falta ninguna cláusula cuando se REDEFINE desde recursos.
Muchas gracias por tu ayuda Francisco.

Saludos!
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Tue Nov 24, 2009 01:30 AM

Please remove this line
oBrwRec:CreateFromCode()

Regards



G. N. Rao.

Hyderabad, India
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Totalizar columnas en footer de TXBrowse
Posted: Tue Nov 24, 2009 07:06 AM
nageswaragunupudi wrote:Please remove this line
oBrwRec:CreateFromCode()


nageswaragunupudi,

Thanks a lot for your help. That line is removed yet. Thanks.

Regards!!!

Continue the discussion