URGENTE Busqueda Incremental en Xbrowse Array

remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

URGENTE Busqueda Incremental en Xbrowse Array

Post by remtec »

Hola Amigos.

Necesito de su ayuda.

Tengo un Xbrowse con un Array, el cual posee 2 columnas, Codigo y Nombre del Examen.

Cuando carga el Xbrowse, siempre activa la 1ª Columna Codigo como indice, Necesito que al ingresar, el indice que se active sea la 2ª Columna (Nombre), esto evita que se tenga que Clickear esta columna, ya que la prioridad para buscar es por Nombre.

Segundo, cuando realizo la busqueda, necesito que se filtre y muestre Solo lo que coincide y cuando termine la busque, vuelva el contenido original del Xbrowse, es decir toda la información, listo para una nueva busqueda.

Tercero, cuando Clickee en la cabecera para cambiar el indice, el Array tome el Primer Registro.

Lamento molestarlos, pero tengo esta necesidad urgente.

Muchos Saludos
Antonio

Dejo el Codigo:

Code: Select all

Function  Buscar_Cod_Nue(Tip_Ate1,Tip_Pag1,aCodigos,Can_Cod1,Val_Tot1)

   local oDlg33, oBrw, oFont, oCol,otitu,oFont1,otitu1 ,oFont7,oBrw2,otitu2,oDlg4,oFont2,oBot1,oBot2
     Local oSay5,oSay6,otitu6

     Sele Aran
     DbSetorder(2)

     Seek Tip_Ate1+Tip_Pag1
     If Eof()
         MsgStop( "No Se Encontro Arancel Para Tipo Examen "+Tip_Ate1+" y Tipo Pago  "+Tip_Pag1)
         Return .f.
     Endif

     If Tip_Pag1 # Tip_Pag2  .and. Tip_Ate1 # Tip_Ate2
            Tip_Pag2:=Tip_Pag1
            Tip_Ate2:=Tip_Ate1
            Do While (Tip_Ate=Tip_Ate1.and.Tip_Pag=Tip_Pag1).and.!Eof()
                Aadd(aArancel, { Aran->Cod_Ara,Aran->Nom_Ara,Aran->Val_Ara})
              DbSkip()
            EndDo
     Endif

   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 70, 280;
      CELL LINES AUTOSORT NOBORDER;
                             oBrw:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
                             oBrw:nColDividerStyle := LINESTYLE_INSET
                             oBrw:nRowDividerStyle := LINESTYLE_INSET
                                 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"

                                 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: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      := .F.
                            oBrw:lSeekWild        := .F.                   &&  .T. Busca Contenido, .F. Que comience con lo que digita
                                oBrw:SetStyle( 2018)
                                oBrw:nColorPen := CLR_RED
                                oBrw:bChange := {|| oBrw:Refresh() }


   WITH OBJECT oBrw

                    :bKeyDown:={|nKey| iif(nKey=32.or.nKey=VK_RETURN, (Agre_Codi(Tip_Ate1,Tip_Pag1,aArancel,aCodigos, oBrw:nArrayAt,@Can_Cod1,@Val_Tot1),oDlg33:End()),oBrw:Refresh())}

                    :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()}

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

   END

   REDEFINE SAY PROMPT "Buscar : "  ID 4010 OF oDlg33 COLORS RGB(12, 135, 27)   FONT oFont2

   REDEFINE SAY oBrw:oSeek VAR oBrw:cSeek ID 4011 OF oDlg33 PICTURE "@!" LEFT COLOR CLR_HRED,CLR_YELLOW



     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


     RELEASE FONT oFont,oFont1,oFont7


     Return nil


 
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by remtec »

Amigos

Alguna Idea??

Muchos Saludos

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

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by FranciscoA »

Hola Antonio. Que el año nuevo te traiga prosperidad y paz.
Cuando carga el Xbrowse, siempre activa la 1ª Columna Codigo como indice, Necesito que al ingresar, el indice que se active sea la 2ª Columna (Nombre), esto evita que se tenga que Clickear esta columna, ya que la prioridad para buscar es por Nombre.
Prueba en el ON INIT oBrw:nColSel := 2. Con esto se activa la busqueda en la columna 2.
(En mi version se nota un comportamiento extraño, la flechita se queda en la col 1, y si das click a columna 1, se reordena, pero no funciona la busqueda incremental filtrada, en esa col. Siempre queda activa la de la col 2)
Segundo, cuando realizo la busqueda, necesito que se filtre y muestre Solo lo que coincide y cuando termine la busque, vuelva el contenido original del Xbrowse, es decir toda la información, listo para una nueva busqueda.

Code: Select all

WITH OBJECT oBrw
   :lIncrFilter := .T.
END
 
Para limpiar y empezar otra busqueda, se mantiene presionada la tecla de retroceso, hasta desaparecer la cadena de busqueda anterior.
Tercero, cuando Clickee en la cabecera para cambiar el indice, el Array tome el Primer Registro.
Mira esto: (Nages explica)
http://fivetechsupport.com/forums/viewt ... enar+array

Aqui te pongo el codigo ejemplo que estuve construyendo, que muestra el comportamiento ya descrito.
Esperemos a otros colegas.

Saludos.

Code: Select all

Function prueba2()
local oBrw, oDlg33, aArancel := {}, cCod, cNom

AADD(aArancel, {"01","TIROIDES"})
AADD(aArancel, {"02","GLUCOSA"})
AADD(aArancel, {"03","HEMATOCRITO"})
AADD(aArancel, {"04","ACIDO URICO"})
AADD(aArancel, {"05","ORINA"})
AADD(aArancel, {"06","TRIGLICERIDOS"})
AADD(aArancel, {"07","T3"})
AADD(aArancel, {"08","LDL"})
AADD(aArancel, {"09","T4"})
AADD(aArancel, {"10","LDH"})

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

   DEFINE DIALOG oDlg33 SIZE 300,400 PIXEL TRUEPIXEL

   @30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg33 ;
          DATASOURCE aArancel ;
          COLUMNS 1, 2 ;
          HEADERS 'Codigo', 'Nombre' ; 
          PICTURES "@!","@!" ; 
          COLSIZES 70, 280 ;
          CELL LINES AUTOSORT NOBORDER

   WITH OBJECT oBrw   
     :aCols[ 1 ]:cSortOrder := cCod
     :aCols[ 2 ]:cSortOrder := cNom

     :lIncrFilter := .T.
 
     :CreateFromCode()
   END

   @2,2  SAY "Buscar: " OF oDlg33 SIZE 40,12 PIXEL 
   @2,50 SAY oBrw:oSeek VAR oBrw:cSeek  OF oDlg33 SIZE 250,12 PICTURE "@!" PIXEL

   ACTIVATE DIALOG oDlg33 CENTERED ON INIT (oBrw:nColSel := 2, oBrw:Refresh())

Return nil

 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by remtec »

Hola Fracisco

Como estas, deseo que muy bien.

Muchas gracias por tu saludo, de la misma forma te deseo que tengas un hermoso año, de muchos exitos, prosperidad, paz y muchas bendiciones, para ti y tu familia.

Mil gracias por tu preocupación de siempre estar atento a ayudarme.

Revisare lo que me has creado y te comento.

Muchas gracias y que estes muy bien

Antonio.
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by remtec »

Hola Francisco

Tengo 2 problemas.

1. Tu código no Selecciona la 2° Columna (Nombre) cuando ingresa, siempre activa la 1° (Codigo)

2. Necesito que se Posicione en el 1° Registro, cuando entra y cada vez que selecciono Columna de Indice.

Muchos Saludos.

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

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by FranciscoA »

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: URGENTE Busqueda Incremental en Xbrowse Array

Post by FranciscoA »

No he logrado encontrar en el foro, un ejemplo que se ajuste a tus necesidades.
Mañana intentaré terminar el código que estoy haciendo.
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: URGENTE Busqueda Incremental en Xbrowse Array

Post by FranciscoA »

Alguien tiene un ejemplo de busqueda incremental filtrada, en xbrowse con array (buscar en varias columnas)?
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by remtec »

Hola Francisco,

Tremendamente agradecido por tu preocupación y tiempo dedicado, como siempre, dispuesto a ayudar.

El link que indicas, como ves tiene otra funcionalidad, usa DBF, aquí la diferencia la da el Array, que no logro hacer lo que indico sobre que al ingresar, se posesione en la 2° Columna y que cada vez que Clickee en la cabecera de la columna, para cambiar el indice, este tome el primer elemento del Array.

Solo un comentario, me da la impresiòn que daca ves somos menos, pienso que muchos colegas han abandonado este foro, quizas por otras tecnologias.

Muchos Saludos.

Antonio
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by cnavarro »

remtec wrote:Hola Francisco,

Solo un comentario, me da la impresiòn que daca ves somos menos, pienso que muchos colegas han abandonado este foro, quizas por otras tecnologias.

Muchos Saludos.

Antonio
Prueba esto a ver si te funciona:
oBrw:aCols[ 2 ]:SetOrder()
En cuanto a lo que comentas, te sorprenderías de las visitas que tiene el foro, tanto logueados como no, otro tema son las personas que tienen tiempo y/o ganas/conocimientos para echar una manita.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by remtec »

Hola Cristobal,

Como estas?

Muchas gracias por siempre estar dispuesto a ayudarme.

Tu sugerencia funciono perfecto, al ingresar se activa la 2ª columna como lo necesitaba.

En relación a tu respuesta sobre mi comentario, tu argumento es complemente valido y quizas sea muy verdad, pero tambien es real, que muchos de los colegas que antes participaban activamente en el foro, ya no se ven, por no decir que se les extraña, ojala que me equivoque en mi observación

Lo que si estoy claro, en que estaré siempre muy agradecido de cada uno de los colegas que ha invertido su tiempo en preocuparse de hacer su aporte con el fin que solucione mis necesidades.

Desde ya muy agradecido.

Muchos Saludos
Antonio.
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by FranciscoA »

Antonio wrote:
Tengo un Xbrowse con un Array, el cual posee 2 columnas, Codigo y Nombre del Examen.

Cuando carga el Xbrowse, siempre activa la 1ª Columna Codigo como indice, Necesito que al ingresar, el indice que se active sea la 2ª Columna (Nombre), esto evita que se tenga que Clickear esta columna, ya que la prioridad para buscar es por Nombre.

Segundo, cuando realizo la busqueda, necesito que se filtre y muestre Solo lo que coincide y cuando termine la busque, vuelva el contenido original del Xbrowse, es decir toda la información, listo para una nueva busqueda.

Tercero, cuando Clickee en la cabecera para cambiar el indice, el Array tome el Primer Registro.
Hola Antonio.
Veo que llego tarde, el Maestro Cristóbal te ha puesto la solución para que al entrar se active la columna nombre.
Sin embargo, aqui te dejo el código ejemplo completo que hace todo lo que necesitas (creo).

Code: Select all

//------------------------------------------------------------------//
Function BusqIncFiltDifCols()
local oBrw, oDlg33, aArancel := {}

AADD(aArancel, {"01","TIROIDES"})
AADD(aArancel, {"02","GLUCOSA"})
AADD(aArancel, {"03","HEMATOCRITO"})
AADD(aArancel, {"04","ACIDO URICO"})
AADD(aArancel, {"05","ORINA"})
AADD(aArancel, {"06","TRIGLICERIDOS"})
AADD(aArancel, {"07","T3"})
AADD(aArancel, {"08","LDL"})
AADD(aArancel, {"09","T4"})
AADD(aArancel, {"10","LDH"})

   DEFINE DIALOG oDlg33 SIZE 300,400 PIXEL TRUEPIXEL

   @30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg33 ;
          DATASOURCE aArancel ;
          COLUMNS 1, 2 ;
          HEADERS 'Codigo', 'Nombre' ; 
          PICTURES "@!","@!" ; 
          COLSIZES 60, 230 ;
          CELL LINES AUTOSORT NOBORDER

   WITH OBJECT oBrw   
     :lIncrFilter := .T.
     :lSeekWild   := .T.

     //Al hacer click en la cabecera, selec columna respectiva, cambia indice y va al primer registro
     :aCols[1]:bLClickHeader := {|| oBrw:Seek( "" ), oBrw:cFilterFld := "Codigo", oBrw:nColSel := 1, oBrw:GoTop() } 
     :aCols[2]:bLClickHeader := {|| oBrw:Seek( "" ), oBrw:cFilterFld := "Nombre", oBrw:nColSel := 2, oBrw:GoTop() } 

    //Cuando termines la busqueda, limpia, muestra todo, y va al primer registro
     :bKeyDown := {|nKey| if(nKey == VK_DELETE, ( oBrw:Seek( "" ), oBrw:GoTop() ), ) }

     :CreateFromCode()
   END

   @2,2  SAY "Buscar: " OF oDlg33 SIZE 40,12 PIXEL 
   @2,50 SAY oBrw:oSeek VAR oBrw:cSeek  OF oDlg33 SIZE 250,12 PICTURE "@!" PIXEL

   //Al entrar activa columna nombre y se coloca en primer registro.
   //oDlg33:bInit := {||  oBrw:oCol("NOMBRE"):SortArrayData(), Eval(oBrw:aCols[2]:bLClickHeader) }   //linea original mia
   oDlg33:bInit := {|| oBrw:aCols[2]:SetOrder(), Eval(oBrw:aCols[2]:bLClickHeader) }   // incluyendo respuesta de Cristóbal

   ACTIVATE DIALOG oDlg33 CENTERED 

Return nil
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by cnavarro »

La propuesta del compañero es muy válida, al realizar el EVal, aunque también se puede hacer simplemente
( No es un error, es que seguramente la primera vez se quede en descendente )
oBrw:aCols[ 2 ]:SetOrder()
oBrw:aCols[ 2 ]:SetOrder()
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by remtec »

Hola Francisco,

Como estas?

Muchas gracias por tremendo trabajo, estoy muy agradecido por todo lo que haces y el tiempo que me dedicas.

De ninguna forma llegaste tarde, he probado tu codigo y funciona muy bien, lo he adaptado a lo que necesito y ya esta OK.

Muchas Gracias a Francisco y Cristobal.

Muchos Saludos
Antonio
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Post by remtec »

Hola Francisco,

Una consulta sobre sobre el codigo, en el Xbrowse estaba usando "oBrw:lSeekBar:= .T.", esto agrega la primera fila donde se muestra el contenido digitado para buscar, el problema que al habilitar el filtro " :lIncrFilter := .T. y :lSeekWild := .T. ", Xbrowse desactiva la primera linea de busqueda.

Alguna idea si de verdad que al ser todas .T., sucede lo que publico.

Muchos Saludos.

Antonio
Post Reply