private void proCalcularTotales()
        {
            try
            {
                //Obtenemos los items unicos
                var objResumenDistinct = objDetalle.Where(p => p.IteCodigo != "").GroupBy(p => new { p.IteCodigo, p.IteNombre }).ToList();
                //Instanciamos el objeto de resumen
                objDetalleRes = new List <clsComEntMercanciasRes>();
                this.grcResumen.DataSource = objDetalleRes;
                int     i = 0;
                int     varListaPrecio = 0;
                string  varIteCodigo   = "";
                decimal varPrecio      = 0;
                //Recoremos los items unicos obtenidos
                foreach (var objFilaResumenDistinct in objResumenDistinct)
                {
                    clsComEntMercanciasRes objFilaResumen = new clsComEntMercanciasRes();
                    varIteCodigo   = objFilaResumenDistinct.Key.IteCodigo.ToString();
                    varListaPrecio = int.Parse(this.txtListaPrecio.Text);
                    varPrecio      = clsInvItem.funPrecioItem(varIteCodigo, varListaPrecio);

                    objFilaResumen.DetSecuencia = ++i;
                    objFilaResumen.IteCodigo    = objFilaResumenDistinct.Key.IteCodigo.ToString();
                    objFilaResumen.IteNombre    = objFilaResumenDistinct.Key.IteNombre.ToString();
                    objFilaResumen.DetPiezas    = objDetalle.Count(p => p.IteCodigo == varIteCodigo);
                    objFilaResumen.DetCantidad  = objDetalle.Where(p => p.IteCodigo == varIteCodigo).Sum(p => p.DetCantNeta);
                    objFilaResumen.DetCosto     = varPrecio;
                    objFilaResumen.DetTotal     = decimal.Round(objFilaResumen.DetCantidad * varPrecio, 2);
                    objFilaResumen.DetNro       = objDetalle.Count(p => p.IteCodigo == varIteCodigo);
                    objDetalleRes.Add(objFilaResumen);
                }
                this.grcResumen.RefreshDataSource();
                this.txtTotalNeto.EditValue  = objDetalle.Sum(p => p.DetCantNeta);
                this.txtDiferencia.EditValue = decimal.Parse(this.txtTotalNeto.Text) - decimal.Parse(this.txtTotalCamal.Text);
            }
            catch (Exception) { throw; }
        }
        //Operacion de guardar
        public override void proGrabar()
        {
            base.proGrabar();
            try
            {
                //Eliminamos las filas vacias del detalle
                objDetalle.RemoveAll(p => p.DetCantNeta.Equals(0) && p.DetCantBruta.Equals(0));
                //Verificamos las validaciones de los campos requeridos
                if (!varBanValidaciones)
                {
                    return;
                }
                //Modificamos la informacion de los resumentes
                foreach (clsComEntMercanciasDet objFilaDetalle in objDetalle)
                {
                    clsComEntMercanciasRes objFilaResumen = objDetalleRes.Where(p => p.IteCodigo == objFilaDetalle.IteCodigo).ToList <clsComEntMercanciasRes>()[0];
                    objFilaDetalle.DetUnidad   = objFilaResumen.DetUnidad;
                    objFilaDetalle.DetCantidad = objFilaResumen.DetCantidad;
                    objFilaDetalle.DetCosto    = objFilaResumen.DetCosto;
                    objFilaDetalle.DetTotal    = objFilaResumen.DetTotal;
                }
                //Refrescamos el detalle despues de eliminar
                this.grcListado.RefreshDataSource();
                var csRegistro = new clsComEntMercanciasCab()
                {
                    CabCodigo      = this.txtCodigo.Text.Equals("") ? 0 : int.Parse(this.txtCodigo.Text),
                    DocCodigo      = this.txtCodSerie.Text.Equals("") ? 0 : int.Parse(this.txtCodSerie.Text),
                    DocNombre      = this.txtNomSerie.Text,
                    CabNumero      = this.txtNumero.Text.Equals("") ? 0 : int.Parse(this.txtNumero.Text),
                    CabLstPrecio   = this.txtListaPrecio.Text.Equals("") ? 0 : int.Parse(this.txtListaPrecio.Text),
                    CabEntrySap    = 0,
                    CabNumSap      = 0,
                    CabFecha       = (DateTime)this.datFecha.EditValue,
                    PrvCodigo      = this.bedProveedor.EditValue.ToString(),
                    PrvNombre      = this.txtNombre.Text,
                    BodCodigo      = this.lueBodega.EditValue.ToString(),
                    CabImportacion = this.txtImportacion.Text,
                    CabComentario  = this.memObservacion.Text,
                    CabLote        = this.txtLote.Text,
                    CabTipCompra   = this.cmbTipo.Text,
                    CabTotNeto     = decimal.Parse(this.txtTotalNeto.Text),
                    CabTotCamal    = this.txtTotalCamal.Text.Equals("") ? 0 : decimal.Parse(this.txtTotalCamal.Text),
                    CabDiferencia  = decimal.Parse(this.txtDiferencia.Text),
                    CabTolerancia  = this.txtTolerancia.Text.Equals("") ? 0 : decimal.Parse(this.txtTolerancia.Text),
                };

                int varCodigo = csRegistro.funMantenimiento(varOpeCodigo, objDetalle);
                if (!varCodigo.Equals(0))
                {
                    this.txtNumero.EditValue = varCodigo;
                    if (!varBandGuardar)
                    {
                        if (XtraMessageBox.Show("Desea imprimir la tirilla", "Informacion", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                        {
                            this.impDocumento.Print();
                        }
                    }
                    if (varOpeCodigo.Equals(1))
                    {
                        XtraMessageBox.Show(string.Format("El registro actual ha sido grabado con el nro: {0}", varCodigo), "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        XtraMessageBox.Show("Registro grabado con exito", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    if (!varBandGuardar)
                    {
                        if (this.puertoSerial.IsOpen)
                        {
                            this.puertoSerial.Close();
                        }
                        this.Close();
                    }
                }
            }
            catch (Exception ex) { XtraMessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        }