public Boolean GuardarCabecera(ref clsCabeceraComprobante dato)
        {
            try
            {
                if (dato.Detalle.Sum(q => q.debe) != dato.Detalle.Sum(q => q.haber))
                {
                    return false;
                }
                EntitiesContabilidad2 enti =new EntitiesContabilidad2();
                decimal numero=0;
                try
                {
                    numero = (from q in enti.CabeceraComprobante where q.IdEmpresa==1 select q.numero_comprobante).Max()+1;
                }
                catch (Exception)
                {
                    numero = 1;
                }
                dato.numero_comprobante = numero;
                using (EntitiesContabilidad2 ent =new EntitiesContabilidad2())
                {
                    CabeceraComprobante cab = new CabeceraComprobante() {
                    IdEmpresa=dato.IdEmpresa,
                    numero_comprobante=numero,
                    fecha=dato.fecha,
                    glosa=dato.glosa,
                    TipoTransaccion = (dato.TipoTransaccion==0)?null:dato.TipoTransaccion,

                    periodo_contable = Convert.ToDecimal((from q in ent.PeriodoContable where q.FechaInicio < DateTime.Now && q.FechaFin > DateTime.Now select q.IdPeriodoContable).First()),
                    periodo_contable_IdAFiscal = DateTime.Now.Year,
                    //periodo_contable
                    //periodo_contable_IdAFiscal
                    //IdUsuario
                    //FechaModificacion

                    };
                    ent.AddToCabeceraComprobante(cab);
                    ent.SaveChanges();
                }
                GuardarDetalle(dato);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        public Boolean RevertirC(decimal NumeroCom, int idEmpresa,ref decimal  NumComRevert)
        {
            try
            {
                clsCabeceraComprobante dato = new clsCabeceraComprobante();
                dato=consultaComprobante(NumeroCom, idEmpresa);
                if (dato.Detalle.Sum(q => q.debe) != dato.Detalle.Sum(q => q.haber))
                {
                    return false;
                }
                EntitiesContabilidad2 enti = new EntitiesContabilidad2();
                decimal numero = 0;
                try
                {
                    numero = (from q in enti.CabeceraComprobante where q.IdEmpresa == 1 select q.numero_comprobante).Max()+1;
                }
                catch (Exception)
                {
                    numero = 1;
                }
                using (EntitiesContabilidad2 ent = new EntitiesContabilidad2())
                {
                    CabeceraComprobante cab = new CabeceraComprobante()
                    {
                        IdEmpresa = dato.IdEmpresa,
                        numero_comprobante = numero,
                        fecha = dato.fecha,
                        glosa = "Reverso del Comprobante # "+Convert.ToString(dato.numero_comprobante)+" => "+dato.glosa
                        //periodo_contable
                        //periodo_contable_IdAFiscal
                        //IdUsuario
                        //FechaModificacion

                    };
                    dato.numero_comprobante = numero;
                    ent.AddToCabeceraComprobante(cab);
                    ent.SaveChanges();
                    NumComRevert = numero;
                }
                RevertirD(dato);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }