Objeto Visual

Te pido que atiendas a mi solicitud, y de antemano gracias por su pronta respuesta.
1)Tengo una ventana mantenimiento de cliente (w_mnt_cliente) en la cual al activar un botón se active una ventanita que tiene un objeto visual customizadoy contiene 3 datawindows departamento, provincia y distrito, cada vez que escoja un departamento se muestra las provincias que tiene y sus distritos (tengo un error cuando ejecuto no parece la conexión entre el dw padre y el hijo).
Luego de seleccionar el departamento, la provincia y distrito se cierra la ventana y se muestra la ventana de mantenimiento de cliente, con el respectivo id del distrito seleccionado en la ventanita.
2) En la misma ventana w_mnt_cliente en el botón buscar, al darle click se activa una ventanita con controles sle, donde se hace la búsqueda por nombre del cliente, lo que retorna en la ventana w_mnt_cliente es todos los datos del cliente como id, id_distrito, nombre, apellidos.
Nota:
Aparte hay un objeto que establece la conexión con los dw.
Gracias Experto, por respuesta sera de mucha ayuda para mi.

1 respuesta

Respuesta
1
Bueno te recomiendo que crees un dw external.
Primero creas 3 dw, uno que llame a la tabla departamento (d_departamento), suficiente que tenga código y nombre, el segundo que llame a la tabla provincia (d_provincia), y el tercero a la tabla distrito (d_distrito), tanto en d_provincia como en d_distrito debes poner argumentos, en modo diseño haces clic en el icono SQL y posteriormente en Design - Retrieval Arguments, ahí para el segundo dw (d_provincia) creas un argumento de tipo string as_depa, luego en la parte inferior en la pestaña where escoges el campo cod_departamento y le asignas el argumento creado, lo mismo haces para d_distrito, con la diferencia que los argumentos son cod_depa y cod_provincia.
Luego creas el dw external (dw_ubigeo) con tres campos, el primer campo es cod_departamento, el segundo cod_provincia y el ultimo cod_distrito.
Luego en el campo cod_departamento lo colocas como dddw, y escoges el d_departamento, igual haces para provincia y distrito.
Una vez hecho eso, ahora en el formulario.
Declara como variable de instancia.
Datawindowchild idwc_departamento,idwc_provincia,idwc_distrito
String is_depa
En el evento constructor del dw, colocas
Suponiendo q el objeto dw de tu formulario tambien se llame dw_ubigeo
GetChild("cod_departamento",idwc_departamento)
GetChild("cod_provincia",idwc_provincia)
GetChild("cod_distrito",idwc_distrito)
idwc_departamento.SetTransObject(SQLCA)
idwc_provincia.SetTransObject(SQLCA)
idwc_distrito.SetTransObject(SQLCA)
dw_ubigeo.InsertRow(0)
En el evento itemchanged del objeto dw, colocas:
CHOOSE CASE dwo.name
CASE "cod_departamento"
is_depa = data
idwc_provincia.Retrieve(is_depa)
CASE "cod_provincia"
idwc_distrito.Retrieve(is_depa,data)
END CHOOSE
Me pueden explicar con un ejemplo como utilizar argumentos y como se declara.
Tengo un DDDW de departamento, uno para provincia y otro para distrito y que al seleccionar un departamento me muestre todas las provincias que pertenecen a el, como lo haría, gracias por su ayuda.
Gracias Experto Achafio, por tu respuesta.
Quisiera una aclaración ya que declare el dw external con los tres campos cod_depar, cod_prov, cod_distri, luego lo asocie a los objetos d_departamento, d_provincia y d_distrito. Al control dw(dw_ubigeo) le puse el código que me diste, lo ejecute y solo desplegá una lista vacía con titulo de id y nombre pero sin datos quisiera saber que esta pasando.
Gracias nuevamente.
Si disculpa se me olvidó indicarte que coloques esta linea
idwc_departamento. Retrieve()
Esto debe ir antes del dw_ubigeo. InsertRow(0)
Con esto estará solucionado el inconveniente.
Hola Experto, puse el código que faltaba y sigue igual no muestra los datos sale solo el id y nombre, que pasara.
Gracias por tu paciencia y tus respuestas.
Haber enviame todo el código que estas haciendo, especialmente en el open y el constructor del dw. En que verison estas trabajando.
En el evento open de la ventana:
dw_ubigeo.settrnasobject(sqlca)
dw_ubigeo.retrieve()
En el evento  constructor del dw_ubigeo
GetChild("id_departamento",idwc_departamento)
GetChild("id_provincia",idwc_provincia)
GetChild("id_distrito",idwc_distrito)
idwc_departamento.SetTransObject(SQLCA)
idwc_provincia.SetTransObject(SQLCA)
idwc_distrito.SetTransObject(SQLCA)
idwc_departamento.Retrieve()
dw_ubigeo.InsertRow(0)
Tu me dijiste que los argumento eran string pero son number ya que los códigos de cada tabla (departamento, provincia y distrito son números), ¿y dónde se uzan los argumento o es solo para comprobar?
Gracias Experto por tu respuesta.
Ya me di cuenta el inconveniente:
En el evento open de la ventana solo pon:
idwc_departamento.Retrieve()
En el evento constructor del dw_ubigeo, coloca:
GetChild("id_departamento",idwc_departamento)
GetChild("id_provincia",idwc_provincia)
GetChild("id_distrito",idwc_distrito)
idwc_departamento.SetTransObject(SQLCA)
idwc_provincia.SetTransObject(SQLCA)
idwc_distrito.SetTransObject(SQLCA)
dw_ubigeo.InsertRow(0)
Los argumentos si te revisas tu código, lo encontraras en el evento itemchanged del dw_ubigeo, ahí utilizas esos argumentos.
Hola Experto te cuento que ya salen los datos de distrito solamente ya que solo se hizo el retrieve para idwc_departamento en el evento open, más no a los demás idwdc_provincia y distrito.
El problema esta cuando selecciono el departamento por ejemplo ancash tiene que aparecerme provincia de santa, moro, samanco, pero no aparece nada. Este es uno de los problemas.
Y cuando los pongo a los tres con retrirve en el evento open de la ventana lo primero que aparece es la ventanita de ingresar los argumentos.
Otra cosa que faltaría seria al seleccionar ya todo ok, se cierre esta ventana (que servia solo para seleccionar el departamento, provincia y distrito a la que un cliente pertenece)y retorne el id_distrito a la ventana principal que es la de cliente y proseguir con el llenado del cliente.
Gracias Experto por tu gran paciencia que tine un gran valor.
OK, vamos por parte, enviame el script del evento itemchanged del dw_ubigeo, para ver cual es el problema.
No le pongas el retrieve a los 3 idwc, porque te va a salir esa pantallita que me mencionas.
Deja el open como te indique.
Es el mismo código que me distes:
dw_ubigeo.accepttext( )
CHOOSE CASE dwo.name
CASE "id_departamento"
is_depa = data
idwc_provincia.Retrieve(is_depa,data)
CASE "id_provincia"
idwc_distrito.Retrieve(is_depa)
END CHOOSE
Quisiera saber que esta evaluando en cada caso (si es los argumentos, o si son los campos creados en el dw_externo que son cod_departamento, cod_provincia, cod_distrito, o si son los campos o llaves primarias de las tablas departamento, provincia y distrito que son: id_departamento(integer), id_provincia(integer), id_distrito(integer))
Solo quisiera que me expliques un poquito el código (el porque y para que). Y no te olvides de lo que faltaría (pasar el id_distrito a la ventana principal de cliente)
Gracias experto por tu valiosa ayuda.
Parece que te has confundido en el código:
en CASE "id_departamento", tiene q estar así
is_depa = dat
idwc_provincia.Retrieve(Long(is_depa))
en CASE "id_provincia"
idwc_distrito.Retrieve(Long(is_depa),Long(data))
Hola experto Achafio te cuento que esta marchando super bien, el código que me diste esta esta ok ya salio, cuando escojo el departamento sale las provincias al que pertenece y po ende los distritos, gracias.
Ahora lo que faltaría es pasar el id_distrito y el nombre del distrito (distrito_nombre) de la ventana que ya se hizo, a la ventana principal de cliente este contiene campos como: id_cliente, id_distrito, distrito_nombre, apellidos, nombres, fecha, dirección.
Gracias por toda tu atención y dedicación.
Bueno en el botón aceptar de la ventana ubigeo coloca:
Long ll_distrito
dw_ubigeo.AcceptText()
ll_distrito = dw_ubigeo.GetItemNumber(1,"id_distrito")
ClosewithReturn(parent,ll_distrito)
Y en la ventana cliente.
en el evento buttonclicked del dw, coloca:
Long ll_distrito
ll_distrito = Message.LongParm
SetItem(GetRow(),"id_distrito",ll_distrito)
Eso es todo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas