Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacin II
Gua de Laboratorios 2
Programacin II
Gua de Laboratorios 3
Contenido
Laboratorio Nro. 1: ADO.NET Ejercicio 1 Creando una Aplicacin Simple con acceso a bases de datos sql server Laboratorio Nro. 2: DEFINIENDO UNA ESTRUCTURA DE TRABAJO Ejercicio 1 Implementacin de la arquitectura de trabajo en tres capas Laboratorio Nro. 3: UTILIZANDO LA ESTRUCTURA DE TRABAJO EN TRES CAPAS Ejercicio 1: Programacin en las capas necesarias todo lo necesario para tener la funcionalidad de una interfaz grafica de usuario que permita Adicionar, Modificar, eliminar, Buscar, Almacenes de una aplicacin de gestin de inventarios. Laboratorio Nro. 4: DEFINIENDO EL MANEJO DE CONTROLES MEDIANTE TECLADO Ejercicio 1: En la interfaz grafica de usuario realizada en el laboratorio nro, 3 (Gestin de almacenes) programar las opciones necesarias para que el usuario pueda manejar los comandos nuevo, modificar, eliminar, aceptar, cancelar, buscar mediante el teclado (Sin utilizacin de mouse)
Laboratorio Nro. 5: Programacin en Tres Capas Creando Tablas Para la
pgin a
3 6 13
26
Programacin II
Gua de Laboratorios 4
EJERCICIO 1:
Crear una aplicacin denominada buscar productos el cual permita buscar productos en una base de datos permitiendo introducir un criterio de bsqueda como ser una parte del nombre de algn producto y la aplicacin debe consultar la tabla producto de la base de datos bdinventario y mostrar los productos que coincidan con el criterio de bsqueda introducido por el usuario. PRIMERA PARTE: PREPARANDO LA BASE DE DATOS Comience Microsoft SQL Server management studio Cree una nueva base de datos con el nombre bdinventario
Programacin II
Gua de Laboratorios 5
Seleccione el texto sql escrito y presione F5 para ejecutar el comando sql escrito. (Asegrese que muestre un mensaje Comandos completados con xito Insertando registros a la tabla producto, Cree una nueva consulta
Seleccione todos los comandos escritos y presione F5 para ejecutar SEGUNDA PARTE: CREANDO LA APLICACIN EN C# Comience la aplicacin de C#.Net Creando una nueva aplicacin En la pgina de inicio (Start Page) seleccione la opcin Create Project Cuando se muestre la ventana de plantillas seleccione una aplicacin Windows (Windows Application) En la caja de texto del nombre identifique el proyecto como: Consulta de productos Haga clic en Accept Creando la Interfaz de Usuario
(TextBox, Button, DataGridView) Adicionar la referencia al espacio de nombres System.Data.SqlClient, en el archvo de codigo asociado
Programacin II
Gua de Laboratorios 6
Ejecutar la aplicacin
EJERCICIO 1:
Crear una solucin en C# con un proyecto de tipo Aplicacin de Windows (Con el nombre CapaDePresentacion, Un proyecto de tipo Biblioteca de clases (con el nombre CapaDeNegocio) Un proyecto de tipo Biblioteca de clases Servicios (Este debe ser agregado como proyecto existente, al igual que el proyecto Utilitarios. Para este laboratorio requiere los proyectos Servicios y Utilitarios. SEGUNDA PARTE: CREANDO LA APLICACIN EN C#
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 7
Comience la aplicacin de C#.Net Creando una nueva solucin en blanco Archivo -> Nuevo Proyecto Otros tipos de proyectos (Soluciones de Visual Studio) Solucin en blanco
Click derecho sobre la solucin Creada en el explorador de Soluciones Agregar Nuevo Prouecto Visual C# Aplicacin para Windows con el nombre CapaDePresentacion
Click derecho sobre la solucin Creada en el explorador de Soluciones Agregar Nuevo proyecto de tipo Biblioteca de Clases con el nombre CapaDeNegocio
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 8
Hasta aqu tenemos dos proyectos en nuestra solucin, ahora agregaremos la tercera capa, la capa de Acceso a datos que esta implementada en el proyecto Servicios, asi como tambin el proyecto utilitarios, Oberve en el explorador de Windows como queda distribuida las carpetas de su solucin.
Dentro de la solucin inventario tenemos las carpetas de los dos proyectos CapaDeNegocio, CapaDePresentacion, ahora copiaremos en la carpeta inventario las dos carpetas adjuntas a este laboratorio (Servicios y Utilitario) de modo tal que quede distribuida de la siguiente manera:
En el explorador de soluciones de Visual Estudio Agregaremos a la solucin los dos proyectos existentes uno por uno, primero el proyecto Servicios
Programacin II
Gua de Laboratorios 9
Programacin II
Gua de Laboratorios 10
Seleccionar el proyecto dentro de la carpeta Servicios (Servicios.csproj) y abrir. Con lo cual en el explorador de soluciones tenemos:
Programacin II
Gua de Laboratorios 11
Finamente tenemos lista nuestra solucin con los proyectos necesarios para programar el modelo en tres capas, para finalizar agregamos las referencias entre los distintos proyectos de la solucin. Click derecho en references del Proyecto CapaDeNegocio Agregar referencia
Programacin II
Gua de Laboratorios 12
Elegir el proyecto Servicios y aceptar Repetir el mismo proceso para agregar otra referencia a Utilitario. En la capa de presentacin Agregar las siguientes referencias: A la CapaDeNegocio, a Servicios y Utilitario. En el proyecto Utilitario debe tener una referencia a Servicio, revisar si ya tiene en caso de no tener agregar una referencia a Servicio. Ahora si ya tenemos, todos los proyectos referenciados y solo queda empezar a programar en diferentes proyectos los cdigos que correspondan segn el modelo de tres capas. (Este resultado se utilizara para los dems proyectos.
Programacin II
Gua de Laboratorios 13
EJERCICIO 1:
Implementar una interfaz grafica de usuario para gestionar Almacenes (Registrar, Modificar, Eliminar, Buscar para la tabla almacn de la base de datos bdinventario.
Ejecutar la consulta para que tengamos una tabla almacn en la base de datos. Crear una nueva consulta para crear el siguiente procedimiento almacenado
Programacin II
Gua de Laboratorios 14
Programacin II
Gua de Laboratorios 15
Obtendr la solucin que contiene los 4 proyectos creados en el laboratorio anterior. Modificando la capa Servicios (gDatos.cs) para cambiar el nombre del servidor de base de datos y la base de datos a la cual nos conectaremos.
Modificamos solo el constructor cambiando los atributos BaseDatos por el nombre de la base de datos en este caso bdinventario, el nombre del servidor . Indicando que es servidor local. Agregamos una nueva clase a la capa de negocio
Programacin II
Gua de Laboratorios 16
Con el nombre Almacen.cs Y modificar con el siguiente cdigo: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient;
namespace CapaDeNegocio { public class Almacen : DAL.TDatosSql { #region "Atributos" Int64 id_almacen; string nombre; #endregion #region "Propiedades" public Almacen() { id_almacen = 0; nombre = ""; } public Int64 pid_almacen { set{id_almacen = value;} get{return id_almacen;} } public string pnombre
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 17
} #endregion #region "Metodos" int ABM(Utilitario.Utilitario._ABM tarea) { int resultado = 0; System.Object[] P = new System.Object[5]; P[0] = tarea; P[1] = pid_almacen; P[2] = pnombre; P[3] = resultado; //llamar a un procedimiento almacenado resultado = Ejecutar("SP_ABMAlmacen", P); return resultado; } public int guardar() { return ABM(Utilitario.Utilitario._ABM.Guardar); } public int eliminar() { return ABM(Utilitario.Utilitario._ABM.Eliminar); } public int modificar() { return ABM(Utilitario.Utilitario._ABM.Modificar); } public DataTable buscarAlmacen(string criterio) { System.Object[] P = new System.Object[1]; P[0] = criterio; return TraerDataTable("SP_buscarAlmacen", P); } public DataTable traerAlmacen() { System.Object[] P = new System.Object[1]; P[0] = pid_almacen; return TraerDataTable("SP_traerAlmacen", P); } #endregion } }
Agregamos una nueva clase a la capa de negocio con el nombre CtrlAlmacen.cs con el siguiente cdigo:
using using using using using System; System.Collections.Generic; System.Text; System.Data; System.Data.SqlClient;
namespace CapaDeNegocio { public class CtrlAlmacen : DAL.TDatosSql { public int guardar(Almacen objAlmacen)
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 18
} }
return objAlmacen.guardar(); } public int modificar(Almacen objAlmacen) { return objAlmacen.modificar(); } public int eliminar(Almacen objAlmacen) { return objAlmacen.eliminar(); } public DataTable buscarAlmacen(string criterio) { Almacen objAlmacen = new Almacen(); criterio = "%" + criterio + "%"; return objAlmacen.buscarAlmacen(criterio); }
Programacin II
Gua de Laboratorios 19
Utilizamos label, TextBox, ToolStrip(Para los botones Nuevo,Modificar,Eliminar, Aceptar) Modificar los nombres por defecto de los controles tbId_Almacen,tbNombre_Almacen,lbEstado,btnNuevo,btnModificar,btnEliminar ,btnAceptar,btnCancelar,btnBuscar,btnSalir Agregamos otro formulario FrmBuscarAlmacen.cs Con la siguiente interfaz grafica al proyecto CapaDePresentacion con el nombre
TextBox, DataGridView,Button A Continuacion el cdigo del formulario FrmBuscarAlmacen.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace CapaDePresentacion { public partial class FrmBuscarAlmacen : Form { public CapaDeNegocio.Almacen Registro = new CapaDeNegocio.Almacen(); public FrmBuscarAlmacen() { InitializeComponent(); } public void ProcesarBuscar(KeyEventArgs e) { if (e.KeyCode == Keys.Enter)
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 20
CapaDeNegocio.CtrlAlmacen objCA = new CapaDeNegocio.CtrlAlmacen(); dataGridView1.DataSource = objCA.buscarAlmacen(tbCriterio.Text); } } private void tbCriterio_KeyDown(object sender, KeyEventArgs e) { ProcesarBuscar(e); } private void btnAceptar_Click(object sender, EventArgs e) { ProcesarAceptar(); } private void ProcesarAceptar() { if (dataGridView1.CurrentRow == null) return; int fila = dataGridView1.CurrentRow.Index; Registro.pid_almacen = (Int64)dataGridView1[0, fila].Value; Registro.pnombre = dataGridView1[1, fila].Value.ToString(); Close(); } private void dataGridView1_DoubleClick(object sender, EventArgs e) { } e) ProcesarAceptar();
private void dataGridView1_KeyDown(object sender, KeyEventArgs { if (e.KeyCode == Keys.Enter) { ProcesarAceptar(); } } private void btnCancelar_Click(object sender, EventArgs e) { Close(); } } }
Ahora que tenemos el formulario FrmBuscarAlmacen programado escribimos el cdigo en el formulario FrmAlmacen.cs
using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing;
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 21
using System.Text; using System.Windows.Forms; namespace CapaDePresentacion { public partial class FrmAlmacen : Form { Utilitario.Utilitario._ABM estado; public FrmAlmacen() { InitializeComponent(); } private void btnSalir_Click(object sender, EventArgs e) { Close(); } private void btnNuevo_Click(object sender, EventArgs e) { controlarNuevo(); } public void controlarNuevo() { habilitarEntradas(true); habilitarOperaciones(false); habilitarAceptarCancelar(true); estado = Utilitario.Utilitario._ABM.Guardar; lbEstado.Text = "NUEVO"; tbId_Almacen.Focus(); } public void habilitarEntradas(bool valor) { tbId_Almacen.Enabled = valor; tbNombre_Almacen.Enabled = valor; } public void habilitarOperaciones(bool valor) { tsBarra.Items["btnNuevo"].Enabled = valor; tsBarra.Items["btnModificar"].Enabled = valor; tsBarra.Items["btnEliminar"].Enabled = valor; tsBarra.Items["btnBuscar"].Enabled = valor; } public void habilitarAceptarCancelar(bool valor) { tsBarra.Items["btnAceptar"].Enabled = valor; tsBarra.Items["btnCancelar"].Enabled = valor; } private void btnModificar_Click(object sender, EventArgs e) { controlarModificar(); } public void controlarModificar() { if (tbId_Almacen.Text != "" ) { habilitarEntradas (true); tbId_Almacen.Enabled = false; habilitarAceptarCancelar (true); habilitarOperaciones (false); estado = Utilitario.Utilitario._ABM.Modificar;
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 22
private void btnEliminar_Click(object sender, EventArgs e) { controlarEliminar(); } public void controlarEliminar() { if (tbId_Almacen.Text != "") { habilitarAceptarCancelar(true); habilitarOperaciones(false); estado = Utilitario.Utilitario._ABM.Eliminar; lbEstado.Text = "ELIMINAR"; } else MessageBox.Show("BUSQUE UN ALMACEN PARA ELIMINAR"); } private void btnCancelar_Click(object sender, EventArgs e) { controlarConsulta(); } public void controlarConsulta() { habilitarEntradas(false); limpiarEntradas(); habilitarOperaciones(true); habilitarAceptarCancelar(false); estado = Utilitario.Utilitario._ABM.Consulta; lbEstado.Text = "CONSULTA"; } public void limpiarEntradas() { tbId_Almacen.Clear(); tbNombre_Almacen.Clear(); } private void frmalmacen_Load(object sender, EventArgs e) { controlarConsulta(); } private void btnAceptar_Click(object sender, EventArgs e) { procesarAceptar(); } public void procesarAceptar() { try { switch (estado) { case Utilitario.Utilitario._ABM.Guardar: procesarGuardar(); break; case Utilitario.Utilitario._ABM.Modificar: procesarModificar();
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 23
} public void procesarGuardar() { CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen(); objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text); objA.pnombre = tbNombre_Almacen.Text; CapaDeNegocio.CtrlAlmacen objCA = new CapaDeNegocio.CtrlAlmacen(); if (objCA.guardar(objA) == 1) MessageBox.Show("ALMACEN GUARDADO"); else MessageBox.Show("NO SE PUDO GUARDAR EL NUEVO ALMACEN"); } public void procesarModificar() { CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen(); objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text); objA.pnombre = tbNombre_Almacen.Text; CapaDeNegocio.CtrlAlmacen objCA = new CapaDeNegocio.CtrlAlmacen(); if (objCA.modificar(objA) == 1) MessageBox.Show("ALMACEN MODIFICADO"); else MessageBox.Show("NO SE PUDO MODIFICAR EL ALMACEN"); } public void procesarEliminar() { CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen(); objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text); objA.pnombre = tbNombre_Almacen.Text; CapaDeNegocio.CtrlAlmacen objCA = new CapaDeNegocio.CtrlAlmacen(); if (objCA.eliminar(objA) == 1) MessageBox.Show("ALMACEN ELIMINADO"); else MessageBox.Show("NO SE PUDO ELIMINAR EL ALMACEN"); } private void btnBuscar_Click(object sender, EventArgs e) { procesarBuscar(); } private void procesarBuscar() { FrmBuscarAlmacen objFrmBuscar = new FrmBuscarAlmacen(); objFrmBuscar.ShowDialog(); if (objFrmBuscar.Registro.pid_almacen != 0) { tbId_Almacen.Text = objFrmBuscar.Registro.pid_almacen.ToString(); tbNombre_Almacen.Text = objFrmBuscar.Registro.pnombre; }
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 24
} } }
Finalmente Cambiamos el nombre del formulario Form1.cs el cual estaba por defecto en la capa de Presentacin le ponemos el nombre de FrmPrincipal.cs Y diseamos la siguiente interfaz. (Utilizamos un menuStrip)
Generamos la solucin que no tenga errores: Y Ejecutamos para probar el ABM de almacenes
Programacin II
Gua de Laboratorios 25
EJERCICIO 1:
En la interfaz grafica de usuario realizada en el laboratorio nro, 3 (Gestin de almacenes) programar las opciones necesarias para que el usuario pueda manejar los comandos nuevo, modificar, eliminar, aceptar, cancelar, buscar mediante el teclado (Sin mouse) Abrir el proyecto de trabajo (Inventario) Abrir en modo diseo el formulario de gestin de almacenes (frmAlmacen.cs) Cambiar la propiedad KeyPreview del formulario por el valor true. Programar el evento KeyDown del formulario por el siguiente cdigo:
private void FrmAlmacen_KeyDown(object sender, KeyEventArgs e) { if (e.Control) { switch (e.KeyCode) { case Keys.N: if (btnNuevo.Enabled) controlarNuevo(); break; case Keys.M: if (btnModificar.Enabled) controlarModificar(); break; case Keys.E: if (btnEliminar.Enabled) controlarEliminar(); break; case Keys.A: if (btnAceptar.Enabled) procesarAceptar(); break; case Keys.C: if (btnCancelar.Enabled) controlarConsulta(); break; case Keys.B: if (btnBuscar.Enabled) procesarBuscar(); break; case Keys.S: if (btnSalir.Enabled) Close(); break; } } }
Programacin II
Gua de Laboratorios 26
Cambiar la propiedad ToolTipText por un texto aclarativo sobre las teclas de acceso rpido para cada uno de los botones de comandos como por ejemplo para el btnNuevo: Ctrl + N, para el btnModificar: Ctrl + M y as sucesivamente para obtener cuando este en ejecucin la siguiente apariencia:
Programacin II
Gua de Laboratorios 27
LABORATORIO Nro. 5 Programacin en Tres Capas Creando Tablas Para la programacin de Ingreso a Inventario (Maestro Detalle)
Objetivos: Crear la tablas necesaria en la base de datos bdinventario en sql server, para la gestin de ingresos a inventario.
EJERCICIO 1:
Crear la tablas del modelo relaciona seleccionado para la materia en sql server y poblar las tablas bsicas mediante la consola de sql server. Abrir Sql Server Management Studio Click derecho sobre la bdinventario y elegir nueva consulta En la consola de sql creada escribir el siguiente script para la creacin de las tablas
--------------- TABLAS DE PROVEEDOR ------------------------create table Pais ( id_pais codigo primary key, nombre_pais varchar(50) ) go create table Proveedor ( id_proveedor codigo primary key, direccion varchar(200) not null, nit codigo, id_pais codigo, foreign key (id_pais) references pais(id_pais) ) go create table Juridico ( id_proveedor codigo, razon_social varchar(200) not null, representante varchar(100) null, primary key (id_proveedor), foreign key (Id_Proveedor) references Proveedor(id_proveedor) ) go create table Natural ( id_proveedor codigo, nombre varchar(30) not null, apellido_paterno varchar(30) not null, apellido_materno varchar(30) not null, fecha_nacimiento datetime not null, primary key (id_proveedor), foreign key (id_proveedor) references Proveedor(id_proveedor) ) GO -------------- TABLAS PARA PRODUCTO-------------------create table TipoProducto ( id_tipoproducto codigo primary key, nombre_tipoproducto varchar(100) not null ) GO create table SubTipoProducto (
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 28
id_subtipoproducto codigo primary key, id_tipoproducto codigo, nombre_subtipoproducto varchar(100) not null, foreign key(id_tipoproducto) references tipoproducto(id_tipoproducto) ) GO Create table Producto ( id_producto codigo primary Key, id_subtipoproducto codigo, nombre_producto varchar(200) not null, costo_producto float, stock_minimo float, stock_maximo float, foreign key (id_subtipoproducto) references subtipoproducto(id_subtipoproducto) ) GO ------------ TABLA PARA EL CONTROL DE EXISTENCIA POR ALMACEN ---Create Table Existencia ( id_almacen codigo, id_producto codigo, stock_producto float not null, primary key (id_almacen,id_producto), foreign key (id_almacen) references Almacen(id_almacen), Foreign key (id_producto) references Producto(id_producto) ) GO ------------ TABLAS PARA EL INGRESO A INVENTARIO --------------Create Table Ingreso ( id_ingreso codigo primary key, fecha_ingreso datetime not null, procesado char(1) not null check(procesado = 'S' OR procesado = 'N'), id_proveedor codigo references Proveedor(Id_Proveedor), id_almacen codigo references Almacen(Id_almacen) ) GO Create Table Detalle_Ingreso ( id_ingreso codigo, id_Producto codigo, cantidad float not null, precio_compra float not null, constraint PKDetalle_Pedido primary key (Id_ingreso,Id_Producto), constraint FkDetalle_Pedido1 foreign key (Id_ingreso) references ingreso, constraint FkDetalle_Pedido2 foreign key (Id_Producto) references Producto ) GO
Seleccionar todo lo escrito (Ctrl + A) y ejecutar (F5) Asegrese que despliegue el mensaje Comandos completados correctamente
Programacin II
Gua de Laboratorios 29
INTO Pais VALUES (1,'Argentina') INTO Pais VALUES (2,'Bolivia') INTO Pais VALUES (3,'Colombia') INTO Pais VALUES (4,'Paraguay')
INSERT INTO PROVEEDOR VALUES (1,'AV. BENI # 325',4613708010,2) INSERT INTO JURIDICO VALUES (1,'DISTRIBUIDORA AGROBOL SRL','LIC. BISMAR MENDEZ') GO INSERT INTO PROVEEDOR VALUES (2,'AV. LAS AMERICAS # 500',6818703011,2) INSERT INTO NATURAL VALUES (2,'JUAN','GONZALES','FUENTES','10/04/1976') GO INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT GO INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO TIPOPRODUCTO TIPOPRODUCTO TIPOPRODUCTO TIPOPRODUCTO TIPOPRODUCTO TIPOPRODUCTO TIPOPRODUCTO TIPOPRODUCTO VALUES(1,'LACTEOS') VALUES(2,'FRUTAS') VALUES(3,'VERDURAS') VALUES(4,'CARAMELOS') VALUES(5,'GASEOSAS') VALUES(6,'CERVEZAS') VALUES(7,'CHOCOLATES') VALUES(8,'CEREALES') VALUES(1,1,'LECHE') VALUES(2,1,'YOGURT') VALUES(3,2,'CITRICOS') VALUES(4,2,'BASICAS') VALUES(5,3,'TOMATES') VALUES(6,3,'CEBOLLA') VALUES(7,3,'BROKOLI')
GO INSERT INTO PRODUCTO LTS.',2.5,10,100) INSERT INTO PRODUCTO LTS.',1.5,2,20) INSERT INTO PRODUCTO LTS.',1.5,2,20) INSERT INTO PRODUCTO INSERT INTO PRODUCTO VASITOS',2.50,10,20)
VALUES (1,1,'LECHE PIL BLANCA BOLSA 1 VALUES (2,1,'LECHE LA CAMPIA BLANCA BOLSA 1 VALUES (3,1,'LECHE DEL CAMPO BLANCA BOLSA 1 VALUES (4,2,'YOGURT PIL 90 CC VASITOS',1.20,10,100) VALUES (5,2,'YOGURT PIL LIGTH 90 CC
LABORATORIO Nro. 6 Programacin en Tres Capas Creando Procedimientos almacenados Para la programacin de Ingreso a Inventario (Maestro Detalle)
Objetivos: Crear los procedimientos almacenados necesarios en la base de datos bdinventario en sql server, para la gestin de ingresos a inventario.
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 30
EJERCICIO 1:
Crear procedimientos almacenados (AMB),(Traer, Busquedas), para cada una de las tablas creadas en el ejercicio del laboratorio 5 Abrir Sql Server Management Studio Click derecho sobre la bdinventario y elegir nueva consulta En la consola de sql creada escribir el siguiente script para la creacin de los procedimientos almacenados
-- PROCEDIMIENTOS ALMACENADOS AMB DE LAS TABLAS CREATE Procedure SP_ABMProveedor @tarea integer,--0=guardar 1=actualizar 2=Eliminar @id_proveedor codigo, @direccion varchar(200), @nit codigo, @id_pais codigo, @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into proveedor values (@id_proveedor ,@direccion,@nit,@id_pais) end if (@tarea=1) begin update proveedor set direccion=@direccion, nit=@nit, id_pais = @id_pais where id_proveedor=@id_proveedor end if (@tarea=2) begin delete from proveedor where id_proveedor=@id_proveedor end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0) end else begin set @resultado=1 return(0) end GO CREATE Procedure SP_ABMJuridico @tarea integer,--1=guardar 2=actualizar 3=Eliminar @id_proveedor codigo, @razon_social varchar(200), @representante varchar(100), @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into juridico values (@id_proveedor ,@razon_social,@representante) end if (@tarea=1) begin
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 31
update juridico set razon_social=@razon_social, representante=@representante where id_proveedor=@id_proveedor end if (@tarea=2) begin delete from juridico where id_proveedor=@id_proveedor end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0) end else begin set @resultado=1 return(0) end GO CREATE Procedure SP_ABMNatural @tarea integer,--0=guardar 1=actualizar 2=Eliminar @id_proveedor codigo, @nombre varchar(30), @apellido_paterno varchar(30), @apellido_materno varchar(30), @fecha_nacimiento datetime, @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into natural values (@id_proveedor ,@nombre,@apellido_paterno,@apellido_materno,@fecha_nacimiento) end if (@tarea=1) begin update natural set nombre=@nombre, apellido_paterno=@apellido_paterno, apellido_materno=@apellido_materno, fecha_nacimiento = @fecha_nacimiento where id_proveedor=@id_proveedor end if (@tarea=2) begin delete from natural where id_proveedor=@id_proveedor end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0) end else begin set @resultado=1 return(0) end GO
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 32
CREATE Procedure SP_ABMTipoProducto @tarea integer,--0=guardar 1=actualizar 2=Eliminar @id_tipoproducto codigo, @nombre_tipoproducto varchar(100), @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into tipoproducto values (@id_tipoproducto ,@nombre_tipoproducto) end if (@tarea=1) begin update tipoproducto set nombre_tipoproducto=@nombre_tipoproducto where id_tipoproducto=@id_tipoproducto end if (@tarea=2) begin delete from tipoproducto where id_tipoproducto=@id_tipoproducto end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0) end else begin set @resultado=1 return(0) end GO CREATE Procedure SP_ABMSubTipoProducto @tarea integer,--0=guardar 1=actualizar 2=Eliminar @id_subtipoproducto codigo, @id_tipoproducto codigo, @nombre_subtipoproducto varchar(100), @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into subtipoproducto values (@id_subtipoproducto,@id_tipoproducto,@nombre_subtipoproducto) end if (@tarea=1) begin update subtipoproducto set id_tipoproducto = @id_tipoproducto, nombre_subtipoproducto=@nombre_subtipoproducto where id_subtipoproducto=@id_subtipoproducto end if (@tarea=2) begin delete from subtipoproducto where id_subtipoproducto=@id_subtipoproducto end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0)
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 33
end else begin set @resultado=1 return(0) end GO CREATE Procedure SP_ABMProducto @tarea integer,--0=guardar 1=actualizar 2=Eliminar @id_producto codigo, @id_subtipoproducto codigo, @nombre_producto varchar(200), @costo_producto float, @stock_minimo float, @stock_maximo float, @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into producto values (@id_producto,@id_subtipoproducto,@nombre_producto, @costo_producto,@stock_minimo,@stock_maximo) end if (@tarea=1) begin update producto set id_subtipoproducto = @id_subtipoproducto, nombre_producto=@nombre_producto, costo_producto = @costo_producto, stock_minimo = @stock_minimo, stock_maximo = @stock_maximo where id_producto=@id_producto end if (@tarea=2) begin delete from producto where id_producto=@id_producto end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0) end else begin set @resultado=1 return(0) end GO CREATE Procedure SP_ABMExistencia @tarea integer,--0=guardar 1=actualizar 2=Eliminar @id_almacen codigo, @id_producto codigo, @stock_producto float, @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into existencia
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 34
values (@id_almacen,@id_producto,@stock_producto) end if (@tarea=1) begin update existencia set stock_producto= @stock_producto where id_almacen = @id_almacen and id_producto=@id_producto end if (@tarea=2) begin delete from existencia where id_almacen = @id_almacen and id_producto=@id_producto end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0) end else begin set @resultado=1 return(0) end GO CREATE Procedure SP_ABMIngreso @tarea integer,--0=guardar 1=actualizar 2=Eliminar @id_ingreso codigo, @fecha_ingreso datetime, @procesado char(1), @id_proveedor codigo, @id_almacen codigo, @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into ingreso values (@id_ingreso,@fecha_ingreso,@procesado, @id_proveedor,@id_almacen) end if (@tarea=1) begin update ingreso set fecha_ingreso= @fecha_ingreso, procesado = @procesado, id_proveedor = @id_proveedor, id_almacen = @id_almacen where id_ingreso = @id_ingreso end if (@tarea=2) begin delete from ingreso where id_ingreso = @id_ingreso end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0) end else begin
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 35
set @resultado=1 return(0) end GO CREATE Procedure SP_ABMDetalle_Ingreso @tarea integer,--0=guardar 1=actualizar 2=Eliminar @id_ingreso codigo, @id_producto codigo, @cantidad float, @precio_compra float, @resultado integer output --1=ok 0=error AS if (@tarea=0) begin insert into detalle_ingreso values (@id_ingreso,@id_producto,@cantidad, @precio_compra) end if (@tarea=1) begin update detalle_ingreso set cantidad= @cantidad, precio_compra = @precio_compra where id_ingreso = @id_ingreso and id_producto = @id_producto end if (@tarea=2) begin delete from detalle_ingreso where id_ingreso = @id_ingreso and id_producto = @id_producto end if (@@error <> 0)--Valor de control de transaccion begin set @resultado=0 return(0) end else begin set @resultado=1 return(0) end GO -- PROCEDIMIENTOS PARA TRAER REGISTROS ------------------Create Procedure SP_TraerProveedor @id_proveedor codigo AS If(@id_proveedor = 0) begin SELECT * from proveedor End Else Begin SELECT * FROM proveedor WHERE id_proveedor = @id_proveedor End GO Create Procedure SP_TraerJuridico @id_proveedor codigo AS
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 36
If(@id_proveedor = 0) begin SELECT * from juridico End Else Begin SELECT * FROM juridico WHERE id_proveedor = @id_proveedor End GO Create Procedure SP_TraerNatural @id_proveedor codigo AS If(@id_proveedor = 0) begin SELECT * from natural End Else Begin SELECT * FROM natural WHERE id_proveedor = @id_proveedor End GO Create Procedure SP_TraerTipoProducto @id_tipoproducto codigo AS If(@id_tipoproducto = 0) begin SELECT * from tipoproducto End Else Begin SELECT * FROM tipoproducto WHERE id_tipoproducto = @id_tipoproducto End GO Create Procedure SP_TraerSubTipoProducto @id_subtipoproducto codigo AS If(@id_subtipoproducto = 0) begin SELECT * from subtipoproducto End Else Begin SELECT * FROM subtipoproducto WHERE id_subtipoproducto = @id_subtipoproducto End GO Create Procedure SP_TraerProducto @id_producto codigo AS If(@id_producto = 0) begin SELECT * from producto End Else
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 37
Begin End GO
Create Procedure SP_TraerExistencia @id_almacen codigo, @id_producto codigo AS If(@id_almacen = 0 and @id_producto = 0) begin SELECT * from existencia End Else Begin SELECT * FROM existencia WHERE id_almacen = @id_almacen and id_producto = @id_producto End GO Create Procedure SP_TraerIngreso @id_ingreso codigo AS If(@id_ingreso = 0) begin SELECT * from ingreso End Else Begin SELECT * FROM ingreso WHERE id_ingreso = @id_ingreso End GO Create Procedure SP_TraerDetalle_Ingreso @id_ingreso codigo AS If(@id_ingreso = 0) begin SELECT * from detalle_ingreso End Else Begin SELECT * FROM detalle_ingreso WHERE id_ingreso = @id_ingreso End GO -- PROCEDIMIENTOS ALMACENADOS PARA LAS BUSQUEDAS -------CREATE PROCEDURE SP_BuscarProveedor @criterio varchar(250) as ( SELECT p.Id_Proveedor, (N.Nombre + ' ' + N.Apellido_Paterno + ' ' + N.Apellido_Materno) as Nombre_proveedor,p.nit,p.direccion,'N' as tipo FROM Proveedor p join Natural N on p.Id_Proveedor=N.Id_Proveedor where (N.Nombre + ' ' + N.Apellido_Paterno + ' ' + N.Apellido_Materno) like @criterio ) union
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 38
SELECT p.Id_Proveedor,j.Razon_Social as NombreProveedor,p.nit,p.direccion,'J' as tipo FROM Proveedor p join Juridico j on p.Id_Proveedor=j.Id_Proveedor WHERE j.Razon_Social like @criterio ) GO CREATE PROCEDURE SP_BuscarProducto @criterio varchar(200) AS Select * from producto where nombre_producto like @criterio GO CREATE PROCEDURE SP_BuscarIngreso @id_ingreso codigo AS Select * from Ingreso where id_ingreso like @id_ingreso GO
EJERCICIO 1:
Crear un reporte bajo el modelo en tres capas que muestre una lista de empleados agrupados por puesto de trabajo.
1.- Agregar a la solucion un nuevo proyecto de tipo class library (Librera de clases nueva) con el nombre reportes 2.- Agregar un nuevo elemento al proyecto reportes de tipo (conjunto de datos) con el nombre DSreportes.xsd (este almacenara los datos para los reportes) Ver grafico .
Programacin II
Gua de Laboratorios 39
3.- Luego abres el DSreportes.xsd y haces click en eplorador de servidores en el enlace que te mostrara el archivo
Veras las conexiones de bases de datos existentes con todas las tablas de la bd. 4.- Arrastra con el mouse cada tabla del explorador de soluciones encima del contenedor del archivo DSreportes.xsd.
Programacin II
Gua de Laboratorios 40
Si las tablas tienen alguna relacin se mostrar la relacin existente mediante una lnea. 5.- Agregar una nueva clase al proyecto reportes con el nombre CtrlReportes.cs Con el siguiente cdigo:
using System; using System.Collections.Generic; using System.Text; using System.Data; namespace Reportes { public class CtrlReportes { public DataSet ListadoAlmacen(Int64 IdAlmacen) { DataSet dsReportes= new DataSet(); Negocio.Almacen objalmacen=new Negocio.Almacen(); objalmacen.pidAlmacen = IdAlmacen; dsReportes.Tables.Add(objalmacen.Traer_Almacen ()); dsReportes.Tables[0].TableName = "Almacen"; return dsReportes; } public DataSet ListadoPedido(Int64 Idpedido) { DataSet dsReportes = new DataSet(); /*pedido*/Negocio.Gestion_de_pedidos.Pedido objpedido = new Negocio.Gestion_de_pedidos.Pedido(); ; objpedido.pId_Pedido = Idpedido; dsReportes.Tables.Add(objpedido.Traer_Pedido ());
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 41
dsReportes.Tables[0].TableName = "Pedido"; /*detalle*/Negocio.Gestion_de_pedidos.Detalle_Pedido objdetalle = new Negocio.Gestion_de_pedidos.Detalle_Pedido(); objdetalle.pId_Pedido = Idpedido; dsReportes.Tables.Add(objdetalle.Traer_DetallePedido()); dsReportes.Tables[1].TableName = "Detalle_Pedido"; /*producto*/Negocio.Gestion_de_productos.Producto objproducto = new Negocio.Gestion_de_productos.Producto(); dsReportes.Tables.Add(objproducto.Traer_producto ()); dsReportes.Tables[2].TableName = "Producto"; /*Proveedor*/Negocio.Gestion_de_proveedor.persistente.Proveedor objproveedor= new Negocio.Gestion_de_proveedor.persistente.Proveedor(); dsReportes.Tables.Add(objproveedor.Traer_proveedor()); dsReportes.Tables[3].TableName = "Proveedor"; /*Proveedor*/Negocio.Gestion_de_proveedor.persistente.Natural objnatural = new Negocio.Gestion_de_proveedor.persistente.Natural(); dsReportes.Tables.Add(objnatural.Traer_Natural ()); dsReportes.Tables[4].TableName = "Natural"; /*TipoProducto*/Negocio.Gestion_de_productos.TipoProducto objtipoProducto = new Negocio.Gestion_de_productos.TipoProducto(); dsReportes.Tables.Add(objtipoProducto.Traer_TipoProducto ()); dsReportes.Tables[5].TableName = "TipoProducto"; /*TipoProducto*/Negocio.Gestion_de_productos.SubTipoProducto objsubtipoProducto =new Negocio.Gestion_de_productos.SubTipoProducto(); dsReportes.Tables.Add(objsubtipoProducto.Traer_SubTipoProducto ()); dsReportes.Tables[6].TableName = "SubTipoProducto"; return dsReportes; }
} }
6.- Agregamos referencias al proyecto reportes con los dems proyectos capadenegocio, utilitarios, servicios. 7.- Agregamos un nuevo elemento al proyecto reportes de tipo crystal report
Programacin II
Gua de Laboratorios 42
Luego se presenta una confirmacin elige reporte en blanco y obtienes el siguiente grafico
Ahora hay que agregar las tablas y los campos que usaremos en el reporte para eso utilizamos la conexin que ya hemos trabajado en el archivo xsd. Click derecho sobre Campos de base de datos y luego Asistente de base de datos como en el grafico anterior.
Programacin II
Gua de Laboratorios 43
Seleccionas datos del proyecto y ADO.NET DATASETS y seleccionas las tablas que necesites para el proyecto y lo pasas a tablas seleccionadas con el mouse (haciendo click en >) Luego haces click en aceptar y te listo ahora solo falta arrastrar los campos disponibles hasta las bandas del reporte donde se quiere que aparezcan. Bueno luego el reporte tiene una parte que dice sesin detalle para este reporte necesitaremos dos sesiones ya que se mostrara tipo maestro detalle empleados que pertenecen a un determinado puesto por lo tango agregamos una nueva sesin de detalle
Programacin II
Gua de Laboratorios 44
Programacin II
Gua de Laboratorios 45
Finalmente arrastramos los campos de las tablas como se quiere que aparezcan en el reporte Puedes agregar etiquetas de texto haciendo click en
Agregamos un nuevo formulario al proyecto reportes con el nombre frmReportes y agregamos un control del tipo:
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 46
Al objeto CrystalReportViewer 1 le pones el nombre de visor En el cdigo asociado al frmreportes programar lo siguiente:
using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;
namespace reportes { public partial class FrmReportes : Form { public FrmReportes() { InitializeComponent(); } public void MostrarReporte() { CtrlReportes CR1 = new CtrlReportes(); switch (Utilitario.Utilitario.Reporte) { case 1 : rptempleadosporpuesto R1 = new rptempleadosporpuesto(); R1.SetDataSource(CR1.ListadoEmpleadoPorPuesto(Utilitario.Utilitario.id_p uesto)); visor.ReportSource = R1; break; case 2: /* aqui los demas reportes
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 47
Reportes.Gestion_de_pedidos.RptPedido objrptpedido=new Reportes.Gestion_de_pedidos.RptPedido(); objrptpedido.SetDataSource(objCtrlReporte.ListadoPedido(Utilitario.Utili tario.Id_Pedido)); visor.ReportSource = objrptpedido; */ break; } } private void FrmReportes_Load(object sender, EventArgs e) { MostrarReporte(); }
} }
Luego declaras una variable gloval id_puesto en Utilitarios namespace Utilitario { public static class Utilitario { #region"Variables Glovales" // para reportes public static Int64 IdAlmacen; public static Int64 Id_Pedido; public static int id_puesto; public static int Reporte; #endregion #region "listas Enumeradas" public enum _ABM { Guardar = 0, Modificar = 1, Eliminar = 2, Consulta = 3, } public enum ListaReportes{ ListadoAlmacen = 0, ListadoProveedor = 1, ListadoPedido = 2, } #endregion #region "metodos" public static Int64 generarcodigo(DateTime dat) { String Hora; String Minuto; String Segundo; if (dat.Hour.ToString().Length == 1) { Hora = "0" + dat.Hour.ToString(); } else { Hora = dat.Hour.ToString(); } if (dat.Minute.ToString().Length == 1) { Minuto = "0" + dat.Minute.ToString(); }
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 48
else { Minuto = dat.Minute.ToString(); } if (dat.Second.ToString().Length == 1) { Segundo = "0" + dat.Second.ToString(); } else { Segundo = dat.Second.ToString(); } return Int64.Parse(dat.Year.ToString() + dat.Month.ToString() + dat.Day.ToString() + Hora + Minuto + Segundo); } public static DateTime leerfecha() { DataTable dtfecha = new DataTable(); DAL.TDatosSql objs=new DAL.TDatosSql(); dtfecha =objs.TraerDataTable("SP_traer_fecha") ; return DateTime.Parse (dtfecha.Rows[0] [0].ToString()); } #endregion }
namespace Capadepresentacion { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void imprimir() { Utilitario.Utilitario.id_puesto = Convert.ToInt32(textBox1.Text); reportes.FrmReportes F = new reportes.FrmReportes(); Utilitario.Utilitario.Reporte = 1; F.Show(); } private void button1_Click(object sender, EventArgs e) { imprimir(); }
Elaborado por erick valverde docente UTEPSA
Programacin II
Gua de Laboratorios 49