FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como me refiero al total de una columna (SOLUCIONADO)
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Como me refiero al total de una columna (SOLUCIONADO)
Posted: Fri Nov 13, 2020 04:45 AM
Hola amigos del foro:

En el siguiente trozo de c贸digo de un xBrowse con selecci贸n multiple

Code (fw): Select all Collapse
聽 聽 聽 聽 聽 聽 聽 聽 WITH OBJECT :Arriendo
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :cOrder聽:= "A"
聽 聽 聽 聽 聽 聽 聽 聽:bFooter 聽 聽 聽:= { || Len( oBry:aSelected ) }
聽 聽 聽 聽 聽 聽 聽 聽 END

聽 聽 聽 聽 聽 聽 WITH OBJECT :Importe
聽 聽 聽 聽 聽 聽 聽 聽:nFooterType 聽 := AGGR_SUM
聽 聽 聽 聽 聽 聽 聽 聽:bSumCondition := { || AScan( oBry:aSelected, oBry:BookMark ) > 0 }
聽 聽 聽 聽 聽 聽 聽 聽:cFooterPicture 聽 := "@Z 9,999,999,999.99"
聽 聽 聽 聽 聽 聽 END

聽 聽 聽 聽 聽 聽 :bOnMultiSelect 聽 := { || oBry:MakeTotals() }
聽 聽 聽 聽 聽 聽 :bChange 聽 聽 聽 聽 聽:= { || IF( LEN( oBry:aSelected ) <= 1,( oBry:oCol(05):nTotal := oBry:oCol(05):Value,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽聽聽 聽 oBry:oCol(05):RefreshFooter() ),NIL ) }

聽 聽 聽 聽 聽 聽 :MakeTotals()


Necesito condicionar la activaci贸n de un bot贸n cuando el usuario haya seleccionado
al menos un rengl贸n del xBrowse, puede ser en la cantidad de renglones seleccionados
o al importe total de la columna sumada, en este ejemplo la columna 05, c贸mo?

Muchas gracias
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: Como me refiero al total de una columna
Posted: Fri Nov 13, 2020 09:28 AM

Hola,

Podes probar :

1) el total de lo seleccionado con :

    if LEN(oBrw:aSelected) &gt; 0   // ya tenes al menos 1 reg seleccionado.

2) el total de la columna

    if oBrw:importe:nTotal &gt; 0 // ya tenes al menos 1 mov con importe mayor a 0

para esto tene en cuenta 2 cosas q no veo en tu code, 
   1) cuando definis el xbrowse tenes que ponerle FOOTERS o activar oBrw:lFooter:= .t.
  2) cuando definis la columna 
      WITH OBJECT :Importe
           :nFooterType   := AGGR_SUM
           :bSumCondition := { || AScan( oBry:aSelected, oBry:BookMark ) &gt; 0 }
           :cFooterPicture   := &quot;@Z 9,999,999,999.99&quot;

// estas lineas
:nTotal := 0
:lTotal := .t.
END

Espero te sirva.
Saludos.

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Como me refiero al total de una columna
Posted: Fri Nov 13, 2020 02:37 PM
Ariel y amigos:

Gracias por tu consejo pero no me funciona a煤n, adjunto trozo de c贸digo
por si ustedes ven algo que yo no


REDEFINE XBROWSE oBry ID 300 OF oDlg;
DATASOURCE oRsAde;
COLUMNS "ADE_ARR","ADE_AMO","ADE_MES","ADE_CPT","ADE_IMP";
HEADERS "Arriendo","A帽o","Mes","Cpt","Importe";
COLSIZES 65,40,40,20,90;
PICTURES "@Z 9999999","@Z 9999","@Z 99",NIL,"@Z 999,999.99";
JUSTIFY {AL_RIGHT,AL_RIGHT,AL_RIGHT};
FOOTERS AUTOSORT BACKGROUND oApp:cBrush

WITH OBJECT oBry
:l2007 := (.F.)
:lHScroll := (.F.)
:lVScroll := (.F.)
:lFooter := (.T.)
:nMarqueeStyle := MARQSTYLE_HIGHLROWMS
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_LIGHTGRAY
:nStretchCol := STRETCHCOL_WIDEST
:nHeaderHeight := 25
:nRowHeight := 22
:nFooterHeight := 25
:bClrHeader := { || {CLR_WHITE,CLR_BLACK} }
:bClrFooter := { || {CLR_WHITE,CLR_BLACK} }
:bClrSel := { || IF( oBry:KeyNo % oApp:nRowsInt == 0 ,{ CLR_BLACK, oApp:nRowParClr },{ CLR_BLACK, oApp:nRowNonClr }) }
:bClrSelFocus := { || {oApp:nFClrFocus,oApp:nBClrFocus} }
:bClrStd := { || IF( oBry:KeyNo % oApp:nRowsInt == 0 ,{ CLR_BLACK, oApp:nRowParClr },{ CLR_BLACK, oApp:nRowNonClr }) }
:nRecSelColor := oApp:nRowParClr
:lDisplayZeros := (.F.)

WITH OBJECT :Arriendo
:cOrder := "A"
:bFooter := { || Len( oBry:aSelected ) }
END

WITH OBJECT :Importe
:nFooterType := AGGR_SUM
:bSumCondition := { || AScan( oBry:aSelected, oBry:BookMark ) > 0 }
:cFooterPicture:= "@Z 9,999,999,999.99"
:nTotal := 0.00
:lTotal := (.T.)
END

:bOnMultiSelect := { || oBry:MakeTotals() }
:bChange := { || IF( LEN( oBry:aSelected ) <= 1,( oBry:oCol(05):nTotal := oBry:oCol(05):Value,;
oBry:oCol(05):RefreshFooter() ),NIL ) }

:MakeTotals()
END

REDEFINE BUTTON oPasar ID 902 OF oDlg UPDATE CANCEL;
WHEN oBrw:nTotal > 0.00;
ACTION Pasalos(oDlg,oBrx,oBry);
MESSAGE "Pasa los adeudos seleccionados"


Me tira el error

Error description: Error BASE/1075 Error de argumento: >
Args:
[ 1] = U
[ 2] = N 0.00

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Como me refiero al total de una columna
Posted: Fri Nov 13, 2020 05:51 PM
Armando.
En tu c贸digo parece que est谩 de mas el bChange. ( bSumCondition y bOnMultiSelect se encargan de eso) Prueba y nos dices.
Por otra parte, 驴que version FWH estas usando?

Code (fw): Select all Collapse
 聽 聽 聽 聽 聽 聽 聽 聽WITH OBJECT :Arriendo
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :cOrder := "A"
聽 聽 聽 聽 聽 聽 聽 聽:bFooter 聽 聽 聽:= { || Len( oBry:aSelected ) }
聽 聽 聽 聽 聽 聽 聽 聽 END

聽 聽 聽 聽 聽 聽 WITH OBJECT :Importe
聽 聽 聽 聽 聽 聽 聽 聽:nFooterType 聽 := AGGR_SUM
聽 聽 聽 聽 聽 聽 聽 聽:bSumCondition := { || AScan( oBry:aSelected, oBry:BookMark ) > 0 }
聽 聽 聽 聽 聽 聽 聽 聽:cFooterPicture 聽 := "@Z 9,999,999,999.99"
聽 聽 聽 聽 聽 聽 END

聽 聽 聽 聽 聽 聽 :bOnMultiSelect 聽 := { || oBry:MakeTotals() }

聽 聽 聽 聽 聽 // 聽:bChange 聽 聽 聽 聽 聽:= { || IF( LEN( oBry:aSelected ) <= 1,( oBry:oCol(05):nTotal := oBry:oCol(05):Value,;
聽 聽 聽 聽 聽 // 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oBry:oCol(05):RefreshFooter() ),NIL ) }

聽 聽 聽 聽 聽 聽 :MakeTotals()

Saludos.
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Como me refiero al total de una columna
Posted: Fri Nov 13, 2020 09:32 PM
Este ejemplo puede ayudarte:
Code (fw): Select all Collapse
//-------------------------------------------------//
Function xBrwArrVacio_3()
   LOCAL oDlg, oBrw, oCol, n := 0, aArray :={}, aReg

   DEFINE DIALOG oDlg SIZE 600,400 PIXEL TITLE "ARRAY VACIO / MULTISELEC / SUMA CONDIC / ENAB-DISAB BTN"

   @20, 10 XBROWSE oBrw SIZE -10, -60 PIXEL OF oDlg ;
           DATASOURCE aArray ;
           COLUMNS 1,2,3 ;
           HEADERS "HORA_GRABADO", "VALOR_RAMDOM", "VALOR_DEFINIDO" ;
           SIZES 120, 120, 120 ;
           FOOTERS LINES CELL

   WITH OBJECT oBrw
      :nHeadStrAligns   := AL_CENTER
      :nMarqueeStyle    := MARQSTYLE_HIGHLWIN7
      :bOnMultiSelect   := { || oBrw:MakeTotals() }

      :bKeyDown := {|nKey| if(nKey == VK_DOWN .and. GetKeyState(VK_CONTROL),,) }

      :MakeTotals()
      :CreateFromCode()

      WITH OBJECT :Hora_grabado
        :nEditType     := EDIT_GET
        :bFooter       := { || if( oBrw:nLen > 0, "Selected >  " + Str(Len( oBrw:aSelected ),4) ,"")}
        :nDataStrAlign := AL_CENTER 
      END

      WITH OBJECT :Valor_ramdom
        :nEditType      := EDIT_GET
        :cEditPicture   := "@Z 999,999,999.99"
        :nFooterType    := AGGR_SUM
        :cFooterPicture := "@Z 999,999,999.99"
        :nFootStrAlign := AL_RIGHT
      END

      WITH OBJECT :Valor_definido
        :nEditType      := EDIT_GET
        :cEditPicture   := "@Z 999,999,999.99"
        :nFooterType    := AGGR_SUM
        :bSumCondition  := { || AScan( oBrw:aSelected, oBrw:BookMark ) > 0 }  //solo suma las seleccionadas
        :cFooterPicture := "@Z 999,999,999.99"
        :nFootStrAlign := AL_RIGHT
      END
   END

   @05, 10  BUTTON "Agregar Itm"  OF oDlg  SIZE 60,12 PIXEL ;
            ACTION ( n += 10.00, aReg := { Time(), HB_Random(1,99), n } ,;
                     Aadd( oBrw:aArrayData, aReg ), oBrw:MakeTotals(), oBrw:Refresh() )

   @05, 80  BUTTON "Borrar todo"  OF oDlg  SIZE 60,12 PIXEL ;
            ACTION ( oBrw:aArrayData := {}, oBrw:MakeTotals(),oBrw:aSelected:={},oBrw:Select(1), oBrw:Refresh(), n := 0 ) WHEN oBrw:nLen > 0

   @05,150  BUTTON "Seleccionados"  OF oDlg  SIZE 60,12 PIXEL ;
            ACTION ( XBROWSER(oBrw:aSelected) ) WHEN oBrw:nLen > 0

   ACTIVATE DIALOG oDlg CENTERED 

RETURN NIL

Saludos.
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Como me refiero al total de una columna
Posted: Fri Nov 13, 2020 10:52 PM

Armando, he notado lo siguiente:
En el codigo que te puse de ejemplo, la multiseleccion trabaja con :nMarqueeStyle := MARQSTYLE_HIGHLWIN7.

Si se utiliza MARQSTYLE_HIGHLROWMS ( Multiselect ), la suma condicional en la columna 3 no funciona correctamente.
Sobre esto habr铆a que preguntar a los gurus del xbrowse. Puede ser un peque帽o bug al utilizar MARQSTYLE_HIGHLROWMS con sumas condicionales.

Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Como me refiero al total de una columna
Posted: Fri Nov 13, 2020 10:57 PM
Al ejemplo le he modificado asi:
Esto,
@05, 80 BUTTON "Borrar todo" OF oDlg SIZE 60,12 PIXEL ;
ACTION ( oBrw:aArrayData := {}, oBrw:MakeTotals(),oBrw:aSelected:={},oBrw:Select(1), oBrw:Refresh(), n := 0 ) WHEN oBrw:nLen > 0

por esto:
Code (fw): Select all Collapse
 @05, 80 聽BUTTON "Borrar todo" 聽OF oDlg 聽SIZE 60,12 PIXEL ;
聽 聽 聽 聽 聽 聽 ACTION ( oBrw:Select(0), oBrw:Gotop(), oBrw:Select(1),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aArrayData := {}, oBrw:MakeTotals(), oBrw:Refresh(),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽n := 0 ) WHEN oBrw:nLen > 0
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Como me refiero al total de una columna
Posted: Sat Nov 14, 2020 12:38 AM

Francisco:

Gracias por el consejo, pruebo y aviso.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Como me refiero al total de una columna
Posted: Sat Nov 14, 2020 03:12 AM

Francisco y amigos del foro

Problema solucionado cambiando MARQSTYLE_HIGHLROWMS por MARQSTYLE_HIGHLWIN7.

Saludos y muchas gracias

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero

Continue the discussion