You are on page 1of 17

APLICACIN COMPRAS EN SQLSERVER 2005

(Libro de apoyo: Iniciacin a las bases de datos con Access 2002. Eduardo Mora, Marta Zorrilla, Joaqun Daz de Entresotos. Daz de Santos, 2003) A continuacin se presentan los pasos para construir una aplicacin sobre la base de datos COMPRAS. Esta constar de formularios que permitan la gestin y consulta de datos y de informes que permitan la impresin y/o visualizacin de datos con un formato preestablecido. Con objeto de construir de forma rpida la aplicacin, se utilizar Access como herramienta de desarrollo, evitando as aprender una herramienta y lenguaje de programacin nuevos. Generalmente este tipo de aplicaciones se construyen con herramientas denominadas RAD (Desarrollo Rpido de Aplicaciones) como Visual Basic .Net, C# .Net, Power Builder, J2EE, u otros. Centrndonos en Access, se tienen dos posibilidades, crear un proyecto Access con lo que Access se conecta va OLEDB a SQL Server 2005 o crear una base de datos Access y vincular va ODBC las tablas que se encuentran en SQL Server u otro gestor (ver captulo 9 del libro Iniciacin a las bases de datos con Access 2002). En la primera opcin, Access solo contiene objetos de aplicacin, es decir, formularios, informes y mdulos de programacin en lenguaje Visual Basic para Access; mientras que en la segunda, Access acta sobre el motor jet.

PROYECTOS ACCESS
Pasos para desarrollar el prototipo de aplicacin sobre la base de datos COMPRAS. 1. Crear un Nuevo Proyecto Access (extensin adp). Al confirmar su creacin, Access solicita autentificarse en el servidor SQL Server y seleccionar la base de datos para establecer el vnculo a travs de OLEDB.

Figura 1.1. Establecer conexin

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

Una vez conectados se observarn las tablas y consultas (funciones y procedimientos almacenados y vistas) que se encuentran en SQL Server en la interfaz de Access. Desde este entorno se pueden realizar las mismas operaciones que desde el MS SQL Server Management Studio. 2. Decidir los formularios que se van a disear en funcin de la estructura de tablas que se dispone y de las necesidades del cliente, en nuestro caso sern tres: artculos, proveedores y pedidos con sus lneas. La aplicacin debe incluir, al menos, los formularios que permitan gestionar todas las tablas aunque tambin puede contener otros de solo consulta atendiendo as las necesidades de los distintos roles de usuarios. 3. Decidir los informes, impresos que se ofrecer a la organizacin o al cliente. En nuestro caso el catlogo de artculos, la factura del pedido y las compras realizadas a cada proveedor por ao. 4. Para realizar controles en los formularios e informes se podr hacer uso de macros y de mdulos de Visual Basic. a. Macros, son ciertos automatismos y controles que permite definir Access sin tener que programar. Estos se ejecutan cuando se produce el evento al cual se asignan. b. Mdulos de VB: para definir funcionalidades generales de la aplicacin. En cada formulario se programa lo especfico de l, como se ver en el formulario de pedidos y el subformulario de lneas. Nota: Los formularios, informes, macros y mdulos residen en el fichero Access con extensin adp.

Formularios
Todos los formularios, as como los informes, tienen asociado una consulta o vista. Esta se puede definir antes utilizando el entorno de consultas (Crear Asistente para consultas). Tambin se puede trabajar directamente sobre las tablas pero, en general, por las razones de seguridad que ya hemos comentado en clase, se aconseja crear la vista. 1. Artculos: este formulario no tiene nada de especial (ver Figura 1.2). Se crear seleccionando la vista GestionArticulos, creada previamente, y pulsando la opcin Crear Formulario. El botn Catlogo de artculos se pondr posteriormente, una vez se haya definido el informe que ste debe mostrar. Con objeto de mejorar la interfaz que presenta el formulario realizaremos varios cambios, stos se realizan en vista de diseo. Cambiar el encabezado, incluir logo si se quiere Castellanizar los nombres de las etiquetas asociadas a los campos de la BD Selectores de registro = No Separadores de registro = No ndice de tabulacin y Punto de tabulacin (orden que sigue el cursor al rellenar los campos) Tipo recordset = Snapshot actualizable (permite consultar y actualizar la informacin. Se usar siempre en formularios de gestin de datos) N mx. registros = 1000 (mximo nmero de registros que se traen del servidor al cliente) Asignar formato moneda al campo precio unitario si ste no lo muestra directamente.

Adems se establecern las siguientes Propiedades en el formulario de Artculos:

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

Figura 1.2. Formulario de Artculos

2. Formulario Proveedores: Del mismo modo que artculos, se crea la vista GestionProveedores con todos los campos de la tabla. A continuacin se realizarn las siguientes mejoras: Corregir convenientemente las etiquetas de encabezado y detalle del formulario. Tipo recordset = Snapshot actualizable (permite consultar y actualizar la informacin. Se usar siempre en formularios de gestin de datos) Crear cuadro combinado para el campo procepro (opcin Cambiar a cuadro combinado). En propiedades carpeta Datos tipo origen de la fila = lista de valores y en origen de la fila= UE; No UE. Establer la propiedad Limitar a lista=si. Campo mailpro con propiedad Es hipervnculo = S (carpeta Todas). En los datos anteponer mailto: o http:// si queris que se active el programa del correo o el navegador al pulsar sobre l. Campo cdigo postal, se puede establecer la mscara de entrada = 00000;; (carpeta Datos). El cero indica nmero obligatorio y el 9, nmero opcional. Hay asistente para su definicin. Campo telfono y fax, tambin se les puede aplicar mscara si se quiere guardar el formato hay que tener en cuenta que los espacios y otros smbolos ocupan lugar por lo que hay que dimensionar el campo adecuadamente.

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

Figura 1.3. Formulario de proveedores

3. Formulario Pedidos: Como este formulario requiere trabajar con dos tablas (pedidos y lneas) y presentar informacin adicional de las otras dos (proveedores y artculos) se crearn dos vistas con los datos que queremos que presente el formulario. Crear vistas EncabezadoPedido y DetallePedido como se muestra en la Figura 1.4 y Figura 1.5.

Figura 1.4. Vista Encabezado del pedido

Figura 1.5. Vista detalle del pedido

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

Crear formulario con el asistente seleccionando ambas vistas. Access crear un formulario con un subformulario vinculados por el campo numped. En esta pantalla se realizarn varias modificaciones para que presente el aspecto de la Figura 1.6: a) Se ordenarn los campos (para moverlos hay que cortar y pegar). b) Para editar el subformulario, es mejor acceder a l directamente. c) Quitar la etiqueta del subformulario en el formulario pedido (propiedad anchura de la etiqueta=0 cm) d) Se comprobar si la fecha del pedido en el proceso de alta toma la fecha del da de la BD, si no asignar a la propiedad Valor predeterminado = Ahora(). e) Se crear un desplegable para el proveedor de forma que se facilite su eleccin. El cuadro combinado tendr las siguientes propiedades: tipo origen de la fila= Tabla/Vista/ProcAlmacenado y Origen de la fila = SELECT codigpro , nombrpro FROM Proveedores, Columna dependiente = 1, Limitar a la lista=Si, Permitir ediciones de la lista=No, Nmero de columnas = 2, Ancho de columnas = 2 cm; 6 cm, Ancho de lista=10 f) Se establecer el campo del cdigo del proveedor como el primer campo a rellenar (punto de tabulacin = 0)

g) Se bloquearn todos campos del proveedor, a excepcin del cdigo, para evitar que modifique esta informacin a travs de esta pantalla. Adems se quitar a estos campos el punto de tabulacin para evitar que el cursor entre en el campo y cause malestar al usuario. h) Se establecer el IVA al 16 por defecto (propiedad valor predeterminado). i) Se fijar en el formulario que la actualizacin de datos corresponde solo a la tabla pedidos (propiedad tabla nica = pedidos). Esto se requiere siempre que nos apoyemos en una vista en la que participen campos de ms de una tabla. Si no se establece as, la vista es de solo lectura.

Figura 1.6. Formulario de Pedidos

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

j)

Se programar para que cuando se proceda al alta de un pedido se le asigne el siguiente nmero y la fecha prevista a 15 das de la fecha del pedido (ver procedimiento Form_BeforeInsert que se encuentra en el cuadro Cdigo asociado al formulario de EncabezadoPedido).

k) Se establecer el cdigo VB restante del formulario a travs de los eventos de los objetos que se indican en el cuadro siguiente, a excepcin del botn Factura que se realizar con el asistente.

Option Compare Database Private Sub btn_factura_Click() 'Este cdigo es creado por el Asistente para botones de comando.

On Error GoTo Err_btn_factura_Click Dim stDocName As String stDocName = "Factura" DoCmd.OpenReport stDocName, acViewPreview, , "numped = " + CStr(Me.numped)

Exit_btn_factura_Click: Exit Sub Err_btn_factura_Click: 'Si el usuario cancela la accin, no mostrar un mensaje de error. Const conErrDoCmdCancelled = 2501 If (Err = conErrDoCmdCancelled) Then Resume Exit_btn_factura_Click Else MsgBox Err.Description Resume Exit_btn_factura_Click End If End Sub

Private Sub codigpro_BeforeUpdate(Cancel As Integer) 'Muestra un mensaje si el cuadro combinado proveedor est en blanco. Dim strMsg As String, strTitle As String Dim intStyle As Integer If IsNull(Me!codigpro) Or trim(Me!codigpro) = "" Then strMsg = "Debe elegir un valor de la lista Proveedor." strTitle = "Proveedor requerido ... " intStyle = vbOKOnly MsgBox strMsg, intStyle, strTitle Cancel = True End If End Sub

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

Private Sub Form_BeforeInsert(Cancel As Integer) If IsNull(Me!fentrped) Then Me!fentrped = DateAdd("d", 15, Now()) End If If IsNull(Me!numped) Then Me!numped = DMax("[numped]", "pedidos", "[numped]>0") + 1 End If Me!codigpro.SetFocus End Sub

Cdigo asociado al formulario de EncabezadoPedido En el subformulario DetalleLineas: a) Se establecer un cuadro combinado para localizar el artculo (del mismo modo que en el proveedor pero en este caso vinculando el cdigo y ocultndolo, es decir, que el tamao de la primera columna sea 0 y el nmero de columnas sea 2). b) Se establecer el artculo como primer campo a rellenar (punto de tabulacin=0), dejando al nmero de lnea y el importe por lnea sin l. c) Se asignar el precio del artculo en la lnea con el precio que tiene ste en la tabla de artculos y se establecer en automtico el nmero siguiente de lnea que le aplique al pedido (procedimiento codigart_AfterUpdate). d) Se ocultar el campo numped. e) Se pondr el formato moneda y un nmero decimal al campo precio y al campo total por lnea. f) Se ocultarn los botones de desplazamiento.
Option Compare Database Private Sub codigart_AfterUpdate() On Error GoTo Err_Codigart_AfterUpdate Dim strFilter As String If IsNull(preunlin) Then strFilter = "codigart = " & trim(Me!codigart) Me!preunlin = DLookup("preunart", "articulos", strFilter) End If If IsNull(Me!numlin) Then Me!numlin = IIf(IsNull(DMax("numlin", "lineas", "numped=" Form_EncabezadoPedido.numped)), 1, DMax("numlin", "lineas", "numped=" Form_EncabezadoPedido.numped) + 1) End If Exit_Codigart_AfterUpdate: Exit Sub Err_Codigart_AfterUpdate: MsgBox Err.Description Resume Exit_Codigart_AfterUpdate End Sub & &

Cdigo asociado al formulario de DetallePedido

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

En el formulario EncabezadoPedido: g) A continuacin, se crear un campo calculado que presente el valor del pedido completo. Para ello se crear un campo de texto y se indicar en la propiedad origen del control = [DetallePedido Subformulario].[Formulario]![ImporteNeto] * (1+[ivaped]/100)

donde ImporteNeto ser un campo del pie del subformulario que hace la suma del importe por lnea (ImporteNeto = Suma([totallin] ). Ver Figura 1.7 h) Si la factura se sale de mrgenes, pre-visualizarla y cambiarla a formato horizontal.

Figura 1.7. Formulario de Pedidos en vista de diseo


i) Por ltimo, se crear el botn de imprimir Factura. Este visualizar la factura del pedido que se muestra en pantalla (debe crearse el informe previamente). Esto se le indicar al informe por cdigo segn se muestra en el evento clic de este botn btn_factura_Click.

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

Informes
Para crear informes se deben realizar consultas/vistas o bien procedimientos almacenados que devuelvan los datos que se solicitan. Se harn tres ejemplos: dos con vistas, Lista de todos los artculos y la factura del pedido y otro con procedimiento almacenado, Compras a proveedores por ao. El Informe Catlogo de artculos, ver Figura 1.8, recoge todos los datos de la vista GestionArticulos. Se crea seleccionando la vista y pulsando sobre el botn Informe en men Diseo. A continuacin, se edita para modificar las etiquetas, aadir el logo y quitar la suma de precios total porque sta no tiene sentido. En general Access genera campos de resumen (totales, avg, etc.) sobre atributos de la BD que sean numricos.

Figura 1.8.

Informe Catlogo de artculos

El Informe Factura se apoya en la consulta Factura que se muestra en la Figura 1.9. Fijaos que se aade una campo calculado que se obtiene de ejecutar la funcin almacenada Calcular_Pedido. Se generar el informe y en vista de diseo se colocar la informacin al gusto del usuario, ver Figura 1.10, de forma que por un lado estn los datos del encabezado y por otro los de la lnea. Ntese que aparece el encabezado de grupo numped por el que la informacin que se presenta en esa zona slo se muestra una vez por cada nmero de pedido (numped) distinto, mientras que en detalle se presenta cada fila devuelta por el Select.

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

Figura 1.9. Vista para obtener las facturas

Figura 1.10. Informe Factura en vista de diseo


Marta E. Zorrilla Pantalen Bases de Datos - 09/10 10

El Informe de proveedores por ao, se apoya en un procedimiento almacenado Compras_por_ao_proveedor que se presenta a continuacin. Este tiene dos parmetros de entrada: fecha de inicio y de fin, por lo que para su ejecucin ser necesario pasarle dos valores. Esto se har con un formulario especfico.

create Procedure "Compras_por_Ao_Proveedor" @FechaInicio datetime, @FechaFin datetime AS SELECT Proveedores.nombrpro, DATENAME(yy,fechaped) as ao, sum(dbo.calcular_pedido(numped)) as Importe FROM Pedidos ,Proveedores WHERE Pedidos.codigpro = Proveedores.codigpro and Pedidos.fechaped Between @FechaInicio And @FechaFin Group by Proveedores.nombrpro, DATENAME(yy,fechaped) order by proveedores.nombrpro Este formulario tendr dos campos que les denominaremos [fecha_ini] y [fecha_fin] (propiedad Nombre) y un botn que al ser pulsado llamar al informe creado previamente Compras_por_Ao_proveedor.

Figura 1.11. Formulario para el informe Compras por ao proveedor

El informe creado con el asistente Compras_Por_Ao_Proveedor tiene el aspecto que muestra la Figura 1.12. Se crea utilizando el asistente.

Figura 1.12. Informe Compras por ao proveedor en vista de diseo

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

11

Seleccionando el informe y accediendo a la propiedad input parameters de la carpeta Datos, se pondr el siguiente texto, para que al abrise tome como parmetros de entrada los indicados en el formulario creado: @FechaInicio datetime = Forms![ComprasPorAoProveedor]![Fecha_ini] , @FechaFin = Forms![ComprasPorAoProveedor]![fecha_fin] datetime

La propiedad InputParameters se utiliza para especificar o determinar los parmetros de entrada que se pasan a una instruccin SQL de la propiedad OrigenDelRegistro (RecordSource) de un formulario o informe o un procedimiento almacenado cuando se utiliza como el origen de registros de un formulario o informe dentro de un proyecto de Microsoft Access (.ADP).

Pantalla principal
Se crear una pantalla principal con los botones que permiten acceder a las distintas opciones de men como se muestra en la Figura 1.13. Se partir de un formulario en blanco al cual se le aadirn los botones de accin que permitan acceder a los formularios e informes programados.

Figura 1.13. Formulario principal

Barra de herramientas y personalizacin de la Aplicacin A continuacin se crear una barra de herramientas con las opciones necesarias para la gestin de datos: insertar y borrar datos pues modificar se realiza directamente sobre el registro que se muestra en la pantalla y buscar utilizando la opcin de filtro por formulario con establecer filtro y quitar filtro o su alternativa de filtro de servidor por formulario y aplicar filtro de servidor. Se elegir una u otra en funcin de si se decide traer directamente los datos o solicitar previamente una condicin de bsqueda con idea de reducir el trfico de datos por la red (aplicaciones cliente/servidor). Para realizar esto ltimo se debe establecer a S la propiedad de formulario Filtro de Servidor por Formulario. Los pasos para configurar Office Access 2007 con estas caractersticas son:

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

12

1. Haga clic en el botn de Microsoft Office y, a continuacin, haga clic en Opciones de Access (Figura 1.14). 2. En el cuadro de dilogo Opciones de Access, haga clic en Base de datos actual y de ttulo a la aplicacin y asigne el formulario MENU como formulario de INICIO (Figura 1.15) 3. A continuacin seleccione Personalizar para configurar la barra de herramientas de acceso rpido con las opciones de insertar y eliminar registro y filtro por formulario y aplicar filtro. Asegurarse de seleccionar la BD actual. (Figura 1.16). A continuacin indicar que se muestre debajo de la cinta de opciones (si se quiere).

Figura 1.14. Opciones de Access

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

13

Figura 1.15. Personalizacin de la aplicacin

Figura 1.16. Barra de herramientas para la aplicacin

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

14

Por ltimo, para ejecutar la aplicacin sin que los usuarios entre en el entorno de Access, se debe cambiar la extensin a .accdr (runtime). Para abrir en modo diseo el proyecto Access y que no tenga en cuenta las opciones indicadas en la personalizacin, se debe pulsar doble clic sobre el fichero Access al tiempo que se tiene pulsada la tecla de maysculas.

Gestin de errores
En los formularios, los errores que provienen del gestor, cuando se atenta contra la estructura, deben ser traducidos. Esto se puede realizar utilizando el evento Error y sustituyendo el mensaje que muestra en ingls por otro en castellano. Lamentablemente no se puede capturar el mensaje original, para ello habra que realizar toda la programacin va OLEDB en vez de utilizar las vinculaciones que ofrecen los asistentes. Los mensajes de los disparadores se muestran tal y como se escribieron en el trigger. A continuacin se muestra un ejemplo para el formulario GestinArtculos.
Private Sub Form_Error(DataErr As Integer, Response As Integer) Const conDuplicateKey = 3022 Const conPK = 2627 Const conRequired = 515 Dim strMsg As String

If DataErr = conDuplicateKey Then Response = acDataErrContinue 'sustituir msg de error strMsg = "El cdigo del artculo debe ser nico. Comprueba los datos." MsgBox strMsg ElseIf DataErr = conRequired Then Response = acDataErrContinue strMsg = "Todos los campos son obligatorios excepto la fecha de baja." MsgBox strMsg ElseIf DataErr = conPK Then Response = acDataErrContinue strMsg = "Cdigo de artculo existente" MsgBox strMsg Else Response = acDataErrDisplay 'mostrar el msg de error End If End Sub

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

15

HASTA AQU lo otro antiguo Aadir gestin de eventos y envo de mail?? Mirar cmo se recogen los errores de articulos caducados

Mejoras en el formulario que gestiona los pedidos


La gestin de pedidos no queda completa sino se registra la mercanca cuando esta llega al almacn. Para ello se propone como una alternativa la creacin de un formulario Entradas que recoja todos los campos de la tabla y que se invoque por medio de un botn que se cree en el subformulario de lneas. De este modo, el usuario final localiza el pedido y para cada lnea de pedido, indica las unidades de entrada. El aspecto que presenta el formulario es el que se muestra en la Fig. 1.16.

Figura 1.17. Formulario para la gestin de pedidos y entradas

Por otra parte, con objeto de visualizar y poder consultar si el pedido est completo o no, se crea una funcin PedidoTerminado que verifica si se han recepcionado todas las unidades de cada lnea y se aade su consulta a la vista EncabezadoPedido del siguiente modo:

CREATE VIEW dbo.EncabezadoPedido AS SELECT dbo.Pedidos.numped, dbo.Pedidos.codigpro, dbo.Pedidos.ivaped, dbo.Pedidos.fechaped, dbo.Pedidos.fentrped, dbo.Proveedores.cifpro, dbo.Proveedores.nombrpro, dbo.Proveedores.direcpro, dbo.Proveedores.cpostpro, dbo.Proveedores.localpro,dbo.Proveedores.telefpro, Marta E. Zorrilla Pantalen Bases de Datos - 09/10 16

dbo.Proveedores.emailpro, dbo.Proveedores.faxpro, dbo.Proveedores.procepro, CASE dbo.PedidoTerminado(dbo.Pedidos.numped) WHEN 0 THEN 'Pendiente' WHEN 1 THEN 'Recepcionado' END AS recepcionado FROM dbo.Pedidos INNER JOIN dbo.Proveedores ON dbo.Pedidos.codigpro = dbo.Proveedores.codigpro El cdigo Visual Basic que se requiere para la gestin de esta pantalla se encuentra en el proyecto compras.adp que se ofrece en clase.

Marta E. Zorrilla Pantalen

Bases de Datos - 09/10

17

You might also like