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...

Respuesta
1

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

Los datos vienen de una tabla no de un archivo...y lo cree normal

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

Descríbeme los pasos uno a uno, y en realidad no varia tanto el procedimiento a seguir..

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

Mmmm.. según eniendo eso te devuelve una matriz de datos, filas por columnas.. varias..¿?

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

Mmmmmm... no entendí la pregunta, quieres ver el query.. esto en tiempo de diseño imagino.=?

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?

mmmm.. pruébalo.. y me comentas

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');

bueno voy a probar

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?

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?

Copia el query, y ejecutalo en la bd, reemplaza :d_tasa_interes por cualquier nro..

ya no me muestra nada.....antes si; ejecuta pero no muestra nada

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

es por las mayúsculas..

ahora si muestra datos

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

al ejecutar me sigue saliendo lo de que no existe la tabla o vista

mmmmm... al ejecutar..

En que evento..¿?

Un poco mas de detalle

lo tengo como dijimos en el open.....pero me deja abrir la ventana

Mmmm... que valor esta tomando la variable.. ¿tasa_interes?

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

no se cual valor pues el que esta en la base de datos....el resultado de la consulta pequeña

Mmm.. entonces pruébalo y comentas

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

no pues ahora me aparce que no existe la tabla al dar clic en el botón, pero esas tablas si estas

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

Igual...sale el mismo error

y en la bd corre o no ?

no sera el select donde cargas la variable, ¿tasa_interes?

hablas del select grande?

si es así, si, ese si corre asignándole un valor cualquiera

y no se entonces como debería ir el select

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

muestra el mismo error

debo aclarar que en este momento tengo este query en el botón consultar

Comparte tu query tal como esta en dicho botón

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 cuál de ellos te lanza el error?

ambos

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í?

los dos, lanzan el mismo en ejecución que no existe la vista o tabla

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)

Y prueba, comentas

Di clic al botón y no muestra error ni nada

Bien.. tu error esta en el datawindows... muestrane ek query de tu dw

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...

si ese query funciona....y así se llama la tabla con cobra y todo

cobra.temp_liquidacion_masiva ??

Con punto..¿?

Prueba hacer un dw solo de esa tabla

"select * from cobra.temp_liquidacion_masiva"

Quiero ver si ese punto no es el que genera el conflicto que tienes..

Estimada, en caso me remitas mas consultas, no podre atenderlas de inmediato hasta la noche.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas