Top Ad unit 728 × 90

Recientes

recent

Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (30-41) Ingresos Almacén

Buen día amigos, En este artículo implementaremos el formulario FrmIngreso en la capa Presentación dicho formulario será la interfaz con la que se comunique el usuario; el usuario seleccionará aquí el proveedor que abastece los artículos, podrá agregar uno o varios artículos por ingreso a un listado que luego serán almacenados en la base de datos teniendo en cuenta la cantidad de ingreso del artículo, el precio de compra, el precio de Venta, la fecha de producción y la fecha de vencimiento.

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:

Puedes descargar la versión completa del proyecto con todas las funcionalidades terminadas desde:

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:

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

Formulario FrmIngreso - Mantenimiento


Código FrmIngreso

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 FrmIngreso : Form
    {
        private bool IsNuevo = false;
        private bool IsEditar = false;
        public int Idtrabajador;

        private DataTable dtDetalle;

        private decimal totalPagado = 0;

        private static FrmIngreso _instancia;

        //Creamos una instancia para poder utilizar los
        //Objetos del formulario
        public static FrmIngreso GetInstancia()
        {
            if (_instancia == null)
            {
                _instancia = new FrmIngreso();
            }
            return _instancia;
        }
        //Creamos un método para enviar los valores recibidos
        //del proveedor
        public void setProveedor(string idproveedor, string nombre)
        {
            this.txtIdproveedor.Text = idproveedor;
            this.txtProveedor.Text = nombre;
        }

        //Creamos un método para enviar los valores recibidos
        //del artículo
        public void setArticulo(string idarticulo, string nombre)
        {
            this.txtIdarticulo.Text = idarticulo;
            this.txtArticulo.Text = nombre;
        }

        public FrmIngreso()
        {
            InitializeComponent();
            this.ttMensaje.SetToolTip(this.txtProveedor, "Seleccione un Proveedor");
            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.txtStock, "Ingrese la cantidad de compra");
            this.ttMensaje.SetToolTip(this.txtArticulo, "Seleccione el artículo");
            this.txtIdproveedor.Visible = false;
            this.txtProveedor.ReadOnly = true;
            this.txtIdarticulo.Visible = false;
            this.txtArticulo.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.txtIdingreso.Text = string.Empty;
            this.txtIdproveedor.Text = string.Empty;
            this.txtProveedor.Text = string.Empty;
            this.txtSerie.Text = string.Empty;
            this.txtCorrelativo.Text = string.Empty;
            this.txtIgv.Text = "0,18";
            this.lblTotalPagado.Text = "0,0";
            this.crearTabla();
            
        }

        private void limpiarDetalle()
        {
            this.txtIdarticulo.Text = string.Empty;
            this.txtArticulo.Text = string.Empty;
            this.txtStock.Text = string.Empty;
            this.txtPrecio_Compra.Text = string.Empty;
            this.txtPrecio_Venta.Text = string.Empty;
        }

        //Habilitar los controles del formulario
        private void Habilitar(bool valor)
        {
            this.txtIdingreso.ReadOnly = !valor;
            this.txtSerie.ReadOnly = !valor;
            this.txtCorrelativo.ReadOnly = !valor;
            this.txtIgv.Enabled = valor;
            this.dtFecha.Enabled = valor;
            this.cbTipo_Comprobante.Enabled = valor;
            this.txtStock.ReadOnly = !valor;
            this.txtPrecio_Compra.ReadOnly = !valor;
            this.txtPrecio_Venta.ReadOnly = !valor;
            this.dtFecha_Produccion.Enabled = 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 || this.IsEditar) //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 = NIngreso.Mostrar();
            this.OcultarColumnas();
            lblTotal.Text = "Total de Registros: " + Convert.ToString(dataListado.Rows.Count);
        }

        //Método BuscarFecha
        private void BuscarFechas()
        {
            this.dataListado.DataSource = NIngreso.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 = NIngreso.MostrarDetalle(this.txtIdingreso.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("idarticulo", System.Type.GetType("System.Int32"));
          this.dtDetalle.Columns.Add("articulo", System.Type.GetType("System.String"));
          this.dtDetalle.Columns.Add("precio_compra", System.Type.GetType("System.Decimal"));
          this.dtDetalle.Columns.Add("precio_venta", System.Type.GetType("System.Decimal"));
          this.dtDetalle.Columns.Add("stock_inicial", System.Type.GetType("System.Int32"));
          this.dtDetalle.Columns.Add("fecha_produccion", System.Type.GetType("System.DateTime"));
          this.dtDetalle.Columns.Add("fecha_vencimiento", System.Type.GetType("System.DateTime"));
          this.dtDetalle.Columns.Add("subtotal", System.Type.GetType("System.Decimal"));
          //Relacionamos nuestro datagridview con nuestro datatable
          this.datalistadoDetalle.DataSource = this.dtDetalle;

        }

        private void FrmIngreso_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 los Ingresos", "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 = NIngreso.Anular(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.txtIdingreso.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["idingreso"].Value);
            this.txtProveedor.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["proveedor"].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.IsEditar = false;
            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.txtIdingreso.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.txtIdproveedor.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(txtProveedor, "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 = NIngreso.Insertar(Idtrabajador,Convert.ToInt32(txtIdproveedor.Text),
                        dtFecha.Value, cbTipo_Comprobante.Text,
                        txtSerie.Text, txtCorrelativo.Text,
                        Convert.ToDecimal(txtIgv.Text),"EMITIDO", dtDetalle);

                    }
                    
                    //Si la respuesta fue OK, fue porque se modifico 
                    //o inserto el Ingreso
                    //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.txtIdarticulo.Text == string.Empty || this.txtStock.Text == string.Empty || txtPrecio_Compra.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(txtStock, "Ingrese el stock inicial");
                    errorIcono.SetError(txtPrecio_Compra, "Ingrese el precio de Compra");
                    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["idarticulo"]) == Convert.ToInt32(this.txtIdarticulo.Text))
                        {
                            registrar = false;
                            this.MensajeError("Ya se encuentra el artículo en el detalle");
                        }
                    }
                    //Si podemos registrar el producto en el detalle
                    if (registrar)
                    {
                        //Calculamos el sub total del detalle sin descuento
                        decimal subTotal = Convert.ToDecimal(this.txtPrecio_Compra.Text) * Convert.ToDecimal(txtStock.Text);
                        totalPagado = totalPagado+subTotal;
                        this.lblTotalPagado.Text =totalPagado.ToString("#0.00#");
                        //Agregamos al fila a nuestro datatable
                        DataRow row = this.dtDetalle.NewRow();
                        row["idarticulo"] = Convert.ToInt32(this.txtIdarticulo.Text);
                        row["articulo"] = this.txtArticulo.Text;
                        row["precio_compra"] = Convert.ToDecimal(this.txtPrecio_Compra.Text);
                        row["precio_venta"] = Convert.ToDecimal(this.txtPrecio_Venta.Text);
                        row["stock_inicial"] = Convert.ToInt32(this.txtStock.Text);
                        row["fecha_produccion"] = this.dtFecha_Produccion.Value;
                        row["fecha_vencimiento"] = this.dtFecha_Vencimiento.Value;
                        row["subTotal"] = subTotal;
                        this.dtDetalle.Rows.Add(row);
                        this.limpiarDetalle();
                    }
                }
            }

            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 btnBuscarProveedor_Click(object sender, EventArgs e)
        {
            FrmVistaProveedor_Ingreso vista = new FrmVistaProveedor_Ingreso();
            vista.ShowDialog();
        }

        private void btnBuscarArticulo_Click(object sender, EventArgs e)
        {
            FrmVistaArticulo_Ingreso vista = new FrmVistaArticulo_Ingreso();
            vista.ShowDialog();
        }

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


Video 30: Sistema de Ventas C# - Visual Studio 2013 - Sql Server 2014 (30-34) FrmIngreso2

Saludos Imperio, un Abrazo a la distancia!
Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (30-41) Ingresos Almacén Reviewed by IncanatoIt-ad on 21:12 Rating: 5

22 comentarios:

  1. Hola JC, puedes mirar por el link de descarga? descarga el proyecto hasta el video 9, no hasta el 30. Saludos

    ResponderEliminar
  2. Saludos Juan Carlos por favor si podrias compratir el query de la base de datos porque no todos contamos con la ultima version de ms-sql

    ResponderEliminar
    Respuestas
    1. Claro que si en la siguiente entrada publicaré el script de la base de datos con el proyecto completo.
      Saludos un abrazo.

      Eliminar
    2. Carlos me encata sus totoriales, en el tutorial de crear sistema de ventas usando visual basic en el video tres tengo un problemita y te mande un correo: con mi problema ayuda porfa para seguir mi curso estoy estancando ahi ayuda.. mi nombre es; Keny Johnson correo: zonajohnson2010@gmail.com gracias espero su ayuda

      Eliminar
    3. Hola amigo, no tengo ningún correo tuyo, envíamelo de nuevo con gusto te responderé.
      Saludos un abrazo.

      Eliminar
  3. Hola juan carlos voy por el capitulo nro 8 y tengo errores en el visual studio cuando ejecuto el formulario. me podes ayudar? ahora te paso el problema

    Error 3 No se puede encontrar el archivo de metadatos 'C:\Users\VALVO\documents\visual studio 2013\Projects\SisVentas\CapaPresentacion\bin\Debug\CapaPresentacion.dll' C:\Users\VALVO\documents\visual studio 2013\Projects\SisVentas\SisVentas\CSC SisVentas

    ResponderEliminar
  4. Amigo cuando subes el proximo vídeo muy bueno el tutorial (y)

    ResponderEliminar
    Respuestas
    1. Hola, mañana publico los videos restantes...muchas gracias por seguir el curso...saludos un abrazo.

      Eliminar
  5. Muy bueno hasta todo el curso de sistema de ventas C Charp, perfecto ya voy capitulo 10

    ResponderEliminar
  6. hola amigo Juan Carlos, mil gracias por este sistema muy completo exitos en todo lo que hagas:
    tengo el siguiente problema: Instrucción INSERT en conflicto con la restricción FOREIGN KEY y el error dice que es con el idproveedor que podra ser?

    ResponderEliminar
    Respuestas
    1. Al parecer intentas agregar un ingreso cuyo proveedor no se encuentra registrado en la base de datos, revise que se este enviando como idproveedor el parámetro correcto.

      Eliminar
  7. Hola Juan Carlos Arcila Diaz, Es un placer para mi saludarte, y rogando a dios que sigas asi,
    exponiendo todos esos proyectos de gran valor para los que estamos aprendiendo a programar
    Juan permiteme exponerte este problema que tengo y que me tiene totalmente estancado... el problema que tengo es con FrmVista_Articulo_Venta. Me muestra los campo pero no me muestra los Articulo que tengo guardado en esa tabla. Gracias de ante mano.

    ResponderEliminar
    Respuestas
    1. Me gustaría ver el detalle de su error, escríbame la captura a jcarlos.ad7@gmail.com

      Eliminar
    2. Buenos dias Juan....No me da ningun error, simplemente le doy click a selecionar articulo, doy click Nombre, y hasta escribo completo el nombre del articulo, Me salen los campos pero no el articulo, es como si no existieran los articulos. Gracias

      Eliminar
    3. Hola Juan: esto es lo que me sale "La columna árticulo'no pertenece a la tabla Detalle, en System,DataRow,GetDataColumn(string columnName) en System.Data.DataRow,set_Item(String columnName,Object value)
      en CapaPresentacion.FrmVenta.btnagregar_Click(Object sender,EventArgs e)
      CapaPresentacion\FrmVenta,cs:linia414

      Eliminar
    4. Revise su procedimiento almacenado que muestra las ventas y los detalles de las ventas.

      Eliminar
  8. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. Esta enviando muchos parámetros al método insertar, revise bien que los parámetros estén correctos.

      Eliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  10. Me surgio una duda en esta parte del tutorial, que pasa cuando quiero anular un ingreso que ya esta anulado? He estado probando para que me mande el mensaje de error pero no lo consigo, podrias ayudarme? Saludes

    ResponderEliminar
    Respuestas
    1. Simplemente valide según el estado del ingreso, cuando ya esta anulado que no muestre activo el botón para anular.

      Eliminar
  11. Hola Buenas Tardes...Espero y me puedas ayudar con este Problema Cuando le doy en el Boton guardar Me aparece el siguiente error "sqlparametercollection ya contiene sqlparameter." Ya estuve viendo e investigando pero no logro encontrar que onda

    ResponderEliminar

Todos los derechos reservados www.IncanatoIT.com - Desarrollando Software © 2014 - 2019
Desarrollado por Blogger, Designed by Sweetheme
IncanatoIt.com. Con la tecnología de Blogger.
y>