PowerBuilder
Aplicación Maestro Detalle
1.
Lo primero que haremos es diseñar e
implementar nuestra base de datos. En este caso usaré Microsoft SQL Server
2008.
2.
Crearemos
nuestra aplicación en PowerBuilder
Como hemos visto en el
diagrama de nuestra base de datos, contamos con tres tablas. La tabla cabecera,
será la tabla maestro y la detalle será (valga la redundancia) el detalle. Con
respecto a la tabla producto, los datos los llenaremos desde la misma base de
datos. Nos centraremos en la implementación de la ventana maestro detalle.
3.
Creación
de la conexión con la base de datos.
Crearemos
la conexión a través de ODBC.
Nos
dirigimos al panel de control y elegimos herramientas administrativas.
Luego elegimos orígenes de datos ODBC.( Si ya conoces como realizar la conexion, puedes saltarte la seccion)
Al usar autenticacion integrada de windows, debemos verificar nuestra configuracion en Nuestro Gestor de Base de Datos.
Al hacer clic en el botón test data
source, les debe aparecer otra ventana indicando que la prueba de conexión fue
exitosa. Con esto ya tenemos nuestra configuración ODBC.
Podemos crear el perfil de conexión de la base de
datos a través del Database Profile o a través de Database.
Clic en el botón copy para copiar el script generado para la conexión, el cual
pegaremos en nuestra aplicación. Finalmente clic en ok para cerrar y guardar
nuestro perfil de conexión a la base de datos.
Nos dirigimos a nuestra aplicación y en
el evento open pegamos el código de conexión.
4.
Diseño
de la ventana
Para estar sección solo usaremos
datawindows para la cabecera y detalle. También podríamos usar los controles
comunes, instrucciones sql y cursores.
La ventana se llamará w_maestro_detalle.
Nota: Los nombres de los controles
están separados por un guion bajo “_”.
5.
Creación
de los objetos datawindows
Crearemos
tres objetos datawindows:
·
1 del tipo freeform para la cabecera.
·
2 del tipo grid. Uno para la búsqueda de
los productos y otro para el detalle.
Antes
de continuar, verificar si estamos conectados a la base de datos correcta. El
perfil que hemos creado debe estar con un check verde, indicando que es la
conexión activa.
- Dw_cabecera
En esta venta podríamos haber escogido Quick Select, pero escogeremos SQL Select.
En la siguiente ventana tenemos los parámetros de
diseño de nuestro datawindows. Lo dejaremos con los valores por defecto.
Aquí ya tenemos nuestro objeto datawindow creado.
Por un lado están los nombres de las columnas (etiquetas) y por el otro los
valores de las columnas. En esta parte podemos diseñar nuestro datawindow
dándole una mejor presentación.
En
este datawindow agregaremos un argumento.
En
la siguiente ventana, en la sección column
escogemos el campo idmovimiento. En el operador lo dejamos con “=” y en value realizamos clic derecho y
seleccionamos arguments y seleccionamos cod, el cual es el argumento que
acabamos de crear.
Después de darle un poco de formato, grabaremos
nuestro datawindow con el nombre de dw_cabecera.
- Dw_producto
Guardamos nuestro datawindow con el nombre de
dw_producto.
- Dw_detalle
Guardamos
nuestro datawindow con el nombre de dw_detalle.
6.
Implementando
la aplicación
Ahora en cada control datawindow en el evento
contructor, agregamos lo siguiente.
This.settransobject(sql). Este es el objeto
transacción con el cual trabajaremos.
Si
deseamos ver cómo está quedando nuestra aplicación en tiempo de ejecución,
debemos agregar el siguiente código en el evento de la aplicación.
connect using sqlca;//Nos
conectamos a nuestra base de datos usando el objeto de transacción por defecto
llamado sqlca.
open(w_maestro_detalle)//indicamos
que se abra nuestra ventana.
Si
ejecutamos nuevamente nuestra aplicación, se verá de la siguiente manera.
La búsqueda de productos.
Dentro del sle_buscar, en el evento
modified agregamos el siguiente código.
if this.text="" then//si esta
vacio
dw_buscar.setfilter(
"")//limpia el filtro para que se muestren todos los datos
else
dw_buscar.setfilter(
" descripcion like '%"+ this.text+"%'")//de caso contrario
asigna un filtro comparando el campo descripción con el texto ingresado.
end if
dw_buscar.filter(
)//aplica el filtro.
Validar para que no se agregue el mismo producto más
de una vez en el detalle.
Generar código correlativo.
Para generar el código correlativo crearemos una
función. Esta función estará implementada en la aplicación. También podríamos
usar un procedimiento almacenado o
colocar la columna como identidad.
Botones
7.
La
aplicación en ejecución.
Si
se ingresaron los datos correctamente, aparecerá un mensaje indicando que los
datos se guardaron correctamente.
8.
Agregando
otras funcionalidades.
Creación la función actualizar
stock
La fucion se llamará uf_actualizarstock. Tendra como
argumentos o parámetros Idproducto, movimiento y cantidad. Si el movimiento es
Salida “S” se restara del stock, de caso contrario se sumara la cantidad al
stock existente.
No se ha realizado ninguna validación si
la cantidad supera al stock permitido.
Actualizamos el botón guardar.
Por cada producto ingresado en el
detalle, debemos llamar a la función actualizar pasándole los parámetros
correspondientes obtenidos del detalle.
Dando formato al datawindow
cabecera.
Seleccionamos
el campo fecha.
que tal. Tengo una base de datos de mas de 3 millones de registros registros, como puedo hacer un retrieve que me llene el datawindows de a 10 mil en 10 mil registros, si lo pido todo se me bloquea el power builder es un catalogo de cuentas contable
ResponderEliminarBuenas tardes El R,
ResponderEliminarPuese configurar el datawindow Object en el menu Rows->retrieve Options->Rows as needed para obtener solo las finales necesarias y poder mostrarlas en el dw. Conforme se vaya haciendo scroll se van obtienendo las finals.
La otra forma es tener un procedimiento almacenado o una consulta usando Top o limit. Saludos.