Professional Documents
Culture Documents
GUÍA DE LABORATORIO N° 05
OBJETIVOS: Uso de las Clases: DataTable, DataRow, DataColumn, Creación y uso de Objetos: Formularios de
Mantenimiento Maestro-Detalle, Uso de Objetos temporales en el Servidor. Cursores de Servidor SQL y DataSet,
Control de Excepciones en el Servidor y en el Cliente.
b) El ToolStrip, es decir la barra de Herramientas (nuevo, guardar, etc..) deberá agregar los objetos y
establecer los nombres según se observa a continuación:
d) En el formulario principal agregar los enlaces para la barra de Menú. Escriba el siguiente código:
@totfac float,
@codcli varchar(5),
@codemp varchar(5),
@estado bit
)
as
begin transaction
INSERT INTO Factura (nrofac,fechfac,subtot,totigv,totfac,codcli,codemp,estado)
VALUES (@nrofac,@fechfac,@subtot,@totigv,@totfac,@codcli,@codemp,@estado)
if @@error=0
Commit Transaction
else
Rollback Transaction
Biblioteca de Clase:
cmD.Connection = Conexion
cmA.Connection = Conexion
If flag = 1 Then ' Nuevo
'asignando procedimientos almacenados
cmF.CommandType = CommandType.StoredProcedure
cmF.CommandText = "AgregarFactura"
cmD.CommandType = CommandType.StoredProcedure
cmD.CommandText = "AgregarDetalle"
cmA.CommandType = CommandType.StoredProcedure
cmA.CommandText = "ActualizarStock"
oper = " insertados: "
Else ' Editar
cmF.CommandType = CommandType.StoredProcedure
cmF.CommandText = "ModificarFactura"
cmD.CommandType = CommandType.StoredProcedure
cmD.CommandText = "ModificarDetalle"
oper = " modificados: "
End If
Try
'Para toda factura nueva el estado es activo
estado = True
cmF.Parameters.Add(New SqlParameter("@nrofac", SqlDbType.VarChar))
cmF.Parameters.Add(New SqlParameter("@fechfac", SqlDbType.DateTime))
cmF.Parameters.Add(New SqlParameter("@subtot", SqlDbType.Float))
cmF.Parameters.Add(New SqlParameter("@totigv", SqlDbType.Float))
cmF.Parameters.Add(New SqlParameter("@totfac", SqlDbType.Float))
cmF.Parameters.Add(New SqlParameter("@codcli", SqlDbType.VarChar))
cmF.Parameters.Add(New SqlParameter("@codemp", SqlDbType.VarChar))
cmF.Parameters.Add(New SqlParameter("@estado", SqlDbType.Bit))
cmF.Parameters("@fechfac").Value = Me.dtpFechFac.Value.ToShortTimeString
cmF.Parameters("@nrofac").Value = Me.lblNroFactura.Text
cmF.Parameters("@subtot").Value = Me.txtSubTot.Text
cmF.Parameters("@totigv").Value = Me.txtTotIgv.Text
cmF.Parameters("@totfac").Value = Me.txtTotFac.Text
cmF.Parameters("@codcli").Value = Me.txtCodCli.Text
cmF.Parameters("@codemp").Value = Me.txtCodEmp.Text
cmF.Parameters("@estado").Value = estado
Conexion.Open()
resultado = cmF.ExecuteNonQuery
'Para detalle
Dim i As Integer
cmD.Parameters.Add(New SqlParameter("@nrofac", SqlDbType.VarChar))
cmD.Parameters.Add(New SqlParameter("@codart", SqlDbType.VarChar))
cmD.Parameters.Add(New SqlParameter("@candet", SqlDbType.Money))
cmD.Parameters.Add(New SqlParameter("@impdet", SqlDbType.Money))
For i = 0 To nart - 1
cmD.Parameters("@nrofac").Value = Me.dgvDetalleFactura.Item(0, i).Value
cmD.Parameters("@codart").Value = Me.dgvDetalleFactura.Item(1, i).Value
cmD.Parameters("@candet").Value = Me.dgvDetalleFactura.Item(2, i).Value
cmD.Parameters("@impdet").Value = Me.dgvDetalleFactura.Item(3, i).Value
resultado = cmD.ExecuteNonQuery
Next
'actualiza el stock
Dim strdato1 As String
Dim fila1, x As Integer
Dim dv1 As New DataView()
Dim objDatarow As DataRow
Dim stock, nuevostock As Double
cmA.Parameters.Add(New SqlParameter("@codart", SqlDbType.VarChar))
cmA.Parameters.Add(New SqlParameter("@stoart", SqlDbType.VarChar))
For i = 0 To nart - 1
strdato1 = Me.dgvDetalleFactura.Item(1, i).Value
dv1.Table = objDataSet.Tables("articulo")
dv1.Sort = "codart"
fila1 = dv1.Find(strdato1)
If fila1 = -1 Then
MsgBox("no existe")
Else
objDatarow = objDataSet.Tables("articulo").Rows(fila1)
stock = objDatarow("stoart")
nuevostock = stock - Val(Me.dgvDetalleFactura.Item(2, i).Value)
cmA.Parameters("@codart").Value = Me.dgvDetalleFactura.Item(1, i).Value
cmA.Parameters("@stoart").Value = nuevostock
x = cmA.ExecuteNonQuery
End If
Next
Catch exc As Exception
MessageBox.Show(exc.Message)
End Try
Conexion.Close()
Actualizar()
ActivarControl(False)
ActivarBoton(True)
EnlazaGrilla()
Desplazar(1)
End Sub
Public Sub cancelar()
Conexion.Open()
objDataSet.RejectChanges()
Conexion.Close()
Desplazar(2)
ActivarControl(False)
ActivarBoton(True)
EnlazaGrilla()
End Sub
Private Sub AnularFactura(ByVal codi As String, ByVal estado As Boolean)
Dim objComando As New SqlCommand
objComando.Connection = Conexion
objComando.CommandType = CommandType.Text
objComando.CommandText = "UPDATE FACTURA SET nrofac=@nrofac,estado=@estado WHERE nrofac=@nrofac"
Try
'Agregando Parametros
objComando.Parameters.Add(New SqlParameter("@nrofac", SqlDbType.VarChar))
objComando.Parameters.Add(New SqlParameter("@estado", SqlDbType.Bit))
'asignando valores a parametros
objComando.Parameters("@nrofac").Value = codi
objComando.Parameters("@estado").Value = estado
Conexion.Open()
resultado = objComando.ExecuteNonQuery
Actualizar()
Conexion.Close()
MessageBox.Show(resultado & " Factura Anualda", "", 0, MessageBoxIcon.Information)
Desplazar(1)
Catch exc As Exception
MessageBox.Show(exc.Message)
End Try
End Sub
Private Sub buscar()
Dim strDato As String
Dim fila As Integer
Dim dv As DataView
strDato = InputBox("Ingrese numero de factura", "Buscar")
strDato = Format(Val(strDato), "00000")
dv = objDataSet.Tables("FACTURA").DefaultView
dv.Sort = "nrofac"
fila = dv.Find(strDato)
If fila = -1 Then
MessageBox.Show("Numero de factura no existe", "Cuidado")
Exit Sub
End If
posicion = fila : CargarDatos()
End Sub
Private Sub cboCliente_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Handles cboCliente.SelectedIndexChanged
If flag = 1 Then
Me.txtCodCli.Text = Me.cboCliente.SelectedValue
End If
End Sub
Docente: José Luis Ponce Segura Prac05 (10 de 11) e-mail: jlponcesg@hotmail.com
Cel. : 952636911 www.redtacna.net
Universidad Nacional Jorge Basadre Grohmann - ITEL
Carrera: Técnico Analista Programador de Sistemas. Curso: Programación Visual .Net II
total = Me.objDataSet.Tables("articulo").Rows.Count
If total > 0 Then
Me.DataGridView1.DataSource = objDataSet
Me.DataGridView1.DataMember = "Articulo"
lblEncontrados.Text = "Se encontraron " & Str(total) & " articulos"
Else
lblEncontrados.Text = "No se econtro el articulo...."
End If
End Sub
Private Sub DataGridView1_CurrentCellChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles DataGridView1.CurrentCellChanged
NumericUpDown1.Value = 0
txtImporte.Clear()
Dim fil As Integer
fil = DataGridView1.CurrentRow.Index
cod_art = Me.DataGridView1.Item(0, fil).Value
des_art = Me.DataGridView1.Item(1, fil).Value
pre_art = CDbl(Me.DataGridView1.Item(2, fil).Value)
sto_art = CInt(Me.DataGridView1.Item(3, fil).Value)
LblSeleccion.Text = "Artículo: " & des_art & ", Cantidad:"
NumericUpDown1.Maximum = sto_art
End Sub
Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnAceptar.Click
If Me.txtImporte.Text.Length = 0 Or Val(Me.txtImporte.Text) < 1 Then
MsgBox("no se ha calculado el importe a pagar..")
Exit Sub
End If
Dim rpta As String
rpta = MsgBox("Esta seguro que desea comprar", MsgBoxStyle.YesNo +
MsgBoxStyle.Question, "Confirma Compra")
If rpta = vbNo Then Exit Sub
If f = 0 Then PreparaGrillaFactura()
ncompras = f + 1
factura.dgvDetalleFactura.Item(0, f).Value = factura.lblNroFactura.Text
factura.dgvDetalleFactura.Item(1, f).Value = cod_art
factura.dgvDetalleFactura.Item(2, f).Value = can_art
factura.dgvDetalleFactura.Item(3, f).Value = imp_art
rpta = MsgBox("Desea comprar otro artículo", MsgBoxStyle.YesNo + MsgBoxStyle.Question,
"Artículos")
If rpta = vbYes Then
f += 1
Else
factura.totalizar()
Me.Dispose()
End If
End Sub
Private Sub PreparaGrillaFactura()
factura.dgvDetalleFactura.Columns.Add("NroFac", "Nro. Factura")
factura.dgvDetalleFactura.Columns.Add("CodArt", "Cod. Artículo")
factura.dgvDetalleFactura.Columns.Add("CanDet", "Cantidad")
factura.dgvDetalleFactura.Columns.Add("ImpDet", "Importe")
factura.dgvDetalleFactura.Rows.Add(4)
End Sub
Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCancelar.Click
factura.cancelar()
Me.Dispose()
End Sub
Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles NumericUpDown1.ValueChanged
If NumericUpDown1.Value > sto_art Then
MsgBox("La cantidad ingresada no debe ser mayor al stock del artículo")
End If
can_art = CInt(NumericUpDown1.Value)
imp_art = CDbl(Format(pre_art * CDbl(NumericUpDown1.Value), "#######.00"))
txtImporte.Text = imp_art
End Sub
Docente: José Luis Ponce Segura Prac05 (11 de 11) e-mail: jlponcesg@hotmail.com
Cel. : 952636911 www.redtacna.net