Page 1 of 1

Ayuda Orden de Inicio Busqueda Incremental en Xbrowse

Posted: Wed Feb 05, 2020 8:50 pm
by remtec
Hola Amigos,

Se que he molestado mucho con busqueda Incremental.

Tengo un Xbrowse que posee 2 Columnas con un Array, la Primera es de "Codigo" y la Segunda "Nombre",.

Necesito que cuando ingrese al Xbrowse, al digitar busqueda Incremental, este inicie la busqueda en la Columna 2° (Nombre), lo que hoy esta haciendo, es que muestra indexado por Columna Nombre, pero inicia busqueda por Codigo,.

No logro dar para que la Busqueda Inicial u Original, se realice inmediatamente como Columna 2, y no que tenga que estar Clickeando sobre la Columna 2, para que realice la busqueda sobre esta Columna.

En espera siempre de su ayuda, les saluda muy atte,
Antonio

Dejo el Codigo que uso:

Code: Select all

     cCod9 := ASort(aArancel,,,{|x,y| x[1]<y[1]})   //orden ascendente por codigo
     cNom9 := ASort(aArancel,,,{|x,y| x[2]<y[2]})   // "       "        "  nombre


   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
     DEFINE FONT oFont1 NAME 'TAHOMA' SIZE 0,24   BOLD
     DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-12  BOLD
     DEFINE FONT oFont7 NAME "TAHOMA" SIZE 0,-14  BOLD

   DEFINE DIALOG oDlg33 RESOURCE "#1005"     FONT oFont

     REDEFINE SAY otitu PROMPT " MAESTRO DE ARANCEL "  ID 4004 OF oDlg33 COLORS RGB(12, 135, 27)   FONT oFont1


   REDEFINE XBROWSE oBrw  OF oDlg33 DATASOURCE aArancel  ID 4001;
            HEADERS 'Código','Nombre de Examen';
            COLUMNS 1, 2;
            PICTURES "@!","@!" ;
            COLSIZES 90,335;
      CELL LINES AUTOSORT NOBORDER;
                             oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
                             oBrw:nColDividerStyle := LINESTYLE_RAISED
                             oBrw:nRowDividerStyle := LINESTYLE_RAISED
                                 oBrw:bClrHeader := {|| { nRGB(140, 0, 0), nRGB( 231, 242, 255 ), } }
                                 oBrw:nOpacity    := 230
                                 oBrw:nHeaderHeight      := 35
                                 oBrw:nFreeze       := 2
                                 oBrw:aCols[1]:oHeaderFont:= oFont7
                                 oBrw:aCols[2]:oHeaderFont:= oFont7
                                 oCol := oBrw:aCols[ 2 ]
                                 ocol:cToolTip:="Clique para ordenar por NOMBRE"

                                 oDlg33:bStart:={ || oBrw:Gotop() }

                                 oBrw:lSeekBar:= .f.       // Permite Añadir Fila de Busqueda en Xbrowse

                                 oCol := oBrw:aCols[ 1 ]
                                 ocol:cToolTip:="Clique para ordenar por CODIGO"

                                oBrw:bClrStd  := { || If( Eval( oBrw:bKeyNo,,oBrw1) % 2 == 0, { CLR_BLACK, RGB( 198, 255, 198 ) },;
                                 { CLR_BLACK, RGB( 232, 255, 232 ) } ) }    // Efecto Cebra
                                 oBrw:aCols[ 1 ]:oDataFont := oFont7
                                 oBrw:aCols[ 2 ]:oDataFont := oFont7


                                 oBrw:Seek("")
                                 oBrw:bClrStd             := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }
                                 oBrw:bClrSelFocus        := {|| { nRGB(  255,  255,  255), nRGB(102, 178, 255) } }
                                 oBrw:bClrSel       := {|| { nRGB(  0,  0,255), nRGB(241,222,088) } }  // para barra de linea selecc cuando el control no tiene el foco
                                oBrw:lAutoSort := .t.
                                oBrw:lFooter := .f.
                                oBrw:lHScroll := .f.
                            oBrw:lIncrFilter      := .T.
                            oBrw:lSeekWild        := .T.                   &&  .T. Busca Contenido, .F. Que comience con lo que digita
                                oBrw:SetStyle( 2018)
                                oBrw:nColorPen := CLR_RED
                                oBrw:bChange := {|| oBrw:Refresh() }

   WITH OBJECT oBrw
                 :aCols[ 1 ]:cSortOrder := cCod9
         :aCols[ 2 ]:cSortOrder := cNom9
                 :aCols[ 2 ]:SetOrder()
                 :aCols[1]:bLClickHeader := {|| oBrw:Seek( "" ), oBrw:cFilterFld := "Código", oBrw:nColSel := 1, oBrw:GoTop() }
             :aCols[2]:bLClickHeader := {|| oBrw:Seek( "" ), oBrw:cFilterFld := "Nombre de Examen", oBrw:nColSel := 2, oBrw:GoTop() }

                 :bLDblClick:={|| Agre_Codi(Tip_Ate1,Tip_Pag1,aArancel,aCodigos, oBrw:nArrayAt,@Can_Cod1,@Val_Tot1), oSay3:Refresh(),oSay4:Refresh(), oSay5:Refresh(),oSay6:Refresh(),oBrw2:Refresh()}

             :bKeyDown:={|nKey| iif(nKey == VK_RETURN, Eval(oBrw:bLDblClick),)}

                 :bChange    := { || oBrw2:GoTop(),  oSay3:Refresh(),oSay4:Refresh(), oBrw2:Refresh()}
   END

     REDEFINE SAY otitu5 PROMPT "Buscar : "   ID 4011 OF oDlg33 COLORS RGB(12, 135, 27)   FONT oFont7

     REDEFINE SAY oBrw:oSeek  VAR oBrw:cSeek ID 4012 OF oDlg33 PICTURE "@X" FONT oFont7 COLOR CLR_HRED,CLR_YELLOW

     oDlg33:bInit := {||  oBrw:oCol("Nombre de Examen"):SortArrayData(), Eval(oBrw:aCols[2]:bLClickHeader) }

     REDEFINE BTNBMP ID 4010 PROMPT "LIMPIA"  OF oDlg33 ADJUST 2007  FONT oFont7   ;
            ToolTip  "LIMPIAR BUSQUEDA";
            ACTION ( oBrw:Seek( "" ), oBrw:GoTop(), oBrw:SetFocus() )

     REDEFINE BTNBMP ID 4002 PROMPT "SALIR" OF oDlg33  ADJUST 2007  FONT oFont7  NOBORDER ;
                            ToolTip  "VOLVER A LA PANTALLA ANTERIOR";
                                ACTION (oDlg33:END())

   ACTIVATE DIALOG oDlg33 CENTERED    ON INIT ( oBrw:cSeek( "" ), oBrw:SetFocus(), .F. )


 

Re: Ayuda Orden de Inicio Busqueda Incremental en Xbrowse

Posted: Thu Feb 06, 2020 12:55 pm
by armando.lagunas
Estimado:

Usa una tabla temporal dbf, la indexas con el orden que quieres, y después se la asignas a la columna del xbrowse.

en mi caso ordeno fecha, Proceso, variedad y código y a cada columna le asigno el orden que quiero y parte el xbrowse ordenado en la columna 3, yo tengo una versión muy antigua de FiveWin, pero esa es mi solución a tu mismo problema, quizás otro compañero pueda darte otra opción.

Code: Select all

    
   SELECT PA18
   INDEX ON DTOS( PA18->FECH )  TAG 1 TO (".\TEMP184.CDX") DESC
   INDEX ON PA18->NPRO          TAG 2 TO (".\TEMP184.CDX")
   INDEX ON PA18->ETIQ          TAG 3 TO (".\TEMP184.CDX")
   INDEX ON PA18->CCSG          TAG 4 TO (".\TEMP184.CDX")
   SET INDEX TO (".\TEMP184.CDX")

...
...
                   REDEFINE XBROWSE oBrw ID 20 COLUMNS "LOKY","NPRO","FECH","ETIQ","CCSG","NOMB","TIPO","VAL1","VAL2","VAL3","KCOM","KMER","CORT" ALIAS "PA18" OF oDlg AUTOSORT

                             oBrw:aCols[ 1]:cHeader     := "Mark"              ;  oBrw:aCols[ 1]:nWidth        := 30
                             oBrw:aCols[ 2]:cHeader     := "N°Proceso"         ;  oBrw:aCols[ 2]:nWidth := 60  ;   oBrw:aCols[ 2]:nDataStrAlign  := AL_CENTER
                             oBrw:aCols[ 3]:cHeader     := "Fecha"             ;  oBrw:aCols[ 3]:nWidth := 67  ;   oBrw:aCols[ 3]:nDataStrAlign  := AL_CENTER
                             oBrw:aCols[ 4]:cHeader     := "Variedad"          ;  oBrw:aCols[ 4]:nWidth := 70  ;   oBrw:aCols[ 4]:nDataStrAlign  := AL_CENTER
                             oBrw:aCols[ 5]:cHeader     := "C.Csg"             ;  oBrw:aCols[ 5]:nWidth := 50  ;   oBrw:aCols[ 5]:nDataStrAlign  := AL_RIGHT
                             oBrw:aCols[ 6]:cHeader     := "Productor"         ;  oBrw:aCols[ 6]:nWidth := 210
                             oBrw:aCols[ 7]:cHeader     := "Tur"               ;  oBrw:aCols[ 7]:nWidth := 25  ;   oBrw:aCols[ 7]:nDataStrAlign  := AL_CENTER
                             oBrw:aCols[ 8]:cHeader     := "Kg.Vaciado"        ;  oBrw:aCols[ 8]:nWidth := 70  ;   oBrw:aCols[ 8]:nFooterType    := AGGR_TOTAL
                             oBrw:aCols[ 9]:cHeader     := "% Exp"             ;  oBrw:aCols[ 9]:nWidth := 48  ;   oBrw:aCols[ 9]:nFooterType    := AGGR_AVERAGE
                             oBrw:aCols[10]:cHeader     := "% Cca"             ;  oBrw:aCols[10]:nWidth := 48  ;   oBrw:aCols[10]:nFooterType    := AGGR_AVERAGE
                             oBrw:aCols[11]:cHeader     := "Comercial"         ;  oBrw:aCols[11]:nWidth := 67  ;   oBrw:aCols[11]:nFooterType    := AGGR_TOTAL
                             oBrw:aCols[12]:cHeader     := "Merma"             ;  oBrw:aCols[12]:nWidth := 66  ;   oBrw:aCols[12]:nFooterType    := AGGR_TOTAL
                             oBrw:aCols[13]:cHeader     := "Estado"            ;  oBrw:aCols[13]:nWidth := 48  ;   oBrw:aCols[13]:nDataStrAlign  := AL_CENTER

                                                                                  oBrw:aCols[ 2]:nFootStrAlign  := AL_RIGHT
                                                                                  oBrw:aCols[ 2]:nFooterType    := AGGR_COUNT

                                                                                  oBrw:aCols[ 3]:cSortOrder := "1"
                                                                                  oBrw:aCols[ 2]:cSortOrder := "2"
                                                                                  oBrw:aCols[ 4]:cSortOrder := "3"
                                                                                  oBrw:aCols[ 5]:cSortOrder := "4" 


 
Espero que te sirva este tip.

Saludos

Re: Ayuda Orden de Inicio Busqueda Incremental en Xbrowse

Posted: Thu Feb 06, 2020 5:36 pm
by remtec
Hola Armando,

Muchas gracias por responder.

He probado lo que me indicas, pero no logro que me funcione.

Yo no uso DBF en el Xbrowse, es un Array, cuando se muestra el Xbrowse, la columna que se muestra como primer indice, es la Columan 2, que esta correcto.

El problema por defecto debo Buscar en forma Incremental, debo hacerlo por defecto en esta misma columna 2, pero la busqueda se realiza apuntando a la primera, por lo que me obliga antes de buscar, hacer Click en la Cabecera de la Columna 2, para que de esta forma, la busqueda se realice en la Segunda Columna.

Espero que se entienda mi problema, que hoy ya me esta pillando el tiempo.

Muchos Saludos
Antonio.

Dejo la definición que tengo de las columnas de indices:

Code: Select all

   WITH OBJECT oBrw
                 :aCols[ 2 ]:cSortOrder := cNom9
                 :aCols[ 1 ]:cSortOrder := cCod9
                 :aCols[ 2 ]:SetOrder()

                 :aCols[2]:bLClickHeader := {|| oBrw:Seek( "" ), oBrw:cFilterFld := "Nombre de Examen", oBrw:nColSel := 2, oBrw:GoTop() }
                 :aCols[1]:bLClickHeader := {|| oBrw:Seek( "" ), oBrw:cFilterFld := "Código", oBrw:nColSel := 1, oBrw:GoTop() }

                      :bLDblClick:={|| Agre_Codi(Tip_Ate1,Tip_Pag1,aArancel,aCodigos, oBrw:nArrayAt,@Can_Cod1,@Val_Tot1), oSay3:Refresh(),oSay4:Refresh(), oSay5:Refresh(),oSay6:Refresh(),oBrw2:Refresh()}

                    :bKeyDown:={|nKey| iif(nKey == VK_RETURN, Eval(oBrw:bLDblClick),)}

                     :bChange    := { || oBrw2:GoTop(),  oSay3:Refresh(),oSay4:Refresh(), oBrw2:Refresh()}


   END

 

Re: Ayuda Orden de Inicio Busqueda Incremental en Xbrowse

Posted: Fri Feb 07, 2020 4:04 am
by albeiroval
Remtec, este es el codigo que uso para arrays :

Code: Select all

aCols := { ;
    {  2, "Codigo",       NIL,                70, AL_LEFT  },;
    {  3, "Descripcion",  NIL,               200, AL_LEFT  },;
    {  4, "Inicio",       "@E 999,999.99",   75, AL_RIGHT },;
    {  5, "Entrada",      "@E 999,999.99",   75, AL_RIGHT },;
    {  6, "Remision",     "@E 999,999.99",   75, AL_RIGHT },;
    {  7, "DevolAlm",     "@E 999,999.99",   75, AL_RIGHT },;
    {  8, "Venta",        "@E 999,999.99",   75, AL_RIGHT },;
    {  9, "Devolucion",   "@E 999,999.99",   75, AL_RIGHT },;
    { 10, "Comida",       "@E 999,999.99",   75, AL_RIGHT },;
    { 11, "Pollos",       "@E 999,999.99",   75, AL_RIGHT },;
    { 12, "Cortesia",     "@E 999,999.99",   75, AL_RIGHT },;
    { 14, "Final",        "@E 999,999.99",   75, AL_RIGHT },;
    { 13, "Conteo",       "@E 999,999.99",   75, AL_RIGHT } ;
  }

  DEFINE FONT oFont NAME "TAHOMA" SIZE 0, -12 BOLD
  
    DEFINE DIALOG oDlg RESOURCE "REPORTE_MOVIMIENTO" ;
            TITLE "Reporte Movimiento De Productos" ICON aBitmap[ BMP32_ICON ] FONT oFont

  REDEFINE SAY ID 100 OF oDlg PROMPT "SUCURSAL : " + obj:NameSucursal 
    REDEFINE SAY ID 101 OF oDlg PROMPT "PERIODO DESDE : " + DTOC(obj:FechaIni) + " HASTA " + DTOC(obj:FechaFin) 

  REDEFINE XBROWSE oBrw ID 200 OF oDlg;
    DATASOURCE aArray;
    COLUMNS aCols;
    CELL LINES FOOTERS AUTOSORT
  
  WITH OBJECT oBrw
    :MyConfig()
    :nFreeze    = 2
    :bClrHeader = {|| { nRGB(140,  0,  0), nRGB(102, 255, 255) } } 
        :bClrFooter = {|| { nRGB(140,  0,  0), nRGB(102, 255, 255) } } 
        :bChange    = {|| oSay:SetText( RTrim(oBrw:aRow[2]) + ", " + oBrw:aRow[3] ) }
    END
  
  REDEFINE SAY ID 102 PROMPT "PRODUCTO :" OF oDlg
  REDEFINE SAY oSay ID 103 PROMPT RTrim(oBrw:aRow[2]) + ", " + oBrw:aRow[3] COLOR CLR_BLACK, nRGB( 117, 236, 45 ) OF oDlg

...

oDlg:bInit  = <||                           
                                    oBrw:goRight()
                                    oBrw:aCols[2]:Setorder()
                                    Return Nil
                                >       

 

Re: Ayuda Orden de Inicio Busqueda Incremental en Xbrowse

Posted: Fri Feb 07, 2020 8:11 pm
by remtec
Hola Albeiro Valencia

Muchas gracias por responder y proponerme tu codigo.

Mira, en mi caso, el codigo de Array, funciona bien incluyendo los indices, solo que la busqueda Incremental, debe ser automatica sobre la 2da columna, como esta mi codigo que muestro, para poder buscar, debo primero dar Click sobre la cabecera de la 2da columna. Necesito corrgir esto y que no tenga que dar click sobre la cabecera para buscar.

Muchos Saludos.
Antonio

Re: Ayuda Orden de Inicio Busqueda Incremental en Xbrowse

Posted: Sat Feb 08, 2020 1:54 pm
by albeiroval
Remtec,

Code: Select all


// Puede usar este codeblock
oDlg:bInit  = <||                          
                                    oBrw:goRight()
                                    oBrw:aCols[2]:Setorder()
                                    Return Nil
                                >      

// O puede usar el comando asi 
        ON INIT ( oBrw:goRight(), oBrw:aCols[2]:Setorder() )
 
Este codigo hace lo que indica. Ordena la segunda columna y se mueve el cursor a la columna derecha que en su caso es la segunda

Re: Ayuda Orden de Inicio Busqueda Incremental en Xbrowse

Posted: Sat Feb 08, 2020 4:47 pm
by FranciscoA
Antonio.
Lo que sugiere Albeiro te debería funcionar.
Yo lo hago asi:

Code: Select all

ACTIVATE DIALOG oDlg ON INIT ( oBrw:aCols[2]:SetOrder(), oBrw:nColSel := 2 )
 
Lo que veo en tu código es que estás duplicando la instruccion del INIT:

Code: Select all

   oDlg33:bInit := {||  oBrw:oCol("Nombre de Examen"):SortArrayData(), Eval(oBrw:aCols[2]:bLClickHeader) }

   ACTIVATE DIALOG oDlg33 CENTERED    ON INIT ( oBrw:cSeek( "" ), oBrw:SetFocus(), .F. )
 
Saludos.

Re: Ayuda Orden de Inicio Busqueda Incremental en Xbrowse

Posted: Sat Feb 08, 2020 4:59 pm
by remtec
Hola Francisco,

Como estas?

Como siempre muchas gracias por tu ayuda.

Probare tu codigo y te comentare, en relacion a tu observación, es que he tratado de tantas formas de solucionar el problema, que seguro que caigo es estos errores.

Muchas Graicas.

Antonio