Power builder dw y variables
Resulta que tengo dos dw; el primero, al abrirse la ventana, tiene que mostrar datos de una tabla llamada "liquidacion_masiva" ...(no se como hacerlo), el segundo te lo explico despues de la respuesta...
1 Respuesta
A nivel de procedimiento, seria bueno crear un evento donde tengas el query para el retrieve de ese primer dw, y luego en el open de la ventana lo invocas con un post event.
mi consulta es esta
select * from cobra.temp_liquidacion_masiva;
debo anteponerle el retrieve? o después y como es la estructura del post event?
Mmmm...
En realidad, el script o consulta sql, es con la cual se construye un objeto datawindows para luego enlazarlo al control datawindows (no se trata de lo mismo), para luego en tiempo de ejecución,
Lo que hacías en tu otra pregunta
dw_1. Settransobject("variable de conexión")
dw_1. Retrieve("Parámetros en caso se hallan declarado")
En cuanto, al postevent, esto es una forma de invocar a un evento.. asumiendo que el evento creado se llame ue_retrieve y halla sido creado en el window, entonces seria algo así.
--evento open del window
POSTEVENT('ue_retrieve') // ejecuta un evento al finalizar un procedimiento
A diferencia de otros disparadores como el triggerevent, el postevent ejecuta el eveto invocado después de que el evento desde donde ha sido llamado termine, válgase decir que una vez que todo el código del open se ejecuta recién se dispara el postevent, mientras que el triggerevent tiene un efecto inmediato.
me podrías decir como guardo mi consulta en una variable..
y una pregunta que parámetro debería utilizar para el retrieve?....la variable de la consulta?
Una consulta antes de. Como hiciste para crear el datawindow donde importabas la data de un archivo.?
te doy de una vez la segunda parte de mi pregunta.....
el segundo dw ya tiene una consulta lista la cual debo modificar un poco......
lo primero que se tiene que hacer es que al llamar la variable :TASA_INTERES,esta captura el dato por medio de una consulta a otra tabla de donde debe sacarla...esta es la consulta
select nominal_mensual into :tasa_interes from cobra.tasas_interes where vigencia = 'ACTIVA');
pero no se donde debo ubicarla ya que ya existe otro select en el botón y bueno (no se si esta bn redactada)
Lo otro que no se, es como guardar todo el select en una variable que quiero llamar V_DATOS_DEUDOR, todo el select es este (ahí puedes ver lo de la variable que anteriormente nombré (tasa_interes)
select o.oficina,
o.obligacion,
o.producto,
o.fecha_vencimiento,
o.mora,
trunc(sysdate - o.fecha_vencimiento) dias_mora,
round((((o.mora_final * :tasa_interes) / 100) / 30) * (trunc(sysdate - o.fecha_vencimiento)),0) interes_mora,
round(((o.mora + (((o.mora_final * :tasa_interes) / 100) / 30) * (trunc(sysdate - o.fecha_vencimiento))) * 10) / 100,0) gastos_cobranzas,
decode(producto, 'covicheque', round((o.mora * 20) / 100, 0), 0) sancion
into :v_datos_deudor
from deudores_obligacion dob,
obligaciones o,
ciclos_contratos cc,
contratos c,
cobra.temp_liquidacion_masiva li
where dob.contrato = o.contrato and
dob.oficina = o.oficina and
dob.obligacion = o.obligacion and
o.contrato = cc.contrato and
o.ciclo = cc.ciclo and
o.dia_ciclo = cc.dia_ciclo and
cc.contrato = c.contrato and
o.contrato = c.contrato and
dob.contrato = c.contrato and
dob.pais = c.pais and
dob.pais = 1 and
dob.tipo_documento = li.tipo_documento and
dob.documento = li.documento and
dob.tipo_deudor = 'deudor' and
cc.grupo_gestion = 'covicheque' and
o.vigencia = 'activa' and
order by o.fecha_vencimiento asc
estoy mas confundida porque al principio cuando lo cree el escogió una tabla para sacar de ahí los registros a mostrar .....pero no se como hacer que se vean...ese es el problema ...solo que yo intente subirlos desde un archivo pero en realidad los datos están en la tabla que alimenta al dw
cree un dw nuevo le dije que de tipo sql select, el me pidió asociarlo a una tabla que se llama cobra.temp_liquidacion_masiva y luego a eso, agregar los registros de esa tabla que quiero mostrar y seleccione 3 registro Doc, tipo de doc y grupo, y luego de eso arraste el dw a la ventana y ya
Bien,
Cuando estas en el paso de seleccionar la tabla dale cancel, y ve al menú “Design” y elige “Convert to syntax”.
Se te mostrara un panel, Solo copia/pega tu script (el select tiene que ser descrito). Si tu no necesitases parámetros entonces solo le das en el botón return, o su equivalente en el menu "File" opción "Return". Para que siga el flujo de la creación del dw.
Si necesitases parámetros, entonces también necesitas inicializarlos, esto en el menú también "design" opción "Retrieval arguments", te saldrá una ventana donde asignaras el nombre que tendrán tus parámetros y a su vez el tipo de dato que le corresponde.
Por ejemplo: si tengo este query
1er:caso
Select Doc, tipo_doc , grupo from tabla1 ;
Y yo quisiera agregar un parámetro para solo recuperar registros de un tipo_doc determinado, entonces primero inicializo el parámetro digamos que le llamare s_tipodoc de tipo string.
entonces mi select quedaría así:
2do:caso
Select Doc, tipo_doc , grupo from tabla1 where tipo_doc = :s_tipodoc;
luego cuando haga el retrieve, para el 1er caso, el cual no tiene parámetros
seria así
dw_1.settransobject(DBoracle)
dw_1.retrieve()
Para el 2do caso, aquí si especifique un parámetro par el tipo_doc, entonces tendría que obtener dicho valor y cargarlo a una variable para luego usarlo en el retrieve:
string ls_tipodoc = "FACTURA"
dw_1.settransobject(DBoracle)
dw_1.retrieve(ls_tipodoc)
Toma en cuenta esto es solo un ejemplo, no conozco si necesitas realmente usar parámetros, ni el tipo de data que tienes.
Pues necesito un parámetro pero para el segundo dw que te comentaba.........(el parámetro seria la tasa interés) y ya me quedo clara la primera parte graciasss
el segundo dw ya tiene una consulta lista la cual debo modificar un poco......
lo primero que se tiene que hacer es que al llamar la variable :TASA_INTERES,esta captura el dato por medio de una consulta a otra tabla de donde debe sacarla...esta es la consulta
select nominal_mensual into :tasa_interes from cobra.tasas_interes where vigencia = 'ACTIVA');
pero no se donde debo ubicarla ya que ya existe otro select en el botón y bueno (no se si esta bn redactada)
Lo otro que no se, es como guardar todo el select en una variable que quiero llamar V_DATOS_DEUDOR, todo el select es este (ahí puedes ver lo de la variable que anteriormente nombré (tasa_interes)
select o.oficina,
o.obligación,
o.producto,
o.fecha_vencimiento,
o.mora,
trunc(sysdate - o.fecha_vencimiento) dias_mora,
round((((o.mora_final * :tasa_interes) / 100) / 30) * (trunc(sysdate - o.fecha_vencimiento)),0) interes_mora,
round(((o.mora + (((o.mora_final * :tasa_interes) / 100) / 30) * (trunc(sysdate - o.fecha_vencimiento))) * 10) / 100,0) gastos_cobranzas,
decode(producto, 'covicheque', round((o.mora * 20) / 100, 0), 0) sanción
into :v_datos_deudor
from deudores_obligacion dob,
obligaciones o,
ciclos_contratos cc,
contratos c,
cobra.temp_liquidacion_masiva li
where dob.contrato = o.contrato and
dob.oficina = o.oficina and
dob.obligación = o.obligación and
o.contrato = cc.contrato and
o.ciclo = cc.ciclo and
o.dia_ciclo = cc.dia_ciclo and
cc.contrato = c.contrato and
o.contrato = c.contrato and
dob.contrato = c.contrato and
dob.pais = c.pais and
dob.pais = 1 and
dob.tipo_documento = li.tipo_documento and
dob.documento = li.documento and
dob.tipo_deudor = 'deudor' and
cc.grupo_gestion = 'covicheque' and
o.vigencia = 'activa' and
order by o.fecha_vencimiento asc
si muchas filas muchas columnas......ven devolviéndome me en mi select me aparece un error de carácter invalido y no veo nada raro;lo tengo asi :
select Tipo_documento, Documento, Grupo_gestion from cobra.temp_liquidacion_masiva;
Mmm
¿Cobra es tu bd?
Intenta solo con el nombre de la tabla..
Con respecto a o otro, almacenarlo en una variable, difícil pero quizás puedas usar datastores..
Un ejemplo:
http://www.lawebdelprogramador.com/foros/Power_Builder/391375-datastore.html
y no sabes lo que te dije al principio lo de guardar en una variable no todo el select si no lo de tasa interés que la tengo que sacar de otra tabla y no se como ubicar el select dentro de ese grande
Mmmm..
Imagino que te refieres a esta consulta.
select nominal_mensual into :tasa_interes from cobra.tasas_interes where vigencia = 'ACTIVA');
Podría ir en el open de la ventana, como no depende de nadie, es como una variable general.
Y el otro select mas grande donde ya usas como parámetro para calculo, podrías ponerlo dentro de un dw y declarando una variable.. ese dw lo metes en un datastore y le haces retrieve con la variable :tasa_interes .
Mira que aun creando el dw de la manera que tu dijiste no me muestra datos en modo ejecución...que me faltara para llamarlo.....
Prueba el query de dicho Dw.. en la bd, descarta que no sea temas de data..
Por el lado del power builder, imagino que se esta dando el settransobject y el retrieve, este ultimo de tener argumentos, verifica que los argumentos sean validos.
Ya lo probé y anda todo bien por ese lado....en la aplicación tengo los querys en el botón consultar.....el pequeño y el general...como hago para que me muestre el query general en el dw..esto obviamente después de dar clic sobre ese boton
No, en ejecución...que al hacer clic en "Consultar" un dw me muestre la información del query....
en este dw también debo poner el query como se hizo con el primero.? o como hago ya que este tiene variables y creo que no acepta variables dentro del Mdify datawindow..
mmm.. ya ando algo mareado..
1ro. Tiene 2 dw.
2do. El primer dw tiene como consulta algo como esto:
Select Doc, tipo_doc , grupo from tabla1 ;
3ro el 2do dw, tiene un query que lo usas básicamente para calculo.. o me equivoco.. donde tienes un argumento
"tasa_interes", que sirve para llevar a cabo los calculos.
¿Esto es asi?
Por otro lado. Si deseas ver el query de un dw en tiempo de ejecucion. Lo q hago en mi caso particular es mandar un messsagebox con lo siguiente
dw_1.GetSQLSelect()
ponlo en un boton ..
Messagebox("Query Dw", dw_1. GetSQLSelect())
me estoy haciendo entender mal......
mi problema es el segundo dw y donde poner el query grande ya que tiene variables entonces no se puede en la parte de modify ......no se si directamente en el modo diseño dando doble clic sobre el,,,no se...cuando decía mostrar query al dar clic en el botón me refería a los resultados , los datos de query grande para este segundo dw...
la variable :tasa_interes no maneja todos los cálculos solo guarda un valor .....se coloco de esa forma porque la tasa que se encuentra en una tabla de la bd es cambiante y con el query que iguala a esta variable permite que este valor si llega a cambiar en la bd ..tambn lo haga en la aplicacion
Mmmmmmmm
Crea un nuevo objeto dw de tipo grid, y coloca el sig. query
select o.oficina, o.obligación, o.producto, o.fecha_vencimiento, o.mora, trunc(sysdate - o.fecha_vencimiento) dias_mora, round((((o.mora_final * :d_tasa_interes) / 100) / 30) * (trunc(sysdate - o.fecha_vencimiento)),0) interes_mora, round(((o.mora + (((o.mora_final * :d_tasa_interes) / 100) / 30) * (trunc(sysdate - o.fecha_vencimiento))) * 10) / 100,0) gastos_cobranzas, decode(producto, 'covicheque', round((o.mora * 20) / 100, 0), 0) sanción from deudores_obligacion dob, obligaciones o, ciclos_contratos cc, contratos c, cobra.temp_liquidacion_masiva li where dob.contrato = o.contrato and dob.oficina = o.oficina and dob.obligación = o.obligación and o.contrato = cc.contrato and o.ciclo = cc.ciclo and o.dia_ciclo = cc.dia_ciclo and cc.contrato = c.contrato and o.contrato = c.contrato and dob.contrato = c.contrato and dob.pais = c.pais and dob.pais = 1 and dob.tipo_documento = li.tipo_documento and dob.documento = li.documento and dob.tipo_deudor = 'deudor' and cc.grupo_gestion = 'covicheque' and o.vigencia = 'activa' and order by o.fecha_vencimiento asc
crea también un parámetro d_tasa_interes de tipo decimal (si no mal ecuerdo)
Luego en la ventana jala dicho dw, asígnale la variable de conexión con el settransobject y luego de haber leído el valor de tu variable de la otra tabla. Hazle el retrieve
decimal tasa_interes
select nominal_mensual into :tasa_interes from cobra.tasas_interes where vigencia = 'ACTIVA');
dw_1.setransobject(Dboracle)
dw_1.retrieve(tasa_interes)
me dice que un argumento usado en el select no esta definido...supongo que es la variable...eso me sale al dar "return"
Eso tienes que inicializarlo
En el menu "design".. luego "Retrieval arguments", . ahí crea dicho parametro
ya esta esa parte...me regreso un poquito cuando dijiste que hiciera el retrieve y eso...lo hago en el open de la ventana?
y otra cosa cuando se ejecute pues el argumento me pedirá un valor verdad...cuales e supone que debe ser...si el valor es el que se encuentre en la base y lo saca con esta consulta
select nominal_mensual into :tasa_interes from cobra.tasas_interes where vigencia = 'ACTIVA');
Eso ya lo había mencionado
decimal tasa_interes
select nominal_mensual into :tasa_interes from cobra.tasas_interes where vigencia = 'ACTIVA');
dw_1.setransobject(Dboracle)
dw_1.retrieve(tasa_interes)
si a lo que me refiero es que al ejecutarse el muestra una ventana pequeña con el argumento y el valor.....si sabes de que ventana hablo?
http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/power-builder/respuestas/1818803/buscar-sueldo-desde-por-hasta-y
Esa es la ventana a la que me refiero la segunda.....que valor seria cuando se ejecute
Eso debe ser en tiempo de diseño..
Cuando terminas de elaborar el objeto dw, se ejecuta también un retrieve. Y pide el argumento.
En tiempo de ejecución, eso ya es manual con el comando retrieve. Y obviamente pasándole el parámetro leído de la tabla..
Otra cosa no se supone que estas dos variables deberían estar llamadas igualmente o me equivoco?
:d_tasa_interes <--esta es del query
tasa_interesz<--evento open
son equivalentes...
Asa_interes lo lees en el open.. y eso lo mandaras en el retrieve.. y en el query del datawindows dicho valor sera asumido por el parámetro :d_tasa_interes
Son lo mismo
al ejecutar me sale que tabla o vista no existen pero ya rectifique las tablas en la bd podrás ayudarme?
Mmmmm...
Mas parece tema de data, por ello la idea de contrastar los resultados que te da corriendo el script en la bd y a su vez lo que te arroja el retrieve del dw en tiempo de diseño, obviamente usando el mismo parámetro... en ambos casos
y tengo otra duda aun no se ha dado la indicación al botón de que muestre datos a ese dw al dar clic
como así.....
sabes que yo creo que eso debería estar en el botón que va a mostrar los datos de el dw que tiene como variable :d_tasa_interes
si porque lo que se debe ver al abrir son los datos del primer dw...y aun no se ven...solo se ven en modo diseño
Mmm imagino que el query ya lo probaste en el bd, y ejecuta sin problemas.. intenta mandar como parámetro en el retrieve un nro cualquiera, por ejemplo 1. y prueba
No
A este
select nominal_mensual into :tasa_interes from cobra.tasas_interes where vigencia = 'ACTIVA');
Coméntalo y pruebas, también en el retriebe mándale un nro cualquiera
decimal tasa_interes
select Nominal_Mensual
into :tasa_interes
from tasas_interes
where vigencia = 'ACTIVA';
dw_temp_liquidacion_masiva2.settransobject(Dboracle)
dw_temp_liquidacion_masiva2.retrieve(1)
ese fue el valor que le asigne al retrieve
y esto lo tengo el open para que me muestre en el primer dw
string datos_deudor
select Tipo_Documento, Documento, Grupo_Gestion
into :datos_deudor
from cobra.temp_liquidacion_masiva;
dw_temp_liquidacion_masiva.settransobject(Dboracle)
dw_temp_liquidacion_masiva.retrieve(datos_deudor)
En lo primero:
decimal tasa_interes
select Nominal_Mensual
into :tasa_interes
from tasas_interes
where vigencia = 'ACTIVA';
dw_temp_liquidacion_masiva2.settransobject(Dboracle)
dw_temp_liquidacion_masiva2.retrieve(1)
¿Qué error te lanza aquí?
Comenta esta parte
dw_temp_liquidacion_masiva2.settransobject(Dboracle)
dw_temp_liquidacion_masiva2.retrieve(1)
debe quedar así
decimal tasa_interes
select Nominal_Mensual
into :tasa_interes
from tasas_interes
where vigencia = 'ACTIVA';
//dw_temp_liquidacion_masiva2.settransobject(Dboracle)
//dw_temp_liquidacion_masiva2.retrieve(1)
select o.oficina,
o.obligación,
o.producto,
o.fecha_vencimiento,
o.mora,
trunc(sysdate - o.fecha_vencimiento) dias_mora,
round((((o.mora_final * :d_tasa_interes) / 100) / 30) * (trunc(sysdate - o.fecha_vencimiento)),0) interes_mora,
round(((o.mora + (((o.mora_final * :d_tasa_interes) / 100) / 30) * (trunc(sysdate - o.fecha_vencimiento))) * 10) / 100,0) gastos_cobranzas,
decode(producto, 'covicheque', round((o.mora * 20) / 100, 0), 0) sanción
from deudores_obligacion dob,
obligaciones o,
ciclos_contratos cc,
contratos c,
cobra.temp_liquidacion_masiva li
where dob.contrato = o.contrato and
dob.oficina = o.oficina and
dob.obligación = o.obligación and
o.contrato = cc.contrato and
o.ciclo = cc.ciclo and
o.dia_ciclo = cc.dia_ciclo and
cc.contrato = c.contrato and
o.contrato = c.contrato and
dob.contrato = c.contrato and
dob.país = c.país and
dob.país = 1 and
dob.tipo_documento = li.tipo_documento and
dob.documento = li.documento and
dob.tipo_deudor = 'deudor' and
cc.grupo_gestion = 'covicheque' and
o.vigencia = 'activa'
order by o.fecha_vencimiento asc
Sera esto:
cobra.temp_liquidacion_masiva
quítale lo de cobra..
Otra cosa, confírmame que ese query funcione en la bd...
- Compartir respuesta