Sunteți pe pagina 1din 127

Recientes

 Sistemas Completos desde 5 $

Código Sistema de Compras, Ventas en Asp.Net Core 2.1, Entity Framework Core,

SQL Server, VueJS y Vuetify

 Base de Datos PostgreSQL

Curso Base de datos postgreSQL

 Cursos Frontend

Curso completo de VueJS - Vuetify

 Diseño Sistema Web PHP con Laravel y Mysql

Diseño Sistema web PHP con laravel y Mysql (36-36) Fin del curso

 Sistemas Completos desde 5 $

Código Sistema de Compras y Ventas en Laravel 5.6, VueJS, MariaDB - MySQL,

(Código de Barras) - Bootstrap 3

 Cursos premium

Curso Desarrolla sistemas web en ASP Net Core 2.1, Entity framework Core, SQL

Server, Vuejs y vuetify

 Sistemas Completos desde 5 $

Código Sistema de Compras, Ventas en PHP 7 y Mysql (Código de Barras) -

Bootstrap 3, POO, Jquery Ajax, Datatables

 Sistemas Completos desde 5 $


Sistema comercial (compras, ventas) logístico integrado con facturación

electrónica

 Cursos premium

Curso Desarrollo web en PHP con Laravel 5.6, VueJS y MariaDB Mysql

 Cursos premium

Curso Desarrollo de sistemas web en PHP 7 POO, MySQL, Jquery Ajax


Home Diseño Sistema Ventas CSharp sql server 2014 Diseño Sistema de Ventas C# - Visual
Studio 2013 y Sql Server 2014 (31-41) Tabla Venta

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql


Server 2014 (31-41) Tabla Venta
IncanatoIt-ad 3 years ago Diseño Sistema Ventas CSharp sql server 2014
Buen día amigos, en este artículo implementaremos los procedimientos almacenados en sql
server 2014 para poder dar mantenimiento a nuestra tabla venta junto con sus detalles de
venta, Trabajaremos con triggers para poder actualizar el stock (disminuir el stock cuando se
realice una venta, o aumentar el stock cuando se elimine la venta y sus detalles) dependiendo
de las ventas realizadas.

Pueden descargar el paquete del proyecto desarrollado en el curso, la base de datos, los
procedimientos almacenados y el sistema completo hasta el Video 41 desde:
https://drive.google.com/file/d/0B4TQqfBO_oQ1S0h4Z2p6bVNOTTQ/view?usp=sharing

Puedes descargar la versión completa del proyecto con todas las funcionalidades
terminadas desde:
http://www.incanatoit.com/2016/01/codigo-sistema-de-ventas-csharp-sql-server-2014-
visual-studio-2013.html

Pueden seguir el curso completo y aprender a desarrollar un Sistema de Ventas en Csharp.Net


utilizando como IDE de desarrollo Visual Studio 2013 y como gestor de Base de datos SQL Server
2014 desde:
https://www.youtube.com/watch?v=X52FI6honh0&list=PLZPrWDz1Molqn16IORKg8nFYTejgYCH
Jp

No se olviden siempre de Visitar mi canal www.youtube.com/jcarlosad7 para ver los nuevos


cursos.

Procedimientos almacenados tabla Ingreso y Detalle_Ingreso


--Procedimientos almacenados
--Procedimiento Mostrar Venta
create proc spmostrar_venta
as
SELECT top 100 v.idventa,
(t.apellidos +' '+ t.nombre) as Trabajador,
(c.apellidos + ' ' + c.nombre) as Cliente,
v.fecha, v.tipo_comprobante,
v.serie, v.correlativo,
v.estado, sum((d.precio_venta*
d.cantidad)-d.descuento) as Total
FROM detalle_venta d INNER JOIN venta v
ON d.idventa = v.idventa
INNER JOIN cliente c
ON v.idcliente = c.idcliente
INNER JOIN trabajador t
ON v.idtrabajador = t.idtrabajador
group by
v.idventa,
t.apellidos +' '+ t.nombre,
c.apellidos+' '+c.nombre,
v.fecha, v.tipo_comprobante,
v.serie, v.correlativo,
v.estado
order by v.idventa desc
go
-- Procedimiento Buscar venta por fecha
create proc spbuscar_venta_fecha
@textobuscar varchar(50),
@textobuscar2 varchar(50)
as
SELECT v.idventa,
(t.apellidos +' '+ t.nombre) as Trabajador,
(c.apellidos + ' ' + c.nombre) as Cliente,
v.fecha, v.tipo_comprobante,
v.serie, v.correlativo,
v.estado, sum((d.precio_venta*
d.cantidad)-d.descuento) as Total
FROM detalle_venta d INNER JOIN venta v
ON d.idventa = v.idventa
INNER JOIN cliente c
ON v.idcliente = c.idcliente
INNER JOIN trabajador t
ON v.idtrabajador = t.idtrabajador
group by
v.idventa,
t.apellidos +' '+ t.nombre,
c.apellidos+' '+c.nombre,
v.fecha, v.tipo_comprobante,
v.serie, v.correlativo,
v.estado
having v.fecha>=@textobuscar and v.fecha<=@textobuscar2
go

-- Procedimiento Insertar venta


create proc spinsertar_venta
@idventa int=null output,
@idtrabajador int,
@idcliente int,
@fecha date,
@tipo_comprobante varchar(20),
@serie varchar(4),
@correlativo varchar(7),
@igv decimal(4,2),
@estado varchar(7)
as
insert intoventa(idtrabajador,idcliente,fecha,tipo_comprobante,s
erie,correlativo,igv,estado)
values(@idtrabajador,@idcliente,@fecha,@tipo_comprobante,@serie,
@correlativo,@igv,@estado)
--Obteniendo el codigo autogenerado de la venta
SET @idventa = @@IDENTITY
go

--Procedimiento eliminar venta


create proc speliminar_venta
@idventa int
as
delete from venta
where idventa=@idventa
go

--Procedimiento Insertar detalles de las ventas


create proc spinsertar_detalle_venta
@iddetalle_venta int output,
@idventa int,
@iddetalle_ingreso int,
@cantidad int,
@precio_venta money,
@descuento money
as
insert into detalle_venta (idventa,iddetalle_ingreso,cantidad,
precio_venta,descuento)
values (@idventa,@iddetalle_ingreso,@cantidad,
@precio_venta,@descuento)
Go

--Disparador para restablecer stock


create trigger sprestablecer_stock
on [detalle_venta]
for delete
as
Update di set di.stock_actual=di.stock_actual+dv.cantidad
from detalle_ingreso as di inner join
deleted as dv on di.iddetalle_ingreso=dv.iddetalle_ingreso
go

--Procedimiento almacenado para disminuir stock


create proc spdisminuir_stock
@iddetalle_ingreso int,
@cantidad int
as
update detalle_ingreso set stock_actual=stock_actual-@cantidad
where iddetalle_ingreso=@iddetalle_ingreso
go

--mostrar detalle de las ventas


create proc spmostrar_detalle_venta
@textobuscar int
as
select d.iddetalle_ingreso,a.nombre as Articulo,
d.cantidad,d.precio_venta,d.descuento,
((d.precio_venta*d.cantidad)-d.descuento) as Subtotal
from detalle_venta d inner join detalle_ingreso di
on d.iddetalle_ingreso=di.iddetalle_ingreso
inner join articulo a
on di.idarticulo=a.idarticulo
where d.idventa=@textobuscar
go

--Mostrar Artículos para la venta por nombre


create proc spbuscararticulo_venta_nombre
@textobuscar varchar(50)
as
select d.iddetalle_ingreso,a.Codigo,a.Nombre,c.nombre as Categor
ia,
p.nombre as Presentacion,d.stock_actual,d.precio_compra,
d.precio_venta,d.fecha_vencimiento
from articulo a inner join categoria c
on a.idcategoria=c.idcategoria
inner join presentacion p
on a.idpresentacion = p.idpresentacion
inner join detalle_ingreso d
on a.idarticulo=d.idarticulo
inner join ingreso i
on i.idingreso=d.idingreso
where a.nombre like @textobuscar + '%'
and d.stock_actual>0
and i.estado<>'ANULADO'
go

--Mostrar Artículos para la venta por Código


create proc spbuscararticulo_venta_codigo
@textobuscar varchar(50)
as
select a.Idarticulo,a.Codigo,a.Nombre,c.nombre as Categoria,
p.nombre as Presentacion,d.stock_actual,d.precio_compra,
d.precio_venta,d.fecha_vencimiento
from articulo a inner join categoria c
on a.idcategoria=c.idcategoria
inner join presentacion p
on a.idpresentacion = p.idpresentacion
inner join detalle_ingreso d
on a.idarticulo=d.idarticulo
inner join ingreso i
on i.idingreso=d.idingreso
where a.codigo=@textobuscar
and d.stock_actual>0
and i.estado<>'ANULADO'
go

-- Procedimiento almacenado para generar el reporte


create proc spreporte_venta
@idventa int
as
SELECT v.idventa,
(t.apellidos +' '+ t.nombre) as Trabajador,
(c.apellidos + ' ' + c.nombre) as Cliente,
c.direccion,c.telefono,c.num_documento,
v.fecha, v.tipo_comprobante,
v.serie, v.correlativo,
v.estado,a.nombre,v.igv, d.precio_venta,d.cantidad,d.descuento
FROM detalle_venta d inner join detalle_ingreso di
on d.iddetalle_ingreso=di.iddetalle_ingreso
inner join articulo a
on di.idarticulo=a.idarticulo
INNER JOIN venta v
ON d.idventa = v.idventa
INNER JOIN cliente c
ON v.idcliente = c.idcliente
INNER JOIN trabajador t
ON v.idtrabajador = t.idtrabajador
where v.idventa=@idventa
go`

Video 31: Sistema de Ventas C# - Visual Studio 2013 - Sql Server 2014 (31-40)
Tabla Venta

Saludos Imperio, un abrazo a la distancia!


Tags :
DISEÑO SISTEMA VENTAS CSHARP SQL SERVER 2014
Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql
Server 2014 (32-41) Capa Datos Venta
IncanatoIt-ad 3 years ago Diseño Sistema Ventas CSharp sql server 2014
Buen día amigos, en este artículo implementaremos la clase DDetalle_Venta y la clase DVenta
en la capa Datos que se comunicará con los procedimientos almacenados relacionados con la
tabla venta de la base de datos; implementaremos dentro de esta clase el método Insertar para
registrar las ventas junto con sus detalles donde especificaremos que artículos se están
vendiendo, la cantidad de artículos, precio de venta, consultaremos la fecha de vencimiento y
el stock que se encuentra en el almacén para actualizarlo después de generar la venta. Para
completar la venta se seleccionará el comprobante a emitir (boleta, factura, ticket, otros), se
ingresará un número de comprobante, seleccionaremos al cliente involucrado y al trabajador
responsable de la venta.

Pueden descargar el paquete del proyecto desarrollado en el curso, la base de datos, los
procedimientos almacenados y el sistema completo hasta el Video 41 desde:
https://drive.google.com/file/d/0B4TQqfBO_oQ1S0h4Z2p6bVNOTTQ/view?usp=sharing

Puedes descargar la versión completa del proyecto con todas las funcionalidades
terminadas desde:
http://www.incanatoit.com/2016/01/codigo-sistema-de-ventas-csharp-sql-server-2014-
visual-studio-2013.html

Pueden seguir el curso completo y aprender a desarrollar un Sistema de Ventas en Csharp.Net


utilizando como IDE de desarrollo Visual Studio 2013 y como gestor de Base de datos SQL Server
2014 desde:
https://www.youtube.com/watch?v=X52FI6honh0&list=PLZPrWDz1Molqn16IORKg8nFYTejgYCH
Jp

No se olviden siempre de Visitar mi canal www.youtube.com/jcarlosad7 para ver los nuevos


cursos.

Tabla Venta - Detalle_Venta


Capa Datos - Clase DDetalle_Venta
1234567891011121314151617181920212223242526272829303132333435363738394041424
3444546474849505152535455565758596061626364656667686970717273747576777879808
1828384858687888990919293949596979899100101102103104105106107108109110111112
1131141151161171181191201211221231241251261271281291301311321331341351361371
38139140
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data;
using System.Data.SqlClient;

namespace CapaDatos
{
public class DDetalle_Venta
{
private int _Iddetalle_venta;
private int _Idventa;
private int _Iddetalle_Ingreso;
private int _Cantidad;
private decimal _Precio_Venta;
private decimal _Descuento;
public int Iddetalle_venta
{
get { return _Iddetalle_venta; }
set { _Iddetalle_venta = value; }
}

public int Idventa


{
get { return _Idventa; }
set { _Idventa = value; }
}

public int Iddetalle_Ingreso


{
get { return _Iddetalle_Ingreso; }
set { _Iddetalle_Ingreso = value; }
}

public int Cantidad


{
get { return _Cantidad; }
set { _Cantidad = value; }
}

public decimal Precio_Venta


{
get { return _Precio_Venta; }
set { _Precio_Venta = value; }
}

public decimal Descuento


{
get { return _Descuento; }
set { _Descuento = value; }
}
//Constructores
public DDetalle_Venta()
{

}
public DDetalle_Venta(int iddetalle_venta,int idventa,int iddetalle_ingreso, int
cantidad,decimal precio_venta,decimal descuento)
{
this.Iddetalle_venta = iddetalle_venta;
this.Idventa = idventa;
this.Iddetalle_Ingreso = iddetalle_ingreso;
this.Cantidad = cantidad;
this.Precio_Venta = precio_venta;
this.Descuento = descuento;

//Método Insertar
public string Insertar(DDetalle_Venta Detalle_Venta, ref SqlConnection SqlCon, ref
SqlTransaction SqlTra)
{
string rpta = "";
try
{

SqlCommand SqlCmd = new SqlCommand();


SqlCmd.Connection = SqlCon;
SqlCmd.Transaction = SqlTra;
SqlCmd.CommandText = "spinsertar_detalle_venta";
SqlCmd.CommandType = CommandType.StoredProcedure;

SqlParameter ParIddetalle_venta= new SqlParameter();


ParIddetalle_venta.ParameterName = "@iddetalle_venta";
ParIddetalle_venta.SqlDbType = SqlDbType.Int;
ParIddetalle_venta.Direction = ParameterDirection.Output;
SqlCmd.Parameters.Add(ParIddetalle_venta);

SqlParameter ParIdventa= new SqlParameter();


ParIdventa.ParameterName = "@idventa";
ParIdventa.SqlDbType = SqlDbType.Int;
ParIdventa.Value = Detalle_Venta.Idventa;
SqlCmd.Parameters.Add(ParIdventa);

SqlParameter ParIddetalle_ingreso = new SqlParameter();


ParIddetalle_ingreso.ParameterName = "@iddetalle_ingreso";
ParIddetalle_ingreso.SqlDbType = SqlDbType.Int;
ParIddetalle_ingreso.Value = Detalle_Venta.Iddetalle_Ingreso;
SqlCmd.Parameters.Add(ParIddetalle_ingreso);

SqlParameter ParCantidad = new SqlParameter();


ParCantidad.ParameterName = "@cantidad";
ParCantidad.SqlDbType = SqlDbType.Int;
ParCantidad.Value = Detalle_Venta.Cantidad;
SqlCmd.Parameters.Add(ParCantidad);

SqlParameter ParPrecio_Venta = new SqlParameter();


ParPrecio_Venta.ParameterName = "@precio_venta";
ParPrecio_Venta.SqlDbType = SqlDbType.Money;
ParPrecio_Venta.Value = Detalle_Venta.Precio_Venta;
SqlCmd.Parameters.Add(ParPrecio_Venta);

SqlParameter ParDescuento= new SqlParameter();


ParDescuento.ParameterName = "@descuento";
ParDescuento.SqlDbType = SqlDbType.Money;
ParDescuento.Value = Detalle_Venta.Descuento;
SqlCmd.Parameters.Add(ParDescuento);

//Ejecutamos nuestro comando


rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" :
Convert.ToString(Idventa)+Convert.ToString(Iddetalle_Ingreso)+Convert.ToString(Cantidad)+C
onvert.ToString(Precio_Venta)+Convert.ToString(Descuento);

}
catch (Exception ex)
{
rpta = ex.Message;
}

return rpta;

}
}

Capa Datos - Clase DVenta


1234567891011121314151617181920212223242526272829303132333435363738394041424
3444546474849505152535455565758596061626364656667686970717273747576777879808
1828384858687888990919293949596979899100101102103104105106107108109110111112
1131141151161171181191201211221231241251261271281291301311321331341351361371
3813914014114214314414514614714814915015115215315415515615715815916016116216
3164165166167168169170171172173174175176177178179180181182183184185186187188
1891901911921931941951961971981992002012022032042052062072082092102112122132
1421521621721821922022122222322422522622722822923023123223323423523623723823
9240241242243244245246247248249250251252253254255256257258259260261262263264
2652662672682692702712722732742752762772782792802812822832842852862872882892
9029129229329429529629729829930030130230330430530630730830931031131231331431
5316317318319320321322323324325326327328329330331332333334335336337338339340
3413423433443453463473483493503513523533543553563573583593603613623633643653
6636736836937037137237337437537637737837938038138238338438538638738838939039
1392393394395396397398399400401402403404405406407408409410411412413414415416
4174184194204214224234244254264274284294304314324334344354364374384394404414
4244344444544644744844945045145245345445545645745845946046146246346446546646
7468469470using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data;
using System.Data.SqlClient;

namespace CapaDatos
{
public class DVenta
{
private int _Idventa;
private int _Idcliente;
private int _Idtrabajador;
private DateTime _Fecha;
private string _Tipo_Comprobante;
private string _Serie;
private string _Correlativo;
private decimal _Igv;
private string _Estado;

//Propiedades
public int Idventa
{
get { return _Idventa; }
set { _Idventa = value; }
}

public int Idcliente


{
get { return _Idcliente; }
set { _Idcliente = value; }
}

public int Idtrabajador


{
get { return _Idtrabajador; }
set { _Idtrabajador = value; }
}

public DateTime Fecha


{
get { return _Fecha; }
set { _Fecha=value;}
}

public string Tipo_Comprobante


{
get { return _Tipo_Comprobante; }
set { _Tipo_Comprobante = value; }
}

public string Serie


{
get { return _Serie; }
set { _Serie = value; }
}

public string Correlativo


{
get { return _Correlativo; }
set { _Correlativo = value; }
}

public decimal Igv


{
get { return _Igv; }
set { _Igv = value; }
}

public string Estado


{
get { return _Estado; }
set { _Estado = value; }
}

//Constructores
public DVenta()
{

}
public DVenta(int idventa, int idcliente, int idtrabajador, DateTime fecha, string
tipo_comprobante, string serie, string correlativo, decimal igv, string estado)
{
this.Idventa = idventa;
this.Idcliente = idcliente;
this.Idtrabajador = idtrabajador;
this.Fecha = fecha;
this.Tipo_Comprobante = tipo_comprobante;
this.Serie = serie;
this.Correlativo = correlativo;
this.Igv = igv;
this.Estado = estado;
}
//Métodos
public string Insertar(DVenta Venta, List Detalles)
{
string rpta = "";
SqlConnection SqlCon = new SqlConnection();
try
{
//Código
SqlCon.ConnectionString = Conexion.Cn;
SqlCon.Open();
//Establecer la transacción
SqlTransaction SqlTra = SqlCon.BeginTransaction();
//Establecer el Comando
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.Transaction = SqlTra;
SqlCmd.CommandText = "spinsertar_venta";
SqlCmd.CommandType = CommandType.StoredProcedure;
//Parámtros
SqlParameter ParIdventa = new SqlParameter();
ParIdventa.ParameterName = "@idventa";
ParIdventa.SqlDbType = SqlDbType.Int;
ParIdventa.Direction = ParameterDirection.Output;
SqlCmd.Parameters.Add(ParIdventa);

SqlParameter ParIdcliente = new SqlParameter();


ParIdcliente.ParameterName = "@idcliente";
ParIdcliente.SqlDbType = SqlDbType.Int;
ParIdcliente.Value = Venta.Idcliente;
SqlCmd.Parameters.Add(ParIdcliente);

SqlParameter ParIdTrabajador = new SqlParameter();


ParIdTrabajador.ParameterName = "@idtrabajador";
ParIdTrabajador.SqlDbType = SqlDbType.Int;
ParIdTrabajador.Value = Venta.Idtrabajador;
SqlCmd.Parameters.Add(ParIdTrabajador);

SqlParameter ParFecha = new SqlParameter();


ParFecha.ParameterName = "@fecha";
ParFecha.SqlDbType = SqlDbType.Date;
ParFecha.Value = Venta.Fecha;
SqlCmd.Parameters.Add(ParFecha);

SqlParameter ParTipo_Comprobante = new SqlParameter();


ParTipo_Comprobante.ParameterName = "@tipo_comprobante";
ParTipo_Comprobante.SqlDbType = SqlDbType.VarChar;
ParTipo_Comprobante.Size = 20;
ParTipo_Comprobante.Value = Venta.Tipo_Comprobante;
SqlCmd.Parameters.Add(ParTipo_Comprobante);

SqlParameter ParSerie = new SqlParameter();


ParSerie.ParameterName = "@serie";
ParSerie.SqlDbType = SqlDbType.VarChar;
ParSerie.Size = 4;
ParSerie.Value = Venta.Serie;
SqlCmd.Parameters.Add(ParSerie);

SqlParameter ParCorrelativo = new SqlParameter();


ParCorrelativo.ParameterName = "@correlativo";
ParCorrelativo.SqlDbType = SqlDbType.VarChar;
ParCorrelativo.Size = 7;
ParCorrelativo.Value = Venta.Correlativo;
SqlCmd.Parameters.Add(ParCorrelativo);

SqlParameter ParIgv= new SqlParameter();


ParIgv.ParameterName = "@igv";
ParIgv.SqlDbType = SqlDbType.Decimal;
ParIgv.Precision = 4;
ParIgv.Scale = 2;
ParIgv.Value = Venta.Igv;
SqlCmd.Parameters.Add(ParIgv);

SqlParameter ParEstado = new SqlParameter();


ParEstado.ParameterName = "@estado";
ParEstado.SqlDbType = SqlDbType.VarChar;
ParEstado.Size = 7;
ParEstado.Value = Venta.Estado;
SqlCmd.Parameters.Add(ParEstado);

//Ejecutamos nuestro comando


rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro";
if (rpta.Equals("OK"))
{
//Obtenemos el codigo del ingreso que se genero por la base de datos

this.Idventa = Convert.ToInt32(SqlCmd.Parameters["@idventa"].Value);
foreach (DDetalle_Venta det in Detalles)
{
//Establecemos el codigo del ingreso que se autogenero
det.Idventa = this.Idventa;
//Llamamos al metodo insertar de la clase DetalleIngreso
//y le pasamos la conexion y la transaccion que debe de usar
rpta = det.Insertar(det, ref SqlCon, ref SqlTra);
if (!rpta.Equals("OK"))
{
//Si ocurre un error al insertar un detalle de ingreso salimos del for
break;
}
else
{
//Actualizamos el Stock

rpta = DisminuirStock(det.Iddetalle_Ingreso, det.Cantidad);


if (!rpta.Equals("OK"))
{
break;
}
}
}
}
if (rpta.Equals("OK"))
{
//Se inserto todo los detalles y confirmamos la transaccion
SqlTra.Commit();
}
else
{
//Algun detalle no se inserto y negamos la transaccion
SqlTra.Rollback();
}

}
catch (Exception ex)
{
rpta = ex.Message;
}
finally
{
if (SqlCon.State == ConnectionState.Open) SqlCon.Close();
}
return rpta;

public string Eliminar(DVenta Venta)


{
string rpta = "";
SqlConnection SqlCon = new SqlConnection();
try
{
//Código
SqlCon.ConnectionString = Conexion.Cn;
SqlCon.Open();
//Establecer el Comando
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "speliminar_venta";
SqlCmd.CommandType = CommandType.StoredProcedure;

SqlParameter ParIdventa = new SqlParameter();


ParIdventa.ParameterName = "@idventa";
ParIdventa.SqlDbType = SqlDbType.Int;
ParIdventa.Value = Venta.Idventa;
SqlCmd.Parameters.Add(ParIdventa);
//Ejecutamos nuestro comando

rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "OK";

}
catch (Exception ex)
{
rpta = ex.Message;
}
finally
{
if (SqlCon.State == ConnectionState.Open) SqlCon.Close();
}
return rpta;
}
//Disminuir Stock
public string DisminuirStock(int iddetalle_ingreso,int cantidad)
{
string rpta = "";
SqlConnection SqlCon = new SqlConnection();
try
{
//Código
SqlCon.ConnectionString = Conexion.Cn;
SqlCon.Open();
//Establecer el Comando
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "spdisminuir_stock";
SqlCmd.CommandType = CommandType.StoredProcedure;

SqlParameter ParIddetalle_ingreso = new SqlParameter();


ParIddetalle_ingreso.ParameterName = "@iddetalle_ingreso";
ParIddetalle_ingreso.SqlDbType = SqlDbType.Int;
ParIddetalle_ingreso.Value = iddetalle_ingreso;
SqlCmd.Parameters.Add(ParIddetalle_ingreso);

SqlParameter ParCantidad = new SqlParameter();


ParCantidad.ParameterName = "@cantidad";
ParCantidad.SqlDbType = SqlDbType.Int;
ParCantidad.Value = cantidad;
SqlCmd.Parameters.Add(ParCantidad);
//Ejecutamos nuestro comando

rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "Se actualizó el Stock";

}
catch (Exception ex)
{
rpta = ex.Message;
}
finally
{
if (SqlCon.State == ConnectionState.Open) SqlCon.Close();
}
return rpta;
}

//Método Mostrar
public DataTable Mostrar()
{
DataTable DtResultado = new DataTable("venta");
SqlConnection SqlCon = new SqlConnection();
try
{
SqlCon.ConnectionString = Conexion.Cn;
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "spmostrar_venta";
SqlCmd.CommandType = CommandType.StoredProcedure;

SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);


SqlDat.Fill(DtResultado);

}
catch (Exception ex)
{
DtResultado = null;
}
return DtResultado;

//Método BuscarFechas
public DataTable BuscarFechas(String TextoBuscar,String TextoBuscar2)
{
DataTable DtResultado = new DataTable("venta");
SqlConnection SqlCon = new SqlConnection();
try
{
SqlCon.ConnectionString = Conexion.Cn;
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "spbuscar_venta_fecha";
SqlCmd.CommandType = CommandType.StoredProcedure;

SqlParameter ParTextoBuscar = new SqlParameter();


ParTextoBuscar.ParameterName = "@textobuscar";
ParTextoBuscar.SqlDbType = SqlDbType.VarChar;
ParTextoBuscar.Size = 50;
ParTextoBuscar.Value = TextoBuscar;
SqlCmd.Parameters.Add(ParTextoBuscar);

SqlParameter ParTextoBuscar2 = new SqlParameter();


ParTextoBuscar2.ParameterName = "@textobuscar2";
ParTextoBuscar2.SqlDbType = SqlDbType.VarChar;
ParTextoBuscar2.Size = 50;
ParTextoBuscar2.Value = TextoBuscar2;
SqlCmd.Parameters.Add(ParTextoBuscar2);
SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);
SqlDat.Fill(DtResultado);

}
catch (Exception ex)
{
DtResultado = null;
}
return DtResultado;

//Método BuscarFechas
public DataTable MostrarDetalle(String TextoBuscar)
{
DataTable DtResultado = new DataTable("detalle_venta");
SqlConnection SqlCon = new SqlConnection();
try
{
SqlCon.ConnectionString = Conexion.Cn;
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "spmostrar_detalle_venta";
SqlCmd.CommandType = CommandType.StoredProcedure;

SqlParameter ParTextoBuscar = new SqlParameter();


ParTextoBuscar.ParameterName = "@textobuscar";
ParTextoBuscar.SqlDbType = SqlDbType.VarChar;
ParTextoBuscar.Size = 50;
ParTextoBuscar.Value = TextoBuscar;
SqlCmd.Parameters.Add(ParTextoBuscar);

SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);


SqlDat.Fill(DtResultado);

}
catch (Exception ex)
{
DtResultado = null;
}
return DtResultado;

}
public DataTable MostrarArticulo_Venta_Nombre(String TextoBuscar)
{
DataTable DtResultado = new DataTable("articulo");
SqlConnection SqlCon = new SqlConnection();
try
{
SqlCon.ConnectionString = Conexion.Cn;
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "spbuscararticulo_venta_nombre";
SqlCmd.CommandType = CommandType.StoredProcedure;

SqlParameter ParTextoBuscar = new SqlParameter();


ParTextoBuscar.ParameterName = "@textobuscar";
ParTextoBuscar.SqlDbType = SqlDbType.VarChar;
ParTextoBuscar.Size = 50;
ParTextoBuscar.Value = TextoBuscar;
SqlCmd.Parameters.Add(ParTextoBuscar);

SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);


SqlDat.Fill(DtResultado);

}
catch (Exception ex)
{
DtResultado = null;
}
return DtResultado;

}
public DataTable MostrarArticulo_Venta_Codigo(String TextoBuscar)
{
DataTable DtResultado = new DataTable("articulo");
SqlConnection SqlCon = new SqlConnection();
try
{
SqlCon.ConnectionString = Conexion.Cn;
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "spbuscararticulo_venta_codigo";
SqlCmd.CommandType = CommandType.StoredProcedure;

SqlParameter ParTextoBuscar = new SqlParameter();


ParTextoBuscar.ParameterName = "@textobuscar";
ParTextoBuscar.SqlDbType = SqlDbType.VarChar;
ParTextoBuscar.Size = 50;
ParTextoBuscar.Value = TextoBuscar;
SqlCmd.Parameters.Add(ParTextoBuscar);

SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);


SqlDat.Fill(DtResultado);

}
catch (Exception ex)
{
DtResultado = null;
}
return DtResultado;

}
}
}

Video 32: Sistema de Ventas C# - Visual Studio 2013 - Sql Server 2014 (32-
40) Clase DVenta

Saludos Imperio, un abrazo a la distancia!


Tags :
DISEÑO SISTEMA VENTAS CSHARP SQL SERVER 2014
 Tweet
 Compartir
 Compartir
 Compartir
 Compartir

Acerca de Incanatoit.com
Número de entradas : 260
Incanatoit.com es una página web donde se comparten cursos de desarrollo de Software.


Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (41-
41) Generar Instalador

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (40-
41) Archivo appconfig Conexión Base de datos

Código Sistema de Ventas C# (Visual Studio 2013) y Sql Server 2014 POO,
3 Capas

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (39-
41) Bakup BD

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (38-
41) Consulta Stock Artículos

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (37-
41) Reporte Datos

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (36-
41) Reporte Factura

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (35-
41) Gestión Ventas

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (34-
41) Listado Venta
 Next Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (33-41) Capa
Negocio Venta
 PreviousDiseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (31-41)
Tabla Venta
No hay comentarios:
Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql
Server 2014 (33-41) Capa Negocio Venta
IncanatoIt-ad 3 years ago Diseño Sistema Ventas CSharp sql server 2014
Buen día amigos, en este post implementaremos la clase NVenta en la capa Negocio que se
comunicará con los Métodos de la Capa Datos; implementaremos dentro de esta clase el método
Insertar para registrar las Ventas y sus detalles de venta, especificando los artículos vendidos,
la cantidad de artículos, precio de venta, teniendo en cuenta la fecha de vencimiento y la
actualización del stock; implementaremos además los métodos de búsqueda para filtrar por su
nombre y código los artículos que serán vendidos; y el método para eliminar las ventas que
permitirá además actualizar de manera automática el stock de los artículos en almacén.
Iniciaremos además con el diseño del formulario FrmVenta.

Pueden descargar el paquete del proyecto desarrollado en el curso, la base de datos, los
procedimientos almacenados y el sistema completo hasta el Video 41 desde:
https://drive.google.com/file/d/0B4TQqfBO_oQ1S0h4Z2p6bVNOTTQ/view?usp=sharing

Puedes descargar la versión completa del proyecto con todas las funcionalidades
terminadas desde:
http://www.incanatoit.com/2016/01/codigo-sistema-de-ventas-csharp-sql-server-2014-
visual-studio-2013.html

Pueden seguir el curso completo y aprender a desarrollar un Sistema de Ventas en Csharp.Net


utilizando como IDE de desarrollo Visual Studio 2013 y como gestor de Base de datos SQL Server
2014 desde:
https://www.youtube.com/watch?v=X52FI6honh0&list=PLZPrWDz1Molqn16IORKg8nFYTejgYCH
Jp

No se olviden siempre de Visitar mi canal www.youtube.com/jcarlosad7 para ver los nuevos


cursos.

Gestión de Ventas
Capa Negocio - Clase NVenta
1234567891011121314151617181920212223242526272829303132333435363738394
0414243444546474849505152535455565758596061626364656667686970717273747
5767778798081828384
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data;
using CapaDatos;

namespace CapaNegocio
{
public class NVenta
{
//Método Insertar que llama al método Insertar de la clase DVenta
//de la CapaDatos
public static string Insertar(int idcliente, int idtrabajador, DateTime fecha, string
tipo_comprobante, string serie, string correlativo, decimal igv, string estado, DataTable
dtDetalles)
{
DVenta Obj = new DVenta();
Obj.Idcliente = idcliente;
Obj.Idtrabajador = idtrabajador;
Obj.Fecha = fecha;
Obj.Tipo_Comprobante = tipo_comprobante;
Obj.Serie = serie;
Obj.Correlativo = correlativo;
Obj.Igv = igv;
Obj.Estado = estado;
List detalles = new List();
foreach (DataRow row in dtDetalles.Rows)
{
DDetalle_Venta detalle = new DDetalle_Venta();
detalle.Iddetalle_Ingreso = Convert.ToInt32(row["iddetalle_ingreso"].ToString());
detalle.Cantidad = Convert.ToInt32(row["cantidad"].ToString());
detalle.Precio_Venta = Convert.ToDecimal(row["precio_venta"].ToString());
detalle.Descuento = Convert.ToDecimal(row["descuento"].ToString());
detalles.Add(detalle);

return Obj.Insertar(Obj, detalles);


}

//Método Anular que llama al método Anular de la clase DVenta


//de la CapaDatos
public static string Eliminar(int idventa)
{
DVenta Obj = new DVenta();
Obj.Idventa = idventa;
return Obj.Eliminar(Obj);
}

//Método Mostrar que llama al método Mostrar de la clase DVenta


//de la CapaDatos
public static DataTable Mostrar()
{
return new DVenta().Mostrar();
}

//Método BuscarFechas que llama al método BuscarFechas


//de la clase DVenta de la CapaDatos
public static DataTable BuscarFechas(string textobuscar, string textobuscar2)
{
DVenta Obj = new DVenta();
return Obj.BuscarFechas(textobuscar, textobuscar2);
}
public static DataTable MostrarDetalle(string textobuscar)
{
DVenta Obj = new DVenta();
return Obj.MostrarDetalle(textobuscar);
}
public static DataTable MostrarArticulo_Venta_Nombre(string textobuscar)
{
DVenta Obj = new DVenta();
return Obj.MostrarArticulo_Venta_Nombre(textobuscar);
}
public static DataTable MostrarArticulo_Venta_Codigo(string textobuscar)
{
DVenta Obj = new DVenta();
return Obj.MostrarArticulo_Venta_Codigo(textobuscar);
}
}
}

Video 33: Sistema de Ventas C# - Visual Studio 2013 - Sql Server 2014 (33-40)
Capa Negocio Venta

Saludos Imperio, un abrazo a la distancia!


Tags :
DISEÑO SISTEMA VENTAS CSHARP SQL SERVER 2014
 Tweet
 Compartir
 Compartir
 Compartir
 Compartir

Acerca de Incanatoit.com
Número de entradas : 260
Incanatoit.com es una página web donde se comparten cursos de desarrollo de Software.


Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (41-
41) Generar Instalador

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (40-
41) Archivo appconfig Conexión Base de datos

Código Sistema de Ventas C# (Visual Studio 2013) y Sql Server 2014 POO,
3 Capas

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (39-
41) Bakup BD

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (38-
41) Consulta Stock Artículos

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (37-
41) Reporte Datos

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (36-
41) Reporte Factura

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (35-
41) Gestión Ventas

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (34-
41) Listado Venta
 Next Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (34-41)
Listado Venta
 PreviousDiseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (32-41)
Capa Datos Venta
No hay comentarios:
Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql
Server 2014 (34-41) Listado Venta
IncanatoIt-ad 3 years ago Diseño Sistema Ventas CSharp sql server 2014
Buen día amigos, en este artículo implementaremos el formulario FrmVenta en la capa
Presentación, que permitirá al usuario del sistema realizar las ventas; el usuario seleccionará
aquí el cliente del negocio que participa en la venta, seleccionará el tipo de documento e
ingresará un número de documento; podrá agregar uno o varios artículos por venta a un listado
que luego serán almacenados en la base de datos teniendo en cuenta la cantidad de venta del
artículo, el precio de Venta, y el descuento.

Pueden descargar el paquete del proyecto desarrollado en el curso, la base de datos, los
procedimientos almacenados y el sistema completo hasta el Video 41 desde:
https://drive.google.com/file/d/0B4TQqfBO_oQ1S0h4Z2p6bVNOTTQ/view?usp=sharing

Puedes descargar la versión completa del proyecto con todas las funcionalidades
terminadas desde:
http://www.incanatoit.com/2016/01/codigo-sistema-de-ventas-csharp-sql-server-2014-
visual-studio-2013.html

Pueden seguir el curso completo y aprender a desarrollar un Sistema de Ventas en Csharp.Net


utilizando como IDE de desarrollo Visual Studio 2013 y como gestor de Base de datos SQL Server
2014 desde:
https://www.youtube.com/watch?v=X52FI6honh0&list=PLZPrWDz1Molqn16IORKg8nFYTejgYCH
Jp

No se olviden siempre de Visitar mi canal www.youtube.com/jcarlosad7 para ver los nuevos


cursos.

Formulario FrmVenta - Listado


Código FrmPrincipal - Menú Item Ventas

123456
FrmVenta frm = FrmVenta.GetInstancia();
frm.MdiParent = this;
frm.Show();
frm.Idtrabajador = Convert.ToInt32(this.Idtrabajador);

Código FrmVenta - Botón Buscar Cliente

123FrmVistaCliente_Venta vista = new FrmVistaCliente_Venta();


vista.ShowDialog();

Código FrmVenta - Botón Buscar Artículo

123FrmVistaArticulo_Venta vista = new FrmVistaArticulo_Venta();


vista.ShowDialog();

Código FrmVenta - FormClosing


123456private void FrmVenta_FormClosing(object sender, FormClosingEventArgs e)
{
_instancia = null;
}

Formulario FrmVistaCliente_Venta

Código FrmVistaCliente_Venta
1234567891011121314151617181920212223242526272829303132333435363738394041424
344454647484950515253545556575859606162636465666768697071727374using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using CapaNegocio;

namespace CapaPresentacion
{
public partial class FrmVistaCliente_Venta : Form
{
public FrmVistaCliente_Venta()
{
InitializeComponent();
}
private void OcultarColumnas()
{
this.dataListado.Columns[0].Visible = false;
this.dataListado.Columns[1].Visible = false;
}
private void Mostrar()
{
this.dataListado.DataSource = NCliente.Mostrar();
this.OcultarColumnas();
lblTotal.Text = "Total Registros: " + Convert.ToString(dataListado.Rows.Count);
}
private void BuscarApellidos()
{
this.dataListado.DataSource = NCliente.BuscarApellidos(this.txtBuscar.Text);
this.OcultarColumnas();
lblTotal.Text = "Total Registros: " + Convert.ToString(dataListado.Rows.Count);
}

private void BuscarNum_Documento()


{
this.dataListado.DataSource = NCliente.BuscarNum_Documento(this.txtBuscar.Text);
this.OcultarColumnas();
lblTotal.Text = "Total Registros: " + Convert.ToString(dataListado.Rows.Count);
}
private void FrmVistaCliente_Venta_Load(object sender, EventArgs e)
{
Mostrar();
}

private void btnBuscar_Click(object sender, EventArgs e)


{
if (cbBuscar.Text.Equals("Apellidos"))
{
this.BuscarApellidos();
}
else if (cbBuscar.Text.Equals("Documento"))
{
this.BuscarNum_Documento();
}
}

private void dataListado_DoubleClick(object sender, EventArgs e)


{
FrmVenta form = FrmVenta.GetInstancia();
string par1, par2;
par1 = Convert.ToString(this.dataListado.CurrentRow.Cells["idcliente"].Value);
par2 = Convert.ToString(this.dataListado.CurrentRow.Cells["apellidos"].Value) +"
"+Convert.ToString(this.dataListado.CurrentRow.Cells["nombre"].Value);
form.setCliente(par1, par2);
this.Hide();
}
}
}

Formulario FrmVistaArticulo_Venta

Código FrmVistaArticulo_Venta
1234567891011121314151617181920212223242526272829303132333435363738394041424
3444546474849505152535455565758596061626364656667686970717273747576777879808
182
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using CapaNegocio;

namespace CapaPresentacion
{
public partial class FrmVistaArticulo_Venta : Form
{
public FrmVistaArticulo_Venta()
{
InitializeComponent();
}

private void FrmVistaArticulo_Venta_Load(object sender, EventArgs e)


{
//this.Mostrar();
}
private void OcultarColumnas()
{
this.dataListado.Columns[0].Visible = false;
this.dataListado.Columns[1].Visible = false;
}

private void MostrarArticulo_Venta_Nombre()


{
this.dataListado.DataSource =
NVenta.MostrarArticulo_Venta_Nombre(this.txtBuscar.Text);
this.OcultarColumnas();
lblTotal.Text = "Total Registros: " + Convert.ToString(dataListado.Rows.Count);
}
private void MostrarArticulo_Venta_Codigo()
{
this.dataListado.DataSource =
NVenta.MostrarArticulo_Venta_Codigo(this.txtBuscar.Text);
this.OcultarColumnas();
lblTotal.Text = "Total Registros: " + Convert.ToString(dataListado.Rows.Count);
}

private void BuscarNum_Documento()


{
this.dataListado.DataSource = NCliente.BuscarNum_Documento(this.txtBuscar.Text);
this.OcultarColumnas();
lblTotal.Text = "Total Registros: " + Convert.ToString(dataListado.Rows.Count);
}

private void btnBuscar_Click(object sender, EventArgs e)


{
if (cbBuscar.Text.Equals("Codigo"))
{
this.MostrarArticulo_Venta_Codigo();
}
else if (cbBuscar.Text.Equals("Nombre"))
{
this.MostrarArticulo_Venta_Nombre();
}
}

private void dataListado_DoubleClick(object sender, EventArgs e)


{
FrmVenta form = FrmVenta.GetInstancia();
string par1, par2;
Decimal par3, par4;
int par5;
DateTime par6;
par1 = Convert.ToString(this.dataListado.CurrentRow.Cells["iddetalle_ingreso"].Value);
par2 = Convert.ToString(this.dataListado.CurrentRow.Cells["nombre"].Value);
par3 = Convert.ToDecimal(this.dataListado.CurrentRow.Cells["precio_compra"].Value);
par4 = Convert.ToDecimal(this.dataListado.CurrentRow.Cells["precio_venta"].Value);
par5 = Convert.ToInt32(this.dataListado.CurrentRow.Cells["stock_actual"].Value);
par6 =
Convert.ToDateTime(this.dataListado.CurrentRow.Cells["fecha_vencimiento"].Value);
form.setArticulo(par1, par2,par3,par4,par5,par6);
this.Hide();
}
}
}

Video 34: Sistema de Ventas C# - Visual Studio 2013 - Sql Server 2014 (34-
40) Formulario Venta

Saludos Imperio, un abrazo a la distancia!


Tags :
DISEÑO SISTEMA VENTAS CSHARP SQL SERVER 2014
 Tweet
 Compartir
 Compartir
 Compartir
 Compartir

Acerca de Incanatoit.com
Número de entradas : 260
Incanatoit.com es una página web donde se comparten cursos de desarrollo de Software.


Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (41-
41) Generar Instalador

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (40-
41) Archivo appconfig Conexión Base de datos

Código Sistema de Ventas C# (Visual Studio 2013) y Sql Server 2014 POO,
3 Capas

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (39-
41) Bakup BD

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (38-
41) Consulta Stock Artículos

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (37-
41) Reporte Datos

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (36-
41) Reporte Factura

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (35-
41) Gestión Ventas

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (34-
41) Listado Venta
 Next Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (35-41)
Gestión Ventas
 PreviousDiseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (33-41)
Capa Negocio Venta
No hay comentarios:
Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql
Server 2014 (35-41) Gestión Ventas
IncanatoIt-ad 3 years ago Diseño Sistema Ventas CSharp sql server 2014
Buen día amigos, en este post continuaremos programando las funcionalidades en el formulario
FrmVenta de la capa Presentación, este formulario permitirá al usuario del sistema realizar las
ventas; el usuario seleccionará aquí el cliente del negocio que participa en la venta,
seleccionará el tipo de documento e ingresará un número de documento; podrá agregar uno o
varios artículos por venta a un listado que luego serán almacenados en la base de datos teniendo
en cuenta la cantidad de venta del artículo, el precio de Venta, y el descuento.

Pueden descargar el paquete del proyecto desarrollado en el curso, la base de datos, los
procedimientos almacenados y el sistema completo hasta el Video 41 desde:
https://drive.google.com/file/d/0B4TQqfBO_oQ1S0h4Z2p6bVNOTTQ/view?usp=sharing

Puedes descargar la versión completa del proyecto con todas las funcionalidades
terminadas desde:
http://www.incanatoit.com/2016/01/codigo-sistema-de-ventas-csharp-sql-server-2014-
visual-studio-2013.html

Pueden seguir el curso completo y aprender a desarrollar un Sistema de Ventas en Csharp.Net


utilizando como IDE de desarrollo Visual Studio 2013 y como gestor de Base de datos SQL Server
2014 desde:
https://www.youtube.com/watch?v=X52FI6honh0&list=PLZPrWDz1Molqn16IORKg8nFYTejgYCH
Jp

No se olviden siempre de Visitar mi canal www.youtube.com/jcarlosad7 para ver los nuevos


cursos.

Formulario FrmVenta - Mantenimiento


Código FrmVenta (Completo)

10

11

12

13

14

15

16
17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44
45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72
73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100
101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128
129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156
157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184
185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212
213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240
241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268
269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296
297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324
325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352
353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380
381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408
409

410

411

412

413

414

415

416

417

418

419

420

421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436
437

438

439

440

441

442

443

444

445

446

447

448

449

450

451

452

453

454

455

456

457

458

459

460

461

462

463

464
465

466

467

468

469

470

471

472

473

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using CapaNegocio;

namespace CapaPresentacion

public partial class FrmVenta : Form

private bool IsNuevo = false;

public int Idtrabajador;


private DataTable dtDetalle;

private decimal totalPagado = 0;

private static FrmVenta _instancia;

//Creamos una instancia para poder utilizar los

//Objetos del formulario

public static FrmVenta GetInstancia()

if (_instancia == null)

_instancia = new FrmVenta();

return _instancia;

//Creamos un método para enviar los valores recibidos

//del cliente

public void setCliente(string idcliente, string nombre)

this.txtIdcliente.Text = idcliente;

this.txtCliente.Text = nombre;

//Creamos un método para enviar los valores recibidos

//del artículo

public void setArticulo(string iddetalle_articulo, string nombre,Decimal


precio_compra,Decimal precio_venta,int stock,DateTime fecha_vencimiento)

{
this.txtIddetalle_ingreso.Text = iddetalle_articulo;

this.txtArticulo.Text = nombre;

this.txtPrecio_Compra.Text = Convert.ToString(precio_compra);

this.txtPrecio_Venta.Text = Convert.ToString(precio_venta);

this.txtStock.Text = Convert.ToString(stock);

this.dtFecha_Vencimiento.Value = fecha_vencimiento;

public FrmVenta()

InitializeComponent();

this.ttMensaje.SetToolTip(this.txtCliente, "Seleccione un Cliente");

this.ttMensaje.SetToolTip(this.txtSerie, "Ingrese la serie del comprobante");

this.ttMensaje.SetToolTip(this.txtCorrelativo, "Ingrese el número del


comprobante");

this.ttMensaje.SetToolTip(this.txtCantidad, "Ingrese la cantidad de compra");

this.ttMensaje.SetToolTip(this.txtArticulo, "Seleccione el artículo");

this.txtIdcliente.Visible = false;

this.txtCliente.ReadOnly = true;

this.txtIddetalle_ingreso.Visible = false;

this.txtArticulo.ReadOnly = true;

this.dtFecha_Vencimiento.Enabled = false;

this.txtPrecio_Compra.ReadOnly = true;

this.txtStock.ReadOnly = true;

//Mostrar Mensaje de Confirmación


private void MensajeOk(string mensaje)

MessageBox.Show(mensaje, "Sistema de Ventas", MessageBoxButtons.OK,


MessageBoxIcon.Information);

//Mostrar Mensaje de Error

private void MensajeError(string mensaje)

MessageBox.Show(mensaje, "Sistema de Ventas", MessageBoxButtons.OK,


MessageBoxIcon.Error);

//Limpiar todos los controles del formulario

private void Limpiar()

this.txtIdventa.Text = string.Empty;

this.txtIdcliente.Text = string.Empty;

this.txtCliente.Text = string.Empty;

this.txtSerie.Text = string.Empty;

this.txtCorrelativo.Text = string.Empty;

this.txtIgv.Text = "18";

this.lblTotalPagado.Text = "0,0";

this.txtDescuento.Text = "0";

this.crearTabla();

}
private void limpiarDetalle()

this.txtIddetalle_ingreso.Text = string.Empty;

this.txtArticulo.Text = string.Empty;

this.txtCantidad.Text = string.Empty;

this.txtPrecio_Compra.Text = string.Empty;

this.txtPrecio_Venta.Text = string.Empty;

this.txtStock.Text = String.Empty;

this.txtDescuento.Text = "0";

//Habilitar los controles del formulario

private void Habilitar(bool valor)

this.txtIdventa.ReadOnly = !valor;

this.txtSerie.ReadOnly = !valor;

this.txtCorrelativo.ReadOnly = !valor;

this.txtIgv.Enabled = valor;

this.dtFecha.Enabled = valor;

this.cbTipo_Comprobante.Enabled = valor;

this.txtCantidad.ReadOnly = !valor;

this.txtPrecio_Compra.ReadOnly = !valor;

this.txtPrecio_Venta.ReadOnly = !valor;

this.dtFecha_Vencimiento.Enabled = valor;

this.btnAgregar.Enabled = valor;

this.btnQuitar.Enabled = valor;

this.btnBuscarProveedor.Enabled = valor;
this.btnBuscarArticulo.Enabled = valor;

//Habilitar los botones

private void Botones()

if (this.IsNuevo) //Alt + 124

this.Habilitar(true);

this.btnNuevo.Enabled = false;

this.btnGuardar.Enabled = true;

this.btnCancelar.Enabled = true;

else

this.Habilitar(false);

this.btnNuevo.Enabled = true;

this.btnGuardar.Enabled = false;

this.btnCancelar.Enabled = false;

//Método para ocultar columnas

private void OcultarColumnas()

this.dataListado.Columns[0].Visible = false;

this.dataListado.Columns[1].Visible = false;
}

//Método Mostrar

private void Mostrar()

this.dataListado.DataSource = NVenta.Mostrar();

this.OcultarColumnas();

lblTotal.Text = "Total de Registros: " +


Convert.ToString(dataListado.Rows.Count);

//Método BuscarFecha

private void BuscarFechas()

this.dataListado.DataSource =
NVenta.BuscarFechas(this.dtFecha1.Value.ToString("dd/MM/yyyy"),
this.dtFecha2.Value.ToString("dd/MM/yyyy"));

this.OcultarColumnas();

lblTotal.Text = "Total de Registros: " +


Convert.ToString(dataListado.Rows.Count);

//Método BuscarDetalles

private void MostrarDetalles()

this.datalistadoDetalle.DataSource =
NVenta.MostrarDetalle(this.txtIdventa.Text);

//this.OcultarColumnas();
//lblTotal.Text = "Total de Registros: " +
Convert.ToString(dataListado.Rows.Count);

//this.datalistadoDetalle.AutoGenerateColumns = false;

//Crea la tabla de Detalle

private void crearTabla()

//Crea la tabla con el nombre de Detalle

this.dtDetalle = new DataTable("Detalle");

//Agrega las columnas que tendra la tabla

this.dtDetalle.Columns.Add("iddetalle_ingreso",
System.Type.GetType("System.Int32"));

this.dtDetalle.Columns.Add("articulo",
System.Type.GetType("System.String"));

this.dtDetalle.Columns.Add("cantidad",
System.Type.GetType("System.Int32"));

this.dtDetalle.Columns.Add("precio_venta",
System.Type.GetType("System.Decimal"));

this.dtDetalle.Columns.Add("descuento",
System.Type.GetType("System.Decimal"));

this.dtDetalle.Columns.Add("subtotal",
System.Type.GetType("System.Decimal"));

//Relacionamos nuestro datagridview con nuestro datatable

this.datalistadoDetalle.DataSource = this.dtDetalle;

private void FrmVenta_Load(object sender, EventArgs e)

//Para ubicar al formulario en la parte superior del contenedor

this.Top = 0;
this.Left = 0;

//Mostrar

this.Mostrar();

//Deshabilita los controles

this.Habilitar(false);

//Establece los botones

this.Botones();

this.crearTabla();

private void btnBuscar_Click(object sender, EventArgs e)

this.BuscarFechas();

private void btnEliminar_Click(object sender, EventArgs e)

try

DialogResult Opcion;

Opcion = MessageBox.Show("Realmente Desea Anular la(s) venta(s)",


"Sistema de Ventas", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

if (Opcion == DialogResult.OK)

string Codigo;

string Rpta = "";


foreach (DataGridViewRow row in dataListado.Rows)

if (Convert.ToBoolean(row.Cells[0].Value))

Codigo = Convert.ToString(row.Cells[1].Value);

Rpta = NVenta.Eliminar(Convert.ToInt32(Codigo));

if (Rpta.Equals("OK"))

this.MensajeOk("Se Anuló Correctamente el registro");

else

this.MensajeError(Rpta);

this.Mostrar();

catch (Exception ex)

MessageBox.Show(ex.Message + ex.StackTrace);

private void dataListado_DoubleClick(object sender, EventArgs e)


{

this.txtIdventa.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["idventa"].Value);

this.txtCliente.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["cliente"].Value);

this.dtFecha.Value =
Convert.ToDateTime(this.dataListado.CurrentRow.Cells["fecha"].Value);

this.cbTipo_Comprobante.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["tipo_comprobante"].Value);

this.txtSerie.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["serie"].Value);

this.txtCorrelativo.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["correlativo"].Value);

this.lblTotalPagado.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["Total"].Value);

this.MostrarDetalles();

this.tabControl1.SelectedIndex = 1;

private void chkEliminar_CheckedChanged(object sender, EventArgs e)

if (chkEliminar.Checked)

this.dataListado.Columns[0].Visible = true;

else

this.dataListado.Columns[0].Visible = false;

}
}

private void dataListado_CellContentClick(object sender,


DataGridViewCellEventArgs e)

if (e.ColumnIndex == dataListado.Columns["Eliminar"].Index)

DataGridViewCheckBoxCell ChkEliminar =

(DataGridViewCheckBoxCell)dataListado.Rows[e.RowIndex].Cells["Eliminar"];

ChkEliminar.Value = !Convert.ToBoolean(ChkEliminar.Value);

private void btnNuevo_Click(object sender, EventArgs e)

this.IsNuevo = true;

this.Botones();

this.Limpiar();

this.limpiarDetalle();

this.Habilitar(true);

this.txtSerie.Focus();

private void btnCancelar_Click(object sender, EventArgs e)

this.IsNuevo = false;

this.Botones();

this.Limpiar();
this.Limpiar();

this.txtIdventa.Text = string.Empty;

private void btnGuardar_Click(object sender, EventArgs e)

try

//La variable que almacena si se inserto

//o se modifico la tabla

string Rpta = "";

if (this.txtIdcliente.Text == string.Empty || this.txtSerie.Text ==


string.Empty || txtCorrelativo.Text == string.Empty || txtIgv.Text == string.Empty)

MensajeError("Falta ingresar algunos datos, serán remarcados");

errorIcono.SetError(txtCliente, "Seleccione un Proveedor");

errorIcono.SetError(txtSerie, "Ingrese la serie del comprobante");

errorIcono.SetError(txtCorrelativo, "Ingrese el número del


comprobante");

errorIcono.SetError(txtIgv, "Ingrese el porcentaje de IGV");

else

if (this.IsNuevo)

//Vamos a insertar un Ingreso

Rpta = NVenta.Insertar(Convert.ToInt32(txtIdcliente.Text),
Idtrabajador,

dtFecha.Value, cbTipo_Comprobante.Text,

txtSerie.Text, txtCorrelativo.Text,

Convert.ToDecimal(txtIgv.Text), "EMITIDO", dtDetalle);

//Si la respuesta fue OK, fue porque se

//o inserto la venta

//de forma correcta

if (Rpta.Equals("OK"))

this.MensajeOk("Se insertó de forma correcta el registro");

else

//Mostramos el mensaje de error

this.MensajeError(Rpta);

this.IsNuevo = false;

this.Botones();

this.Limpiar();

this.limpiarDetalle();

this.Mostrar();
}

catch (Exception ex)

MessageBox.Show(ex.Message + ex.StackTrace);

private void btnAgregar_Click(object sender, EventArgs e)

try

if (this.txtIddetalle_ingreso.Text == string.Empty || this.txtCantidad.Text


== string.Empty || txtPrecio_Venta.Text == string.Empty)

MensajeError("Falta ingresar algunos datos, serán remarcados");

errorIcono.SetError(txtArticulo, "Seleccione un Artículo");

errorIcono.SetError(txtCantidad, "Ingrese el stock inicial");

errorIcono.SetError(txtPrecio_Venta, "Ingrese el precio de Venta");

else

//Variable que va a indicar si podemos registrar el detalle

bool registrar = true;

foreach (DataRow row in dtDetalle.Rows)

{
if (Convert.ToInt32(row["iddetalle_ingreso"]) ==
Convert.ToInt32(this.txtIddetalle_ingreso.Text))

registrar = false;

this.MensajeError("Ya se encuentra el artículo en el detalle");

//Si podemos registrar el producto en el detalle

if (registrar=true &&
Convert.ToInt32(this.txtCantidad.Text)<=Convert.ToInt32(this.txtStock.Text))

//Calculamos el sub total del detalle sin descuento

decimal subTotal = Convert.ToDecimal(this.txtPrecio_Venta.Text) *


Convert.ToDecimal(txtCantidad.Text) - Convert.ToDecimal(txtDescuento.Text);

totalPagado = totalPagado + subTotal;

this.lblTotalPagado.Text = totalPagado.ToString("#0.00#");

//Agregamos al fila a nuestro datatable

DataRow row = this.dtDetalle.NewRow();

row["iddetalle_ingreso"] =
Convert.ToInt32(this.txtIddetalle_ingreso.Text);

row["articulo"] = this.txtArticulo.Text;

row["cantidad"] = Convert.ToInt32(this.txtCantidad.Text);

row["precio_venta"] = Convert.ToDecimal(this.txtPrecio_Venta.Text);

row["descuento"] = Convert.ToDecimal(this.txtDescuento.Text);

row["subTotal"] = subTotal;

this.dtDetalle.Rows.Add(row);

this.limpiarDetalle();

else

{
this.MensajeError("No hay Stock Disponible");

catch (Exception ex)

MessageBox.Show(ex.Message + ex.StackTrace);

private void btnQuitar_Click(object sender, EventArgs e)

try

//Indice dila actualmente seleccionado y que vamos a eliminar

int indiceFila = this.datalistadoDetalle.CurrentCell.RowIndex;

//Fila que vamos a eliminar

DataRow row = this.dtDetalle.Rows[indiceFila];

//Disminuimos el total a pagar

this.totalPagado = this.totalPagado -
Convert.ToDecimal(row["subTotal"].ToString());

this.lblTotalPagado.Text = totalPagado.ToString("#0.00#");

//Removemos la fila

this.dtDetalle.Rows.Remove(row);

catch (Exception ex)

{
MensajeError("No hay fila para remover");

private void FrmVenta_FormClosing(object sender, FormClosingEventArgs e)

_instancia = null;

private void btnBuscarProveedor_Click(object sender, EventArgs e)

FrmVistaCliente_Venta vista = new FrmVistaCliente_Venta();

vista.ShowDialog();

private void btnBuscarArticulo_Click(object sender, EventArgs e)

FrmVistaArticulo_Venta vista = new FrmVistaArticulo_Venta();

vista.ShowDialog();

}
1234567891011121314151617181920212223242526272829303132333435363738394
0414243444546474849505152535455565758596061626364656667686970717273747
5767778798081828384858687888990919293949596979899100101102103104105106
1071081091101111121131141151161171181191201211221231241251261271281291
3013113213313413513613713813914014114214314414514614714814915015115215
3154155156157158159160161162163164165166167168169170171172173174175176
1771781791801811821831841851861871881891901911921931941951961971981992
0020120220320420520620720820921021121221321421521621721821922022122222
3224225226227228229230231232233234235236237238239240241242243244245246
2472482492502512522532542552562572582592602612622632642652662672682692
7027127227327427527627727827928028128228328428528628728828929029129229
3294295296297298299300301302303304305306307308309310311312313314315316
3173183193203213223233243253263273283293303313323333343353363373383393
4034134234334434534634734834935035135235335435535635735835936036136236
3364365366367368369370371372373374375376377378379380381382383384385386
3873883893903913923933943953963973983994004014024034044054064074084094
1041141241341441541641741841942042142242342442542642742842943043143243
3434435436437438439440441442443444445446447448449450451452453454455456
457458459460461462463464465466467468469470471472473using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using CapaNegocio;

namespace CapaPresentacion
{
public partial class FrmVenta : Form
{
private bool IsNuevo = false;
public int Idtrabajador;

private DataTable dtDetalle;

private decimal totalPagado = 0;

private static FrmVenta _instancia;

//Creamos una instancia para poder utilizar los


//Objetos del formulario
public static FrmVenta GetInstancia()
{
if (_instancia == null)
{
_instancia = new FrmVenta();
}
return _instancia;
}
//Creamos un método para enviar los valores recibidos
//del cliente
public void setCliente(string idcliente, string nombre)
{
this.txtIdcliente.Text = idcliente;
this.txtCliente.Text = nombre;
}

//Creamos un método para enviar los valores recibidos


//del artículo
public void setArticulo(string iddetalle_articulo, string
nombre,Decimal precio_compra,Decimal precio_venta,int stock,DateTime
fecha_vencimiento)
{
this.txtIddetalle_ingreso.Text = iddetalle_articulo;
this.txtArticulo.Text = nombre;
this.txtPrecio_Compra.Text =
Convert.ToString(precio_compra);
this.txtPrecio_Venta.Text =
Convert.ToString(precio_venta);
this.txtStock.Text = Convert.ToString(stock);
this.dtFecha_Vencimiento.Value = fecha_vencimiento;

}
public FrmVenta()
{
InitializeComponent();
this.ttMensaje.SetToolTip(this.txtCliente, "Seleccione un
Cliente");
this.ttMensaje.SetToolTip(this.txtSerie, "Ingrese la serie
del comprobante");
this.ttMensaje.SetToolTip(this.txtCorrelativo, "Ingrese el
número del comprobante");
this.ttMensaje.SetToolTip(this.txtCantidad, "Ingrese la
cantidad de compra");
this.ttMensaje.SetToolTip(this.txtArticulo, "Seleccione el
artículo");
this.txtIdcliente.Visible = false;
this.txtCliente.ReadOnly = true;
this.txtIddetalle_ingreso.Visible = false;
this.txtArticulo.ReadOnly = true;
this.dtFecha_Vencimiento.Enabled = false;
this.txtPrecio_Compra.ReadOnly = true;
this.txtStock.ReadOnly = true;

//Mostrar Mensaje de Confirmación


private void MensajeOk(string mensaje)
{
MessageBox.Show(mensaje, "Sistema de Ventas",
MessageBoxButtons.OK, MessageBoxIcon.Information);

//Mostrar Mensaje de Error


private void MensajeError(string mensaje)
{
MessageBox.Show(mensaje, "Sistema de Ventas",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}

//Limpiar todos los controles del formulario


private void Limpiar()
{
this.txtIdventa.Text = string.Empty;
this.txtIdcliente.Text = string.Empty;
this.txtCliente.Text = string.Empty;
this.txtSerie.Text = string.Empty;
this.txtCorrelativo.Text = string.Empty;
this.txtIgv.Text = "18";
this.lblTotalPagado.Text = "0,0";
this.txtDescuento.Text = "0";
this.crearTabla();

private void limpiarDetalle()


{
this.txtIddetalle_ingreso.Text = string.Empty;
this.txtArticulo.Text = string.Empty;
this.txtCantidad.Text = string.Empty;
this.txtPrecio_Compra.Text = string.Empty;
this.txtPrecio_Venta.Text = string.Empty;
this.txtStock.Text = String.Empty;
this.txtDescuento.Text = "0";
}

//Habilitar los controles del formulario


private void Habilitar(bool valor)
{
this.txtIdventa.ReadOnly = !valor;
this.txtSerie.ReadOnly = !valor;
this.txtCorrelativo.ReadOnly = !valor;
this.txtIgv.Enabled = valor;
this.dtFecha.Enabled = valor;
this.cbTipo_Comprobante.Enabled = valor;
this.txtCantidad.ReadOnly = !valor;
this.txtPrecio_Compra.ReadOnly = !valor;
this.txtPrecio_Venta.ReadOnly = !valor;
this.dtFecha_Vencimiento.Enabled = valor;
this.btnAgregar.Enabled = valor;
this.btnQuitar.Enabled = valor;
this.btnBuscarProveedor.Enabled = valor;
this.btnBuscarArticulo.Enabled = valor;
}

//Habilitar los botones


private void Botones()
{
if (this.IsNuevo) //Alt + 124
{
this.Habilitar(true);
this.btnNuevo.Enabled = false;
this.btnGuardar.Enabled = true;
this.btnCancelar.Enabled = true;
}
else
{
this.Habilitar(false);
this.btnNuevo.Enabled = true;
this.btnGuardar.Enabled = false;
this.btnCancelar.Enabled = false;
}

//Método para ocultar columnas


private void OcultarColumnas()
{
this.dataListado.Columns[0].Visible = false;
this.dataListado.Columns[1].Visible = false;
}

//Método Mostrar
private void Mostrar()
{
this.dataListado.DataSource = NVenta.Mostrar();
this.OcultarColumnas();
lblTotal.Text = "Total de Registros: " +
Convert.ToString(dataListado.Rows.Count);
}

//Método BuscarFecha
private void BuscarFechas()
{
this.dataListado.DataSource =
NVenta.BuscarFechas(this.dtFecha1.Value.ToString("dd/MM/yyyy"),
this.dtFecha2.Value.ToString("dd/MM/yyyy"));
this.OcultarColumnas();
lblTotal.Text = "Total de Registros: " +
Convert.ToString(dataListado.Rows.Count);

}
//Método BuscarDetalles
private void MostrarDetalles()
{
this.datalistadoDetalle.DataSource =
NVenta.MostrarDetalle(this.txtIdventa.Text);
//this.OcultarColumnas();
//lblTotal.Text = "Total de Registros: " +
Convert.ToString(dataListado.Rows.Count);
//this.datalistadoDetalle.AutoGenerateColumns = false;
}

//Crea la tabla de Detalle


private void crearTabla()
{
//Crea la tabla con el nombre de Detalle
this.dtDetalle = new DataTable("Detalle");
//Agrega las columnas que tendra la tabla
this.dtDetalle.Columns.Add("iddetalle_ingreso",
System.Type.GetType("System.Int32"));
this.dtDetalle.Columns.Add("articulo",
System.Type.GetType("System.String"));
this.dtDetalle.Columns.Add("cantidad",
System.Type.GetType("System.Int32"));
this.dtDetalle.Columns.Add("precio_venta",
System.Type.GetType("System.Decimal"));
this.dtDetalle.Columns.Add("descuento",
System.Type.GetType("System.Decimal"));
this.dtDetalle.Columns.Add("subtotal",
System.Type.GetType("System.Decimal"));
//Relacionamos nuestro datagridview con nuestro datatable
this.datalistadoDetalle.DataSource = this.dtDetalle;

}
private void FrmVenta_Load(object sender, EventArgs e)
{
//Para ubicar al formulario en la parte superior del
contenedor
this.Top = 0;
this.Left = 0;
//Mostrar
this.Mostrar();
//Deshabilita los controles
this.Habilitar(false);
//Establece los botones
this.Botones();
this.crearTabla();

private void btnBuscar_Click(object sender, EventArgs e)


{
this.BuscarFechas();
}

private void btnEliminar_Click(object sender, EventArgs e)


{
try
{
DialogResult Opcion;
Opcion = MessageBox.Show("Realmente Desea Anular la(s)
venta(s)", "Sistema de Ventas", MessageBoxButtons.OKCancel,
MessageBoxIcon.Question);

if (Opcion == DialogResult.OK)
{
string Codigo;
string Rpta = "";

foreach (DataGridViewRow row in dataListado.Rows)


{
if (Convert.ToBoolean(row.Cells[0].Value))
{
Codigo =
Convert.ToString(row.Cells[1].Value);
Rpta =
NVenta.Eliminar(Convert.ToInt32(Codigo));

if (Rpta.Equals("OK"))
{
this.MensajeOk("Se Anuló Correctamente
el registro");
}
else
{
this.MensajeError(Rpta);
}

}
}
this.Mostrar();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.StackTrace);
}
}

private void dataListado_DoubleClick(object sender, EventArgs


e)
{

this.txtIdventa.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["idventa"].Value);
this.txtCliente.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["cliente"].Value);
this.dtFecha.Value =
Convert.ToDateTime(this.dataListado.CurrentRow.Cells["fecha"].Value);
this.cbTipo_Comprobante.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["tipo_comprobante"]
.Value);
this.txtSerie.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["serie"].Value);
this.txtCorrelativo.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["correlativo"].Valu
e);
this.lblTotalPagado.Text =
Convert.ToString(this.dataListado.CurrentRow.Cells["Total"].Value);
this.MostrarDetalles();
this.tabControl1.SelectedIndex = 1;

private void chkEliminar_CheckedChanged(object sender,


EventArgs e)
{
if (chkEliminar.Checked)
{
this.dataListado.Columns[0].Visible = true;
}
else
{
this.dataListado.Columns[0].Visible = false;
}
}

private void dataListado_CellContentClick(object sender,


DataGridViewCellEventArgs e)
{
if (e.ColumnIndex ==
dataListado.Columns["Eliminar"].Index)
{
DataGridViewCheckBoxCell ChkEliminar =

(DataGridViewCheckBoxCell)dataListado.Rows[e.RowIndex].Cells["Eliminar
"];
ChkEliminar.Value =
!Convert.ToBoolean(ChkEliminar.Value);
}
}

private void btnNuevo_Click(object sender, EventArgs e)


{
this.IsNuevo = true;
this.Botones();
this.Limpiar();
this.limpiarDetalle();
this.Habilitar(true);
this.txtSerie.Focus();
}

private void btnCancelar_Click(object sender, EventArgs e)


{
this.IsNuevo = false;
this.Botones();
this.Limpiar();
this.Limpiar();
this.txtIdventa.Text = string.Empty;

private void btnGuardar_Click(object sender, EventArgs e)


{
try
{

//La variable que almacena si se inserto


//o se modifico la tabla
string Rpta = "";
if (this.txtIdcliente.Text == string.Empty ||
this.txtSerie.Text == string.Empty || txtCorrelativo.Text ==
string.Empty || txtIgv.Text == string.Empty)
{
MensajeError("Falta ingresar algunos datos, serán
remarcados");
errorIcono.SetError(txtCliente, "Seleccione un
Proveedor");
errorIcono.SetError(txtSerie, "Ingrese la serie
del comprobante");
errorIcono.SetError(txtCorrelativo, "Ingrese el
número del comprobante");
errorIcono.SetError(txtIgv, "Ingrese el porcentaje
de IGV");
}
else
{
if (this.IsNuevo)
{
//Vamos a insertar un Ingreso
Rpta =
NVenta.Insertar(Convert.ToInt32(txtIdcliente.Text),
Idtrabajador,
dtFecha.Value, cbTipo_Comprobante.Text,
txtSerie.Text, txtCorrelativo.Text,
Convert.ToDecimal(txtIgv.Text), "EMITIDO",
dtDetalle);

}
//Si la respuesta fue OK, fue porque se
//o inserto la venta
//de forma correcta
if (Rpta.Equals("OK"))
{

this.MensajeOk("Se insertó de forma correcta


el registro");

}
else
{
//Mostramos el mensaje de error
this.MensajeError(Rpta);
}
this.IsNuevo = false;
this.Botones();
this.Limpiar();
this.limpiarDetalle();
this.Mostrar();

}
}

catch (Exception ex)


{

MessageBox.Show(ex.Message + ex.StackTrace);
}
}

private void btnAgregar_Click(object sender, EventArgs e)


{
try
{

if (this.txtIddetalle_ingreso.Text == string.Empty ||
this.txtCantidad.Text == string.Empty || txtPrecio_Venta.Text ==
string.Empty)
{
MensajeError("Falta ingresar algunos datos, serán
remarcados");
errorIcono.SetError(txtArticulo, "Seleccione un
Artículo");
errorIcono.SetError(txtCantidad, "Ingrese el stock
inicial");
errorIcono.SetError(txtPrecio_Venta, "Ingrese el
precio de Venta");
}
else
{
//Variable que va a indicar si podemos registrar
el detalle
bool registrar = true;
foreach (DataRow row in dtDetalle.Rows)
{
if (Convert.ToInt32(row["iddetalle_ingreso"])
== Convert.ToInt32(this.txtIddetalle_ingreso.Text))
{
registrar = false;
this.MensajeError("Ya se encuentra el
artículo en el detalle");
}
}
//Si podemos registrar el producto en el detalle
if (registrar=true &&
Convert.ToInt32(this.txtCantidad.Text)<=Convert.ToInt32(this.txtStock.
Text))
{
//Calculamos el sub total del detalle sin
descuento
decimal subTotal =
Convert.ToDecimal(this.txtPrecio_Venta.Text) *
Convert.ToDecimal(txtCantidad.Text) -
Convert.ToDecimal(txtDescuento.Text);
totalPagado = totalPagado + subTotal;
this.lblTotalPagado.Text =
totalPagado.ToString("#0.00#");
//Agregamos al fila a nuestro datatable
DataRow row = this.dtDetalle.NewRow();
row["iddetalle_ingreso"] =
Convert.ToInt32(this.txtIddetalle_ingreso.Text);
row["articulo"] = this.txtArticulo.Text;
row["cantidad"] =
Convert.ToInt32(this.txtCantidad.Text);
row["precio_venta"] =
Convert.ToDecimal(this.txtPrecio_Venta.Text);
row["descuento"] =
Convert.ToDecimal(this.txtDescuento.Text);
row["subTotal"] = subTotal;
this.dtDetalle.Rows.Add(row);
this.limpiarDetalle();
}
else
{
this.MensajeError("No hay Stock Disponible");
}
}
}

catch (Exception ex)


{

MessageBox.Show(ex.Message + ex.StackTrace);
}
}

private void btnQuitar_Click(object sender, EventArgs e)


{
try
{
//Indice dila actualmente seleccionado y que vamos a
eliminar
int indiceFila =
this.datalistadoDetalle.CurrentCell.RowIndex;
//Fila que vamos a eliminar
DataRow row = this.dtDetalle.Rows[indiceFila];
//Disminuimos el total a pagar
this.totalPagado = this.totalPagado -
Convert.ToDecimal(row["subTotal"].ToString());
this.lblTotalPagado.Text =
totalPagado.ToString("#0.00#");
//Removemos la fila
this.dtDetalle.Rows.Remove(row);
}
catch (Exception ex)
{
MensajeError("No hay fila para remover");
}
}

private void FrmVenta_FormClosing(object sender,


FormClosingEventArgs e)
{
_instancia = null;
}

private void btnBuscarProveedor_Click(object sender, EventArgs


e)
{
FrmVistaCliente_Venta vista = new FrmVistaCliente_Venta();
vista.ShowDialog();
}

private void btnBuscarArticulo_Click(object sender, EventArgs


e)
{
FrmVistaArticulo_Venta vista = new
FrmVistaArticulo_Venta();
vista.ShowDialog();
}
}
}

Video 35: Sistema de Ventas C# - Visual Studio 2013 - Sql Server 2014 (35-40)
Formulario Venta 2

Saludos Imperio, un abrazo a la distancia.


Tags :
DISEÑO SISTEMA VENTAS CSHARP SQL SERVER 2014
 Tweet
 Compartir
 Compartir
 Compartir
 Compartir

Acerca de Incanatoit.com
Número de entradas : 260
Incanatoit.com es una página web donde se comparten cursos de desarrollo de Software.


Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (41-
41) Generar Instalador

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (40-
41) Archivo appconfig Conexión Base de datos

Código Sistema de Ventas C# (Visual Studio 2013) y Sql Server 2014 POO,
3 Capas

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (39-
41) Bakup BD

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (38-
41) Consulta Stock Artículos

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (37-
41) Reporte Datos

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (36-
41) Reporte Factura

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (35-
41) Gestión Ventas

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (34-
41) Listado Venta
 Next Programación Transact Estructura Iterativa WHILE - Bases de Datos en Microsoft
Sql Server 2014 (30-35)
 PreviousDiseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (34-41)
Listado Venta

Recientes

 Sistemas Completos desde 5 $

Código Sistema de Compras, Ventas en Asp.Net Core 2.1, Entity Framework Core,

SQL Server, VueJS y Vuetify

 Base de Datos PostgreSQL

Curso Base de datos postgreSQL

 Cursos Frontend
Curso completo de VueJS - Vuetify

 Diseño Sistema Web PHP con Laravel y Mysql

Diseño Sistema web PHP con laravel y Mysql (36-36) Fin del curso

 Sistemas Completos desde 5 $

Código Sistema de Compras y Ventas en Laravel 5.6, VueJS, MariaDB - MySQL,

(Código de Barras) - Bootstrap 3

 Cursos premium

Curso Desarrolla sistemas web en ASP Net Core 2.1, Entity framework Core, SQL

Server, Vuejs y vuetify

 Sistemas Completos desde 5 $

Código Sistema de Compras, Ventas en PHP 7 y Mysql (Código de Barras) -

Bootstrap 3, POO, Jquery Ajax, Datatables

 Sistemas Completos desde 5 $

Sistema comercial (compras, ventas) logístico integrado con facturación

electrónica

 Cursos premium

Curso Desarrollo web en PHP con Laravel 5.6, VueJS y MariaDB Mysql

 Cursos premium

Curso Desarrollo de sistemas web en PHP 7 POO, MySQL, Jquery Ajax


Home Curso Completo Sql Server 2014 Programación Transact Estructura Iterativa WHILE -
Bases de Datos en Microsoft Sql Server 2014 (30-35)

Programación Transact Estructura Iterativa WHILE -


Bases de Datos en Microsoft Sql Server 2014 (30-35)
IncanatoIt-ad 3 years ago Curso Completo Sql Server 2014
Buen día amigos de IncanatoIt, en este artículo veremos dentro de programación
Transact Sql la estructura Condicional WHILE en Microsoft Sql Server.
La sentencia WHILE de SQL ejecuta una conjunto de instrucciones varias veces,
mientras la condición por la cual se rige sea verdadera. Si en algún momento es
falsa el bucle se termina.

Puedes seguir el curso Completo desde:


https://www.youtube.com/watch?v=lFYSq3DI3rs&list=PLZPrWDz1MolrT1ID3CR
IeR6jPLJ7Fp1x6

Puedes descargar el Material del Curso desde, Archivos del Curso, Backup y
Presentaciones:
https://drive.google.com/open?id=1kAJ_A03b7Y2DSqQzXEDwaMtBbvks7gmj

Programación Transact SQL

Scripts
Procedimientos Almacenados
Funciones
Triggers

Estructura de control Iterativa WHILE

La estructura WHILE hace repetir un conjunto de instrucciones en secuencia un


número determinado de veces mientras la condición por la cual se rige sea
verdadera, a esto se le denomina bucle o ciclo. Si en algún momento es falsa el
bucle se termina.

Estructura de control Iterativa WHILE - Sintáxis

WHILE condición
BEGIN
<expresión repetida>
[BREAK]
<expression repetida>
[CONTINUE]
<expression repetida>
END
Ejemplos:

Ejemplo 1:
Implementar un Script que permita mostrar los números pares consecutivos del 1
al 100.

--Declaramos la variable que controlará las repeticiones del bucle


declare @N INT=0
--Aplicamos la estructura iterativa
while (@N<100)
begin
--Aumentamos el valor de N para iniciar en 1
--y evaluarlo en la próxima iteración
set @N=@N+1
--Evaluamos que sólo se imprima el valor de N cuando es par,
es decir su residuo es cero.
if (@N % 2 =0)
Print 'Valor N: ' + Cast(@N as Char(3))
end
go

Ejemplo 2:
Implementar un Script que permita aumentar en 10% el costo de las tarifas solo si
el promedio de estas no supera los 2000, cuando se termine de actualizar dichos
valores mostrar el mensaje “YA NO HAY MÁS QUE ACTUALIZAR”.

Tabla Tarifa

--Iniciamos el ciclo de repeticiones


--y evaluamos las repeticiones mientras el
-- promedio del precio sea menor que mil
while (select avg(precio) from tarifa)<2000
begin
--Actualizamos el costo
update tarifa set precio=precio*1.1
--repetiremos el bucle hasta que el precio `
--sea mayor que 2000 ahi nos detenemos
if (select max(precio) from tarifa)>2000
break
else
--Si el precio no es mayor que 2000 continuamos
continue
end
print 'Ya no hay más que actualizar'
go

Ejemplo 3:
Implementar un Script que permita mostrar los registros de la tabla pasajero
paginados de 2 en 2.

Tabla Pasajero

--La página que deseamos mostrar


declare @pagina int=1
--Declaramos nuestra estructura iterativa
while(@pagina<=5)
begin
--Número de filas por página
declare @cantFilas int=2
--adicionamos una subconsulta llamada X
select * from (select rownum= ROW_NUMBER()
over (order by p.idpasajero),
--la función devuelve el número secuencial de una fila
de una
--partición de un conjunto de resultados,
-- comenzando con 1 para la primera fila de
--cada partición.
* from pasajero p) X
where rownum>(@cantFilas*(@pagina-1))AND
rownum<=(@cantFilas*(@pagina-1))+@cantFilas
set @pagina=@pagina+1
end
go

Programación Transact Estructura Iterativa WHILE (30-35) Bases de Datos en


Microsoft Sql Server 2014

Saludos Imperio, un abrazo a la distancia.


Tags :
CURSO COMPLETO SQL SERVER 2014
 Tweet
 Compartir
 Compartir
 Compartir
 Compartir

Acerca de Incanatoit.com
Número de entradas : 260
Incanatoit.com es una página web donde se comparten cursos de desarrollo de Software.


Tablas de Referencia Cruzada Pivot - Bases de Datos en Microsoft Sql
Server 2014 (35-35)

Cursores en Sql Server - Bases de Datos en Microsoft Sql Server 2014 (34-
35)

Triggers (Disparadores) Sql Server - Bases de Datos en Microsoft Sql
Server 2014 (33-35)

Funciones Sql Server - Bases de Datos en Microsoft Sql Server 2014 (32-
35)

Procedimientos Almacenados Sql Server - Bases de Datos en Microsoft
Sql Server 2014 (31-35)

Programación Transact Estructura Iterativa WHILE - Bases de Datos en
Microsoft Sql Server 2014 (30-35)

Programación Transact Estructura Múltiple CASE - Bases de Datos en
Microsoft Sql Server 2014 (29-35)

Programación Transact Estructura Condicional If - Bases de Datos en
Microsoft Sql Server 2014 (28-35)

Agregar Conjunto de Resultados Operador UNION - Bases de Datos en
Microsoft Sql Server 2014 (27-35)
 Next Procedimientos Almacenados Sql Server - Bases de Datos en Microsoft Sql Server
2014 (31-35)
 PreviousDiseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (35-41)
Gestión Ventas
No hay comentarios:

Procedimientos Almacenados Sql Server - Bases de


Datos en Microsoft Sql Server 2014 (31-35)
IncanatoIt-ad 3 years ago Curso Completo Sql Server 2014
Buen día amigos de IncanatoIt, continuamos en este curso de base de datos en
Microsoft Sql Server 2014, en este artículo trabajaremos con procedimientos
almacenados.

Puedes seguir el curso Completo desde:


https://www.youtube.com/watch?v=lFYSq3DI3rs&list=PLZPrWDz1MolrT1ID3CR
IeR6jPLJ7Fp1x6

Puedes descargar el Material del Curso desde, Archivos del Curso, Backup y
Presentaciones:
https://drive.google.com/open?id=1kAJ_A03b7Y2DSqQzXEDwaMtBbvks7gmj

Programación Transact SQL


Scripts
Procedimientos Almacenados
Funciones
Triggers

Procedimientos Almacenados

Son un conjunto de instrucciones de Transact-SQL que pueden aceptar y devolver


parámetros proporcionados por el usuario.

Tipos de procedimientos almacenados

Procedimientos Almacenados del Sistema:

Generalmente están guardados en la base de datos MASTER son identificados por


iniciar en SP, permiten realizar una amplia variedad de tareas, a continuación
mostramos algunos procedimientos almacenados del sistema:

Sp_columns
Sp_column_privileges
Sp_databases
Sp_fkeys
Sp_pkeys
Sp_tables
Sp_server_info
Sp_statistics

Ejemplos

--Procedimiento del sistema que muestra


--las columnas de la tabla país
sp_columns pais

--Procedimiento almacenado del sistema para mostrar los


--privilegios de las columnas involucradas de la tabla pasajero
Sp_column_privileges pasajero

--Procedimiento almacenado del sistema que muestra


--las base de datos del servidor activo.
Sp_databases

--Procedimiento almacenado que muestra las características


--de nuestro servidor activo
sp_server_info

--procedimiento almacenado que muestra donde se hace referencia


--a la tabla pasajero
Sp_fkeys pasajero

--Procedimiento almacenado que muestra la llave primaria


--de la tabla pasajero
Sp_pkeys pasajero

Procedimientos Almacenados definidos por el usuario:

Son procedimientos que se implementan en forma personalizada según las


necesidades del usuario.

Los Procedimientos Almacenados pueden tener parámetros de entrada y salida.

Procedimientos Almacenados - Sintáxis

Create procedure Nombre_Procedimiento


@parámetro1 [tipo dato],
@parámetroN [tipo dato]
AS
<Instrucciones>

Ejemplos:
Ejemplo 1:
Implementar un procedimiento almacenado que muestre el listado de los países y
su total de pasajeros.

Tabla Pasajero - País

--Evaluamos si ya existe el procedimiento

--almacenado que queremos implementar

--si ya existe lo eliminamos

if object_id('pasajerosxpais') is not null

begin

drop procedure pasajerosxpais

end

go

--Implementamos nuestro procedimiento almacenado

create procedure pasajerosxpais

as

select pai.nombre,count(*) as [Total]


from pasajero pas join pais pai
on pas.idpais=pai.idpais
group by pai.nombre
go
--Ejecutamos el procedimiento almacenado
exec pasajerosxpais

Ejemplo 2:
Implementar un procedimiento almacenado que permita mostrar los pagos de un
determinado pasajero, considerar para este caso como parámetro de búsqueda el
número de documento del pasajero.

Tabla Pasajero - Pais=Pago

--Evaluamos si ya existe el procedimiento

--almacenado que queremos implementar

--si ya existe lo eliminamos

if object_id('pagosxpasajero') is not null

begin

drop procedure pagosxpasajero

end

go

--Implementamos nuestro procedimiento almacenado


alter procedure pagosxpasajero

@num_documento varchar(12)

as

select fecha,monto,tipo_comprobante,num_comprobante
from pago where idpasajero=
(select idpasajero from pasajero
where num_documento=@num_documento)
go
--Ejecutamos el procedimiento almacenado y le enviamos el
parámetro de entrada
exec pagosxpasajero '47715777'

Ejemplo 3:
Implementar un procedimiento almacenado que permita registrar un Nuevo país,
para este caso definir como parámetro de entrada todos los campos referentes a la
tabla país.

Tabla País

--Evaluamos si ya existe el procedimiento

--almacenado que queremos implementar

--si ya existe lo eliminamos

if object_id('nuevopais') is not null

begin

drop procedure nuevopais

end
go

--Implementamos nuestro procedimiento almacenado

create procedure nuevopais

@idpais char(4),
@nombre varchar(30)
as
insert into pais (idpais,nombre)
values(@idpais,@nombre)
go
--Ejecutamos el procedimiento almacenado y le enviamos los
parámetros de entrada
exec nuevopais '0014','Dinamarca'

Ejemplo 4:
Implementar un procedimiento almacenado que retorne el total de pagos recibidos
en una determinada fecha.

Tabla Pago

--Evaluamos si ya existe el procedimiento


--almacenado que queremos implementar
--si ya existe lo eliminamos
if object_id('pagosxfecha') is not null
begin
drop procedure pagosxfecha
end
go
--Implementamos nuestro procedimiento almacenado
create procedure pagosxfecha
@fecha date,
@total money output
as
select @total=sum(monto) from pago
where fecha=@fecha
go

--Ejecutamos el procedimiento almacenado y le enviamos


--los parámetros
declare @t money
exec pagosxfecha '2014-05-05',@total=@t output

print 'Total' + cast(@t as char(10))

Procedimientos Almacenados (31-35) Bases de Datos en Microsoft Sql Server


2014

Saludos Imperio, un abrazo a la distancia.


Tags :
CURSO COMPLETO SQL SERVER 2014
 Tweet
 Compartir
 Compartir
 Compartir
 Compartir
Acerca de Incanatoit.com
Número de entradas : 260
Incanatoit.com es una página web donde se comparten cursos de desarrollo de Software.


Tablas de Referencia Cruzada Pivot - Bases de Datos en Microsoft Sql
Server 2014 (35-35)

Cursores en Sql Server - Bases de Datos en Microsoft Sql Server 2014 (34-
35)

Triggers (Disparadores) Sql Server - Bases de Datos en Microsoft Sql
Server 2014 (33-35)

Funciones Sql Server - Bases de Datos en Microsoft Sql Server 2014 (32-
35)

Procedimientos Almacenados Sql Server - Bases de Datos en Microsoft
Sql Server 2014 (31-35)

Programación Transact Estructura Iterativa WHILE - Bases de Datos en
Microsoft Sql Server 2014 (30-35)

Programación Transact Estructura Múltiple CASE - Bases de Datos en
Microsoft Sql Server 2014 (29-35)

Programación Transact Estructura Condicional If - Bases de Datos en
Microsoft Sql Server 2014 (28-35)

Agregar Conjunto de Resultados Operador UNION - Bases de Datos en
Microsoft Sql Server 2014 (27-35)
 Next Funciones Sql Server - Bases de Datos en Microsoft Sql Server 2014 (32-35)
 PreviousProgramación Transact Estructura Iterativa WHILE - Bases de Datos en
Microsoft Sql Server 2014 (30-35)
3 comentarios:

1.

Luis Navarro3 de diciembre de 2016, 21:35


como haría si me pedirían:

Realizar consultas de Mantenimiento para todas las Tablas(10 registros en cada uno),

utilizando

procedimientos almacenados

Responder

2.

Luis Navarro3 de diciembre de 2016, 21:37

¿Cómo hacer lo siguiente?

1.- Consultas de Préstamos por devolver y devueltos ???

2.- Listado de Productos por Clasificación

3.- Productos más solicitados

4.- Consultas de Mantenimiento de todas las tablas(mínimo 10 registros) utilizando

procedimientos almacenados
Responder

3.

Frank Alberto Jimenez Medina20 de noviembre de 2017, 20:29

Excelentes videos, muchas gracias


Funciones Sql Server - Bases de Datos en Microsoft Sql
Server 2014 (32-35)
IncanatoIt-ad 3 years ago Curso Completo Sql Server 2014
Buen día amigos de IncanatoIt, continuamos en este curso de base de datos en
Microsoft Sql Server 2014, en este artículo trabajaremos con funciones en sql
server.

Puedes seguir el curso Completo desde:


https://www.youtube.com/watch?v=lFYSq3DI3rs&list=PLZPrWDz1MolrT1ID3CR
IeR6jPLJ7Fp1x6

Puedes descargar el Material del Curso desde, Archivos del Curso, Backup y
Presentaciones:
https://drive.google.com/open?id=1kAJ_A03b7Y2DSqQzXEDwaMtBbvks7gmj

Programación Transact SQL

Scripts
Procedimientos Almacenados
Funciones
Triggers

Funciones
Rutina almacenada que recibe unos parámetros escalares de entrada, luego los
procesa según el cuerpo definido de la función y por último retorna un resultado
de un tipo especifico que permitirá cumplir un objetivo.
SQL Server proporciona numerosas funciones integradas y permite crear funciones
definidas por el usuario.

Tipos de Funciones

Funciones del Sistema:


SQL Server cuenta con una gran variedad de funciones dependiendo de los valores
o configuraciones que deseamos realizar, a continuación mostramos algunas
funciones del sistema:
 Funciones de Agregado: SUM, AVG, COUNT,MAX, MIN
 Funciones de Fecha y Hora: GETDATE, DAY, MONTH, YEAR, DATEADD,
DATEDIF, ISDATE
 Funciones Matemáticas: ABS, RAND, LOG10, SQRT, POWER, TAN, PI,
RADIANS

Funciones definidas por el usuario:


Las funciones definidas por el usuario de SQL Server son rutinas que aceptan
parámetros, realizan una acción, como un cálculo complejo, y devuelven el
resultado de esa acción como un valor (único o conjunto de valores).

Funciones - Sintáxis

Create Function Nombre_Función


(@parámetro1 as [Tipo Dato] = [ValorxDefecto],
@parámetroN as [Tipo Dato] = [ValorxDefecto])
RETURNS TipoDato_Returnado
AS
BEGIN
<Instrucciones>
RETURN Expresión_salida
END

Ejemplos

Ejemplo 1:
Implementar una función que devuelva el promedio de dos números ingresados por
el usuario.

--Evaluamos primero si ya existe la función

--que queremos implementar si ya existe la eliminamos

IF object_id('calcularpromedio') is not null

BEGIN

DROP FUNCTION dbo.calcularpromedio

END

go

--Implementamos la función con dos parámetros de entrada

CREATE FUNCTION calcularpromedio

(@valor1 as decimal(10,2),@valor2 decimal(10,2))


RETURNS decimal(10,2)

AS

BEGIN

DECLARE @resultado decimal(10,2)

SET @resultado=(@valor1+@valor2)/2
RETURN @resultado
END
GO
--Ejecutamos la función con un select y le enviamos
--los dos parámetros de entrada (DBO es el nombre del propietario)
select dbo.calcularpromedio(12,13) as Promedio
--Ejecutamos la función con un print y le enviamos
--los dos parámetros de entrada
print 'Promedio:
' + cast(dbo.calcularpromedio(12,13) as Char(10))

Ejemplo 2:
Implementar una función que devuelva el nombre de un mes en letras según una
fecha ingresada por el usuario.

Tabla Pasajero - País - Pago


--Evaluamos primero si ya existe la función

--que queremos implementar, si ya existe la eliminamos

IF object_id('fechaletras') is not null

BEGIN

DROP FUNCTION dbo.fechaletras

END

go

--Implementamos la función con un solo parámetro de entrada

CREATE FUNCTION fechaletras (@fecha as DATE)

RETURNS varchar(20)

AS

BEGIN

DECLARE @resultado varchar(20)

SET @resultado=concat(day(@fecha),' de
',datename(month,@fecha),

' del ',year(@fecha))

RETURN @resultado
END
GO
--Ejecutamos la función con un select y le enviamos
--el parámetro de entrada
select dbo.fechaletras('2015-08-08') as [Fecha Actual]

select dbo.fechaletras(pag.fecha) as Fecha,


(pas.nombre + ' ' +pas.apaterno) as pasajero,
pag.tipo_comprobante,pag.num_comprobante
from pago pag inner join pasajero pas
on pag.idpasajero=pas.idpasajero
go

Ejemplo 3:
Implementar una función de tabla en línea que muestre los registros de la tabla
pasajero dependiendo del país de proveniencia.

Tabla Pasajero - País

--Evaluamos primero si ya existe la función

--que queremos implementar, si ya existe la eliminamos

IF object_id('pasajeroxpais') is not null

BEGIN

DROP FUNCTION dbo.pasajeroxpais

END

go

--Implementamos la función con un solo parámetro de entrada

CREATE FUNCTION pasajeroxpais (@pais as varchar(30))

RETURNS TABLE

AS
RETURN (SELECT pas.idpasajero,(pas.nombre + ' ' +

pas.apaterno) as Pasajero,pai.nombre as Pais

from pasajero pas inner join pais pai

on pai.idpais=pas.idpais
where pai.nombre=@pais)

GO
--Ejecutamos la función con un select,
--Mostraremos los pasajeros del país Perú
select * from dbo.pasajeroxpais('Perú')
go

Funciones (32-35) Bases de Datos en Microsoft Sql Server 2012

Saludos Imperio, un abrazo a la distancia.


Tags :
CURSO COMPLETO SQL SERVER 2014
 Tweet
 Compartir
 Compartir
 Compartir
 Compartir

Acerca de Incanatoit.com
Número de entradas : 260
Incanatoit.com es una página web donde se comparten cursos de desarrollo de Software.


Tablas de Referencia Cruzada Pivot - Bases de Datos en Microsoft Sql
Server 2014 (35-35)

Cursores en Sql Server - Bases de Datos en Microsoft Sql Server 2014 (34-
35)

Triggers (Disparadores) Sql Server - Bases de Datos en Microsoft Sql
Server 2014 (33-35)

Funciones Sql Server - Bases de Datos en Microsoft Sql Server 2014 (32-
35)

Procedimientos Almacenados Sql Server - Bases de Datos en Microsoft
Sql Server 2014 (31-35)

Programación Transact Estructura Iterativa WHILE - Bases de Datos en
Microsoft Sql Server 2014 (30-35)

Programación Transact Estructura Múltiple CASE - Bases de Datos en
Microsoft Sql Server 2014 (29-35)

Programación Transact Estructura Condicional If - Bases de Datos en
Microsoft Sql Server 2014 (28-35)

Agregar Conjunto de Resultados Operador UNION - Bases de Datos en
Microsoft Sql Server 2014 (27-35)
 Next Triggers (Disparadores) Sql Server - Bases de Datos en Microsoft Sql Server 2014
(33-35)
 PreviousProcedimientos Almacenados Sql Server - Bases de Datos en Microsoft Sql
Server 2014 (31-35)
4 comentarios:
Triggers (Disparadores) Sql Server - Bases de Datos en
Microsoft Sql Server 2014 (33-35)
IncanatoIt-ad 3 years ago Curso Completo Sql Server 2014
Buen día amigos de IncanatoIt, continuamos en este curso de base de datos en
Microsoft Sql Server 2014, en este artículo trabajaremos con triggers o
Disparadores.

Puedes seguir el curso Completo desde:


https://www.youtube.com/watch?v=lFYSq3DI3rs&list=PLZPrWDz1MolrT1ID3CRIeR
6jPLJ7Fp1x6

Puedes descargar el Material del Curso desde, Archivos del Curso, Backup y
Presentaciones:
https://drive.google.com/open?id=1kAJ_A03b7Y2DSqQzXEDwaMtBbvks7gmj

Programación Transact SQL

Scripts
Procedimientos Almacenados
Funciones
Triggers

Triggers

Un trigger (disparador) en una base de datos es un procedimiento que se


ejecuta cuando se cumple una determinada condición al realizar una operación.
Dependiendo la base de Datos, los triggers pueden ser de inserción (INSERT),
actualización (UPDATE) o borrado (DELETE).

Tipos de Triggers

Tenemos dos tipos de triggers:

 Triggers DML
 Triggers DDL

Triggers - Sintáxis
Create Trigger Nombre_Trigger
ON [Table | View]
FOR | AFTER | INSTEAD OF
[INSERT] [,] [UPDATE] [,] [DELETE]
AS
Sentencia SQL

Ejemplos:

Ejemplo 1:
Implementar un Trigger que permita mostrar un mensaje cada vez que se
inserte o actualice un registro en la tabla pasajero.

Tabla Pasajero

--Implementamos nuestro trigger

CREATE TRIGGER trmensaje_pasajero

ON pasajero --Tabla donde se ejecuta el desencadenador

--El desencadenador se activará cuando

--las operaciones Insert y Update son correctas

FOR INSERT, UPDATE


AS

--Instrucciones del desencadenador

PRINT 'Pasajero actualizado correctamente'

go

--Probar nuestro trigger


update pasajero set nombre='Jcarlos'
where num_documento='47715777'
go

Ejemplo 2:
Implementar un trigger que permita crear una replica de los registros insertados
en la tabla avion para dicho proceso implementar una nueva tabla llamada
avionBAK con las mismas columnas de la tabla avion.

Tabla Avión

--Evaluamos si ya existe la tabla avionBAK

if object_id('avionBAK') is not null


begin

drop table avionBAK

end

go

--Creamos la tabla pasajeroBAK

CREATE TABLE avionBAK

(idavion char(5) not null primary key,

idaerolinea int not null,

fabricante varchar(40) null,

tipo varchar(30) not null,

capacidad int not null


)
go

--Evaluamos si ya existe el trigger y si ya existe


--lo eliminaos para implementarlo de nuevo
if object_id('replicaavion') is not null
begin
drop trigger replicaavion
end
go
--Implementamos el trigger que replicará los registros
--de la tabla avión

create trigger replicaavion


on avion
AFTER INSERT
AS
BEGIN
INSERT avionBAK select * from inserted
END
GO

--Probar nuestro trigger


insert into avion values (4,1,'CHAirport','Comercial',250)
Ejemplo 3:
Implementar un trigger que permita controlar el registro de un pago, se deberá
evaluar que el monto a registrar sea mayor que cero en la columna monto de
la tabla pago.

Tabla Pago

--Evaluamos si ya existe nuestro trigger

--si ya existe lo eliminamos para implementarlo

--nuevamente

If object_id('validapago') is not null

begin

drop trigger validapago

end

go

--Creamos nuestro trigger


CREATE TRIGGER validapago

ON pago

--El desencadenador se activará cuando

--la operación Insert sea correcta


FOR INSERT
--Instrucciones del desencadenador
AS
IF (select monto from inserted)<=0
BEGIN
ROLLBACK TRANSACTION
PRINT 'No puede registrar monto Cero'
END
ELSE
PRINT 'Pago registrado correctamente'
GO

--Probamos la implementación de nuestro trigger


insert into pago (idreserva,fecha,idpasajero,monto,tipo_comproba
nte,
num_comprobante,impuesto) values(1,'2015-09-
12','P0000007',0,'Factura',
'0001-00015',0.18)

Triggers (Disparadores) (33-35) Bases de Datos en Microsoft Sql Server 2014


Tablas de Referencia Cruzada Pivot - Bases de Datos en Microsoft Sql
Server 2014 (35-35)

Cursores en Sql Server - Bases de Datos en Microsoft Sql Server 2014 (34-
35)

Triggers (Disparadores) Sql Server - Bases de Datos en Microsoft Sql
Server 2014 (33-35)

Funciones Sql Server - Bases de Datos en Microsoft Sql Server 2014 (32-
35)

Procedimientos Almacenados Sql Server - Bases de Datos en Microsoft
Sql Server 2014 (31-35)

Programación Transact Estructura Iterativa WHILE - Bases de Datos en
Microsoft Sql Server 2014 (30-35)

Programación Transact Estructura Múltiple CASE - Bases de Datos en
Microsoft Sql Server 2014 (29-35)

Programación Transact Estructura Condicional If - Bases de Datos en
Microsoft Sql Server 2014 (28-35)

Cursores en Sql Server - Bases de Datos en Microsoft
Sql Server 2014 (34-35)
IncanatoIt-ad 3 years ago Curso Completo Sql Server 2014
Buen día amigos de IncanatoIt, continuamos en este curso de base de datos en
Microsoft Sql Server 2014, en este artículo trabajaremos con el uso de cursores.

Puedes seguir el curso Completo desde:


https://www.youtube.com/watch?v=lFYSq3DI3rs&list=PLZPrWDz1MolrT1ID3CR
IeR6jPLJ7Fp1x6

Puedes descargar el Material del Curso desde, Archivos del Curso, Backup y
Presentaciones:
https://drive.google.com/open?id=1kAJ_A03b7Y2DSqQzXEDwaMtBbvks7gmj

Cursores

Los cursores son una herramienta de SQL que nos permite recorrer el resultado de
una consulta SQL y realizar operaciones en cada paso de esta. Es así como nos
ayuda a realizar operaciones que de otro modo serían más complejas o imposibles.

Declaración de un Cursor - Sintáxis

Declare Nombre_Cursor
[INSENSITIVE][SCROLL] CURSOR
FOR EXPRESSION_SELECT
[FOR READ ONLY
| UPDATE [OF column_name[,…n]]]

Ejemplos:

Ejemplo 1:
Implementar un cursos básico donde se imprima el primer registro de la table
PASAJERO.

Tabla Pasajero
--Declaramos la variable de tipo cursor

--donde almacenamos los registros de la consulta

--pasajero

DECLARE micursorpas CURSOR

FOR select * from PASAJERO

--aperturamos el cursor

OPEN micursorpas

--accedemos al primer registro del cursos con el operador


--next
FETCH NEXT FROM micursorpas
--Cerramos el cursor
close micursorpas
--liberamos el cursor con el operador deallocate
deallocate micursorpas

Ejemplo 2:
Implementar un cursor donde se imprima en forma de reporte a los registros de la
tabla PASAJERO.

Tabla Pasajero - Pais


--Declaramos las variables locales que representaran
--el valor de las columnas
DECLARE @idpasajero char(8),@pasajero char(20),
@pais char(10),@documento char(12)
--declaramos el cursor con la consulta de la tabla pasajero
--y país

DECLARE micursor CURSOR

FOR select pas.idpasajero,


(pas.nombre+ ' ' +pas.apaterno) as pasajero,
pai.nombre as pais,pas.num_documento
from pasajero pas inner join pais pai
on pas.idpais=pai.idpais
--aperturamos el cursos
OPEN micursor
--obtenemos el primer registro y enviamos el valor
--a las variables correspondientes
FETCH micursor INTO @idpasajero,@pasajero,@pais,@documento
--Imprimimos la cabecera del reporte
PRINT 'CODIGO PASAJERO PAIS DOCUMENTO'
PRINT '---------------------------------------------------------
-'
--Implementamos una estructura iterativa para poder
--imprimir todos los registros
WHILE @@FETCH_STATUS=0
BEGIN
PRINT @idpasajero+space(5)+@pasajero+space(5)+
@pais+space(5)+@documento
FETCH micursor INTO @idpasajero,@pasajero,@pais,@documento
END

--Cerramos el cursor
close micursor
--liberamos el cursor con el operador deallocate
deallocate micursor

Cursores (34-35) Bases de Datos en Microsoft Sql Server 2014

Saludos Imperio, un abrazo a la distancia.


Tags :
CURSO COMPLETO SQL SERVER 2014
 Tweet
 Compartir
 Compartir
 Compartir
 Compartir

Acerca de Incanatoit.com
Número de entradas : 260
Incanatoit.com es una página web donde se comparten cursos de desarrollo de Software.


Tablas de Referencia Cruzada Pivot - Bases de Datos en Microsoft Sql
Server 2014 (35-35)

Cursores en Sql Server - Bases de Datos en Microsoft Sql Server 2014 (34-
35)

Triggers (Disparadores) Sql Server - Bases de Datos en Microsoft Sql
Server 2014 (33-35)

Funciones Sql Server - Bases de Datos en Microsoft Sql Server 2014 (32-
35)

Procedimientos Almacenados Sql Server - Bases de Datos en Microsoft
Sql Server 2014 (31-35)

Programación Transact Estructura Iterativa WHILE - Bases de Datos en
Microsoft Sql Server 2014 (30-35)

Programación Transact Estructura Múltiple CASE - Bases de Datos en
Microsoft Sql Server 2014 (29-35)

Programación Transact Estructura Condicional If - Bases de Datos en
Microsoft Sql Server 2014 (28-35)

Agregar Conjunto de Resultados Operador UNION - Bases de Datos en
Microsoft Sql Server 2014 (27-35)
 Next Tablas de Referencia Cruzada Pivot - Bases de Datos en Microsoft Sql Server 2014
(35-35)
 PreviousTriggers (Disparadores) Sql Server - Bases de Datos en Microsoft Sql Server
2014 (33-35)
2 comentarios:

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