Manual Power Builder
Manual Power Builder
Manual Power Builder
POWERBUILDER 9.0
CONTENIDO
Template Application .- es cuando se abre una nueva aplicación pero con una plantilla
de trabajo
Existing Application .- Para abrir una aplicación que se encuentra en otra versión del
power.
CAPITULO DE FUNCIONES
DELETEITEM()
Borra un item desde una lista de valores
Syntax
objectname.DeleteItem ( index )
Controls
ListBox, DropDownListBox, PictureListBox, and DropDownPictureListBox controls
Ejemplo:
Esta sentencia borra el primer item seleccionado en Lb_productos
ADDITEM()
Adiciona nuevos items para una lista de valores
Syntax
objectname.AddItem ( item )
Controls
ListBox and DropDownListBox controls
Ejemplo:
integer Xrow // Variable de tipo entero
integer XIndex
XIndex = lb_software.FindItem("Power Builder", 1)
En este ejemplo el valor de index será 6
INSERTITEM
Inserta un item dentro de una lista de valores
Syntax
objectname.InsertItem (item, index)
Controls
ListBox and DropDownListBox controls
SELECTEDTEXT
Obtiene el texto seleccionado en un control editable
Syntax
editname.SelectedText ( )
Controls
DataWindow, EditMask, MultiLineEdit, SingleLineEdit, RichTextEdit,
DropDownListBox, and DropDownPictureListBox controls
SELECTITEM
Encuentra y resalta un item dentro de una lista.
Controls
ListBox, DropDownListBox, PictureListBox, and DropDownPictureListBox controls
Syntax
a) objectname.SelectItem (item, index)
ejemplo:
integer XIndex
XIndex = lb_software.SelectItem("Power Builder", 2) // si encuentra el texto lo resalta y si no
// el valor devuelto es 0
b) lobjectname.SelectItem (itemnumber)
Resalta el item especificado en la lista, si el valor es cero no se selecciona ningún ítem
Syntax
objectname.SelectItem (itemnumber)
Controls
ListBox, DropDownListBox, PictureListBox, and DropDownPictureListBox controls
ejemplo
ddlb_software.Selecitem(0) // ningún ítem es seleccionado
lb_software.SelectItem(5) // resalta el item 5
TOTALITEMS
Determina el número total de items
Syntax
listcontrolname.TotalItems ( )
Controls
ListBox, DropDownListBox, PictureListBox, DropDownPictureListBox, and ListView
controls
STATE
Determina si un elemento de la lista esta resaltada.
Syntax
Listboxname.State ( index )
Controls
ListBox and PictureListBox controls
ejemplo:
SETSTATE
Resalta un item dentro de una lista solo es aplicable cuando esta lista es de múltiple
selección es decir propiedad Multiselect = TRUE
Syntax
objectname.SetState (index, state)
Controls
ListBox and PictureListBox controls
ejemplo
lb_software.SetState(6, TRUE)
FUNCIONES DE CADENA.
ASC Obtiene el código ASCII correspondiente, de un carácter de tipo cadena.
ejemplo :
Asc( ) // retorna 65
CHAR Retorna el carácter correspondiente al código ASCII
String XS
XS=Char(42) // retorna *
FILL retorna una cadena con una longitud determinada del carácter especificado.
ejemplo
Fill( ,5) // *****
LEFT Retorna un número especificado de caracteres comenzado por la izquierda
Ejemplo:
String Xcad
Xcad = Left( Claudia ,3) // Cla
LEFTTrim Retorna una copia de una cadena sin los espacios en blanco del lado
izquierdo.
Ejemplo:
String Xcad
Xcad = LeftTrim( Claudia ) // Retorna Claudia
POS retorna la posición donde comienza una cadena dentro de otra cadena .
Ejemplo:
Integer Xpos
Xpos = Pos( Power Builder Bu ) // Retorna 7
FUNCIONES FECHA
DAY Retorna el día de una fecha.
Ejemplo:
Dia = String(Day(2001-04-21)) // retorna 21, convertimos el dato de tipo
númerico a
cadena, con la funcion string.
Ejemplo
Hora = String(now(), HH:mm:ss ) // string(dato,tipo de salida del dato), en este
caso es
hora:minuto:segundo.
FUNCIONES NUMÉRICAS
ABS obtiene el valor absoluto de un número
Ejemplo:
Num= (abs(-34) // retorna 34
CEILING Obtiene el menor número entero que es menor o igual al número especificado
Ejemplo: Donde Deci es una variable de tipo decimal
Deci = String(Ceiling(-4.8)) // retorna 4
Ejemplo:
Num = Rand(10) // devuelve un número comprendido entre el 1 a 10
Aplicaciones
DFU (Funciones Defindas por el Usuario).
Pueden ser a nivel de Ventana o a nivel de toda la aplicación
Em_1 control de
edicion
Mle_1 Contol de
múltiple linea
F_mil F_mill
F_centena
Letra
Letra
Devuelve en letras:
Trescientos cuarenta y cimco
Declare Instancia
String vec1[]={"Uno","dos","Tres","cuatro","cinco","seis","siete","ocho","nueve"}
String vec2[]={"Once","doce","trece","catorce","quince","dieciseis", "diecisiete", &
"dieciocho","diecinueve"}
String vec3[]={"Diez","viente","trienta","cuarenta","cincuenta","sesenta", &
"setenta","ochenta","noventa"}
String vec4[]={"Ciento","Doscientos","trescientos","cuatroscientos","quinientos", &
"seiscientos", "setecientos","ochocientos","novecientos"}
a b c d f g
a) Tipo de acceso a la función.
b) Tipo de dato de retorno.
c) Nombre de la función.
d) Tipo de datos que se va a referenciar, en este caso será un valor.
e) Tipo de dato del valor.
String cad1,cad2
Int c,res,d,uni
c=num/100
res= mod(num,100)
if c>0 Then
if c=1 and res=0 then cad1="Cien" else cad1=vec4[c]
end if
choose case res
case 1 to 9
cad2=vec1[res]
case 11 to 19
cad2=vec2[res - 10]
case 10, is >=20
d=res/10
uni=mod(res,10)
if uni=0 then
cad2=vec3[d]
else
cad2=vec3[d]+ " y "+ vec1[uni]
end if
end choose
return cad1 + cad2
Funcion miles
String cad1,cad2
Int res,mil
mil=num/1000
res= mod(num,1000)
if mil>0 then
if mil=1 then cad1="Mil " else Cad1=f_centena(mil)+" Mil"
end if
if res>0 Then
cad2=f_centena(res)
end if
return cad1 + " " + cad2
Estructura de un Datawindows
Edit Control
Un objeto DataWindow debe ser insertado con una ventana regular, en todo diseño de un
DataWindow forman parte dos objetos.
1.- DataWindow Object.- que es diseñado con el DataWindow Painter.
2.- DataWindow Control.- Es un control donde se insertará el DataWindows Object.
SetTransObject
Hace que un control DataWindow use un objeto de transacción especificado por el
programador. El objeto de transacción proporciona la información nesecesaria para
comunicarse con la Base de Datos. Retorna -1 si ha ocurrido un error.
InsertRow
Inserta una fila en un DataWindow, Si alguna columna tiene valores por defecto, La fila es
inicializada con estos valores, retorna el número de la fila que se ha añadido, retorna -1
si ha ocurrido un error.
Sintaxis Dwn.InsertRow(fila)
Argument Descripcion
Dwn El nombre del control DataWindow en el cual se desea insertar una
fila.
Fila Un entero Largo (long) que identifica la fila antes de la cual desea
insertar una fila nueva. Si el valor es cero insertará al final de la
tabla.
Ejemplo:
DwnSoftware.InsertRow(0)
Retrieve()
Recupera todas las filas de una tabla de la BDD en un control DataWindow, Si incluyen
argumentos, estos son usados por los argumentos de recuperacion de la sentencia SQL
SELECT del objeto DataWindow. Retorna el número de filas recuperadas, -1 si ocurre un
error.
SetRowFocusIndicator
Especifica el indicador visual que identifica la fila actual en un control DataWindow.
SelectRow
Selecciona la fila especificada en el control de un DataWindows.
SetItem
Establece el valor en una fila y columna especificada, un valor dentro del datawindow,
retorna -1 si ocurre un error.
Sintaxis DwnSoftware.Setitem (Fila, columna/campo, valor)
Ejemplo:
Dwn.SetItem(5, "sueldo",670)
También en vez del nombre de campo, puede ser el número de campo de acuerdo como
ha sido seleccionado en el objeto DataWindow.
GetItemString
Obtiene datos de tipo cadena de un buffer especificado de un control DataWindow.
Ejemlo: Capturar en variables, sueldo del empleado, su edad y fecha de nacimiento del
empleado, cuya posición se encuentre en la fila número 3.
Int edad
Dec Sbas
Date Fenac
Edad= DwnEmpleado.GetItemNumber(3,"emp_Edad")
Sbas= DwnEmpleado.GetItemDecimal(3, "emp_Sbas")
Fenac=DwnEmpleado.GetItemDate(3,"emp_Fenac")
Gettext
Obtiene el valor de un control de edicion en la fila y columna actuales, antes que este sea
aceptado.
Sintaxis dwn.Gettext ()
Por ejemplo si este radio button se encuentra dentro del DataWindow, y al seleccionar
una de estas opciones se desea saber su valor seleccionado basta emplear:
String Tmoneda
Tmoneda = DwnSalario.Gettext()
Setsort
Especifica, el criterio de ordenamiento para un DataWindow, retorna 1 si tuvo éxito y -1 si
se encontro un error.
Sintaxis Dwn.SetSort (campo1 [A|D])
Ejemplo:
DwnEmpleado.setsort()
Dwn.Sort()
GetRow
Retorna el número de la fila actual de un DataWindow, como un valor Long,
Retorna 0 si no hay fila activa y -1 si se ha producido un error grave.
Sintaxis Dwn.GetRow ()
SetRow
Establece la fila deseada, mueve el cursor a la fila especificada, pero no hace Scroll en el
DataWindow.
Sintaxis Dwn.SetRow (Fila)
ScrollToRow
Hace un Scroll en un DataWindow, hasta alcanzar la fila especificada.
ScrollToRow cambia la fila actual pero no la columna actual. Retorna 1 si hubo éxito, -1 en
caso contrario. Scrolltorow no ilumina la fila a la cual se hace scroll.
Sintaxis Dwn.ScrolltoRow(fila)
Si la fila toma un valor mayor que el número total de la fila, se hace scroll a la última fila.
RowCount
Obtiene el número de filas que se encuentran disponibles en un DataWindow
Sintaxis Dwn.RowCount()
ScrollToRow
Causa que el control se deslice a la fila especificada, cambiando la fila actual, a donde se
le indique.
Sintaxis Dwn.Scrolltorow(fila)
ScrollToPriorRow
Se desliza a la fila previa, sin cambiar la columna activa
Sintaxis Dwn.ScrollPriorRow(fila)
ScrollNextRow
Se desliza a la siguiente fila.
Sintaxis Dn.ScrollNextRow(fila)
DeleteRow
Suprime la fila especificada del control DataWindow, se actualiza directamente la tabla
enlazada al control.
Sintaxis Dwn.DeleteRow(fila)
Si la fila es igual a cero, elimina la fila activa donde se encuentra el puntero, cada vez que
se emplee esta sentencia, se tiene que actualizar el DataWindow ejemplo:
Dwn.deleteRow(8) // elimina la fila número 8
Dwn.Update() // actualiza la base de datos enlazada
DeletedCount
Retorna el número de filas que hayan sido suprimidas desde el control DataWindow pero
que todavia no hayan sido actualizadas en la tabla de la BDD asociada.
Sintaxis Dwn.DeletedCount()
Ejemplo:
Long Nf
Nf=Dwn.DeletedCount()
Update
Se envia a la base de datos todas las inserciones, eliminaciones y actualizaciones del
control DataWindow, retorna 1 si tuvo éxito, -1 si ocurrio un error.
Sintaxis Dwn.Update()
Pasos 1.- La BDD VENTA.DB puede estar en cualquier motor de Base de dato,
para este caso se hace uso del AnyWhere del SYSBASE (entorno del
PowerBuilder)
Estructura:
Vendedor:
Codv Char 4 Null(no)
Nomv varchar 30
Sbas Numeric 8,2
Factura
Nfac char 6
Codv char 4
Impor Numeric 8,2
Tipov char 1
TABLAS
FACTURA VENDEDOR
Presentación Descripción
Composite Utiliza como presentación, un reporte previamente creado.
Freeform La presentación es libre, cada campo se muestra en una línea
distinta. Muy utilizado para el ingreso de datos.
Graph Diseña un gráfico dependiendo de una consulta, esta debe
contener datos relacionados.
Grid Diseña una malla de datos en forma columnada, y cada
columna con una justificación completa.
Group Diseña listado por agrupación de campos. Muy utilizado para
reportes de resumen de información.
Label El diseño es de etiquetas, donde Ud. podrá elegir el tipo de
etiqueta de las prediseñadas, en papel continuo o separado, y
otras opciones.
Rich Text Permite definir una carta con combinación de campos del
Origen de Datos fijado. Se pueden utilizar todas las
características del formato de texto RTF.
Tabular Presenta el Origen de Datos en forma columnada pero sin
ajuste total. Permite una mayor libertad en el diseño.
El modo de trabajo define como se trabajara con el Origen de Datos. Existen 5 tipos de
modos de trabajo.
Modo Descripción
Quick Select Nos presenta las tablas en forma gráfica, y solo permite las
sentencias ordinarias de SQL (Sort y Criteria). La primera para
sentencia sirve para poder ordenar por el campo específico y la
segunda sentencia para indicar registros a mostrar dependiendo
de un valor condicional (Ejemplo: <39)
Sql Select Presenta las tablas en forma gráfica, y permite trabajar con
todas las características de Sql estándar (Sort, Group, Having,
Compute y Where, entre otros)
Query El Origen de Datos es una consulta definida previamente en el
Area de Trabajo Query; esta consulta queda almacenada como
un objeto de PowerBuilder; Ud. debe seleccionar la consulta que
desee utilizar como Origen de Datos de este DataWindows.
External El Origen de Datos no esta relacionado con ninguna Tabla. Ud.
debe definir los campos que interactúan (nombre, tipo y tamaño)
Utilice los botones Add para añadir un nuevo campo al final de
los ya existentes, el botón Insert le permitirá insertar un campo
entre otros y el botón Delete le permitirá eliminar el campo
actual.
Stored El Origen de Datos es un procedimiento que ha sido
Procedure almacenado en la Base de Datos. Seleccione uno si lo ha
creado, o créelo previamente.
Seleccione las tablas a usar y precione el boton Open, de inmediato apareceran lasa
tablas seleccionadas
Color de fondo
del DW
Color de las
Cabeceras del DW
Estilo de las
cabecera del DW
Diseño
Propiedades
Preview
Columns Specification
ddplb_1
Dw_1
Dw_2
Propiedades complementarias al
control DataWindow.
end if
end if
STRING cad
r=dw_1.getrow()
dw_1.selectrow(0,false)
dw_1.selectrow(r,true)
// Profile Venta
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Connectstring='DSN=venta'"
//nos conectamos con la Base de Datos
connect;
//preguntamos si ha ocurrido un error en la conexión
If Sqlca.Sqlcode<>0 then
Messagebox ("Error de Conexión",Sqlca.SqlErrText)
Halt
else
//abrimos la ventana 1 de nuestro proyecto
open(ventana01)
end if
Clic en el
siguiente icono
y obtendremos
la siguiente
ventana
Paso 3.- Del menú de opciones seleccionar Design, luego seleccionar Retrieval
Arguments.
Paso 4.- En la opción Where seleccionar el campo para realizar la condición con la
variable definida anteriormente, la variable debe ser precedida por dos puntos(:Var)
Observe el grafico
1 2 3
Para ver como esta saliendo el diseño puede comprobarlo mediante la opción Row del
menú principal y seleccionando Retrieve, para ello le pedirá ingresar un código de
vendedor.
Paso 6.- Completar los campos de comisión, comisión total y pago total a través de las
opciones del menú principal: Insert – submenu Control – opcion Compute Field.
Al seleccionar esta opción Computed Field , llevar el cursor en la posición donde desea
colocar el calculo de la comisión (Detail), luego mostrara la ventana de Modify Expresión
donde colocara la expresión para la comisión , para facilitar la edición de esta expresión
haga un Clic en los campos mostrados en Columns.
Paso 7.- Cambie de nombre en name (compute_1 nombre por defecto, por Comision)
Ampliar la sección resumen, para colocar el total del campo calculado comisión y pago
total.
Para la suma del comisión marcar el campo calculado comisión, similar al Paso 6 Insert
Control- Elegir Sum, entonces autómicamente mostrara el campo sumado en name
colocar el nombre (Tcom).
Para el calculo pago total, de forma similar seleccionar el paso anterior seleccionar
Insert-Control-Computed Field y editar la siguiente expresión.
// Profile Venta
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Connectstring='DSN=venta"
connect;
Power Builder 9.0
-44-
If Sqlca.Sqlcode<>0 then
Messagebox ("Error de Conexión",Sqlca.SqlErrText)
Halt
else
open(ventana01)
end if
Paso 2.- Crear el DataWindow estilo FreeForm de la tabla vendedor y realizar las
validaciones respectivas en cada campo, aunque es opcional dependiendo del proyecto
que este elaborando.
5. Ademas dar formato de fecha y formato monetario a los campos: fecha de ingreso
y sueldo básico; en la misma propiedad Edit pero seleccionado EDIT MASK en
Style Type.
// Profile Venta
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Connectstring='DSN=venta"
connect;
If Sqlca.Sqlcode<>0 then
Messagebox ("Error de Conexión",Sqlca.SqlErrText)
Halt
else
open(ventana02)
end if
cb_graba.enabled=false
cb_recupera.enabled=false
dw_1.setfilter("")
dw_1.filter()
dw_1.setsort("#1 A")
dw_1.sort()
dw_1.retrieve()
cb_graba.enabled=false
if ventana02.dw_1.rowcount()=0 then
ventana02.dw_1.setfilter("")
ventana02.dw_1.filter()
ventana02.dw_1.setsort("#1 A")
ventana02.dw_1.sort( )
ventana02.dw_1.scrolltorow(nf)
messagebox("Error","Código no existe" + string(nf))
else
close(ventana03)
ventana02.cb_graba.enabled=true
ventana02.dw_1.setfocus()
ventana02.dw_1.setcolumn(1)
end if
Cb_Nueva Clicked
int f
select max(Nfac) into :xfac from fac_cab;
if isnull(xfac) then
xfac=0
end if
xfac++
dw_1.reset()
f=dw_fac.insertrow(0)
dw_fac.scrolltorow(f)
dw_fac.setitem(f,1,string(xfac,"000000"))
dw_fac.setitem(f,3,today())
dw_fac.setcolumn(2)
dw_1.setfocus()
if keydown(keyf2!) then
int f
f=dw_1.insertrow(0)
dw_1.scrolltorow(f)
dw_1.setfocus()
int m
m=dw_1.getitemnumber(1,"maxitem")
if isnull(m) then
m=0
end if
m++
dw_1.setitem(f,"item",m)
dw_1.setitem(f,"nfac",string(xfac,"000000"))
open(w_pro)
end if
Cb_Borrar Clicked
//Borrar Item
int fila
fila=dw_1.getrow()
if fila>0 then
dw_1.deleterow(fila)
dw_1.update()
end if
Cb_Totaliza Clicked
dec tot,igv,neto
tot=dw_1.getitemnumber(1,"totgen")
igv=tot*0.18 ; neto=tot+igv
st_venta.text=string(tot,"##,###.00")
st_igv.text=string(igv,"#,###.00")
st_neto.text=string(neto,"###,###.00")
Cb_Graba Clicked
//Compleatar los campos para La tabla Fac_Cabe
dw_fac.setitem(dw_fac.getrow(),"impor",dec(st_venta.text))
dw_fac.setitem(dw_fac.getrow(),"igv",dec(st_igv.text))
dw_fac.setitem(dw_fac.getrow(),"neto",dec(st_neto.text))
int r
r=dw_fac.Update()
if r=1 then
commit;
else
Rollback;
end if
// Grabacion del detalle Factura
r=dw_1.update()
if r=1 then
Commit;
Else
Rollback;
End if
// Actualizar La tabla Stock
int Fila,xcan
String Xcod
For Fila=1 to Dw_1.Rowcount()
Xcod=Dw_1.GetItemString(fila,"codpro")
Xcan=Dw_1.GetItemNumber(Fila,"can")
Update Fac_deta
Set Stock = Stock - :Xcan Where Codpro= :Xcod;
Next
Commit;
Dw_pro Open
dw_1.settransobject(sqlca)
int r
dec precio
if key=keyenter! then
r=dw_1.getrow()
cad=dw_1.getitemstring(r,1)
precio=dw_1.getitemNUmber(r,"puni")
W_factura.dw_1.setitem(W_factura.dw_1.getrow(),"codpro",cad)
W_factura.dw_1.setitem(W_factura.dw_1.getrow(),"puni",precio)
W_factura.dw_1.setcolumn(4)
close(parent)
end if
if key=keyescape! then
dw_1.setfilter("")
dw_1.filter()
sle_1.text=""
sle_1.setfocus()
end if
Sle_1 Modified
string criterio
criterio=" upper(Despro) Like '"+upper(sle_1.text)+"%'"
dw_1.setfilter(criterio)
dw_1.filter()
dw_1.setfocus()
dw_1.selectrow(1,true)
Aplicacion
Un Objeto DataWindow
Data Source SQL Select
Style Tabular
Nombre Dw_Notas
Paso 2.- En name seleccione cualquier nombre de variable de tipo igual al campo
utilizado como argumento.
Paso 3.- En la Ficha Where se debe especificar, la relacion entre el campo y la variable
Paso 4.- Luego especifique La creacion del Obejeto Estructura, utilizando (Structure
painter) del Menu Principal(Power Bar)
Paso 6.- Codificación de eventos para obtener la lista de los alumnos por curso.
Se realiza a traves de un boton de la ventana Cursos VenCursos (Mantenimiento de
cursos).
La ventana VenAlumnos debe recibir el parametro (código del curso), que se envia desde
la Ventana VenCursos.
Paso 7
Script -Clicked for Cb_alumnos (W_cursos)
long nf
S_curso Origen //asignamos una variable llamada origen de tipo S_curso
nf=dw_1.getrow()
origen.codcur=dw_1.getitemstring(nf,"cur_cod")
origen.nomcur=dw_1.getitemstring(nf,"cur_des")
openwithparm (VenAlumnos,origen)
paso 8
Script -Open for (VenAlumnos)
S_curso Destino
Destino=message.powerobjectparm
vi_codcur=Destino.codcur
this.title=vi_codcur + " - " + Destino.nomcur
cb_graba.enabled=false
dw_1.SETTRANSOBJECT(sqlca)
dw_1.retrieve(vi_codcur)
Dw_Alumnos.SetRowFocusIndicator(Hand!)
dw_1.scrolltorow(1)
end if
dec nota,n1,n2,n3,n4,pro
dw_1.modify("alu_pro.color='0~t if(alu_pro>=11,RGB(0,0,255),RGB(255,0,0))'")
if pos("alu_nota1,alu_nota2,alu_nota3,alu_nota4",dwo.name)>0 then
// dwo.name es equivalente a GetColumnName() devuelve el nombre
pro=(n1+n2+n3+n4)/4
dw_1.setitem(row,"alu_pro",pro)
Cb_graba.enabled=true
end if
end if
2.1 Tener una ventana principal (VMain) con las siguientes opciones:
2.1.1 Mantenimiento de la Tabla Clientes (VManClientes)
2.1.2 Mantenimiento de la tabla Productos (VManProductos)
2.1.3 Consulta de Facturas.
3.- En la consulta de Facturas por Clientes, se debe tener una ventana con los
siguientes controles DataWindow: (VConFacturas)
3.1 DW_Clientes (estilo Grid), donde solo debe mostrar los campos
(Cod_cli,Nom_Cli,Tel,Ruc)
3.2 Dw_Facturas (estilo Tabular), donde debe mostrar las columnas (Num_fact,
Fecha, Subtotal, Igv, total).
3.3 En esta última ventana debe solo extraer las facturas de un cliente seleccionado,
Obteniendo al final un resumen (suma del campo total) para ver cual es su total
general.
3.4 La ventana (VConFacturas) tendra un boton Detalle donde permite visualizar en
otra ventana( VFacDetalle) el detalle de la factura
3.5 Ventana (VFacDetalle) debe mostrar todos los campos de la tabla detalle factura
con el campo descripcion del producto (tabla producto).
nsal=dw_1.getitemnumber(r,"saldo")
dw_2.settransobject(sqlca)
dw_2.retrieve(cad)
/*
if nf>0 then
xnro=integer(dw_2.getitemstring(1,"maximo"))+1
else
xnro=1
end if
*/
select count(numcta) into :xnro
from movimiento
where numcta=:cad;
if sqlca.sqlcode=0 then
xnro++
end if
fila=dw_2.insertrow(0)
dw_2.scrolltorow(fila)
dw_2.setitem(fila,"numcta",cad)
dw_2.setitem(fila,"nummov",xnro)
dw_2.setcolumn(3)
dw_2.setfocus()
end if
string nomcol
int fila
dec mon
char tp
fila=this.getrow()
nomcol=this.getcolumnname()
mon=this.getitemnumber(fila,"monto")
choose case Lower(nomcol)
case "tipoopr"
//tp=trim(this.getitemstring(fila,"topr")) //valor obtenido en el datawindow
tp=this.gettext() // valor que se da en el edit control
nsal=dw_1.getitemnumber(dw_1.getrow(),"saldo")
if upper(tp)="D" then
nsal=nsal + mon
else
nsal=nsal - mon
end if
this.object.tsaldo.text=string(round(nsal,2))
end choose
int r
string cad
cad=dw_1.getitemstring(dw_1.getrow(),"numcta")
r=dw_2.update()
if r=1 then
commit;
else
rollback;
end if
// borrar el contenido de los control data window
dw_2.reset()
dw_1.reset()
Tablas:
Realizar:
1.- Colocar las claves principales y foráneas para cada tabla, cuando relacione cada tabla
conformar la opcion:
• Delete any Dependent Rows (CASCADE), por ejmplo cuando se anule un registro en
viaje anule a todos los pasajeros.
3.- En el mantenimiento del archivo de viajes debe tener un botón de Pasajeros de tal
modo que permita visualizar solo los pasajeros de ese viaje en otra ventana (adicion,
anulacion y modificacion), en la adicion se trae el campo nro de viaje y costo de la
ventana anterior(ambos de estilo tabular), el pasajero tendra un descuento de acuerdo
al tipo :
Estudiante 30%
Niño 50%
Adulto 0%
• El nro de viaje se genera AA9999 los primeros 2 digitos año del sistema y los cuatro
últimos digitos un correlativo.
• Para el DataWindow de viaje el campo codígo de ruta y codígo del chofer debe
incorporarse un DataWindow para cada uno, para que su selección sea más explícita.
• El número de Boleto se genera a partir del 00001 de manera correlativa
• Luego de cada adicion de pasajeros las vacantes en ese viaje debe disminuirse en la
unidad.
5.- Consulta de viajes por rutas. En esta ventana; al elegir una ruta (en un control
DataWindow) debe mostrar todos los viajes programados (en otro control data) al
seleccionar el viaje debe mostrar la relacion de pasajeros.
6.- Consulta de viajes por fecha, en esta ventana se debe ingresar dos fechas: fecha
inicial y final en caso que solo se ingrese la fecha inicial se debe tomar hasta la última
fecha de viaje, mostrando en un control DataWindow las siguientes columnas:
7.- Elabore un menú para relacionar cada opcion con las tareas pedidas.
Nota
Eeste trabajo es para 2 semanas de laboratorio, sera revisado cada avance.
Objetos de Usuario
Tema Custom Clases Visuales
El cual va a mostrar una pantalla similar a la window estándar, para diseñar su plantilla:
Realizar el siguiente diseño: tiene dos controles etiquetas, uno encima de otro, uno con
fondo blanco y el otro con fondo azul, una tercera etiqueta para ver el porcentaje del
proceso.
ST_2 ST_1
Clases
Crear las siguientes clases de Objetos de usuarios
c) Colocando una caja de texto que permita adicionar o restar días a una fecha a
través de Vscroll
e) Pasando una cadena a una etiqueta que dicha cadena sea tipo Blink
2.- No Visuales
a) Una función que permita sumar una columna numérica, se pasa como valor el
control DataWindow y el número de columna.
b) Un evento que permita centrar una ventana, se pasa como valor una ventana.
c) Una función que permita generar un código, se pasa como dato un control
DataWindow, el valor inicial del código, el código puede empezar con una letra o
número.
Aplicación
Se tiene las Base de Datos (EMPRESA), que tiene las siguientes tablas:
Laura
Moreno Lee
dw_1.settransobject(sqlca)
dw_2.settransobject(sqlca)
dw_1.retrieve()
GrObjectType ClickedObject
string nomdept,nomgraf="gr_1"
int v_series,v_categoria
ClickedObject=This.ObjectAtPointer(nomgraf,v_series,v_categoria)
GrObjectType ClickedObject
string nomgraf='gr_1'
int v_series,v_categoria
string id_emp
ClickedObject=This.ObjectAtPointer(nomgraf,v_series,v_categoria)
dw_1.retrieve(cod)
Creación de Objetos de Usuario empleado para contener controles de tipo general que
seran empleados, por las otras ventanas descendientes (w_alumnos y W_cursos);
ademas se han elaborado las funciones de objeto usuario con la finalidad de generalizar
las tareas de los eventos.
1.- Para crear un objeto usuario siga los pasos del profesor:
a)
b)
c)
nWidth = this.WorkSpaceWidth( )
nHeight = this.WorkSpaceHeight( )
i_row=this.getrow()
if i_row<1 then return
this.selectrow(0,false)
this.selectrow(i_row,true)
ALUMNOS
NOTAS
Se Pide elaborar:
2) Hacer una consulta por apellido , para ello digitara solo los primeros caracteres de
un apellido y en un DataWindow de tipo tabular mostrara a todos los alumnos que
comienzan con esos caracteres
3) Consulta por curso, Se ingresara por teclado El código o Nombre de Curso luego
en un DataWindow mostrara a todos los alumnos que llevaron dicho curso
ordenado por promedio de manera descendente, los promedios menores a 11
mostrarlos con rojo de lo contrario con azul.
4) consulta por fechas, para ello se ingresara dos fechas por teclado la fecha inicial y
la Fecha final, en caso de no ingresar la fecha final se tomara en cuenta hasta la
fecha actual del sistema. Y mostrara en un DataWindow la relación de alumnos
matriculados en ese rango.
De La BDD del Demo de Power Builder Considerar las siguientes Tablas y campos para
cada una de llas:
Clientes
Codigo Nombre y apellido Compañia Telefono
Orden de Pedido
Animaciones
Por ejemplo si se desea mostrar una papelera de reciclaje cuendo se elimina un registro o
cuando se copia emplear controles ole.
Cb_graba Clicked
ole_1.insertfile("c:\Iamgenes\filecopy.avi")
ole_1.activation=activateongetfocus!
ole_1.setfocus()
Cb_anula Clicked
ole_1.insertfile("c:\Imagenes\filedel.avi")
Power Builder 9.0
-78-
ole_1.activation=activateongetfocus!
ole_1.setfocus()
int rs
OLEObject ole1
ole1 = create OLEObject
rs = ole1.SetAutomationTimeOut(10000)
.
DataWindow Dinamicos
Sin utilizar objetos datawindow se puede mostrar en un control dartawindow resultados de
una instrucción SQL.
Syntax
Ejemplo:
La siguiente sentencia crea un Datawindow grid en dw_1 desde la fuente generada por
la función SyntaxFromSQL Si ocurre un error, la cadena ERRORS podría contener
cualquier mensaje de error que es generada, mostrando un mensaje al usuario. Observe
que debe efectuarse a través del Objeto SQLCA:
Bayona Ramos
Cb_Carga Clicked
Envio de e-m@il
Si se tiene instalado el Outlook se debe de configurar
ddlb_destinatario
Power Builder 9.0
-80-
sle_titulo
mle_text
o
lb_archivos
Pb_1
Pb_1 Clicked
string docname, named
integer value
value = GetFileOpenName("Selecione Fichero", docname, named, "DOC", &
+ "Text Files (*.TXT),*.TXT, All Files (*.*),*.*")
IF value = 1 THEN
lb_archivos.additem(docname)
end if
cb_1 Clicked
mailSession mSes
mailReturnCode mRet
mailMessage mMsg
mailFileDescription mAttach[]
string ls_ret, ls_syntax, ls_name, ls_open_pathname,
ls_filename
string ls_attach_name='c:\pbl\error.psr'
int li_index, li_nret, li_nrecipients, li_nfile
boolean lb_noerrors
APIS DE EN POWER
Declaración de Funciones externas
Mostrar la Barra de
estado
Descripción
Las funciones externas son escritas en diferentes lenguajes y almacenadas en librerias dinamicas
con la extensión DLL, antes de utilizar estas funciones primero debe declararse definiendo su tipo.
Paso1.- Primero declarar las funciones externas ya sea a través del visor Apis o digitarlos
directamente
cb_ocultar Clicked
Long HBar
// Esconder la barra de tareas
HBar = FindWindowExA( 0, 0, "Shell_TrayWnd", ls_Null )
ShowWindow( HBar, 0 )
Cb_Mostrar Clicked
onstant Long SW_SHOW = 5
// Nombres del shell de Windows que deberiamos buscar
String ls_Null
Long HBar, ll_HDeskTop
HBar = FindWindowExA( 0, 0, "Shell_TrayWnd", ls_Null )
ShowWindow( HBar, SW_SHOW )
// Muestra el escritorio
ll_HDeskTop = FindWindowExA( 0, 0, "Progman", ls_Null )
ShowWindow( ll_HDeskTop, SW_SHOW )
Cb_maquina Clicked
long ll_ret
string ls_ComputerName ,ls_UserName
ulong BufferLength = 250
ll_ret = GetComputerNameA(ls_ComputerName, BufferLength)
messagebox("maquina",ls_ComputerName)
Control Tv_1
Objetos a emplear:
1.-estructura (stremp)
DragDrop.- Ocurre cuando el usuario arrastra un objeto sobre el control y libera el boton
del mouse y deja el objeto.
Occurs when the user presses the left mouse button on a label in the TreeView control
and begins dragging.
Ven01 open
idsource=create Datastore
idsource.dataobject="Datemp"
idsource.settransobject(sqlca)
triggerEvent("ue_populate")
ven01 ue_populate()
TreeviewItem Vitem
SetPointer(hourglass!)
Vitem.Label="Marketing"
Vitem.Data= "D001"
vitem.PictureIndex=1
vitem.SelectedPictureIndex=7
Vitem.children=true
tv_1.insertitemlast(0,vitem)
Vitem.Label="logistica"
Vitem.Data= "D002"
vitem.PictureIndex=2
tv_1.insertitemlast(0,vitem)
Vitem.Label="Ventas"
Vitem.Data= "D003"
vitem.PictureIndex=3
tv_1.insertitemlast(0,vitem)
Vitem.Label="Contabilidad"
Vitem.Data= "D004"
vitem.PictureIndex=4
tv_1.insertitemlast(0,vitem)
Vitem.Label="Administracion"
Vitem.Data= "D005"
vitem.PictureIndex=5
tv_1.insertitemlast(0,vitem)
ST_9.TEXT=STRING(T_Source.Level)
if T_Source.Level<>2 then
This.Drag(cancel!)
Else
//Almacena el Handle del item antes de comenzar el arrastre parent(departament)
r_dragsource=handle
r_dragparent=finditem(parentTreeItem!,handle)
end if
int li_pend
long li_newitem
treeviewitem lt_target,lt_source,lt_parent,lt_new
if getitem(r_droptarget,lt_target)=-1 then return
if getitem(r_dragsource,lt_source)=-1 then return
getitem(r_dragparent,lt_parent)
if messagebox("Transferir empleado","Desea Transferir "+lt_source.label+" form
"+lt_parent.label+&
"~n hACIA "+ lt_target.label+"?",question!,yesno!)=2 then return
li_pend=upperBound(vecEmp)+1
messagebox("lt_source",string(lt_source.data))
messagebox("lt_target",string(lt_target.data))
VecEmp[li_pend].vemp=lt_source.data
VecEmp[li_pend].vdep=lt_target.data
deleteitem(r_dragsource)
//setnull(lt_source.itemhandle)
li_newitem=insertitemSort(r_droptarget,lt_source)
selectitem(li_newitem)
treeviewitem t_over
long a,b
if getitem(handle,t_over)=-1 then // si estamos en el primer nivel
setDropHighlight(0)
r_droptarget=0
return
end if
if t_over.level=1 then
// resalta el departamento que va ser arrastrado
if handle<>r_droptarget then
setDropHighlight(handle)
r_droptarget=handle
else
setDropHighlight(0)
r_droptarget=0
end if
else
r_droptarget=finditem(parenttreeItem!,handle)
if r_droptarget<>r_dragparent then
setDropHighlight(r_droptarget)
else
setDropHighlight(0)
r_droptarget=0
end if
end if
next
Trucos en Power
Una característica que tienen los DataWindow es que te permiten ordenar las
columnas pulsando en la cabecera de la columna. La función Sort te permite
especificar el nombre de la columna o el número de columna por la cual se ordenará
el dataWindow. Funciona para la mayoría de columnas y tipo de datos, pero no
funciona bien cuando la columna pertenece a una DropDown DataWindow
El problema es que la función Sort ordena los datos por detrás de la DataWindow no
los valores que el usuario está viendo en pantalla.
Para solucionar esto puedes usar el comando LookUpDisplay.
Esta función devuelve la visualización de los datos de la columna. Poniendo el
nombre de la columna dentro de esta función y usándola para ordenar los datos, el
usuario podrá ver los datos ordenados.
Por ejemplo:
Char lc_sort
ELSE
lc_sort = 'A'
END IF
dw_1.SetSort(ls_column+" "+lc_sort)
ELSE
dw_1.SetSort(ls_column+" A")
END IF
dw_1.Sort()
END IF
Este puede ser invocado desde cualquiera de de los dos métodos siguientes:
Notación DOT: dw_control.Object.DataWindow.Storage
Describe: dw_control.Describe("DataWindow.Storage")
En ambos caso devuelve una cadena con el valor utilizado en bytes.
datastore lds_parm
lds_parm = Message.PowerObjectParm
dw_1.DataObject = lds_parm.DataObject
lds_parm.ShareData(dw_1)
Y en el evento CLOSE:
dw_1.ShareDataOff()
A veces es deseable impedir a los usuarios que editen columnas clave una vez que
las han creado. Esto se puede hacer fácilmente usando expresiones de columna en
el DataWindow.
- Background Colour
if ( Describe("Datawindow.QueryMode") = "yes" or isRowNew(), 1090519039,
ong(Describe("Datawindow.Color")))
- Protect
if ( Describe("Datawindow.QueryMode") = "yes" or isRowNew(), 0, 1)
8.- Cargar un array con los nombres de cada columnas en una Datawindow
int colNum, numCols
string colName[]
numCols = Integer(dw_control.Describe("Datawindow.Column.Count"))
FOR colNum = 1 TO numCols
// Obtenemos el nombre de la columna con la función Describe
colName[colNum] = dw_control.Describe("#" + String(colNum) + ".name")
NEXT
14.- Centrar una ventana (útil si es de tipo response). Por Adolfo Chairez.
Long ll_screenWidth,ll_screenHeight
environment lenv_display
if GetEnvironment(lenv_display) = 1 then
ll_screenWidth = PixelsToUnits(lenv_display.screenwidth,XPixelsToUnits!)
ll_screenHeight = PixelsToUnits(lenv_display.screenheight,YPixelsToUnits!)
this.x = (ll_screenWidth - this.width) / 2
this.y = (ll_screenHeight - this.height) / 2
end if
*/
ll_elapsed = CPU ( ) - ll_Start
Sugerencias:
d91041@idat.edu.pe
mmoreno@ucss.edu.pe