Power Builder - como borro un campo de un dw

 
Vista:

como borro un campo de un dw

Publicado por amilcar (327 intervenciones) el 25/02/2003 16:28:42
tengo un dw algo asi
campo empresa_id que es un dddw de empresas
campo proveedor_id que es un dddw de proveedores

quiero que al seleccionar una empresa se me borre el proveedor (si es que tiene alguno) que esta en el siguiente campo.
probe con setitem pero solo me acepta numeros, ya que si le paso un string vacio o nulo no me lo toma
muchas gracias

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:como borro un campo de un dw

Publicado por milson cardona (613 intervenciones) el 25/02/2003 18:34:29
Un saludo especial desde COLOMBIA

te doy 2 ideas. en ambas debes tratar al DDDW con la función GETCHILD... para capturarlo debes tener el siguiente script en el evento open de la ventana

DataWindowChild dwc_hijo
integer li_error
li_error = dw_1.GetChild('campo_dddw', dwc_hijo)
IF li_error = -1 THEN
MessageBox("Error", "el campo no es un DDDW")
RETURN
END IF
dwc_hijo.settransobject(variable_transaccional)

1- PRIMERA IDEA
imagino que el DW que te sirve como DDDW debe tener argumento de recuperación, ENTONCES de ser esto cierto solo cuando desees que no te muestre nada mandale un dato que sepas que no existe y que nunca existirá ejemplo un -1 ó -1000 en caso de que el argumento sea tipo numerico.

dwc_hijo.retrieve(-100)

2-SEGUNDA IDEA
en caso que el DW no tenga argumento de recuperación debes entonces resetiar el DDDW, porque este realmente es un DW y se le puede dar casi el mismo trato, .

dwc_hijo.reset()

NOTA: cuando desees colocarle datos de nuevo al DW, solo basta que le hagas de nuevo el RETRIEVE, bien sea con o sin el argumento de recuperación

dwc_hijo.retrieve(argumento)

espero que esto te de una idea para resolver el problema.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ok pero todavia no me funciona del todo

Publicado por amilcar (327 intervenciones) el 27/02/2003 00:20:20
mi dddw no tiene argumento, asi que uso el reset
esto me borra todos los datos, pero al hacer nuevamente retrieve
para traer los datos, me trae el mismo dato que yo tenia antes.
es decir yo tengo un cliente "juan perez" cuyo id es 2, quiero que al seleccionar un determinado campo ese cliente se me borre y me quede la lista para seleccionar otro cliente o el mismo si lo deseo .
lo que vi es que al hacer retrieve el valor 2 me queda en el campo entonces siempre me trae ese cliente no se si me entendes
ok muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ok pero todavia no me funciona del todo

Publicado por milson cardona (613 intervenciones) el 27/02/2003 01:14:09
Un saludo especial desde COLOMBIA

haber si te he entendido....

tu quieres hacer funcionar tu DDDW como algunas aplicaciones que uno ve en la WEB es decir, te pongo un ejemplo

tengo una lista de paises, y una lista de departamentos o provincias, lógicamente existen muchas provincias para cada pais..... entonces tu deseas que al elegir un pais determinado en el DDDW_1 en el DDDW_2 automáticamente solo te aparezcan las provincias pertenecientes a ese pais..... si cambias el pais en el DDDW_1 inmediatamente en el DDDW_2 desaparezcan las provincias del pais1y te aparezcan las provincias pertenecientes al nuevo país elegido.

si lo que deseas hacer se parece un poco al ejemplo que te acabo de documentar, entonces necesariamente tendrás que implementar argumentos de recuperación en el tu DDDW, es la única forma de que el sistema sepa cuales datos deseas ver y cuales ocultar.

si aun así no puedes resolver el problema. te pido el favor que me documentes tu caso de una forma similar a la que acabo de hacer, así daremos más luces al asunto y tal vez encontremos la solución.

suerte y espero tu comentario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ok pero todavia no me funciona del todo

Publicado por amilcar (327 intervenciones) el 27/02/2003 05:39:41
no es mas sencillo que eso (creo) es asi
seleccione una empresa en un campo de dw_1
luego salto al campo proveedor que es un dddw ( el cual es un datawindowchild, campo proveedor_id)
selecciono un proveedor y traigo en static text algunos datos de ese proveedor, como cuit y condicion de iva y tengo alli un pequeño procedimiento
hasta alli todo ok

ahora bien si vuelvo atras y selecciono otra empresa quiero que el proveedor que esta en el campo proveedor_id me quede en blanco, pero solo el dato que se ve en pantalla, ya que necesito que al desplegar ese dddw este toda la lista de proveedores., en ese dddw no tengo argumentos ya que necesito traer todos los proveedores existentes.
necesito que si la empresa cambia caiga nuevamente en el campo proveedor y obligarlo a que seleccione uno de la lista borrando el que habia seleccionado anteriormente.

espero haberme explicado un poco mejor, disculpame las molestias y muchas gracias por tus servicios y tu buena disposicion para quienes empezamos con esta herramiento.

una cosa mas deje una pregunta sobre el comando "send"
fijate si podes muchas gracias
un abrazo desde argentina
amilcar

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ok pero todavia no me funciona del todo

Publicado por milson cardona (613 intervenciones) el 27/02/2003 15:38:21
Un saludo especial desde COLOMBIA

estuve probando con los DDDW las ideas que te dí, y tienes razón si hago un reset, un retrieve, un insert etc al Datawindowchild, no se cambia el dato que ya me ha mostrado en pantalla.......... a pesar de que todos los cambios si se han registrado en el DDDW...
este problema tiene una explicación muy lógica y es porque dicho dato ya pertenece al DW padre y no al DDDW (o datawindowchild).... entonces entendido esto la solución es mucho más sencilla de lo que se pensaba en un principio, solo basta conque cambies el dato pero al DW padre.

Ejemplo

-el usuario elige una empresa en el campo correspondiente.
-luego elige un proveedor en el DDDW
-hace más operaciones en otros campos.
-el usuario decide cambiar la empresa seleccionada anteriormente por otra diferente.
- entonces al momento de cambiar la empresa seleccionada inicialmente debes borrar, resetiar, quitar, poner en blanco el proveedor que tienes en el campo al que esta asociado el DDDW.
esto lo logras de la manera más sencilla, como este dato ya pertenece al DW padre, solo basta con llevarle un espacio en blanco con la función setitem al campo pero en el DW padre, no en el datawindowchild como en un principio se habia planteado

sigue en el otro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

sigo con el comentario

Publicado por milson cardona (613 intervenciones) el 27/02/2003 15:42:01
NOTA: olvidate de las ideas anteriores, de los datawindowchild y todo lo demas

coloca este código en el evento itemchanged del DW padre, cambiando por los nombre de los objetos correctos

//dependiendo de la columna modificada
CHOOSE CASE getcolumnname()
//si la columna es la de empresas
CASE 'nombre_campo_empresa'
//llevamos un espacio en blanco al dato que tiene el campo DDDW
DW_1.SETITEM(DW_1.GETROW(),'campo_dddw'," " )
END CHOOSE

creo, según las pruebas que hice que con esto solucionas el problema, espero tu comentario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sigo con el comentario

Publicado por amilcar (327 intervenciones) el 27/02/2003 22:59:43
hola milson, mira lo que vos me decis ya lo habia probado antes y no me funciona ya que el campo proveedor_id solo me acepta si le paso un dato numerico, este es un campo numerio el cual tiene dddw sin argumentos.
si le paso dw_1.setitem(1,"proveedor_id",3) me refresca el proveedor con ese id,
si le paso dw_1.setitem(1,"proveedor_id",0) me pone un 0 en el campo
si le paso dw_1.setitem(1,"proveedor_id",-10) me pone un -10 en el campo

dw_1.setitem(1,"proveedor_id") no me cambia nada, me sigue quedando el proveedor que tenia antes
dw_1.setitem(1,"proveedor_id","prueba de cambio") no pasa nada
es decir que no me acepta que le pase un string.

no se si estare haciendo algo mal pero hace rato que estoy dando vueltas sobre el mismo tema y no le puedo encontrar la vuelta

otra cosita leiste lo que te envie sobre trabajo en españa

muchas gracias
amilcar desde argentina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:sigo con el comentario

Publicado por Pedro López (68 intervenciones) el 28/02/2003 10:36:57
Hola Amilcar,

Lo mejor sería que le pases un valor nulo. Si además en las propiedades del campo le marcas Required, no te dejará salir del campo hasta que selecciones un proveedor de la lista (la validación la hace la propia datawindow).

Ejemplo:

integer li_nulo

// Ponemos a nulo la variable
Setnull (li_nulo)
// Introducimos el nulo en el campo, y le mandamos el foco
dw_1.setitem(1,"proveedor_id", li_nulo)
dw_1.setcolumn("proveedor_id")
dw_1.setfocus()

Un saludo,

Pedro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ahora si esta ok,muchas gracias a todos

Publicado por amilcar (327 intervenciones) el 28/02/2003 21:40:57
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar