//-----------------------------
        //Update SysConfParametrosServ
        //-----------------------------
        public bool Upd_SysConfParametrosServ(BE_ReqCtaCteSysConfigParamterServicio Request)
        {
            bool exito = false;
            DA_CtaCteSysConfigParamterServicio daCtaCteConfServ = new DA_CtaCteSysConfigParamterServicio();

            try
            {
                //TransactionScope
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                {
                    // doble aperson && evalua y no sigue la siguiente si encuentra errores
                    if (daCtaCteConfServ.Ins_SysConfParametrosServ(Request))
                    {
                        exito = true;
                        tx.Complete();
                    }
                    else throw new ApplicationException("Se encontraron errores al actulizar registro.!");
                }
            }
            catch (Exception)
            {
                throw;
            }
            return exito;
        }
        //-----------------------------
        // SELECT SysConfParametrosServ
        //-----------------------------
        public DataTable Get_SysConfParametrosServ(BE_ReqCtaCteSysConfigParamterServicio Request)
        {
            DataTable dt = new DataTable();
            try
            {
                clsConection Obj = new clsConection();
                string Cadena = Obj.GetConexionString("Naylamp");

                using (SqlConnection cn = new SqlConnection(Cadena))
                {
                    cn.Open();

                    using (SqlCommand cm = new SqlCommand())
                    {
                        cm.CommandText = "[usp_Get_SysConfParametrosServ]";
                        cm.CommandType = CommandType.StoredProcedure;
                        cm.Parameters.AddWithValue("cPerJurCodigo", Request.cPerJurCodigo);
                        cm.Parameters.AddWithValue("nSisModulo", Request.nSisModulo);
                        cm.Parameters.AddWithValue("nParCodigo_nProCodigo", Request.nParCodigo_nProCodigo);
                        cm.Parameters.AddWithValue("cFlag", Request.cFLag);
                        cm.Connection = cn;

                        using (SqlDataReader dr = cm.ExecuteReader())
                            dt.Load(dr);

                    }
                }

            }
            catch (Exception)
            {
                throw;
            }
            return dt;
        }
 //-----------------------------
 //select SysConfParametrosServ
 //-----------------------------
 public DataTable Get_SysConfParametrosServ(BE_ReqCtaCteSysConfigParamterServicio Request)
 {
     //Recuperando registros
     DataTable dt = new DataTable();
     DA_CtaCteSysConfigParamterServicio Obj = new DA_CtaCteSysConfigParamterServicio();
     return Obj.Get_SysConfParametrosServ(Request);
 }
        //------------------------------
        // INSERT SysConfParametrosServ
        //------------------------------
        public bool Ins_SysConfParametrosServ(BE_ReqCtaCteSysConfigParamterServicio Request)
        {
            bool exito;
            try
            {
                clsConection Obj = new clsConection();
                string Cadena = Obj.GetConexionString("Naylamp");

                using (SqlConnection cn = new SqlConnection(Cadena))
                {
                    cn.Open();

                    using (SqlCommand cm = new SqlCommand())
                    {
                        cm.CommandText = "usp_Ins_SysConfParametrosServ";
                        cm.CommandType = CommandType.StoredProcedure;
                        cm.Parameters.AddWithValue("cPerJurCodigo", Request.cPerJurCodigo);
                        cm.Parameters.AddWithValue("nSisModulo", Request.nSisModulo);
                        cm.Parameters.AddWithValue("nParCodigo_nProCodigo", Request.nParCodigo_nProCodigo);
                        cm.Parameters.AddWithValue("nParCodigo_nSolAdmTipo", Request.nParCodigo_nSolAdmTipo);
                        cm.Parameters.AddWithValue("nParCodigo_nCtaCteSerCodigo", Request.nParCodigo_nCtaCteSerCodigo);
                        cm.Parameters.AddWithValue("nSysValor", Request.nSysValor);
                        cm.Parameters.AddWithValue("nSysEstado", Request.nSysEstado);
                        cm.Connection = cn;

                        //ExecuteNonQuery.- devuelve filas afectadas cuando sea mayor a 0 todo fue OK.
                        if (cm.ExecuteNonQuery() > 0)
                        {
                            exito = true;
                        }
                        else exito = false;
                    }
                }

            }
            catch (Exception)
            {
                throw;
            }
            return exito;
        }
        //-----------------------------------
        //Genera Cargo Solicitud Colegiado
        //-----------------------------------
        public bool Ins_GenerarCargoSolicitud(string CodEmpresa, long TipoPrograma, long TipoSolicitud, string cPerCodigo, int nPeriodo, DateTime dFechaSys, string NroSolicitud)
        {
            bool exito = false;

            string NroRecibo = "";
            long nLinea = 0;
            //double nImporte = 0;

            //para Tipo de cambio
            double nTC = 0;
            BL_Sistema daTC = new BL_Sistema();

            //para CtaCteItem
            BL_CtaCteItem blCCItem = new BL_CtaCteItem();
            BL_CtaCteIteLine blCCItemLine = new BL_CtaCteIteLine();
            BL_CtaCteIteLinRetencion blCCRetencion = new BL_CtaCteIteLinRetencion();
            BL_ImpuestoServicio blImpServ = new BL_ImpuestoServicio();

            //para Obtener Serv. Configurado
            BE_ReqCtaCteSysConfigParamterServicio ReqServConfig = new BE_ReqCtaCteSysConfigParamterServicio();
            BL_CtaCteSysConfigParamterServicio daServConfig = new BL_CtaCteSysConfigParamterServicio();

            //actuliza solicitud con el recibo de cargo
            BL_Solicitud DaSolAdm = new BL_Solicitud();

            //----------------------
            //CommittableTransaction
            //----------------------
            Transaction oldAmbient = Transaction.Current;
            CommittableTransaction committableTransaction;
            committableTransaction = oldAmbient as CommittableTransaction;

            if (committableTransaction == null)
            {
                committableTransaction = new CommittableTransaction();
                Transaction.Current = committableTransaction;
            }

            try
            {
                //using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                //{
                //
                ReqServConfig.cPerJurCodigo = CodEmpresa;
                ReqServConfig.nSisModulo = 7001; //default aun falta definir interface
                ReqServConfig.nParCodigo_nProCodigo = TipoSolicitud; //CLng(CboPrograma.SelectedValue)
                ReqServConfig.cFLag = "FEC";

                if (daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows.Count > 0)
                {
                    DataRow row = daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows[0];
                    //--------------
                    //Tipo de cambio
                    //--------------
                    if (Convert.ToInt32(row["nMonCodigo"]) == 2) //Dolar
                    {
                        if (daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows.Count > 0)
                        {
                            //DataRow row = daTC.Get_TipodeCambio(ReqTC).Rows[0];
                            nTC = Convert.ToDouble(daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows[0]["nCompra"]);
                        }
                        else throw new ApplicationException("No se ha registrado el Tipo de Cambio del dia: " + String.Format("{0:ddd, MMM d, yyyy}", dFechaSys));
                    }
                    else nTC = 1.0;

                    //----------
                    //CtaCteItem
                    //----------
                    //se comente esto porque la Actualizacion 28/01/2014 no se necesita esta variable
                    //foreach (DataRow fila in daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows)
                    //{
                    //    //Obteniendo el total del importe de recibo (cabezera)
                    //    nImporte = nImporte + Convert.ToDouble(fila["nSysValor"]);
                    //}

                    //Actualizacion 28/01/2014:
                    //porque necesitan que cada concepto salga en diferente recibo
                    //NroRecibo = blCCItem.Ins_CtaCteItem(CodEmpresa, cPerCodigo, nPeriodo, row["nCtaCteTipoCta"].ToString(), dFechaSys.Year, nImporte, dFechaSys, 1);

                    //--------------
                    //CtaCteIteLine
                    //--------------
                    //Recorro SysConfParametrosServ
                    foreach (DataRow fila in daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows)
                    {
                        //aqui se cambio Actualizacion 28/01/2014:
                        NroRecibo = blCCItem.Ins_CtaCteItem(CodEmpresa, cPerCodigo, nPeriodo, row["nCtaCteTipoCta"].ToString(), dFechaSys.Year, Convert.ToDouble(fila["nSysValor"]), dFechaSys, 1);

                        nLinea = blCCItemLine.Ins_CtaCteIteLine(CodEmpresa, cPerCodigo, NroRecibo, Convert.ToInt32(fila["nParCodigo_nCtaCteSerCodigo"]), Convert.ToInt32(fila["nMonCodigo"]), 1, Convert.ToDouble(fila["nSysValor"]), Convert.ToDouble(fila["nSysValor"]), nTC, 1);

                        if (nLinea != 0)
                        {
                            //---------------------
                            //CtaCteIteLinRetencion
                            //---------------------
                            foreach (DataRow posicion in blImpServ.Get_ImpuestoServicio(CodEmpresa, cPerCodigo, NroRecibo, Convert.ToInt32(fila["nParCodigo_nCtaCteSerCodigo"]), 9256).Rows) //9256.- Perú
                            {
                                if (!blCCRetencion.Ins_CtaCteIteLinRetencion(CodEmpresa, cPerCodigo, NroRecibo, nLinea, Convert.ToInt32(posicion["nSysTasCodigo"]), Convert.ToDouble(fila["nSysValor"]), Convert.ToInt32(posicion["fSysTasValor"]), dFechaSys))
                                {
                                    throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLinRetencion.!");
                                }
                            }
                        }
                        else throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLine.!");
                    }

                    //------------------------------------------------------------------------------
                    //update AdmSolicitud (cCtaCteRecibo) - Referenciando recibo en "AdmSolicitud" ?
                    //------------------------------------------------------------------------------
                    if (!DaSolAdm.Upd_AdmSol_cCtaCteRecibo(CodEmpresa, TipoPrograma, NroSolicitud, NroRecibo))
                    {
                        throw new ApplicationException("Se encontraron errores en la transaccion: AdmSolicitud.! " + CodEmpresa + ' ' + TipoPrograma + ' ' + NroSolicitud + ' ' + NroRecibo);
                    }

                    //exito = true;
                    //tx.Complete();

                    /* Perform transactional work here */
                    //No errors - commit transaction
                    committableTransaction.Commit();
                    exito = true;
                }
                else throw new ApplicationException("Configuracion de parametros no establecida.!");
            }
            //}
            catch (Exception)
            {
                committableTransaction.Rollback();
                throw;
            }
            finally
            {
                committableTransaction.Dispose();
                //Restore the ambient transaction
                Transaction.Current = oldAmbient;
            }

            return exito;
        }