SysBase Powerbuilder
  • 1
  • 2
  • 3
Prev Next

Búsqueda Interactiva en Powerbuilder 11.5

Todos los sistemas tienen métodos de búsquedas para seleccionar determinados items al ingresar datos. Un caso típico se da en una empresa durante el proceso de facturación, por ejemplo, al...

Arrays en Powerbuilder 11.5

Una de las variables en programación que pocas veces se utilizan por desconocimiento son los arrays, también conocidos como arreglos o matrices, aquí los llamaremos por su nombre en inglés...

Fondo en una Aplicación Powerbuilder

Como lo prometido es deuda -según dicen-, aquí les dejó este pequeño tutotruco sobre cómo poner un fondo de escritorio en nuestra aplicación Powerbuilder.  Si bien constituye lo que, personalmente...

Debuggeando en Powerbuilder

Sin dudas que una de las tareas frecuentes que hacemos los programadores es el debugg del software, el testeo en caliente. En Powerbuilder existen distintas formas para debuggear un programa y...

Estructuras en Powerbuilder v11.5

Las estructuras de Powerbuilder son similares a las existentes en Pascal o Cobol, son colecciones de una o más variables, del mismo tipo o no, agrupadas bajo una misma denominación....

Caracteres ASCII de uso especial en PowerBuilder

Cuando usamos cadenas en Powerbuilder podemos incluir determinados caracteres ASCII en vistas a ciertos objetivos. Supongamos que el texto de un MessageBox queremos que aparezca en dos líneas, deberías escribirlo...

Haciendo un login como la gente en Powerbuilder

Vamos a ver cómo hacer un login como la gente para nuestro sistema Powerbuilder. Pero digamos primero qué es el login, logueo, registro, o como quieran llamarlo. El login es simplemente...

Validar CUIT -  Powerbuilder

A pedido de varios les dejo una función para validar el CUIT. CUIT significa "Código Único de Identificación Tributaria" y se refiere a un número que identifica a una persona física...

Powerbuilder: el Objeto Aplicación

Como todos sabemos, cuando creamos una aplicación en PB, éste nos crea un objeto con el mismo nombre del programa y lo coloca primero en el árbol de la librería....

Todos los sistemas tienen métodos de búsquedas para seleccionar determinados items al ingresar datos. Un caso típico se da en una empresa durante el proceso de facturación, por ejemplo, al elegir el cliente al que le haremos la factura. Estas búsquedas, por buena regla de programación, tienen que ser veloces y eficientes ya que, dependiendo de la cantidad de datos, pueden transformarse en algo tedioso para el usuario final. Por ejemplo si tenemos una lista de 500 clientes, colocar en el formulario una lista descolgable para seleccionarlos sería una verdadera aberración.

La solución típica para el caso de abundancia de datos es la denominada búsqueda interactiva. o búsqueda secuencial. Este subsistema consiste en brindarle al usuario/dataenter un formulario con una casilla donde irá escribiendo, por ejemplo el nombre de la empresa y debajo, automáticamente, se irá filtrando la lista hasta dar con lo que se necesita. Con esto trabajará más rápido, más eficientemente. y a gusto. Aquí veremos cómo realizar un formulario de búsqueda interactiva o secuencial utilizando un datawindows y una casilla de entrada de texto en Powerbuilder v11.5.

Búsqueda Interactiva en Powerbuilder 11.5

Imprimir COM_CONTENT_ICON_PDF
Por: Walt Whitman : Programador
Viernes, 13 Noviembre 2009
(Tiempo estimado: 5 - 9 minutos)
La vista del formulario final será algo como esto:
Vista del Formulario de busqueda secuencial

Desde este formulario el usuario irá escribiendo en el casillero "Buscar por Denominación" el nombre de la empresa y la selección en azul mostrada debajo en el datawindows se irá moviendo sola hasta dar con la búsqueda. Luego presionando ENTER o clickeando en "Seleccionar" el dato será pasado a la variable de entorno para ser utilizada en, otro formulario.

Además de ello, el presente formulario, permite elegir por qué columna de datos vamos a realizar la búsqueda. En la imagen mostrada, si clickeamos sobre CUIT, la búsqueda se hará por esta columna, es decir, el usuario deberá ingresar números. Asimismo, al clickear en el título de la columna se cambiará automáticamente la etiqueta del casillero de ingreso por el texto de la columna.

Para empezar debemos tener un datawindows creado -como se ve en la imagen- con la propiedad general  "Mouse Selection" activada.  A su vez el "Tab Order" de los campos debe ser 0 para ambas columnas.
En la ventana, el objeto vinculado a dicho datawindows debe tener las siguientes propiedades generales activadas: Visible, Enabled, HScrollbar, LiveScroll y lo llamaremos "dw_lclie" (instancia del objeto datawindows dw_sele_clie").
La ventana que vemos debe ser del tipo "response!", es decir emergente y con el título indicativo "Búsqueda de Clientes". La guardaremos con el nombre de "w_popup_clientes" para saber que es una ventana emergente de consulta.

La casilla de búsqueda, donde se ingresará el texto, será un objeto de usuario llamado "uo_busca" y pertenecerá a una instancia del objeto "uo_busca_clientes". Este último objeto tendrá la siguiente apariencia:
Objeto uo_buscar_cliente

Estará conformado por una ventana con un objeto "Single Line Edit" llamada "sle_texto", rodeado por un objeto "Group Box" para mostrar el título (en el ejemplo: "Buscar por").
Definiremos en "Declare Instance Variables" lo siguiente:
 datawindow dw
 string columna,columna_integer,columna_label
 


En "Function List" agregaremos dos funciones: una llamada "wf_poner_titulo" y otra "wf_sort".
La primera será:  "Access: public", "Return Type: None", "Function Name: wf_poner_titulo" y contendrá el siguiente código:
 gb_1.text = 'Buscar por ' +columna_label
 sle_texto.text = ''
 dw.setfilter("")
 dw.filter()
 


La otra función será: "Acces: public", "Return Type: None", "Function Name: wf_sort" y contendrá el siguiente código:
 //Ordene el dw por la columna definida para que la busqueda sea mas efectiva
 if columna_integer = columna then
     dw.SetSort("integer("+columna+") asc" )
 else    
     dw.SetSort(columna+" asc" )
 end if
 dw.Sort()
 


El objeto "Single Line Edit" deberá tener definido el evento "Constructor" con el siguiente código:
 //debe definir prinero el dw y la comuna a buscar
 //llama al evento sort despues de terminar el constructor
 Post wf_sort()
 Post wf_poner_titulo()
 

Este evento es el que agregará el texto al lado de "Buscar por".

Asimismo definiremos un evento propio titulado "ue_keypress" del tipo "Keycode key, unsignedlong keyflag" con el siguiente código:
 //Busca sensitivamente dentro de una columna de tipo char()
 //primero debe definir en el condstructor el dw y la columna a buscar
 long is_linea
 string buscar,ls_tipo
 int largo
 ls_tipo = dw.Describe(columna+".coltype")
 buscar = upper(Text)
 largo = len(buscar)
 choose case  mid(ls_tipo,1,4) 
         case 'char' 
             is_linea = dw.find("upper(mid("+columna+",1,"+string(largo)+")) = '"+buscar+"'",1,dw.rowcount())
         case 'deci'    
             is_linea = dw.find("upper(mid(string("+columna+"),1,"+string(largo)+")) = '"+buscar+"'",1,dw.rowcount())
         case 'long'    
             is_linea = dw.find("upper(mid(string("+columna+"),1,"+string(largo)+")) = '"+buscar+"'",1,dw.rowcount())
 end choose            
 dw.scrolltorow(is_linea)
 

Este evento es el más importante ya que es el que hará la búsqueda secuencial.

Volviendo a la ventana "w_popup_clientes", haremos lo siguiente:
Definiremos las siguientes variables de instancia:
 string is_codig,is_perfi
 int ii_fila_elegida
 


En su evento "Open" pondremos el siguiente código:
 /* Script de inicio ventana w_seleclie
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ by TuxMerlin (c) 2009
     Objeto: w_seleclie
     Evento: open()
     Work: Cargas los datos en el datawindow
     Call: 1) Desde w_fichas_clientes botón "Búsqueda Interactiva"
            2) Desde Facturación y Remitos
 */
 //Traigo los datos
 dw_lclie.settransobject(sqlca)
 dw_lclie.retrieve(sqlca)
 
 //Le doy el foco por si trabaja más con el teclado
 dw_lclie.setfocus()
 

Está comentado así que supongo entenderán de qué se trata.
Veamos los códigos de los demás objetos de la ventana.
El botón "Salir" tendrá este código definido en el evento "Clicked":
 close(parent)
 


El botón "Seleccionar" tendrá este código definido en el evento "Clicked":
 /* Script para el botón seleccionar fila
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ by TuxMerlin (c) 2009
     Objeto: w_seleclie --> cb_seleccionar
     Evento: clicked()
     Work: selecciona la resaltada
     Call: w_seleclie -> cb_seleccionar
 */
 // Me devuelve el número de fila que elegí
 ii_fila_elegida=dw_lclie.getrow()
 
 // Abro la Ficha del Cliente y envío el parámetro
 closewithreturn(parent,ii_fila_elegida)
 

Este botón será el encargado, si se presiona, de cargar los datos de la fila en la variable de instancia "ii_fila_elegida" que será utilizada en la ventana desde donde fue realizada la consulta. Si miran los comentarios, en el código del evento "Open", se darán cuenta que devolvería los datos a la ventana "w_fichas_clientes".

El objeto "dw_lclie" en su evento "Clicked" debe tener el siguiente código:
 /*Aqui al dar cliked en la cabecera de la columna se configura para filtar 
   el nombre de la label debe ser llamado nombre del campo + '_t' como define PB
 Ejemplo  nombre  - > Label o cabecera nombre  */
   
 if row = 0  then
      if dwo.name = 'datawindow' then return
      string ls_columna
      ls_columna = mid(string(dwo.name),1,len(string(dwo.name))-2)
         
      uo_busca.columna_label = dwo.text
      uo_busca.columna = ls_columna
      //uo_busca.wf_sort()
      uo_busca.wf_poner_titulo()
      uo_busca.setfocus()
 end if   
 

En los comentarios del código pueden ver qué es lo que hace.

Finalmente, en el evento constructor del objeto de usuario "uo_busca" debemos ingresar el siguiente código:
 //por default configuro la columna y el label de la columna inicial
 //y tambien el datawindow a ser filtrado
 dw = dw_lclie
 columna = 'denominacion'
 columna_label = 'Denominacion'
 


Con esto ya tenemos la búsqueda interactiva o secuencial deseada y como ven puede utilizarse desde cualquier otra ventana donde tengamos necesidad de acceder a nuestros clientes.

"Good programming!"
{gotop}

Archivos:
Búsqueda Secuencial en Powerbuilder 11.5 Versión:1
Archivos exportados de la ventana popup w_pop_clientes y del objeto uo_busca_clientes. Tienen que descomprimir el archivo y luego importarlo dentro de la librería donde desean colocarlo.

Artículo relacionado.
Por favor, regístrese o ingrese para descargar archivos de esta categoría.

Licencia Creative Commons Autor  Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. Sitio Web Página de Inicio Fecha 13-11-2009 Lenguaje  Spanish Sistema  Windows Tamaño del archivo 3.77 KB Descargar 157

Tags: búsqueda | interactiva | powerbuilder

Lo han leído: 17848 almas
Joomla-GNU.com not affiliated with or endorsed by Open Source Matters or the Joomla! Project. The Joomla!, logo and name is used under a limited license from Open Source Matters in the United States and other countries.

BLOG COMMENTS POWERED BY DISQUS