public int Get_nIntCodigo_Interface(string cPerJurCodigo, int nIntTipo = 7001, string cIntJerarquia="40111")
        {
            int nIntCodigo = 0;
            try
            {
                BE_ReqParametros ReqOrigen = new BE_ReqParametros();
                DA_ConAsiento ObjAsiento = new DA_ConAsiento();

                ReqOrigen.cPerJurCodigo = cPerJurCodigo;
                ReqOrigen.nIntTipo = nIntTipo; //Origen
                ReqOrigen.cIntJerarquia = cIntJerarquia; //Ventas
                nIntCodigo = ObjAsiento.usp_Get_Interface_nIntCodigo_by_cPerJurCodigo_and_nIntTipo_and_cIntJerarquia(ReqOrigen);

                if (nIntCodigo == 0)
                {
                    throw new ApplicationException("Se encontraron errores en la transaccion: [Get_nIntCodigo_Interface].!");
                }

            }
            catch (Exception)
            {
                throw;
            }
            return nIntCodigo;
        }
        //--------------------------------------
        //Obtiene nAsiCorrelativo "Autogenerado"
        //--------------------------------------
        public int Get_nAsiCorrelativo_by_nUniOrgCodigo_and_nPrdCodigo_and_nOrigen(BE_ReqParametros Request)
        {
            int nAsiCorrelativo = 0;
            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_nAsiCorrelativo_by_nUniOrgCodigo_and_nPrdCodigo_and_nOrigen]";
                        cm.CommandType = CommandType.StoredProcedure;
                        cm.Parameters.AddWithValue("nUniOrgCodigo", Request.nUniOrgCodigo);
                        cm.Parameters.AddWithValue("nPrdCodigo", Request.nPrdCodigo);
                        cm.Parameters.AddWithValue("nOrigen", Request.nOrigen);

                        cm.Connection = cn;
                        using (SqlDataReader dr = cm.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                nAsiCorrelativo = dr.GetInt32(dr.GetOrdinal("nAsiCorrelativo"));
                            }
                        }

                    }
                }

            }
            catch (Exception)
            {
                throw;
            }
            return nAsiCorrelativo;
        }
        //---------------------------------------------------------------------------
        //Obtiene nIntCodigo de Interface by (cPerJurCodigo, nIntTipo, cIntJerarquia)
        //---------------------------------------------------------------------------
        public int usp_Get_Interface_nIntCodigo_by_cPerJurCodigo_and_nIntTipo_and_cIntJerarquia(BE_ReqParametros Request)
        {
            int nIntCodigo = 0;
            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_Interface_nIntCodigo_by_cPerJurCodigo_and_nIntTipo_and_cIntJerarquia]";
                        cm.CommandType = CommandType.StoredProcedure;
                        cm.Parameters.AddWithValue("cPerJurCodigo", Request.cPerJurCodigo);
                        cm.Parameters.AddWithValue("nIntTipo", Request.nIntTipo);
                        cm.Parameters.AddWithValue("cIntJerarquia", Request.cIntJerarquia);

                        cm.Connection = cn;
                        using (SqlDataReader dr = cm.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                nIntCodigo = dr.GetInt32(dr.GetOrdinal("nIntCodigo"));
                            }
                        }

                    }
                }

            }
            catch (Exception)
            {
                throw;
            }
            return nIntCodigo;
        }
        public bool Ins_GenerandoAsientoVta(string cPerJurCodigo, string cPerCodigo, DateTime dAsiFecha, string cGlosa, string CtaX, string CtaIgv, string CtaSub, string CentroCosto, string cDocObserv, int nDocTipo = 3001, int nEstado = 3003, string cDocRefCodigo="", string cDocNDoc = "", int nMoneda = 1, double fTC = 0, double fMonto = 0.0)
        {
            bool exito = false;
            int nOrigen = 0;
            int nUniOrgCodigo = 0;
            int nPrdCodigo = 0;
            int nAsiCorrelativo = 0;
            int nAsiCodigo=0;

            string cDocCodigo="";

            double nSubTotal = 0.0;
            double nIgv = 0.0;

            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                {
                    DA_ConAsiento ObjAsiento = new DA_ConAsiento();

                    #region Obtener Origen Contable "Ventas"
                    //BE_ReqParametros ReqOrigen = new BE_ReqParametros();
                    //ReqOrigen.cPerJurCodigo = cPerJurCodigo;
                    //ReqOrigen.nIntTipo = 7002; //Origen
                    //ReqOrigen.cIntJerarquia = "402"; //Ventas
                    //nOrigen = ObjAsiento.usp_Get_Interface_nIntCodigo_by_cPerJurCodigo_and_nIntTipo_and_cIntJerarquia(ReqOrigen);

                    nOrigen = Get_nIntCodigo_Interface(cPerJurCodigo, 7002, "402");
                    #endregion

                    #region Obtener Codigo Unidad Organizacional
                    BE_ReqParametros ReqUniOrg = new BE_ReqParametros();
                    ReqUniOrg.cPerJurCodigo = cPerJurCodigo;
                    nUniOrgCodigo = ObjAsiento.Get_UnidadOrganizacional_by_cPerJuridica(ReqUniOrg);
                    #endregion

                    #region Obtener Periodo Contable
                    BE_ReqParametros ReqPeriodo = new BE_ReqParametros();
                    ReqPeriodo.cPerJurCodigo = cPerJurCodigo;
                    nPrdCodigo = ObjAsiento.Get_Periodo_by_cPerJurCodigo(ReqPeriodo);
                    #endregion

                    #region Obtener nAsiCorrelativo by nUniOrgCodigo, nPrdCodigo y nOrigen
                    BE_ReqParametros ReqnAsiNumero = new BE_ReqParametros();
                    ReqnAsiNumero.nUniOrgCodigo = nUniOrgCodigo;
                    ReqnAsiNumero.nPrdCodigo = nPrdCodigo;
                    ReqnAsiNumero.nOrigen = nOrigen;

                    nAsiCorrelativo = ObjAsiento.Get_nAsiCorrelativo_by_nUniOrgCodigo_and_nPrdCodigo_and_nOrigen(ReqnAsiNumero);
                    #endregion

                    #region Obteniendo NewID "nAsiCodigo"

                    BE_ReqGetConAsientoNewId ReqNewIDnAsiento = new BE_ReqGetConAsientoNewId();
                    ReqNewIDnAsiento.cPerJurCodigo = cPerJurCodigo;
                    ReqNewIDnAsiento.nUniOrgCodigo = null;
                    nAsiCodigo = ObjAsiento.Get_NewID_ConAsiento(ReqNewIDnAsiento);

                    #endregion

                    //-----------
                    //ConAsiento
                    //-----------
                    if (!Ins_ConAsiento(nAsiCodigo, nOrigen, nPrdCodigo, nAsiCorrelativo, nUniOrgCodigo, "", dAsiFecha, "", 1)){
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: ConAsiento].!");
                    }

                    #region Generando nuevo Dcoumento(cDocCodigo)
                    BE_ReqGetDocumentoNewId ReqcDocu = new BE_ReqGetDocumentoNewId();
                    ReqcDocu.cPerJurCodigo = cPerJurCodigo;
                    cDocCodigo = ObjAsiento.Get_NewID_Documento(ReqcDocu);
                    #endregion

                    //--------------
                    //ConAsiDetalle
                    //--------------
                    nSubTotal = fMonto / 1.18;
                    nIgv = (fMonto / 1.18) * 0.18;

                    if (nDocTipo == 3001)
                    { //factura
                        if (!Ins_ConAsiDetalle(nAsiCodigo, 10, Get_nIntCodigo_Interface(cPerJurCodigo,7001,CtaX), nMoneda, 7001, fMonto, dAsiFecha, fTC, cGlosa, 1, cDocCodigo)
                                & !Ins_ConAsiDetalle(nAsiCodigo, 20, Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaIgv), nMoneda, 7003, nIgv, dAsiFecha, fTC, cGlosa, 1)
                                & !Ins_ConAsiDetalle(nAsiCodigo, 30, Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaSub), nMoneda, 7003, nSubTotal, dAsiFecha, fTC, cGlosa, 1)
                            )
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: ConAsiDetalle].!");
                        }

                        //-------------
                        //ConAsiDetInt
                        //-------------
                        if (!Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaX),10,nAsiCodigo,2222,1105,nMoneda,0,fTC) //2222-saldo(constante)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaX), 10, nAsiCodigo, 1, 7005, nMoneda, fMonto, fTC) //libro(interface)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaX), 10, nAsiCodigo, nPrdCodigo, 1007, nMoneda, 0, fTC)  //nPeriodo
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaX), 10, nAsiCodigo, 7010, 1105, nMoneda, fMonto, fTC)  //7010-Equivalente(constante)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaIgv), 20, nAsiCodigo, 1, 7005, nMoneda, nIgv, fTC)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaIgv), 20, nAsiCodigo, 7010, 1105, nMoneda, nIgv, fTC)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaSub), 30, nAsiCodigo, 7010, 1105, nMoneda, nSubTotal, fTC) //7010-Equivalente(constante)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaSub), 30, nAsiCodigo, 1, 7005, nMoneda, nSubTotal, fTC)  //libro(interface)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaSub), 30, nAsiCodigo, Get_nIntCodigo_Interface(cPerJurCodigo, 7003, CentroCosto), 7003, nMoneda, nSubTotal, fTC) //centro de costos
                                )
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: Documentos].!");
                        }
                    }
                    else {
                        if (!Ins_ConAsiDetalle(nAsiCodigo, 10, Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaSub), nMoneda, 7001, nSubTotal, dAsiFecha, fTC, cGlosa, 1)
                                & !Ins_ConAsiDetalle(nAsiCodigo, 11, Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaIgv), nMoneda, 7003, nIgv, dAsiFecha, fTC, cGlosa, 1, cDocCodigo)
                                & !Ins_ConAsiDetalle(nAsiCodigo, 12, Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaX), nMoneda, 7003, fMonto, dAsiFecha, fTC, cGlosa, 1, cDocCodigo)
                            )
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: ConAsiDetalle].!");
                        }

                        //-------------
                        //ConAsiDetInt
                        //-------------
                        if (!Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaSub), 10, nAsiCodigo, Get_nIntCodigo_Interface(cPerJurCodigo, 7003, CentroCosto), 7003, nMoneda, nSubTotal, fTC) //centro costos
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaSub), 10, nAsiCodigo, 7010, 1105, nMoneda, nSubTotal, fTC)  //7010-Equivalente(constante)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaIgv), 11, nAsiCodigo, 3, 7005, nMoneda, nIgv, fTC) //Libro(3-ventas)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaIgv), 11, nAsiCodigo, 7010, 1105, nMoneda, nIgv, fTC)  //7010-Equivalente(constante)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaX), 12, nAsiCodigo, 2222, 1105, nMoneda, fMonto, fTC) //2222-Saldo
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaX), 12, nAsiCodigo, 1, 7005, nMoneda, fMonto, fTC)  //libro(interface)
                                & !Ins_ConAsiDetInt(Get_nIntCodigo_Interface(cPerJurCodigo, 7001, CtaX), 12, nAsiCodigo, 7010, 1105, nMoneda, fMonto, fTC) //7010-Equivalente(constante)
                                )
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: Documentos].!");
                        }

                    }

                    //-----------
                    //Documentos
                    //-----------
                    if (!Ins_Documentos(cDocCodigo,dAsiFecha,cDocObserv,nDocTipo,nEstado)){
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: Documentos].!");
                    }

                    //--------------
                    //DocInterface
                    //--------------
                    if (!Ins_DocInterface(cDocCodigo,nAsiCodigo,7009, dAsiFecha)
                            & !Ins_DocInterface(cDocCodigo,3, 7005,dAsiFecha) //7005-Ventas (Tipo de Libro
                            & !Ins_DocInterface(cDocCodigo,7003,1070, dAsiFecha)) // 7003-Haber (Destino)
                    {
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: Documentos].!");
                    }

                    //--------------
                    //DocIdentifica
                    //--------------
                    if (!Ins_DocIdentifica(cDocCodigo,1,cDocNDoc)){
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: DocIdentifica].!");
                    }

                    //--------------
                    //DocComprobante
                    //--------------
                    //if (nDocTipo == 3001)
                    //{ //factura
                    if (!Ins_DocComprobante(cDocCodigo,1000,nMoneda,fMonto) //1000-Total
                            & !Ins_DocComprobante(cDocCodigo, 1001, nMoneda, nSubTotal) //1001-Sub-Total
                            & !Ins_DocComprobante(cDocCodigo, 1050, nMoneda, fTC) //1050-Tipo Cambio del dia
                            & !Ins_DocComprobante(cDocCodigo, 2001, nMoneda, nIgv) //2001-IGV
                        )
                    {
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: DocComprobante].!");
                    }
                    //}

                    //----------
                    //DocPersona
                    //----------
                    if (nDocTipo == 3001){ //factura
                        nDocTipo=11;
                    }else{
                        nDocTipo=25;
                    }

                    if (!Ins_DocPersona(cDocCodigo,1,cPerCodigo ,16,nDocTipo)  //Cliente
                            & !Ins_DocPersona(cDocCodigo, 2,cPerJurCodigo,16, 0) //Empresa (medica)
                            & !Ins_DocPersona(cDocCodigo, 7001, cPerCodigo, 16, nDocTipo)
                            & !Ins_DocPersona(cDocCodigo, 7002, cPerCodigo, 16, nDocTipo)
                            & !Ins_DocPersona(cDocCodigo, 7003, cPerCodigo, 16, nDocTipo)
                            & !Ins_DocPersona(cDocCodigo, 7004, cPerCodigo, 16, nDocTipo)
                            & !Ins_DocPersona(cDocCodigo, 7005, cPerCodigo, 16, nDocTipo)
                        )
                    {
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: DocPersona].!");
                    }

                    //-----------
                    //DocVigencia
                    //-----------
                    if (!Ins_DocVigencia(cDocCodigo,dAsiFecha,dAsiFecha)){
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: DocVigencia].!");
                    }

                    //------
                    //DocRef
                    //------
                    if (!Ins_DocRef(cDocCodigo, cDocRefCodigo, dAsiFecha)){
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Insert: DocRef].!");
                    }
                    else {
                        exito = true;
                    }

                    tx.Complete();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return exito;
        }