URGENTE Busqueda Incremental en Xbrowse Array

URGENTE Busqueda Incremental en Xbrowse Array

Postby remtec » Sat Jan 04, 2020 5:26 pm

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  Expand view

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


 
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby remtec » Mon Jan 06, 2020 8:06 pm

Amigos

Alguna Idea??

Muchos Saludos

Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby FranciscoA » Mon Jan 06, 2020 8:50 pm

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  Expand view
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)
viewtopic.php?f=6&t=26290&start=0&hilit=ordenar+array

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

Saludos.

Code: Select all  Expand view
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.

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

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby remtec » Mon Jan 06, 2020 9:50 pm

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.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby remtec » Mon Jan 06, 2020 10:56 pm

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.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby FranciscoA » Tue Jan 07, 2020 7:33 pm

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

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

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby FranciscoA » Tue Jan 07, 2020 7:56 pm

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.

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

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby FranciscoA » Tue Jan 07, 2020 7:57 pm

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

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

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby remtec » Wed Jan 08, 2020 12:03 am

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
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby cnavarro » Wed Jan 08, 2020 1:31 am

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.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby remtec » Wed Jan 08, 2020 2:47 am

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.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby FranciscoA » Wed Jan 08, 2020 3:21 am

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

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

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby cnavarro » Wed Jan 08, 2020 9:14 am

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()
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby remtec » Wed Jan 08, 2020 6:47 pm

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
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: URGENTE Busqueda Incremental en Xbrowse Array

Postby remtec » Wed Jan 08, 2020 7:55 pm

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
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 47 guests