public void Guardar()
        {
            Funciones fn = new Funciones();

            try {
                DataGrid     dr  = new DataGrid();
                tblcertifmdp mdp = new tblcertifmdp();
                mdp.Mdp = Encabezado.Credito == true?Int16.Parse("1") : Int16.Parse("0");

                mdp.Ncertificado = this.Encabezado.Ncertificado;
                mdp.Puesto       = Encabezado.Puesto;
                mdp.Idabono      = 0;
                mdp.idpais       = Encabezado.idpais;
                mdp.Cantidad     = Encabezado.Total;
                mdp.Abono        = 0;
                mdp.Saldonuevo   = Encabezado.Total;
                mdp.Nend         = false;
                mdp.Enviaplat    = false;
                if (Encabezado.FormaPago == "-1")
                {
                    mdp.Mdp   = 10;
                    mdp.Banco = Encabezado.AutorizacionBanco;
                }
                fn.ConnectionSql();
                fn.BeginTransaction();
                SqlCommand con = this.Encabezado.getComandQuery(fn._LocalC, TipoTransaccion.Insert);
                con.Transaction = fn._tr;
                con.ExecuteNonQuery();
                string cAuto = fn.ValIni(Encabezado.idpais, "ConsumoAutomatico");
                foreach (tblcertifdet det in this.Detalle)
                {
                    if (det.Servicio != "CuentaRecargo")
                    {
                        SqlCommand cond = det.getComandQuery(fn._LocalC, TipoTransaccion.Insert);
                        cond.Transaction = fn._tr;
                        cond.ExecuteNonQuery();
                        det.Detalle = det.GetLasIdentity(fn._LocalC, fn._tr);
                        if (cAuto == "1")
                        {
                            this.ProcesarInventario(ref fn, det);
                        }
                    }
                    else
                    {
                        fn.RegistrarRecargo(this.Encabezado.Ncertificado, det.Local.ToString());
                    }
                }
                SqlCommand cmMdp = mdp.getComandQuery(fn._LocalC, TipoTransaccion.Insert);
                cmMdp.Transaction = fn._tr;
                cmMdp.ExecuteNonQuery();
                fn.Incrementar_Correlativo(this.Encabezado.idpais, this.Encabezado.Puesto, "NCertificado");
                //Se registra en auditoria
                fn.Auditoria(this.Detalle[0].Session, "Agregar Certificado", this.Encabezado.Ncertificado, this.Encabezado.idpais);
                fn._tr.Commit();
            } catch (Exception ex) {
                fn._tr.Rollback();
                fn._LocalC.Close();
                throw ex;
            } finally {
                fn._tr.Dispose();
                fn._LocalC.Close();
            }
        }