Mantenimiento_Datos_Facturas.pdf

24
VISUAL BASIC .NET MANTENIMIENTO DE DATOS REGISTRO DE FACTURAS LABORATORIO PROF. ING. DANTE GARCIA PAGINA 1 OBJETIVO Crear una aplicación para demostrar un caso de mantenimiento de datos con tablas de SQL Server usando procedimientos almacenados. Pasos 1. Abrir la base de datos llamada FACTURACION_NET en SQL Server. 2. 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 INDICE Facturas 0

Transcript of Mantenimiento_Datos_Facturas.pdf

Page 1: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 1

OBJETIVO

Crear una aplicación para demostrar un caso de mantenimiento de datos con tablas de SQL Server usando

procedimientos almacenados.

Pasos

1. Abrir la base de datos llamada FACTURACION_NET en SQL Server.

2. 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 INDICE

Facturas 0

Page 2: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 2

7. Relacionar las tablas considerando el siguiente diagrama:

Page 3: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 3

8. Ingresar registros a la tabla artículos tal como se indica en la siguiente cuadrícula:

Page 4: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 4

9. Crear un procedimiento almacenado llamado SP_NUEVO_CODIGO para generar el nuevo código 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 código:

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 código:

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

Page 5: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 5

GO

12. Crear un store procedure llamado SP_GRABAR_DETALLE_FACTURA en la base de datos para

agregar nuevos clientes, debe tener el siguiente código:

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 código:

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 inserción, debe programar el siguiente código:

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

Page 6: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 6

if (@@error=0)

Begin

commit transaction

print 'Se Actualizo el Stock'

End

else

Begin

rollback transaction

print 'Se Deshizo el Ingreso'

End

15. Diseñar el siguiente formulario:

El formulario debe tener los siguientes controles:

Para Número de Factura un TextBox llamado TXTIDFACTURA, para el DNI Cliente un TextBox

llamado TXTDNI, al costado del DNI del Cliente crear un Botón de Comando llamado Button1, para

Apellidos Cliente un TextBox llamado TXTAPELLIDO, para Dirección un TextBox llamado

TXTDIRECCION, para Nombre de Artículo un ComboBox llamado CMBARTICULOS, al costado de

este ComboBox debe crear un botón de comando llamado BTNARTICULOS, para Plataforma

Operativa un TextBox llamado TXTPLATAFORMA, para Cantidad un TextBox llamado

Page 7: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 7

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.

Además, crear un DataGrid con título 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

presentación:

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 más llamadas:

LBLETIQUETA, LBLRUC, LBLEMAIL.

Crear un ComboBox llamado CmbDistritos, un Button llamado BtnAceptar, y un control DataGrid

llamado DataGrid1.

18. Programar el siguiente código al formulario BUS_CLIENTES_FACT para definir su funcionalidad:

Antes de Public Class:

Imports System.Data

Imports System.Data.SqlClient

Después de Public Class:

Private DS As New DataSet()

Private XIDDISTRITO As String

Page 8: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 8

19. Programar el siguiente código 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

Page 9: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 9

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

Page 10: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 10

Evento Click del botón 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 módulo al proyecto llamado Modulo_Formularios y antes de la sección 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 Módulo las siguientes variables:

Public CN As New SqlConnection()

Public frmbusclientesfact As BUS_CLIENTES_FACT

22. En el Módulo programar la función f_generar_codigo para autogenerar el Código 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

Page 11: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 11

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. Después de la sección Código Generado por el diseñador 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 código:

DS = New DataSet()

Try CN.ConnectionString = "DATA SOURCE=(LOCAL);INITIAL CATALOG=FACTURACION_NET;USER ID=SA" CN.Open()

Page 12: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 12

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 artículos con el siguiente código:

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 código:

Dim IMPORTE As Integer = Val(TXTCANTIDAD.Text) * Val(TXTPRECIO.Text)

TXTIMPORTE.Text = Format(IMPORTE, "###,###.##")

Page 13: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 13

28. Defina el siguiente procedimiento llamado Validar_Opciones con el siguiente código:

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 botón Agregar Item con el siguiente código:

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

Page 14: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 14

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 código:

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 botón de comando Eliminar Item con el siguiente código:

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 código:

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

Page 15: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 15

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 botón Grabar Factura con el siguiente código:

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)

Page 16: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 16

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)

Page 17: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 17

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 botón de comando Button1 del formulario Factura con el siguiente código 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

artículos que no existan cuando se llaman desde la factura, el formulario debe tener el siguiente

diseño:

Page 18: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 18

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 botón de

comando, las etiquetas que están 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 botón Agregar Articulo debe tener el nombre BTNAGREGAR.

Así mismo debe crear un ComboBox llamado CMBPLATAFORMA un botón Volver llamado

BTNACEPTAR y un DataGrid llamado DataGrid1.

37. Programar el siguiente código al formulario BUS_ARTICULOS_FACT para definir su funcionalidad:

Antes de Public Class:

Imports System.Data

Imports System.Data.SqlClient

Después de Public Class:

Private DS As New DataSet()

Private XIDARTICULO As String

38. Programar el siguiente código 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")

Page 19: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 19

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

Page 20: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 20

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)

Page 21: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 21

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

código:

Dim FRMBUS_ARTICULOS As New BUS_ARTICULOS_FACT()

FRMBUS_ARTICULOS.Show()

Page 22: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 22

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

41. Para poner operativo el botón Visualizar previo, debe diseñar un reporte con Crystal Report con la

siguiente presentación:

Page 23: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 23

42. Programar el evento Click del botón Visualizar Previo con el siguiente código:

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")

Page 24: Mantenimiento_Datos_Facturas.pdf

VISUAL BASIC .NET

MANTENIMIENTO DE DATOS

REGISTRO DE FACTURAS

LABORATORIO PROF. ING. DANTE GARCIA

PAGINA 24

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 Botón de Visualizar Previo, se mostrará el reporte de la factura generada tal como se

indica: