Este documento describe un proyecto para desarrollar un formulario de facturación y boleta en Visual Basic 2010 y SQL Server 2005. Incluye código para crear tablas en la base de datos para almacenar información de clientes, empleados, cabeceras de documentos y detalles. También incluye código de la aplicación en Visual Basic para ingresar, buscar, editar y generar documentos, así como un reporte en Crystal Reports.
1. FACTURA & BOLETA
ROYER TUESTA SALAS Página 1
PROYECTOPARADESARROLLARUNFORMULARIODEFACTURACION
DONDE MANEJAMOS BOLETA Y FACTURA
ESTE ES UN PROYECTO HECHO EN VISUAL BASIC 2010 y sql server 2005.
El proyecto está orientado hacia todas las personas que quieran disponer de
ideas, conocimientos, ejemplos y una visión tecnológica de lo que concierne a
lo que es un sistema basado en ejercicios propuestos y al mismo tiempo
resuelto, que esta codificado para soportar todo tipo de acciones del usuario en
general.
2. FACTURA & BOLETA
ROYER TUESTA SALAS Página 2
FACTURA – BOLETA
BD. SQL SERVER
CREATE DATABASESISTEMA
GO
USE SISTEMA
GO
CREATE TABLE CLIENTES
(IDCLI VARCHAR(5)NOTNULL,
NOMBRE VARCHAR(20)NOTNULL,
APELLIDOSVARCHAR(50)NOTNULL,
SEXO VARCHAR(1)NULL,
PrimaryKey (IDCLI))
GO
INSERT INTOCLIENTES VALUES('C0001','LUIS','GOMEZ','M')
INSERT INTOCLIENTES VALUES('C0002','CARLOS','SANCHEZ','M')
INSERT INTOCLIENTES VALUES('C0003','ELIANA','CASTRO','M')
GO
CREATE TABLE EMPLEADOS
(IDEMP VARCHAR(5)NOTNULL,
NOMBRE VARCHAR(20)NOTNULL,
APELLIDOS VARCHAR(50)NOTNULL,
SEXO VARCHAR(1)NULL,
PrimaryKey (IDEMP))
GO
INSERT INTOEMPLEADOS VALUES('E0001','LUIS','GOMEZ','M')
INSERT INTOEMPLEADOS VALUES('E0002','FERNANDA','PEREZ','M')
INSERT INTOEMPLEADOS VALUES('E0003','LUISA','VERASTEGUI','M')
GO
--DOCUMENTO--
CREATE TABLE CAB_DOCUMENTO
(NDOCVARCHAR(5) NOT NULL,
TIP_DOC VARCHAR(30) NOTNULL,
IDCLI VARCHAR(5) NOTNULL,
IDEMP VARCHAR(5)NOTNULL,
FECHA DATETIME NOT NULL,
SUBTOTAL REAL NULL,
IGV REAL NULL,
3. FACTURA & BOLETA
ROYER TUESTA SALAS Página 3
TOTAL REAL NULL,
ESTADO VARCHAR(20) NOTNULL,
PRIMARY KEY(NDOC,TIP_DOC))
GO
CREATE TABLE DETALLE_DOCUMENTO(
NDOCVARCHAR(5)NOTNULL,
TIP_DOC VARCHAR(30) NOT NULL,
ITEM INT NOTNULL,
PRODUCTO VARCHAR(20) NOTNULL,
PRECIOREAL NULL,
CANTIDADINTNULL,
PRIMARY KEY(ITEM,NDOC,TIP_DOC))
GO
ALTER TABLE CAB_DOCUMENTO
ADD FOREIGN KEY(IDCLI) REFERENCES CLIENTES
ALTER TABLE CAB_DOCUMENTO
ADD FOREIGN KEY(IDEMP) REFERENCES EMPLEADOS
ALTER TABLE DETALLE_DOCUMENTO
ADD FOREIGN KEY (NDOC,TIP_DOC) REFERENCES CAB_DOCUMENTO
GO
--CREACION DE LA TABLA GENERADOR
GO
CREATE TABLE GENERADOR(
PARAMETRO Varchar(40) Not Null,
ULTIMO Int Null
)
GO
-- INSERCCION DE DATOS EN LA TABLA GENERADOR
INSERT INTO GENERADOR values('DOCUMENTO',0)
GO
CREATE PROCEDURE SP_MANTEDOCUMENTO
@NDO VARCHAR (5),
@TIP VARCHAR (30),
@IDC VARCHAR(5),
@IDE VARCHAR (5),
@FEC DATETIME ,
@SUBTOT REAL,
@IGV REAL,
@TOT REAL,
@EST VARCHAR(20)
AS
BEGIN
INSERT INTO CAB_DOCUMENTO VALUES (@NDO, @TIP, @IDC,@IDE, @FEC,@SUBTOT,@IGV,@TOT,@EST)
END
GO
SELECT * FROM CLIENTES
SELECT * FROM EMPLEADOS
SELECT * FROM CAB_DOCUMENTO
SELECT * FROM DETALLE_DOCUMENTO
SELECT * FROM GENERADOR
5. FACTURA & BOLETA
ROYER TUESTA SALAS Página 5
CODIGO Facturacion (Form1.vb)
ImportsSystem.Data.SqlClient
PublicClassFacturacion
Dim filaAsInteger= -1
Dim TIPOAs String= ""
Dim D As Integer=0
Dim pre As Double
Private SubForm1_Load(ByVal senderAsSystem.Object, ByVale AsSystem.EventArgs) HandlesMyBase.Load
Me.txtFecha.Text=Now
End Sub
Private SubbtnAgregar_Click(ByVal senderAsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnAgregar.Click
Me.DatosGrid.Rows.Add("")
End Sub
Private SubbtnQuitar_Click(ByVal senderAsSystem.Object, ByVal e AsSystem.EventArgs)Handles btnQuitar.Click
If fila<> -1 Then
Me.DatosGrid.Rows.RemoveAt(fila)
fila= -1
Else
MsgBox("Debe eliminarunafila")
EndIf
End Sub
Private SubbtnGrabar_Click(ByValsenderAsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnGrabar.Click
Try
'CONDICIONESEN BOLETA
If radBoleta.Checked=True Then
TIPO = "BOLETA"
End If
If radFactura.Checked=True Then
TIPO = "FACTURA"
End If
'CABECERA
cn.Open()
Dimcmd As NewSqlCommand("SP_MANTEDOCUMENTO",cn)
Dimprm As NewSqlParameter
Withcmd
.CommandType =CommandType.StoredProcedure
7. FACTURA & BOLETA
ROYER TUESTA SALAS Página 7
cn.Close()
cmd2.Dispose()
Next
MsgBox("DocumentoAlmacenado")
'ACTUALIZAR
Dimcmd3 AsNew SqlCommand("UPDATEGENERADORSETULTIMO = ULTIMO + 1 WHERE PARAMETRO =
'DOCUMENTO'", cn)
cn.Open()
cmd3.ExecuteNonQuery()
cn.Close()
cmd3.Dispose()
pre = 0
Catch ex AsException
MsgBox(ex.Message)
cn.Close()
EndTry
End Sub
Private SubbtnBusCliente_Click(ByValsenderAsSystem.Object, ByVal e AsSystem.EventArgs) Handles
btnBusCliente.Click
Try
DimNR As Integer=-1
DimCodigoAsString= ""
Codigo= InputBox("IngreseCliente:")
DimDa1 As New SqlDataAdapter("select*from CLIENTESwhere IdCLI= '" + Codigo+ "'", cn)
Da1.Fill(dsEntorno, "Busq1")
NR = dsEntorno.Tables("Busq1").Rows.Count
If NR > 0 Then
Me.txtCodCli.Text=dsEntorno.Tables("Busq1").Rows(0)(0)
Me.txtNomCli.Text=dsEntorno.Tables("Busq1").Rows(0)(1)
Else
MsgBox("Cliente noExiste")
End If
dsEntorno.Tables("Busq1").Rows.Clear()
Catch ex AsException
MsgBox(ex.Message)
EndTry
End Sub
Private SubbtnBusEmpleado_Click(ByValsenderAsSystem.Object, ByVal e AsSystem.EventArgs) Handles
btnBusEmpleado.Click
Try
DimNR As Integer=-1
8. FACTURA & BOLETA
ROYER TUESTA SALAS Página 8
DimCodigoAsString= ""
Codigo= InputBox("IngreseEmpleado:")
DimDa1 As New SqlDataAdapter("select*from EMPLEADOS where IDEMP= '" + Codigo+ "'", cn)
Da1.Fill(dsEntorno,"Busq2")
NR = dsEntorno.Tables("Busq2").Rows.Count
If NR > 0 Then
Me.txtCodEmpl.Text=dsEntorno.Tables("Busq2").Rows(0)(0)
Me.txtNomEmp.Text=dsEntorno.Tables("Busq2").Rows(0)(1)
Else
MsgBox("EmpleadonoExiste")
End If
dsEntorno.Tables("Busq2").Rows.Clear()
Catch ex AsException
MsgBox(ex.Message)
MsgBox(ex.ToString)
EndTry
End Sub
Private SubbtnNuevo_Click(ByVal senderAsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnNuevo.Click
Call limpiar()
Me.txtNum.Text=Generadores("DOCUMENTO")
End Sub
Sub limpiar()
Me.txtNum.Text=""
Me.txtCodCli.Text=""
Me.txtNomCli.Text=""
Me.txtCodEmpl.Text=""
Me.txtNomEmp.Text=""
Me.txtSubTotal.Text=""
Me.txtIgv.Text=""
Me.txtTotal.Text=""
Me.cbEstado.Text=""
Me.DatosGrid.Rows.Clear()
Me.DatosGrid.DataSource =Nothing
D = 0
End Sub
Private SubDatosGrid_CellClick(ByVal senderAsObject,ByVal e AsSystem.Windows.Forms.DataGridViewCellEventArgs)
Handles DatosGrid.CellClick
fila= e.RowIndex
End Sub
Private SubDatosGrid_CellEnter(ByValsenderAsObject,ByVal e AsSystem.Windows.Forms.DataGridViewCellEventArgs)
Handles DatosGrid.CellEnter
9. FACTURA & BOLETA
ROYER TUESTA SALAS Página 9
Try
If (DatosGrid.Rows(D).Cells(2).Value >0) Then
Me.DatosGrid.Rows(D).Cells(3).Value=Me.DatosGrid.Rows(D).Cells(2).Value *
Me.DatosGrid.Rows(D).Cells(1).Value
End If
If (radBoleta.Checked=True) Then
If (DatosGrid.Rows(D).Cells(3).Value >0) Then
pre = pre + DatosGrid.Rows(D).Cells(3).Value
Me.txtSubTotal.Text = pre
Me.txtIgv.Text = 0
Me.txtTotal.Text = Me.txtSubTotal.Text
D = D + 1
End If
ElseIf (radFactura.Checked = True) Then
If (DatosGrid.Rows(D).Cells(3).Value > 0) Then
pre = pre + DatosGrid.Rows(D).Cells(3).Value
Me.txtSubTotal.Text = pre
Me.txtIgv.Text = (Val(Me.txtSubTotal.Text) * 0.19)
Me.txtTotal.Text = (Val(Me.txtSubTotal.Text) + Val(Me.txtIgv.Text))
D = D + 1
End If
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnImprimir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnImprimir.Click
tipoDocu = cbTipoDocu.SelectedItem
codDocu = txtCodigoDocu.Text
frmImprimir.Show()
End Sub
End Class
MODULO DE CONEXION Y AUTOGENERADOR DECODIGO (Generar.vb)
ImportsSystem.Data.SqlClient
Module Generar
Publiccn AsNew SqlConnection("server=localhost;database=SISTEMA;integratedsecurity=true")
PublicdsEntorno AsNew DataSet
PublictipoDocu AsString
PubliccodDocuAs String
PublicFunction Generadores(ByValTABLA AsString) AsString
DimRESULT AsString = ""
DimDR1 AsSqlDataReader
10. FACTURA & BOLETA
ROYER TUESTA SALAS Página 10
DimULT As Integer=0
DimCMD AsNew SqlCommand("SELECTULTIMO FROMGENERADOR WHERE PARAMETRO= '" + TABLA + "'", cn)
cn.Open()
DR1 = CMD.ExecuteReader
While DR1.Read
ULT = Val(DR1("ULTIMO") + 1)
EndWhile
cn.Close()
DimCEROS AsInteger
CEROS = 5 - Len(Str(ULT))
Select Case CEROS
Case 3 : RESULT = Left(TABLA, 1) + "000" + Trim(Str(ULT))
Case 2 : RESULT = Left(TABLA, 1) + "00" + Trim(Str(ULT))
Case 1 : RESULT = Left(TABLA, 1) + "0" + Trim(Str(ULT))
Case 0 : RESULT = Left(TABLA, 1) + "" + Trim(Str(ULT))
End Select
Generadores = RESULT
End Function
End Module
12. FACTURA & BOLETA
ROYER TUESTA SALAS Página 12
FORMULARIO PARAVISUALIZAREL REPORTE (FrmImprimir.vb)
CODIGO DE FrmImprimir
ImportsSystem.Data.SqlClient
PublicClassfrmImprimir
Dim Cn AsNew SqlConnection("Server=LocalHost;Uid=sa;Password=123;Database=SISTEMA")
Dim INFORME1 AsReporte
Dim MITABLA AsCrystalDecisions.CrystalReports.Engine.Table
Dim MILOGIN AsCrystalDecisions.Shared.TableLogOnInfo
Private SubfrmImprimir_Load(ByVal senderAsSystem.Object, ByVal e AsSystem.EventArgs)Handles MyBase.Load
Try
INFORME1 = New Reporte
For Each Me.MITABLA InINFORME1.Database.Tables
MILOGIN = MITABLA.LogOnInfo
MILOGIN.ConnectionInfo.Password="123"
MILOGIN.ConnectionInfo.UserID="sa"
MITABLA.ApplyLogOnInfo(MILOGIN)
13. FACTURA & BOLETA
ROYER TUESTA SALAS Página 13
Next
Me.CrystalReportViewer1.ReportSource =INFORME1
INFORME1.RecordSelectionFormula="{CAB_DOCUMENTO.TIP_DOC}='" + tipoDocu+ "' And
{DETALLE_DOCUMENTO.NDOC}='" + codDocu + "'"
Catch ex AsException
MessageBox.Show(ex.Message)
EndTry
End Sub
End Class