Me sucedió que quise recuperar un dato que se encontraba en un datawindow Composite, lo hice de la siguiente manera:
ls_prome=cdw_listado.object.dw_3.object.compute_5[1]
Donde: cdw_listado es el datawindow "normal" y
dw_3 es el datawindow composite.
Espero haya sido de provecho.
Sabias que si comentas un blog estas incentivando a que cada dia haya mas información que podria ser importante para tí o los demas?... :) Espero les pueda ser de utilidad el mio.
miércoles, 21 de septiembre de 2016
sábado, 15 de febrero de 2014
Utilidades De las tablas SYS en SYBASE
* Estas son utilidades muy básicas, pero debido al poco material sobre esta herramienta en Español, lo comparto con todos Uds. espero que les sea de mucha utilidad como lo fué y es para mi.
- En la tabla Sysobjects podemos ver todas las tablas del sistema que nos puedan servir para hallar alguna otra información....
select * from sysobjects
1) Ver en que tablas hay un campo especifico
--> SELECT * FROM SYSTAB WHERE table_id in (select table_id
from SYSTABCOL
where COLUMN_NAME='nombre_del_campo'1.1 Listar campos de una tabla.
SELECT column_name FROM SYSCOLUMN WHERE table_id=
(SELECT table_id FROM SYSTABLE WHERE table_name = 'vnt_ventas_cab')
2) Ver tablas del sistema
--> select * from SYSTAB3) Funciones y palabras reservadas
--> select * from SYSCAPABILITIES
4) Todos los triggers
--> select * from SYSTRIGGERS
5) Procedimientos y Funciones
--> select * from SYSPROCEDURE
martes, 17 de julio de 2012
Setear Impresora
Si deseamos setear un dw a una impresora que no sea la predeterminada necesariamente, una opcion es utilizar.
this.Object.DataWindow.Printer = "\\IP_de_donde_tienes_instalado\Nombre_de_la_impresora"
this.print()
this.Object.DataWindow.Printer = "\\IP_de_donde_tienes_instalado\Nombre_de_la_impresora"
this.print()
jueves, 5 de julio de 2012
Contar caracteres que se va ingresando a un campo
Esta funcionalidad nos sirve para ir contando los caracteres que ingresamos en un campo, algo similar a lo que nos ofrecen los telefonos móviles cuando estamos escribiendo un mensaje de texto.
Primeramente creamos un objeto tipo text, en mi caso lo llamo t_contar y le asigno un valor 0.
caracteres ingresados*/
if this.getcolumnname() = 'comentario' then
if this.object.t_contar.text='0' then this.TriggerEvent('ue_lencomentarios')
/*si presionamos teclas de arriba, abajo, costados, no hacer nada*/
if KeyDown(KeyLeftArrow!) or KeyDown(KeyUpArrow!) or KeyDown(KeyRightArrow!) or KeyDown(KeyDownArrow!) then return
If KeyDown(KeyBack!) or KeyDown(KeyDelete!) then //si borramos caracteres, restamos sino sumamos
this.object.t_contar.text=string(long(this.object.t_contar.text)-1)
else
this.object.t_contar.text=string(long(this.object.t_contar.text)+1)
end if
if long(this.object.t_contar.text)=290 then messagebox( "Atención", "Esta llegando al límite del texto!",Exclamation!)
end if
Primeramente creamos un objeto tipo text, en mi caso lo llamo t_contar y le asigno un valor 0.
Creo un Evento que lo llamo ue_lencampo, donde cuento cuantos carateres tiene el campo, no hace falta que el evento reciba parametros y tampoco que lo retorne, yo lo hice en un evento nuevo, uds. ya veran si crean o lo hacen en alguno que ya lo tengan, todo depende de la aplicabilidad que se le dará.
Luego creamos un Evento, al cual yo le llamo ue_key con las siguientes caracteristicas y en el colocamos el scrip que continua
/*trabaja en conjunto con el evento ue_lencomentarios para ir mostrando cantidad de caracteres ingresados*/
if this.getcolumnname() = 'comentario' then
if this.object.t_contar.text='0' then this.TriggerEvent('ue_lencomentarios')
/*si presionamos teclas de arriba, abajo, costados, no hacer nada*/
if KeyDown(KeyLeftArrow!) or KeyDown(KeyUpArrow!) or KeyDown(KeyRightArrow!) or KeyDown(KeyDownArrow!) then return
If KeyDown(KeyBack!) or KeyDown(KeyDelete!) then //si borramos caracteres, restamos sino sumamos
this.object.t_contar.text=string(long(this.object.t_contar.text)-1)
else
this.object.t_contar.text=string(long(this.object.t_contar.text)+1)
end if
if long(this.object.t_contar.text)=290 then messagebox( "Atención", "Esta llegando al límite del texto!",Exclamation!)
end if
*No olvides alimentarme con un comentario y/o calificación.
viernes, 29 de junio de 2012
Verificar la Existencia de una carpera y/o archivo
Scrip para Verificar la existencia de un directorio
IF FileExists("C:\PDF\carta_oferta.pdf") THEN
ls_ruta='C:\PDF\carta_oferta.pdf'
else
messagebox( "Atención ",'NO EXISTE C:\PDF\carta_oferta.pdf~n~r' +&
'NO SE ADJUNTARA EL ARCHIVO!!!')
end if
IF FileExists("C:\PDF\carta_oferta.pdf") THEN
ls_ruta='C:\PDF\carta_oferta.pdf'
else
messagebox( "Atención ",'NO EXISTE C:\PDF\carta_oferta.pdf~n~r' +&
'NO SE ADJUNTARA EL ARCHIVO!!!')
end if
Abrir window con varios parametros - PowerBuilder
Como podriamos abrir una ventana enviandole varios parametros, he aqui una solución que me sirvió mucho. El ejemplo esta basado en mi experiencia
1. Creamos una structura con los parametros que vamos a enviar y recibir.
A mi structura lo llamé st_parametros_email
2. Luego vamos a crear el Scrip desde donde enviaremos los parametros.
En mi caso el el Evento Clicked de un boton.
w_frame lw_frame
w_sheet lw_sheet
st_parametros_email lstr_parm //Aqui declaramos el parametro como
//la structura que creamos anteriormente
string ll_mail, ls_ruta, ls_parametros
ll_mail = tabpage_1.dw_1.object.personas_mail[1]
ls_ruta='C:\PDF\carta_oferta.pdf'
//le asignas los valores para la structura
lstr_parm.st_para =ll_mail
lstr_parm.st_adjunto =ls_ruta
lstr_parm.st_asunto ='Presupuesto'
lstr_parm.st_cuerpo = 'Sr./es Cliente/s.: Adjuntamos Presupuesto'
//aqui utilizo solo funciones del PFC, si no trabajas con PFC solo haz el
//clasico openwithparm(w_miventana,lstr_parm) y ya....
if gnv_appmanager.of_getframe( lw_frame ) <> 1 then return
opensheetwithparm(lw_sheet,lstr_parm,"w_send_mail",lw_frame,2,original! )
3. Y por ultimo este scrip lo ponemos en el evento OPEN de la ventana que recibirá los parametros.
st_parametros_email lstr_parmr
lstr_parmr = Message.PowerObjectParm
//aginar los valores a cajas
Sle_to.text = lstr_parmr.st_para
lb_archivos.Additem(string( lstr_parmr.st_adjunto))
sle_sub.text = lstr_parmr.st_asunto
mle_mail.text = lstr_parmr.st_cuerpo
1. Creamos una structura con los parametros que vamos a enviar y recibir.
A mi structura lo llamé st_parametros_email
En mi caso el el Evento Clicked de un boton.
w_frame lw_frame
w_sheet lw_sheet
st_parametros_email lstr_parm //Aqui declaramos el parametro como
//la structura que creamos anteriormente
string ll_mail, ls_ruta, ls_parametros
ll_mail = tabpage_1.dw_1.object.personas_mail[1]
ls_ruta='C:\PDF\carta_oferta.pdf'
//le asignas los valores para la structura
lstr_parm.st_para =ll_mail
lstr_parm.st_adjunto =ls_ruta
lstr_parm.st_asunto ='Presupuesto'
lstr_parm.st_cuerpo = 'Sr./es Cliente/s.: Adjuntamos Presupuesto'
//aqui utilizo solo funciones del PFC, si no trabajas con PFC solo haz el
//clasico openwithparm(w_miventana,lstr_parm) y ya....
if gnv_appmanager.of_getframe( lw_frame ) <> 1 then return
opensheetwithparm(lw_sheet,lstr_parm,"w_send_mail",lw_frame,2,original! )
3. Y por ultimo este scrip lo ponemos en el evento OPEN de la ventana que recibirá los parametros.
st_parametros_email lstr_parmr
lstr_parmr = Message.PowerObjectParm
//aginar los valores a cajas
Sle_to.text = lstr_parmr.st_para
lb_archivos.Additem(string( lstr_parmr.st_adjunto))
sle_sub.text = lstr_parmr.st_asunto
mle_mail.text = lstr_parmr.st_cuerpo
Scrip PowerBuilder para Guardar directo a PDF
Este scrip nos permite guardar en PDF un reporte, ya que con el dw.saveas() si bien figura en la lista el formato, no guarda, o guarda pero al querer abrirlo nos da un Error.
Como primer paso debes tener Instalado una impresora Virtual, podria se el PDFCreator, cuando ya lo tengas instalado, renombralo con "PDF" (en el scrip llamaremos a esa impresora, si lo nombras de otra manera no lo encontrará), luego instalas el gs871w32.exe para S.O. de 32bits, y el gs871w64.exe para S.O. de 64bits, lo puedes descargar de algun sitio de internet, mas adelante sugeriré el sitio de donde yo lo descargué.
Y a continuación el Scrip, que yo lo puse en el evento clicked de un boton, cada uno verá donde ubicarlo de acuerdo a sus necesidades.
//por fativilla 27.06.2012 \m/
string ls_arc_pdf
CreateDirectory(GetCurrentDirectory( ) +'\PDF\') //SI no existe la carpera lo crea en el directorio del app
ls_arc_pdf= GetCurrentDirectory( ) +'\PDF\carta_oferta.pdf'
tabpage_5.dw_10.Object.DataWindow.Export.PDF.Method = Distill!
tabpage_5.dw_10.Object.DataWindow.Printer = "PDF"//PDF Nombre de la impresora virtual
tabpage_5.dw_10.Object.DataWindow.Export.PDF.Distill.CustomPostScript="YES" // Permitir Postscript
if tabpage_5.dw_10.SaveAs(ls_arc_pdf,PDF!,true) <> 1 then
messagebox("Error","Hubo un error al generar el archivo PDF~n~r"+&
"1. Puede que no haya instalado gs871w32.exe~n~r"+&
"2. Puede que no tenga una impresora virtual con el nombre 'PDF'~n~r", StopSign!)
else
messagebox("Atención","El archivo se generó con EXITO!!~n~r"+&
ls_arc_pdf)
end if
* Sitio de donde puedes descargar el gs871w32.exe
http://es.sourceforge.jp/projects/sfnet_ghostscript/downloads/GPL%20Ghostscript/8.71/gs871w32.exe/
Como primer paso debes tener Instalado una impresora Virtual, podria se el PDFCreator, cuando ya lo tengas instalado, renombralo con "PDF" (en el scrip llamaremos a esa impresora, si lo nombras de otra manera no lo encontrará), luego instalas el gs871w32.exe para S.O. de 32bits, y el gs871w64.exe para S.O. de 64bits, lo puedes descargar de algun sitio de internet, mas adelante sugeriré el sitio de donde yo lo descargué.
Y a continuación el Scrip, que yo lo puse en el evento clicked de un boton, cada uno verá donde ubicarlo de acuerdo a sus necesidades.
//por fativilla 27.06.2012 \m/
string ls_arc_pdf
CreateDirectory(GetCurrentDirectory( ) +'\PDF\') //SI no existe la carpera lo crea en el directorio del app
ls_arc_pdf= GetCurrentDirectory( ) +'\PDF\carta_oferta.pdf'
tabpage_5.dw_10.Object.DataWindow.Export.PDF.Method = Distill!
tabpage_5.dw_10.Object.DataWindow.Printer = "PDF"//PDF Nombre de la impresora virtual
tabpage_5.dw_10.Object.DataWindow.Export.PDF.Distill.CustomPostScript="YES" // Permitir Postscript
if tabpage_5.dw_10.SaveAs(ls_arc_pdf,PDF!,true) <> 1 then
messagebox("Error","Hubo un error al generar el archivo PDF~n~r"+&
"1. Puede que no haya instalado gs871w32.exe~n~r"+&
"2. Puede que no tenga una impresora virtual con el nombre 'PDF'~n~r", StopSign!)
else
messagebox("Atención","El archivo se generó con EXITO!!~n~r"+&
ls_arc_pdf)
end if
* Sitio de donde puedes descargar el gs871w32.exe
http://es.sourceforge.jp/projects/sfnet_ghostscript/downloads/GPL%20Ghostscript/8.71/gs871w32.exe/
Suscribirse a:
Entradas (Atom)