Programación General > Power Builder

 Autollenar Campos

(1/2) > >>

Aristj:
Hola a todos y gracias por su ayuda, tengo una tabla pedidos y quiero que en un dataw cuando capture la informacion me traiga los demas campos, ejemplo:digito en idpedido - 1cc -, el sistema me llena los campos : descripcion, valor, etc...

pierpiter:
Buenas, acá te prepare un ejemplo, esta hecho en power 9 (no se que versión estarás usando).
Lo primero que tenés que hacer es crear la datawindows y agregarle un nuevo evento. En ese nuevo evento le vas a tener que pegar el código que te pongo abajo. El nuevo evento tiene que ser pbm_dwnprocessenter. Esto define un evento para cuando se presiona enter en alguno de los campos de la datawindows.

Código para pegar en ese nuevo evento:


--- Código: Text --- // Definición de variables// ambito|tipo_nombre// ejemplo: local|integer_numcolumna quedaría definida como:// li_numcolumna string ls_nombrestring ls_apellidostring ls_cuitinteger li_numcollong ll_idlong ll_numfila// Extraígo el número de columna en la que estoy posicionado.li_numcol = this.getcolumn()  //messagebox('Nro. Columna',string(li_numcol)) if li_numcol = 1 then  // Averiguo la línea en la que estoy parado.  ll_numfila = this.getrow()   // Extraígo el código ingresado.  ll_id = this.getitemdecimal(ll_numfila,1)    // Hago el select para recuperar el dato.  select nombre, apellido, cuit     into :ls_nombre, :ls_apellido, :ls_cuit      from tblpersonas     where id = :ll_id;    // Inserto en el dw los datos.  this.setitem(ll_numfila, 2, ls_nombre)  this.setitem(ll_numfila, 3, ls_apellido)  this.setitem(ll_numfila, 4, ls_cuit) end if  
El código se puede optimizar muchísimo, lo hice rápido por que estoy en el trabajo jejeje. Cualquier consulta o algo que no entiendas preguntame, no hay problema.
Obviamente el select lo vas a tener que cambiar y lo mismo para las líneas que insertan dentro de la datawindow "this.setitem(ll_numfila, 2, ls_nombre)" el número corresponde al número de columna donde querés ingresar el dato, "ll_numfila" es el número de fila donde se va a insertar el dato, "ls_nombre" es la variable que contiene el dato.
Otra cosa a tener en cuenta es el tipo de datos que vas a usar (los que tenes en la base de datos).
Bueno, cualquier cosita avisa, saludos.

:P

Aristj:
muchas gracias por tu ayuda y tu interes.....creo que no pregunte bien...tengo 2 tablas: clientes y productos.. ahora necesito un datawindow en donde pongo el id del cliente y el me llena los campos nombre, apellido, direccion tel,,,etc,, ahora en el mismo datawindow en otro campo pongo el id del producto y sitema me trae: descripcion, unidad, valor...etc...

y tambien me gustaria que me explicaras tu codigo  para que caso funcionaría...

muchas gracias,,,

pierpiter:
Bueno, vamos a ver si entendí bien:

Podés usar el código que te pase para llenar los campos que vos querés del datawindow. Primero llenarías los del cliente con todos sus datos personales y luego, cuando ingresas el id del producto llenas los demás campos.

Para la primera parte:


--- Código: Text --- // Extraígo el número de columna en la que estoy posicionado.li_numcol = this.getcolumn()  //messagebox('Nro. Columna',string(li_numcol)) if li_numcol = 1 then...  
Al estar definido el evento cuando presionas 'enter', siempre que se presione enter se ejecuta este código, por eso es que extraígo el número de columna en la que estoy parado (la actual en la que se presiono enter) y pregunto si esa es la 1, porque solo quiero ejecutar el código cuando estoy en la columna 1. No me interesa que se ejecute cuando estoy en las demás columnas.
La columna depende de cual quieras que sea donde ingresas el id del cliente por ejemplo. Si el id del cliente lo ingresas en la columna 4 del datawindow entonces en el if tendrías que preguntar por li_numcol = 4 y ahí adentro ejecutar todo el código para traer los datos de la base (el select) e insertar los datos en el datawindow (this.setitem = ....)

Los parámetros que recibe la función 'setitem' son:
setitem(numfila, columna, dato)
-- numfila --> es el número de fila en la que quiero ingresar el dato (como queremos que sea en la misma, primero extraígo en que línea estoy parado y lo guardo en un variable para poder pasarle a la función este dato).
-- columna --> es el número de columna en la que quiero ingresar el dato, esto depende de en que número de columna tengas cada dato a ingresar.
-- dato --> es el dato que queremos ingresar. Hay que tener cuidado con el tipo de datos, porque te va a dar error si queres meter un dato string en un campo que esta definido como integer en el datawindow.

Bueno, para la segunda parte tendrías que usar la misma lógica pero para llenar los campos que querés con la descripción del producto. Tendrías que agregar un if para preguntar por la columna en la que esta el id del producto, hacer el select con los datos que necesitas y luego insertar los datos en el datawindow. O sea que tendrías dos códigos como el que te pase dentro del mismo evento.

Cualquier cosita preguntame, no hay problema.
Saludos.

Aristj:
OK..............FUNCIONO....solo que dandole dos veces  enter,,,, :blink: ......

pero ahora como hago el sql select con las tablas involucradas... :(   :( ...por favor  otra  ayudita...

Muchas gracias ..

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa