aplicacion maestro detalle en powerbuilder

33
Vásquez Blas Leopoldo infotutoriales.info PowerBuilder Aplicación Maestro Detalle Autor: Vásquez Blas Leopoldo infotutoriales.info [email protected] 15/01/2016

Upload: leo-vasquez-blas

Post on 15-Apr-2016

118 views

Category:

Documents


11 download

DESCRIPTION

Aplicacion Maestro Detalle en PowerBuilder usando DatawindowsSql Server.infotutoriales.info

TRANSCRIPT

Page 1: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

PowerBuilder

Aplicación

Maestro – Detalle

Autor: Vásquez Blas Leopoldo

infotutoriales.info

[email protected]

15/01/2016

Page 2: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

Diagrama de base de datos

2. Crearemos nuestra aplicación en PowerBuilder

Aplicación

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

Page 3: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

Panel de control

Luego elegimos orígenes de datos ODBC.

Page 4: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Clic en el botón agregar.

Seleccionamos en mi caso SQL Server Native Client 10.0. Ustedes seleccionaran la

versión con la cual estén trabajando. Luego clic en finalizar.

Page 5: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Clic en siguiente

Lo dejaremos con autenticación integrado de Windows. Para esto en SQL Server debe

estar en modo de autenticación mixta.

Page 6: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Clic en siguiente

Clic en siguiente.

Page 7: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Page 8: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

Page 9: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Page 10: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Luego nos dirigimos a la pestaña Preview y ahí probamos la conexión con nuestra base

de datos.

Page 11: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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 “_”.

Page 12: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

De no estar activa la conexión, simplemente clic derecho sobre el perfil y

seleccionamos connect

Page 13: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Dw_cabecera.

En esta venta podríamos haber escogido Quick Select, pero escogeremos SQL Select.

Page 14: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

En esta ventana seleccionamos la tabla cabecera y presionamos el botón open.

En la ventana siguiente seleccionamos todos los campos de la tabla.

Page 15: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

En la siguiente ventana tenemos los parámetros de diseño de nuestro datawindows. Lo

dejaremos con los valores por defecto.

Page 16: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

El argumento se llamara cod y será del tipo number.

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.

Page 17: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Después de darle un poco de formato, grabaremos nuestro datawindow con el nombre

de dw_cabecera.

Siguiente paso es hacer lo mismo con los otros datawindows, pero usando datagrid.

Page 18: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Dw_producto

Guardamos nuestro datawindow con el nombre de dw_producto.

Page 19: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Dw_detalle

En el caso del detalle, le agregaremos un argumento.

Page 20: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

El argumento se llamara cod y será del tipo number.

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.

Page 21: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

En la siguiente ventana presionamos en el botón con los puntos suspensivos para

seleccionar el datawindow desde donde se mostraran los datos para la columna idproducto.

Page 22: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Guardamos nuestro datawindow con el nombre de dw_detalle.

Page 23: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

Page 24: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Ejecutamos nuestra aplicación y se vera de la siguiente manera.

Como vemos, no se muestran las columnas o cabeceras en nuestro datawindow cabecera.

Para poder visualizarlo, debemos agregar una fila. Con respecto al datawindow producto,

debemos agregar la instrucción “retrieve” para recuperar los datos que estén en la tabla

producto.

Si ejecutamos nuevamente nuestra aplicación, se verá de la siguiente manera.

Page 25: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

En el evento open de la ventana agregamos el siguiente código

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

Page 26: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

Page 27: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Función uf_generarcodigo

integer li_cod

SELECT max(cabecera.idmovimiento )

INTO :li_cod

FROM cabecera ;

if li_cod=0 or isnull(li_cod) then

li_cod=1

else

li_cod++

end if

return li_cod

Botones

En el botón nuevo agregamos en siguiente código.

En la línea número cuatro, estamos asignando el valor generado por la función en la

columna número uno, que es el idmovimiento. También agregaremos el código para

limpiar el detalle y el sle_buscar.

dw_cabecera.retrieve( 0)

dw_cabecera.insertrow( 1)

dw_cabecera.setfocus( )

Page 28: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

dw_cabecera.setitem( 1,1, uf_generarcodigo() )

dw_detalle.retrieve( 0)

dw_buscar.retrieve( )

sle_buscar.text=""

cb_nuevo.enabled=false

cb_guardar.enabled=true

cb_cancelar.enabled=true

Debería quedar como en la siguiente imagen.

Botón cb_cancelar

Botón guardar

La instrucción update devuelve el valor “1” si se guardó satisfactoriamente, si ha

ocurrido algún error devolverá “-1”. Entonces para poder grabar el detalle, primero

Page 29: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

verifico que la cabecera se guarde correctamente, luego procedo a guardar el detalle. Si

se ha producido algún error, hago uso de la instrucción rollback para deshacer los

cambios.

Para la actualización del stock, podríamos usar triggers o bien crear una función y

recorrer el detalle e ir actualizando cada producto agregado.

7. La aplicación en ejecución.

Si se intenta agregar más de una vez el mismo producto.

Page 30: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Si se ingresaron los datos correctamente, aparecerá un mensaje indicando que los datos

se guardaron correctamente.

Page 31: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

Page 32: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

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.

Nos dirigimos a la pestaña Edit y seleccionamos en Style Type EditMask.

En Mask ingresamos la mascara dd/mm/yyy

Page 33: Aplicacion Maestro Detalle en PowerBuilder

Vásquez Blas Leopoldo infotutoriales.info

Siguiente paso: Seleccionar el campo movimiento.