• Jueves 28 de Marzo de 2024, 09:43

Autor Tema:  Autollenar Campos  (Leído 3150 veces)

Aristj

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Autollenar Campos
« en: Jueves 25 de Mayo de 2006, 23:47 »
0
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

  • Miembro activo
  • **
  • Mensajes: 58
    • Ver Perfil
Re: Autollenar Campos
« Respuesta #1 en: Viernes 26 de Mayo de 2006, 15:51 »
0
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
  1.  
  2. // Definición de variables
  3. // ambito|tipo_nombre
  4. // ejemplo: local|integer_numcolumna quedaría definida como:
  5. // li_numcolumna
  6.  
  7. string ls_nombre
  8. string ls_apellido
  9. string ls_cuit
  10. integer li_numcol
  11. long ll_id
  12. long ll_numfila
  13. // Extraígo el número de columna en la que estoy posicionado.
  14. li_numcol = this.getcolumn()
  15.  
  16.  
  17. //messagebox('Nro. Columna',string(li_numcol))
  18.  
  19. if li_numcol = 1 then
  20.   // Averiguo la línea en la que estoy parado.
  21.   ll_numfila = this.getrow()
  22.  
  23.   // Extraígo el código ingresado.
  24.   ll_id = this.getitemdecimal(ll_numfila,1)
  25.  
  26.   // Hago el select para recuperar el dato.
  27.   select nombre, apellido, cuit
  28.     into :ls_nombre, :ls_apellido, :ls_cuit  
  29.     from tblpersonas
  30.     where id = :ll_id;
  31.  
  32.   // Inserto en el dw los datos.
  33.   this.setitem(ll_numfila, 2, ls_nombre)
  34.   this.setitem(ll_numfila, 3, ls_apellido)
  35.   this.setitem(ll_numfila, 4, ls_cuit)
  36.  
  37. end if
  38.  
  39.  

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

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Autollenar Campos
« Respuesta #2 en: Martes 30 de Mayo de 2006, 19:35 »
0
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

  • Miembro activo
  • **
  • Mensajes: 58
    • Ver Perfil
Re: Autollenar Campos
« Respuesta #3 en: Miércoles 31 de Mayo de 2006, 19:12 »
0
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
  1.  
  2. // Extraígo el número de columna en la que estoy posicionado.
  3. li_numcol = this.getcolumn()
  4.  
  5.  
  6. //messagebox('Nro. Columna',string(li_numcol))
  7.  
  8. if li_numcol = 1 then
  9. ...
  10.  
  11.  

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

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Autollenar Campos
« Respuesta #4 en: Domingo 4 de Junio de 2006, 18:11 »
0
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 ..

pierpiter

  • Miembro activo
  • **
  • Mensajes: 58
    • Ver Perfil
Re: Autollenar Campos
« Respuesta #5 en: Lunes 5 de Junio de 2006, 15:56 »
0
Hola, me alegro que haya funcionado, aunque sea con dos veces enter... raro.

En cuanto al sql, depende de que tablas tengas y como levantar los datos. El select lo ponés directamente en el código (como esta en el ejemplo de arriba), dentro del select le asignas las variables que van a contener el dato devuelto y asignas esas variables a los campos del datawindow.

Código: Text
  1.  
  2. // Hago el select para recuperar el dato.
  3.   select nombre, apellido, cuit
  4.     into :ls_nombre, :ls_apellido, :ls_cuit  
  5.     from tblpersonas
  6.     where id = :ll_id;
  7.  
  8.  

En ese select lo que hago es seleccionar el nombre, apellido y cuit de la tabla tblpersonas, donde el id de la persona sea igual al id que levante anteriormente del datawindow. El resultado de cada campo de ese select se va a guardar en :ls_nombre, :ls_apellido, :ls_cuit (la clausula "INTO" le indica que meta el resultado en esas variables).
El resultado tiene que ser único, porque sino, te va a dar un error porque el select retorna más de una fila.
Después tendras que hacer validaciones sobre las variables, como por ejemplo el dato que devuelve, que no sea vacio... etc.
Cualquier cosita, ya sabés, pregunta que no hay drama, saludos.