Como me refiero al total de una columna (SOLUCIONADO)

Post Reply
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Como me refiero al total de una columna (SOLUCIONADO)

Post by Armando »

Hola amigos del foro:

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

Code: Select all

                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
Last edited by Armando on Sun Nov 15, 2020 4:30 pm, edited 1 time in total.
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
Ariel
Posts: 309
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: Como me refiero al total de una columna

Post by Ariel »

Hola,

Podes probar :

1) el total de lo seleccionado con :

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

2) el total de la columna

if oBrw:importe:nTotal > 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 ) > 0 }
:cFooterPicture := "@Z 9,999,999,999.99"
// estas lineas
:nTotal := 0
:lTotal := .t.
END

Espero te sirva.
Saludos.
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Como me refiero al total de una columna

Post by Armando »

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:Importe: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
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como me refiero al total de una columna

Post by FranciscoA »

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: Select all

                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.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como me refiero al total de una columna

Post by FranciscoA »

Este ejemplo puede ayudarte:

Code: Select all

//-------------------------------------------------//
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.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como me refiero al total de una columna

Post by FranciscoA »

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.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como me refiero al total de una columna

Post by FranciscoA »

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: Select all

 @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.

Fwxh1204-MySql-TMySql
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Como me refiero al total de una columna

Post by Armando »

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
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Como me refiero al total de una columna

Post by Armando »

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
Post Reply