Sunteți pe pagina 1din 24

VISUAL BASIC .

NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

OBJETIVO Crear una aplicacin para demostrar un caso de mantenimiento de datos con tablas de SQL Server usando procedimientos almacenados. Pasos 1. 2. Abrir la base de datos llamada FACTURACION_NET en SQL Server. Crear una tabla llamada FACTURA que tenga la siguiente estructura:

3.

Crear otra tabla llamada DETALLE_FACTURA que tenga la siguiente estructura:

4.

Crear otra tabla llamada ARTICULOS que tenga la siguiente estructura:

5.

Crear otra tabla llamada INDICES para controlar la cantidad de facturas ingresadas en el sistema y defina la siguiente estructura:

6.

Mediante el Analizador de Consultas de SQL Server, proceda a ingresar un registro con el comando INSERT para controlar la factura: TABLA Facturas INDICE 0

PAGINA 1

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

7.

Relacionar las tablas considerando el siguiente diagrama:

PAGINA 2

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

8.

Ingresar registros a la tabla artculos tal como se indica en la siguiente cuadrcula:

PAGINA 3

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

9.

Crear un procedimiento almacenado llamado SP_NUEVO_CODIGO para generar el nuevo cdigo de la factura y otros documentos: CREATE PROCEDURE SP_NUEVO_CODIGO @TABLA VARCHAR(20), @INDICE INT OUTPUT AS SELECT @INDICE=INDICE FROM INDICES WHERE TABLA=@TABLA GO

10. Crear un procedimiento SP_INCREMENTAR para actualizar el contador o cantidad de facturas grabadas en el sistema con el siguiente cdigo: CREATE PROCEDURE SP_INCREMENTAR @TABLA VARCHAR(20) AS BEGIN TRANSACTION UPDATE INDICES SET INDICE = INDICE + 1 WHERE TABLA = @TABLA IF @@ERROR = 0 COMMIT TRANSACTION ELSE BEGIN ROLLBACK TRANSACTION END GO 11. Crear un store procedure llamado SP_GRABAR_CABECERA_FACTURA en la base de datos para agregar nuevos clientes, debe tener el siguiente cdigo:
CREATE PROCEDURE SP_GRABAR_CABECERA_FACTURA @XIDFACTURA CHAR(10), @XFECHAFAC DATETIME, @XIGV DECIMAL(12,2), @XSUBTOTAL_FAC DECIMAL(12,2), @XANULADO CHAR(1), @XTRANSFERIDO CHAR(1), @XDESC_FAC DECIMAL(12,2), @XIDCLIENTE CHAR(10) AS BEGIN TRANSACTION INSERT FACTURA (IDFACTURA,FECHAFAC,IGV,SUBTOTAL_FAC,ANULADO,TRANSFERIDO,DESC_FAC,IDCLIENTE) VALUES(@XIDFACTURA,@XFECHAFAC,@XIGV,@XSUBTOTAL_FAC,@XANULADO,@XTRANSFERIDO,@XDES C_FAC,@XIDCLIENTE) IF @@ERROR = 0 COMMIT TRANSACTION ELSE BEGIN ROLLBACK TRANSACTION END

PAGINA 4

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA GO

12. Crear un store procedure llamado SP_GRABAR_DETALLE_FACTURA en la base de datos para agregar nuevos clientes, debe tener el siguiente cdigo:
CREATE PROCEDURE SP_GRABAR_DETALLE_FACTURA @XIDFACTURA CHAR(10), @XIDARTICULO CHAR(10), @XCANT_DET INT, @XPREC_DET DECIMAL(12,2), @XIMPORTE DECIMAL(12,2) AS BEGIN TRANSACTION INSERT DETALLE_FACTURA(IDFACTURA,IDARTICULO,CANT_DET,PREC_DET,IMPORTE) VALUES(@XIDFACTURA,@XIDARTICULO,@XCANT_DET,@XPREC_DET,@XIMPORTE) IF @@ERROR = 0 COMMIT TRANSACTION ELSE BEGIN ROLLBACK TRANSACTION END GO

13. Crear un store procedure llamado SP_FACTURA_DOC en la base de datos para visualizar la factura creada, debe tener el siguiente cdigo: CREATE PROCEDURE SP_FACTURA_DOC @XIDFACTURA CHAR(10) AS SELECT F.IDFACTURA,F.FECHAFAC,C.NOM_CLI,C.APE_CLI, DF.CANT_DET,A.MODELO,A.CARACTERISTICAS,DF.PREC_DET, DF.IMPORTE FROM DETALLE_FACTURA DF,ARTICULOS A,FACTURA F,CLIENTES C WHERE (DF.IDARTICULO=A.IDARTICULO)AND (DF.IDFACTURA=F.IDFACTURA) AND (F.IDCLIENTE=C.IDCLIENTE) AND (F.IDFACTURA=@XIDFACTURA) GO 14. Crear un Trigger llamado Tr_Dismin_STock_F que controle el Stock de los productos para la tabla Detalle de Factura y debe activarse al realizar una insercin, debe programar el siguiente cdigo: create trigger Tr_Dismin_STock_F on Detalle_Factura for Insert as Declare @Idarticulo char(10), @Cant_det int Select @Idarticulo = Idarticulo, @Cant_det = Cant_det from Inserted Begin Transaction Update Articulos Set Stock_arti = Stock_arti - @Cant_det where Idarticulo=@Idarticulo

PAGINA 5

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

if (@@error=0) Begin commit transaction print 'Se Actualizo el Stock' End else Begin rollback transaction print 'Se Deshizo el Ingreso' End 15. Disear el siguiente formulario:

El formulario debe tener los siguientes controles: Para Nmero de Factura un TextBox llamado TXTIDFACTURA, para el DNI Cliente un TextBox llamado TXTDNI, al costado del DNI del Cliente crear un Botn de Comando llamado Button1, para Apellidos Cliente un TextBox llamado TXTAPELLIDO, para Direccin un TextBox llamado TXTDIRECCION, para Nombre de Artculo un ComboBox llamado CMBARTICULOS, al costado de este ComboBox debe crear un botn de comando llamado BTNARTICULOS, para Plataforma Operativa un TextBox llamado TXTPLATAFORMA, para Cantidad un TextBox llamado

PAGINA 6

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

TXTCANTIDAD, para Precio Unitario un TextBox llamado TXTPRECIO, para SubTotal un TextBox llamado TXTIMPORTE, para el otro SubTotal un control TextBox llamado TXTSUB_TOTAL, para IGV un TextBox llamado TXTIGV, para Total Factura un TextBox llamado TXTTOTAL. Crear un CommandButton Agregar Item llamado BTNAGREGAR y configure la propiedad Enabled en False, un CommandButton para Eliminar Item llamado BTNELIMINAR y configure la propiedad Enabled en False, un CommandButton para Grabar Factura llamado BTNGRABAR, un CommandButton para Visualizar Previo llamado BTNPREVIO. Para estos dos ltimos botones ponga la propiedad Enabled en False. Adems, crear un DataGrid con ttulo llamado Detalles de Facturas, debe tener como nombre DataGrid1. 16. El formulario creado debe llamarse FACTURA 17. Agregar otro formulario al sistema llamado BUS_CLIENTES_FACT que tenga la siguiente presentacin:

El formulario debe tener un GroupBox llamado GroupBox1, dentro del GroupBox debe crear seis RadioButtons con los nombres RB_DNI, RB_CODIGO, RB_DISTRITO, RB_NOMBRE, RB_APELLIDO, RB_RUC, hacia la derecha crear un Label1 y dentro de la etiqueta crear tres etiquetas ms llamadas: LBLETIQUETA, LBLRUC, LBLEMAIL. Crear un ComboBox llamado CmbDistritos, un Button llamado BtnAceptar, y un control DataGrid llamado DataGrid1. 18. Programar el siguiente cdigo al formulario BUS_CLIENTES_FACT para definir su funcionalidad: Antes de Public Class: Imports System.Data Imports System.Data.SqlClient Despus de Public Class: Private DS As New DataSet() Private XIDDISTRITO As String

PAGINA 7

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

19. Programar el siguiente cdigo para el resto de controles:


Evento Load del Formulario: Try Dim da As New SqlDataAdapter("SP_BUSCAR_CLIENTES", CN) da.SelectCommand.CommandType = CommandType.StoredProcedure da.Fill(DS, "CLIENTES") DataGrid1.DataSource = DS.Tables("CLIENTES") da = New SqlDataAdapter("SELECT * FROM DISTRITOS", CN) da.Fill(DS, "DISTRITOS") Dim DR As DataRow For Each DR In DS.Tables("DISTRITOS").Rows CMBDISTRITOS.Items.Add(DR("NOM_DIS")) Next da = Nothing Catch EX As Exception MsgBox(EX.Message) End Try Evento CurrentCellChanged del DataGrid1: Try Dim CELDA As New DataGridCell() CELDA = DataGrid1.CurrentCell FRMFACTURAS.TXTDNI.Text = DataGrid1(CELDA.RowNumber, 6) FRMFACTURAS.TXTAPELLIDO.Text = DataGrid1(CELDA.RowNumber, 2) FRMFACTURAS.TXTDIRECCION.Text = DataGrid1(CELDA.RowNumber, 3) DataGrid1.Select(DataGrid1.CurrentRowIndex) LBLETIQUETA.Text = Trim(DataGrid1(CELDA.RowNumber, 1)) + " " + Trim(DataGrid1(CELDA.RowNumber,

2))

LBLRUC.Text = "R.U.C. : " + DataGrid1(CELDA.RowNumber, 5) LBLEMAIL.Text = "E-Mail : " + DataGrid1(CELDA.RowNumber, 7) FRMFACTURAS.IDCLIENTE = DataGrid1(CELDA.RowNumber, 0) 'MsgBox(FRMFACTURAS.IDCLIENTE) Catch EX As Exception MsgBox("Debe Seleccionar Registros validos", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") End Try Evento TextChanged de la caja de Texto TXTBUSCAR If RB_DNI.Checked = True Then Dim DV As New DataView(DS.Tables("CLIENTES")) DV.RowFilter = "DNI_CLI LIKE '" + TXTBUSCAR.Text + "%'" DataGrid1.DataSource = DV DV = Nothing End If If RB_NOMBRE.Checked = True Then Dim DV As New DataView(DS.Tables("CLIENTES")) DV.RowFilter = "NOM_CLI LIKE '" + TXTBUSCAR.Text + "%'" DataGrid1.DataSource = DV DV = Nothing End If If RB_APELLIDO.Checked = True Then

PAGINA 8

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA Dim DV As New DataView(DS.Tables("CLIENTES")) DV.RowFilter = "APE_CLI LIKE '" + TXTBUSCAR.Text + "%'" DataGrid1.DataSource = DV DV = Nothing End If If RB_RUC.Checked = True Then Dim DV As New DataView(DS.Tables("CLIENTES")) DV.RowFilter = "RUC_CLI LIKE '" + TXTBUSCAR.Text + "%'" DataGrid1.DataSource = DV DV = Nothing End If If RB_CODIGO.Checked = True Then Dim DV As New DataView(DS.Tables("CLIENTES")) DV.RowFilter = "IDCLIENTE LIKE '" + TXTBUSCAR.Text + "%'" DataGrid1.DataSource = DV DV = Nothing End If Evento SelectedIndexChanged del ComboBox CmbDistritos: Dim DV As New DataView(DS.Tables("CLIENTES")) DV.RowFilter = "NOM_DIS = '" + CMBDISTRITOS.Text + "'" DataGrid1.DataSource = DV DV = Nothing Evento CheckedChanged del RadioButton RB_DNI: TXTBUSCAR.Visible = True CMBDISTRITOS.Visible = False Evento CheckedChanged del RadioButton RB_CODIGO: TXTBUSCAR.Visible = True CMBDISTRITOS.Visible = False Evento CheckedChanged del RadioButton RB_DISTRITO: TXTBUSCAR.Visible = False CMBDISTRITOS.Visible = True Evento CheckedChanged del RadioButton RB_NOMBRE: TXTBUSCAR.Visible = True CMBDISTRITOS.Visible = False Evento CheckedChanged del RadioButton RB_APELLIDO: TXTBUSCAR.Visible = True CMBDISTRITOS.Visible = False Evento CheckedChanged del RadioButton RB_RUC: TXTBUSCAR.Visible = True CMBDISTRITOS.Visible = False

PAGINA 9

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA Evento Click del botn BTNACEPTAR: FRMFACTURAS.CMBARTICULOS.Enabled = True FRMFACTURAS.BTNARTICULOS.Enabled = True FRMFACTURAS.TXTCANTIDAD.Enabled = True FRMFACTURAS.BTNAGREGAR.Enabled = True FRMFACTURAS.DataGrid1.Enabled = True Me.Close()

20. Agregar Un mdulo al proyecto llamado Modulo_Formularios y antes de la seccin Module programar las siguientes instrucciones para tener acceso a la Arquitectura de Datos y al Cliente de SQL Server y acceder a los objetos de la base de datos de SQL Server. Imports System.Data Imports System.Data.SqlClient 21. Programar en el Mdulo las siguientes variables: Public CN As New SqlConnection() Public frmbusclientesfact As BUS_CLIENTES_FACT 22. En el Mdulo programar la funcin f_generar_codigo para autogenerar el Cdigo de la Factura y otros posibles documentos: Public Function f_generar_codigo(ByVal tabla As String) As String Dim cmd As New SqlCommand() Dim prm As SqlParameter Try cmd.Connection = CN cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "SP_NUEVO_CODIGO" prm = New SqlParameter("@tabla", tabla) prm.SqlDbType = SqlDbType.VarChar : prm.Size = 20 prm.Direction = ParameterDirection.Input cmd.Parameters.Add(prm) prm = New SqlParameter() prm.ParameterName = "@indice" prm.SqlDbType = SqlDbType.Int prm.Direction = ParameterDirection.Output cmd.Parameters.Add(prm) cmd.ExecuteNonQuery() Catch ex As Exception f_generar_codigo = "FALLO" Exit Function End Try Dim xindice As Integer = cmd.Parameters("@indice").Value + 1

PAGINA 10

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

Dim Ncmd As New SqlCommand() Ncmd.CommandText = "SP_INCREMENTAR" Ncmd.CommandType = CommandType.StoredProcedure Ncmd.Connection = CN prm = New SqlParameter("@TABLA", tabla) prm.SqlDbType = SqlDbType.VarChar : prm.Size = 20 prm.Direction = ParameterDirection.Input Ncmd.Parameters.Add(prm) Ncmd.ExecuteNonQuery() Select Case UCase(tabla) Case "USUARIOS" f_generar_codigo = "Usu" + Format(xindice, "000") Case "DISTRITO_LIMA" f_generar_codigo = "Lima-" + Format(xindice, "00") Case "DISTRITO_CALLAO" f_generar_codigo = "Callao-" + Format(xindice, "00") Case "CLIENTES" Return "Cli" + Format(xindice, "000") Case "FACTURAS" f_generar_codigo = Format(xindice, "0000000000") Case "ARTICULOS" f_generar_codigo = "Art" + Format(xindice, "000") Case "BOLETA" f_generar_codigo = Format(xindice, "0000000000") End Select End Function 23. Antes de Public Class declarar las siguientes instrucciones para tener acceso a la Arquitectura de Datos y al Cliente de SQL Server y acceder a los objetos de la base de datos de SQL Server. Imports System.Data Imports System.Data.SqlClient 24. Despus de la seccin Cdigo Generado por el diseador de Windows Form, declarar las siguientes variables: Public Shared DS As DataSet Public Shared IDCLIENTE As String Private IDARTICULO As String 25. Programar el evento Load del formulario con el siguiente cdigo: DS = New DataSet() Try CN.ConnectionString = "DATA SOURCE=(LOCAL);INITIAL CATALOG=FACTURACION_NET;USER ID=SA" CN.Open()

PAGINA 11

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

Dim DT As DataTable DT = New DataTable("Detalle") Dim dc As New DataColumn("Codigo") dc.ReadOnly = True dc.DataType = System.Type.GetType("System.String") DT.Columns.Add(dc) dc = New DataColumn("Descripcion") dc.DataType = System.Type.GetType("System.String") DT.Columns.Add(dc) dc = New DataColumn("Cantidad") dc.DataType = System.Type.GetType("System.Int32") DT.Columns.Add(dc) dc = New DataColumn("Precio") dc.DataType = System.Type.GetType("System.Single") DT.Columns.Add(dc) dc = New DataColumn("Importes") dc.DataType = System.Type.GetType("System.Single") dc.Expression = "precio * cantidad" DT.Columns.Add(dc) DS.Tables.Add(DT) DataGrid1.DataSource = DS.Tables("Detalle") Dim da As New SqlDataAdapter("select * from articulos", CN) da.Fill(DS, "ARTICULOS") Dim DR As DataRow For Each DR In DS.Tables("ARTICULOS").Rows CMBARTICULOS.Items.Add(DR("MODELO")) Next Catch EX As Exception MsgBox(EX.Message) End Try 26. Programar el evento SelectedIndexChanged del ComboBox artculos con el siguiente cdigo: Dim DV As New DataView(DS.Tables("ARTICULOS")) DV.RowFilter = "MODELO='" + CMBARTICULOS.Text + "'" TXTDESCRIPCION.Text = DV.Item(0)("CARACTERISTICAS") IDARTICULO = DV.Item(0)("IDARTICULO") TXTPLATAFORMA.Text = DV.Item(0)("PLATAFORMA") TXTPRECIO.Text = DV.Item(0)("PRE_ARTI") DV = Nothing TXTCANTIDAD.Text = "" TXTCANTIDAD.Focus() 27. Programar el vento TextChanged de la caja de texto Cantidad con el siguiente cdigo: Dim IMPORTE As Integer = Val(TXTCANTIDAD.Text) * Val(TXTPRECIO.Text) TXTIMPORTE.Text = Format(IMPORTE, "###,###.##")

PAGINA 12

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

28. Defina el siguiente procedimiento llamado Validar_Opciones con el siguiente cdigo: Public Sub validar_opciones() If DS.Tables("detalle").Rows.Count = 0 Then BTNELIMINAR.Enabled = False BTNGRABAR.Enabled = False Else BTNELIMINAR.Enabled = True BTNGRABAR.Enabled = True End If End Sub 29. Programar el evento Clic del botn Agregar Item con el siguiente cdigo: If Not IsNumeric(TXTCANTIDAD.Text) Then MsgBox("Debe Ingresar Cantidades Validas", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") Exit Sub End If If CInt(TXTCANTIDAD.Text) <= 0 Then MsgBox("Debe Ingresar Cantidades Validas", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") Exit Sub End If Dim xx As Integer For xx = 0 To DS.Tables("detalle").Rows.Count - 1 If CMBARTICULOS.Text = DS.Tables("detalle").Rows(xx)("descripcion") Then MsgBox("El articulo " + CMBARTICULOS.Text + " ya existe", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SYSTEMA DE FACTURACION .NET") DataGrid1.Select(xx) Exit Sub End If Next Dim DV As New DataView(DS.Tables("ARTICULOS")) DV.RowFilter = "IDARTICULO = '" + IDARTICULO + "'" Dim STOCK As Integer = DV.Item(0)("STOCK_ARTI") DV = Nothing If Val(TXTCANTIDAD.Text) > STOCK Then MsgBox("La cantidad Supera el Stock " + Chr(13) + "Solo hay " + STOCK.ToString + " " + CMBARTICULOS.Text, MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") TXTCANTIDAD.Focus() TXTCANTIDAD.BackColor = Color.Red TXTCANTIDAD.ForeColor = Color.White TXTCANTIDAD.Text = STOCK.ToString Exit Sub End If

PAGINA 13

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

Try Dim dr As DataRow dr = DS.Tables("detalle").NewRow dr("codigo") = IDARTICULO dr("descripcion") = CMBARTICULOS.Text dr("precio") = CSng(TXTPRECIO.Text) dr("cantidad") = CInt(TXTCANTIDAD.Text) DS.Tables("detalle").Rows.Add(dr) TXTCANTIDAD.BackColor = Color.White TXTCANTIDAD.ForeColor = Color.Black Call TOTALES() Catch EX As Exception MsgBox(EX.Message) End Try Call validar_opciones() 30. Crear un procedimiento llamado Totales para calcular los totales de la factura, programarlo con el siguiente cdigo: Public Sub TOTALES() Dim DR As DataRow Dim TOTAL, SUB_TOTAL, XIGV As Single For Each DR In DS.Tables("DETALLE").Rows TOTAL = TOTAL + DR("IMPORTES") Next XIGV = (TOTAL * 0.19) / 1.19 SUB_TOTAL = TOTAL - XIGV TXTSUB_TOTAL.Text = Format(SUB_TOTAL, "###,###.00") TXTIGV.Text = Format(XIGV, "###,###.00") TXTTOTAL.Text = Format(TOTAL, "###,###.00") End Sub 31. Programar el evento Click del botn de comando Eliminar Item con el siguiente cdigo: Dim indice As Integer = DataGrid1.CurrentRowIndex DS.Tables("detalle").Rows(indice).Delete() Call TOTALES() Call validar_opciones() 32. Programar el evento CurrentCellChanged del control DataGrid con el siguiente cdigo: Try DataGrid1.Select(DataGrid1.CurrentRowIndex) Catch ex As Exception MsgBox("Debe Seleccionar registros validos", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") End Try 33. Crear dos procedimientos uno para limpiar controles llamado Limpiar y otro para desactivar controles llamado Opciones: Private Sub limpiar() Dim obj As Object

PAGINA 14

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

For Each obj In Me.Controls If TypeOf obj Is TextBox Then obj.text = "" End If Next DS.Tables("detalle").Clear() End Sub Private Sub opciones() CMBARTICULOS.Enabled = False TXTCANTIDAD.Enabled = False BTNAGREGAR.Enabled = False BTNELIMINAR.Enabled = False End Sub 34. Programar el evento Click del botn Grabar Factura con el siguiente cdigo: If BTNGRABAR.Text = "&Nueva Factura" Then Call limpiar() Call opciones() BTNGRABAR.Text = "&Grabar Factura" BTNGRABAR.Enabled = False BTNPREVIO.Enabled = False Else

BTNGRABAR.Text = "&Nueva Factura" BTNPREVIO.Enabled = True Dim nuevo_codigo As String = f_generar_codigo("FACTURAS") If nuevo_codigo = "FALLO" Then MsgBox("FALLO LA AUTOGENERACION DEL CODIGO") Exit Sub End If TXTIDFACTURA.Text = nuevo_codigo Try Dim CMD As New SqlCommand() CMD.Connection = CN CMD.CommandType = CommandType.StoredProcedure CMD.CommandText = "SP_GRABAR_CABECERA_FACTURA" Dim PRM As New SqlParameter("@XIDFACTURA", TXTIDFACTURA.Text) PRM.SqlDbType = SqlDbType.Char : PRM.Size = 10 PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) PRM = New SqlParameter("@XFECHAFAC", Today) PRM.SqlDbType = SqlDbType.DateTime PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM)

PAGINA 15

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

PRM = New SqlParameter("@XIGV", Val(TXTIGV.Text)) PRM.SqlDbType = SqlDbType.Decimal PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) PRM = New SqlParameter("@XSUBTOTAL_FAC", Val(TXTSUB_TOTAL.Text)) PRM.SqlDbType = SqlDbType.Decimal PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) PRM = New SqlParameter("@XANULADO", "0") PRM.SqlDbType = SqlDbType.Char : PRM.Size = 1 PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) PRM = New SqlParameter("@XTRANSFERIDO", "0") PRM.SqlDbType = SqlDbType.Char : PRM.Size = 1 PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM)

PRM = New SqlParameter("@XDESC_FAC", CSng("0.0")) PRM.SqlDbType = SqlDbType.Decimal PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) PRM = New SqlParameter("@XIDCLIENTE", IDCLIENTE) PRM.SqlDbType = SqlDbType.Char : PRM.Size = 10 PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) CMD.ExecuteNonQuery() Catch EX As Exception MsgBox(EX.Message) Exit Sub End Try Try Dim XX As Integer For XX = 0 To DS.Tables("DETALLE").Rows.Count - 1 Dim CMD As New SqlCommand() Dim PRM As New SqlParameter() CMD.Connection = CN CMD.CommandType = CommandType.StoredProcedure CMD.CommandText = "SP_GRABAR_DETALLE_FACTURA" PRM = New SqlParameter("@XIDFACTURA", Trim(TXTIDFACTURA.Text)) PRM.SqlDbType = SqlDbType.Char : PRM.Size = 10 PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM)

PAGINA 16

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

PRM = New SqlParameter("@XIDARTICULO", DataGrid1(XX, 0)) PRM.SqlDbType = SqlDbType.Char : PRM.Size = 10 PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) PRM = New SqlParameter("@XCANT_DET", DataGrid1(XX, 2)) PRM.SqlDbType = SqlDbType.Int PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) PRM = New SqlParameter("@XPREC_DET", DataGrid1(XX, 3)) PRM.SqlDbType = SqlDbType.Decimal PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) PRM = New SqlParameter("@XIMPORTE", DataGrid1(XX, 4)) PRM.SqlDbType = SqlDbType.Decimal PRM.Direction = ParameterDirection.Input CMD.Parameters.Add(PRM) CMD.ExecuteNonQuery() Next Catch EX As Exception MsgBox(EX.Message) Exit Sub End Try MsgBox("Se Grabo la Factura No : " + TXTIDFACTURA.Text, MsgBoxStyle.Information + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") End If

35. Programar el botn de comando Button1 del formulario Factura con el siguiente cdigo para llamar al formulario que busque los Clientes y llame los datos para la factura: frmbusclientesfact = New BUS_CLIENTES_FACT() frmbusclientesfact.Show() If TXTDNI.Text <> "" Then CMBARTICULOS.Enabled = True End If 36. Agregar al proyecto otro formulario llamado BUS_ARTICULOS_FACT para registrar los productos o artculos que no existan cuando se llaman desde la factura, el formulario debe tener el siguiente diseo:

PAGINA 17

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

Para que el formulario quede como tal, debe crear los siguientes controles: El formulario debe tener un GroupBox llamado GroupBox1, dentro del GroupBox debe crear tres RadioButtons con los nombres RB_CODIGO, RB_MODELO y RB_PLATAFORMA, hacia la derecha crear otro GroupBox llamado GroupBox2 con siete etiquetas, una caja de texto y un botn de comando, las etiquetas que estn con bordes deben tener los siguientes nombres: LBLARTICULO, LBLPRECIO y LBLIMPORTE, para la caja de texto al lado de Cantidad debe tener el nombre TXTCANTIDAD y para el botn Agregar Articulo debe tener el nombre BTNAGREGAR. As mismo debe crear un ComboBox llamado CMBPLATAFORMA un botn Volver llamado BTNACEPTAR y un DataGrid llamado DataGrid1. 37. Programar el siguiente cdigo al formulario BUS_ARTICULOS_FACT para definir su funcionalidad: Antes de Public Class: Imports System.Data Imports System.Data.SqlClient Despus de Public Class: Private DS As New DataSet() Private XIDARTICULO As String 38. Programar el siguiente cdigo para el resto de controles:
Private Sub BUS_ARTICULOS_FACT_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim da As New SqlDataAdapter("select * from articulos", CN) da.Fill(DS, "Articulos") DataGrid1.DataSource = DS.Tables("ARTICULOS")

PAGINA 18

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA da = New SqlDataAdapter("select distinct plataforma from articulos", CN) da.Fill(DS, "PLATAFORMA") Dim DR As DataRow For Each DR In DS.Tables("PLATAFORMA").Rows CMBPLATAFORMA.Items.Add(DR("PLATAFORMA")) Next End Sub Private Sub TXTBUSCAR_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TXTBUSCAR.TextChanged If RB_CODIGO.Checked = True Then Dim DV As New DataView(DS.Tables("ARTICULOS")) DV.RowFilter = "IDARTICULO LIKE '" + TXTBUSCAR.Text + "%'" DataGrid1.DataSource = DV DV = Nothing End If If RB_MODELO.Checked = True Then Dim DV As New DataView(DS.Tables("ARTICULOS")) DV.RowFilter = "MODELO LIKE '" + TXTBUSCAR.Text + "%'" DataGrid1.DataSource = DV DV = Nothing End If End Sub Private Sub RB_CODIGO_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RB_CODIGO.CheckedChanged TXTBUSCAR.Visible = True CMBPLATAFORMA.Visible = False TXTBUSCAR.Focus() End Sub Private Sub RB_MODELO_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RB_MODELO.CheckedChanged TXTBUSCAR.Visible = True CMBPLATAFORMA.Visible = False TXTBUSCAR.Focus() End Sub Private Sub RB_PLATAFORMA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RB_PLATAFORMA.CheckedChanged TXTBUSCAR.Visible = False CMBPLATAFORMA.Visible = True End Sub Private Sub CMBPLATAFORMA_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CMBPLATAFORMA.SelectedIndexChanged Dim DV As New DataView(DS.Tables("ARTICULOS")) DV.RowFilter = "PLATAFORMA = '" + CMBPLATAFORMA.Text + "'" DataGrid1.DataSource = DV DV = Nothing End Sub Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged Try

PAGINA 19

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA Dim CELDA As DataGridCell CELDA = DataGrid1.CurrentCell XIDARTICULO = DataGrid1(CELDA.RowNumber, 0) LBLARTICULO.Text = DataGrid1(CELDA.RowNumber, 1) lblprecio.Text = DataGrid1(CELDA.RowNumber, 4) DataGrid1.Select(DataGrid1.CurrentRowIndex) Catch ex As Exception MsgBox("Debe Seleccionar Registros validos", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") End Try TXTCANTIDAD.Focus() End Sub

Private Sub BTNAGREGAR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNAGREGAR.Click If Not IsNumeric(TXTCANTIDAD.Text) Then MsgBox("Debe Ingresar Cantidades Validas", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") Exit Sub End If If CInt(TXTCANTIDAD.Text) <= 0 Then MsgBox("Debe Ingresar Cantidades Validas", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") Exit Sub End If Dim xx As Integer For xx = 0 To FRMFACTURAS.DS.Tables("detalle").Rows.Count - 1 If LBLARTICULO.Text = FRMFACTURAS.DS.Tables("detalle").Rows(xx)("descripcion") Then MsgBox("El articulo " + LBLARTICULO.Text + " ya existe", MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SYSTEMA DE FACTURACION .NET") FRMFACTURAS.DataGrid1.Select(xx) Exit Sub End If Next Dim DV As New DataView(DS.Tables("ARTICULOS")) DV.RowFilter = "IDARTICULO = '" + XIDARTICULO + "'" Dim STOCK As Integer = DV.Item(0)("STOCK_ARTI") DV = Nothing If Val(TXTCANTIDAD.Text) > STOCK Then MsgBox("La cantidad Supera el Stock " + Chr(13) + "Solo hay " + STOCK.ToString + " " + LBLARTICULO.Text, MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "SISTEMA DE FACTURACION .NET") TXTCANTIDAD.Focus() TXTCANTIDAD.BackColor = Color.Red TXTCANTIDAD.ForeColor = Color.White TXTCANTIDAD.Text = STOCK.ToString Exit Sub End If Try Dim dr As DataRow dr = FRMFACTURAS.DS.Tables("detalle").NewRow dr("codigo") = XIDARTICULO dr("descripcion") = LBLARTICULO.Text dr("precio") = CSng(lblprecio.Text)

PAGINA 20

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA dr("cantidad") = CInt(TXTCANTIDAD.Text) FRMFACTURAS.DS.Tables("detalle").Rows.Add(dr) FRMFACTURAS.TXTCANTIDAD.BackColor = Color.White FRMFACTURAS.TXTCANTIDAD.ForeColor = Color.Black Call FRMFACTURAS.TOTALES() Catch EX As Exception MsgBox(EX.Message) End Try Call FRMFACTURAS.validar_opciones() End Sub Private Sub TXTCANTIDAD_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TXTCANTIDAD.TextChanged Dim importe As Integer importe = Val(lblprecio.Text) * Val(TXTCANTIDAD.Text) lblimporte.Text = Format(importe, "###,###.00") End Sub

Private Sub BTNACEPTAR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNACEPTAR.Click Me.Close() End Sub

39. Programar el boton de comando llamado BTNARTICULOS del formulario Facturas con el siguiente cdigo: Dim FRMBUS_ARTICULOS As New BUS_ARTICULOS_FACT() FRMBUS_ARTICULOS.Show()

PAGINA 21

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

40. Al ejecutar el proyecto proceder a elaborar una factura tal como se indica en el siguiente modelo:

41. Para poner operativo el botn Visualizar previo, debe disear un reporte con Crystal Report con la siguiente presentacin:

PAGINA 22

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

42. Programar el evento Click del botn Visualizar Previo con el siguiente cdigo: Try Dim DS_PREVIO As New DataSet() Dim PRM As SqlParameter Dim DA As New SqlDataAdapter("SP_FACTURA_DOC", CN) DA.SelectCommand.CommandType = CommandType.StoredProcedure PRM = New SqlParameter("@XIDFACTURA", Trim(TXTIDFACTURA.Text)) PRM.SqlDbType = SqlDbType.Char : PRM.Size = 10 PRM.Direction = ParameterDirection.Input DA.SelectCommand.Parameters.Add(PRM) DA.SelectCommand.ExecuteNonQuery() '-----------------------------------------DA.Fill(DS_PREVIO, "FACTURA")

PAGINA 23

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS

LABORATORIO
PROF. ING. DANTE GARCIA

Dim reporte_factura As New RPT_FACTURA() Dim V_FACTURA As New REPORTE() reporte_factura.SetDataSource(DS_PREVIO.Tables("FACTURA")) V_FACTURA.CrystalReportViewer1.ReportSource = reporte_factura V_FACTURA.MdiParent = FRMPRINCIPAL V_FACTURA.Text = "Factura No : " + Me.TXTIDFACTURA.Text V_FACTURA.Show() DS_PREVIO = Nothing Catch EX As Exception MsgBox(EX.Message) Exit Sub End Try 43. Al presionar el Botn de Visualizar Previo, se mostrar el reporte de la factura generada tal como se indica:

PAGINA 24

S-ar putea să vă placă și