using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Herencia.Capas;
using Exferia_EntityFramework;
using Exferia_Maestros._0_Modelos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using System.Transactions;
using System.Data.SqlClient;
using Exferia_General;
using static Exferia_Aplicacion.General.Enumerados;
using Exferia_Aplicacion.Modelos_Maestros;
using System.Threading;
using System.Reflection;
using Exferia_Aplicacion.Modelos_Generales;
using Exferia_Maestros._3_Vistas.Listados;

namespace Exferia_Maestros._1_Datos
{
    public class MAE_Proveedores_Datos : ABS_Datos
    {
        #region Listado
        private List<INTERNO_MAE_Proveedores_Listado_Modelo> g_lst_INTERNO_MAE_Proveedores_Listado_Modelo = null;

        public override List<dynamic> Obtener_Listado(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            List<dynamic> lst_MAE = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                // Consulta .....................................................
                ConsultaRellenar_Listado(obj_Exferia_Entities, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MAE_Proveedores_Datos).Name), _lst_CamposConRelacionABuscar, -1, null,_lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                // ..............................................................

                if ((g_lst_INTERNO_MAE_Proveedores_Listado_Modelo != null) && (g_lst_INTERNO_MAE_Proveedores_Listado_Modelo.Count() > 0))
                {
                    lst_MAE = g_lst_INTERNO_MAE_Proveedores_Listado_Modelo.Cast<dynamic>().ToList();
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_Listado), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return lst_MAE;
        }
        public override dynamic Obtener_RegistroListado(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo, long _lng_id, List<long> _lst_ids)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            dynamic dnm_MAE = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                // Consulta .....................................................
                ConsultaRellenar_Listado(obj_Exferia_Entities, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MAE_Proveedores).Name), _lst_CamposConRelacionABuscar, _lng_id, _lst_ids, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                // ..............................................................

                if ((g_lst_INTERNO_MAE_Proveedores_Listado_Modelo != null) && (g_lst_INTERNO_MAE_Proveedores_Listado_Modelo.Count() > 0))
                {
                    dnm_MAE = g_lst_INTERNO_MAE_Proveedores_Listado_Modelo.Cast<dynamic>().ToList();
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_RegistroListado), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return dnm_MAE;
        }
        protected override void ConsultaRellenar_Listado(Exferia_Entities _obj_Exferia_Entities, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionadas, List<string> _lst_CamposConRelacionABuscar, long _lng_id, List<long> _lst_ids, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            try
            {
                List<SqlParameter> lst_Parametros = new List<SqlParameter>();

                string str_Filtros_Empresas = Funciones.Formar_ContenidoIN_ParaConsultaWhere(_lst_idEmpresasRelacionadas);

               

                if (_lst_INTERNO_Filtro_OpcionPadre_Modelo != null && _lst_INTERNO_Filtro_OpcionPadre_Modelo.Count > 0)
                {
                    foreach (INTERNO_Filtro_OpcionPadre_Modelo mdl_INTERNO_Filtro_OpcionPadre_Modelo in _lst_INTERNO_Filtro_OpcionPadre_Modelo)
                    {
                        
                    }
                }

                string str_SQL =
                      " SELECT " +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.id) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.id) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.codigo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.codigo) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.razonSocial) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.razonSocial) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.nombreComercial) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.nombreComercial) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.cif) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cif) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.telefono1) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.telefono1) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.telefono2) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.telefono2) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.fax) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fax) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.email) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.email) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.web) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.web) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.registroMercantil) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.registroMercantil) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.riesgo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.riesgo) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.descuentoProntoPago) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoProntoPago) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.descuentoGeneral) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoGeneral) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.descuentoFinalFactura) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoFinalFactura) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.noDeclararEnInformativas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.noDeclararEnInformativas) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.acogidoACriterioCaja) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.acogidoACriterioCaja) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.acreedorArrendamiento) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.acreedorArrendamiento) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.proveedorAcreedor) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.proveedorAcreedor) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.proveedorInterno) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.proveedorInterno) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.cancelarPedidosNoCompletados) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cancelarPedidosNoCompletados) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.imprimirTrazabilidad) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.imprimirTrazabilidad) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.papelPreImpreso) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.papelPreImpreso) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.cargarEnTerminalyTeleVenta) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cargarEnTerminalyTeleVenta) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.lineasTotalesImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasTotalesImpresion) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.lineasEnCabeceraImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasEnCabeceraImpresion) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.lineasEnPieImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasEnPieImpresion) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.operadorAduanas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.operadorAduanas) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.fechaAlta) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaAlta) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.fechaBaja) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBaja) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.recargo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.recargo) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Bolsa) + " = (CASE WHEN MAE_Proveedores_Bolsa_Filtrado." + nameof(MAE_Proveedores_Bolsa.id) + " > -1 THEN convert(bit,1) ELSE convert(bit,0) END)," +
                           //ids
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idEmpresa) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idFormaPago) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idFormaPago) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idImpuestoCabecera) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idImpuestoCabecera) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idMoneda) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMoneda) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idMayor_CuentaContable) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContable) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idMayor_CuentaContraPartida) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContraPartida) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idMayor_CuentaRetencion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaRetencion) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idMayor_CuentaRemesas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaRemesas) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idMayorAuxiliar) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayorAuxiliar) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idTesoreria) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idTesoreria) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idDepartamento) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idDepartamento) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idMayor_CuentaDescuentosCompartidos) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaDescuentosCompartidos) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idPredefinidoCabecera_Compras) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idPredefinidoCabecera_Compras) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idPredefinidoCabecera_Pagos) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idPredefinidoCabecera_Pagos) + "," +
                           nameof(INTERNO_MAE_Proveedores_Listado_Modelo.idRetencionTipo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idRetencionTipo) + "," +
                           //Empresa
                           (
                             (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Empresa)))
                               ?
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Empresa_Codigo) + " = " + nameof(GEN_Empresas) + "." + nameof(GEN_Empresas.codigo) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Empresa_Descripcion) + " =" + nameof(GEN_Empresas) + "." + nameof(GEN_Empresas.descripcion) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Empresa_FechaBorrado) + " =" + nameof(GEN_Empresas) + "." + nameof(GEN_Empresas.fechaBorrado) + ","
                                   )
                               :
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Empresa_Codigo) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Empresa_Descripcion) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Empresa_FechaBorrado) + " = NULL, "
                                   )
                           ) +
                           //RetencionTipo
                           (
                             (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.RetencionTipo)))
                               ?
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.RetencionTipo_Codigo) + " = " + nameof(GEN_RetencionesTipos) + "." + nameof(GEN_RetencionesTipos.codigo) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.RetencionTipo_Descripcion) + " =" + nameof(GEN_RetencionesTipos) + "." + nameof(GEN_RetencionesTipos.descripcion) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.RetencionTipo_FechaBorrado) + " =" + nameof(GEN_RetencionesTipos) + "." + nameof(GEN_RetencionesTipos.fechaBorrado) + ","
                                   )
                               :
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.RetencionTipo_Codigo) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.RetencionTipo_Descripcion) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.RetencionTipo_FechaBorrado) + " = NULL, "
                                   )
                           ) +
                           //FormaPago
                           (
                             (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.FormaPago)))
                               ?
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.FormaPago_Codigo) + " = " + nameof(MAE_FormasPago) + "." + nameof(MAE_FormasPago.codigo) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.FormaPago_Descripcion) + " =" + nameof(MAE_FormasPago) + "." + nameof(MAE_FormasPago.descripcion) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.FormaPago_FechaBorrado) + " =" + nameof(MAE_FormasPago) + "." + nameof(MAE_FormasPago.fechaBorrado) + ","
                                   )
                               :
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.FormaPago_Codigo) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.FormaPago_Descripcion) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.FormaPago_FechaBorrado) + " = NULL, "
                                   )
                           ) +
                           //ImpuestoCabecera
                           (
                             (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.ImpuestoCabecera)))
                               ?
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.ImpuestoCabecera_Codigo) + " = " + nameof(GEN_ImpuestosCabecera) + "." + nameof(GEN_ImpuestosCabecera.codigo) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.ImpuestoCabecera_Descripcion) + " =" + nameof(GEN_ImpuestosCabecera) + "." + nameof(GEN_ImpuestosCabecera.descripcion) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.ImpuestoCabecera_FechaBorrado) + " =" + nameof(GEN_ImpuestosCabecera) + "." + nameof(GEN_ImpuestosCabecera.fechaBorrado) + ","
                                   )
                               :
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.ImpuestoCabecera_Codigo) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.ImpuestoCabecera_Descripcion) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.ImpuestoCabecera_FechaBorrado) + " = NULL, "
                                   )
                           ) +
                           //Moneda
                           (
                             (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Moneda)))
                               ?
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Moneda_Codigo) + " = " + nameof(GEN_Monedas) + "." + nameof(GEN_Monedas.moneda) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Moneda_Descripcion) + " =" + nameof(GEN_Monedas) + "." + nameof(GEN_Monedas.descripcion) + "," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Moneda_FechaBorrado) + " =" + nameof(GEN_Monedas) + "." + nameof(GEN_Monedas.fechaBorrado) + ","
                                   )
                               :
                                   (
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Moneda_Codigo) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Moneda_Descripcion) + " = ''," +
                                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Moneda_FechaBorrado) + " = NULL, "
                                   )
                           ) +
                            //MayorContable
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContable)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContable_Codigo) + " = AUX_1." + nameof(CTA_Mayor.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContable_Descripcion) + " = AUX_1." + nameof(CTA_Mayor.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContable_FechaBorrado) + " = AUX_1." + nameof(CTA_Mayor.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContable_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContable_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContable_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //MayorContraPartida
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContraPartida)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContraPartida_Codigo) + " = AUX_2." + nameof(CTA_Mayor.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContraPartida_Descripcion) + " = AUX_2." + nameof(CTA_Mayor.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContraPartida_FechaBorrado) + " = AUX_2." + nameof(CTA_Mayor.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContraPartida_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContraPartida_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContraPartida_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //MayorRetencion
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRetencion)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRetencion_Codigo) + " = AUX_3." + nameof(CTA_Mayor.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRetencion_Descripcion) + " = AUX_3." + nameof(CTA_Mayor.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRetencion_FechaBorrado) + " = AUX_3." + nameof(CTA_Mayor.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRetencion_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRetencion_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRetencion_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //MayorRemesas
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRemesas)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRemesas_Codigo) + " = AUX_4." + nameof(CTA_Mayor.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRemesas_Descripcion) + " = AUX_4." + nameof(CTA_Mayor.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRemesas_FechaBorrado) + " = AUX_4." + nameof(CTA_Mayor.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRemesas_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRemesas_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRemesas_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //MayorAuxiliar
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorAuxiliar)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorAuxiliar_Codigo) + " = " + nameof(CTA_MayorAuxiliar) + "." + nameof(CTA_MayorAuxiliar.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorAuxiliar_Descripcion) + " =" + nameof(CTA_MayorAuxiliar) + "." + nameof(CTA_MayorAuxiliar.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorAuxiliar_FechaBorrado) + " =" + nameof(CTA_MayorAuxiliar) + "." + nameof(CTA_MayorAuxiliar.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorAuxiliar_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorAuxiliar_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorAuxiliar_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //Tesoreria
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Tesoreria)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Tesoreria_Codigo) + " = " + nameof(MAE_Tesorerias) + "." + nameof(MAE_Tesorerias.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Tesoreria_Descripcion) + " =" + nameof(MAE_Tesorerias) + "." + nameof(MAE_Tesorerias.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Tesoreria_FechaBorrado) + " =" + nameof(MAE_Tesorerias) + "." + nameof(MAE_Tesorerias.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Tesoreria_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Tesoreria_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Tesoreria_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //Departamento
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Departamento)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Departamento_Codigo) + " = " + nameof(CTA_Departamentos) + "." + nameof(CTA_Departamentos.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Departamento_Descripcion) + " =" + nameof(CTA_Departamentos) + "." + nameof(CTA_Departamentos.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Departamento_FechaBorrado) + " =" + nameof(CTA_Departamentos) + "." + nameof(CTA_Departamentos.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Departamento_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Departamento_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Departamento_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //MayorCuentaDescuentosCompartidos
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorCuentaDescuentosCompartidos)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorCuentaDescuentosCompartidos_Codigo) + " = AUX_5." + nameof(CTA_Mayor.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorCuentaDescuentosCompartidos_Descripcion) + " = AUX_5." + nameof(CTA_Mayor.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorCuentaDescuentosCompartidos_FechaBorrado) + " = AUX_5." + nameof(CTA_Mayor.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorCuentaDescuentosCompartidos_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorCuentaDescuentosCompartidos_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorCuentaDescuentosCompartidos_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //PredefinidosCompras
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosCompras)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosCompras_Codigo) + " = AUX_9." + nameof(CTA_PredefinidosCabeceras.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosCompras_Descripcion) + " = AUX_9." + nameof(CTA_PredefinidosCabeceras.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosCompras_FechaBorrado) + " = AUX_9." + nameof(CTA_PredefinidosCabeceras.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosCompras_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosCompras_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosCompras_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //PredefinidosPagos
                            (
                              (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosPagos)))
                                ?
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosPagos_Codigo) + " = AUX_10." + nameof(CTA_PredefinidosCabeceras.codigo) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosPagos_Descripcion) + " = AUX_10." + nameof(CTA_PredefinidosCabeceras.descripcion) + "," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosPagos_FechaBorrado) + " = AUX_10." + nameof(CTA_PredefinidosCabeceras.fechaBorrado)
                                    )
                                :
                                    (
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosPagos_Codigo) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosPagos_Descripcion) + " = ''," +
                                        nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosPagos_FechaBorrado) + " = NULL "
                                    )
                            ) +
                        " FROM " + nameof(MAE_Proveedores) +
                            //Empresa
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Empresa)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(GEN_Empresas) + " ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + " = " + nameof(GEN_Empresas) + "." + nameof(GEN_Empresas.id)
                                        )
                                    : ("")
                            ) +
                            //RetencionTipo
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.RetencionTipo)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(GEN_RetencionesTipos) + " ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idRetencionTipo) + " = " + nameof(GEN_RetencionesTipos) + "." + nameof(GEN_RetencionesTipos.id)
                                        )
                                    : ("")
                            ) +
                            //FormaPago
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.FormaPago)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(MAE_FormasPago) + " ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idFormaPago) + " = " + nameof(MAE_FormasPago) + "." + nameof(MAE_FormasPago.id)
                                        )
                                    : ("")
                            ) +
                            //ImpuestoCabecera
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.ImpuestoCabecera)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(GEN_ImpuestosCabecera) + " ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idImpuestoCabecera) + " = " + nameof(GEN_ImpuestosCabecera) + "." + nameof(GEN_ImpuestosCabecera.id)
                                        )
                                    : ("")
                            ) +
                            //Moneda
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Moneda)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(GEN_Monedas) + " ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMoneda) + " = " + nameof(GEN_Monedas) + "." + nameof(GEN_Monedas.id)
                                        )
                                    : ("")
                            ) +
                            //MayorContable
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContable)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_Mayor) + " AS AUX_1 ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContable) + " = AUX_1." + nameof(CTA_Mayor.id)
                                        )
                                    : ("")
                            ) +
                            //MayorContraPartida
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorContraPartida)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_Mayor) + " AS AUX_2 ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContraPartida) + " = AUX_2." + nameof(CTA_Mayor.id)
                                        )
                                    : ("")
                            ) +
                            //MayorRetencion
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRetencion)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_Mayor) + " AS AUX_3 ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaRetencion) + " = AUX_3." + nameof(CTA_Mayor.id)
                                        )
                                    : ("")
                            ) +
                            //MayorRemesas
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorRemesas)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_Mayor) + " AS AUX_4 ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaRemesas) + " = AUX_4." + nameof(CTA_Mayor.id)
                                        )
                                    : ("")
                            ) +
                            //MayorAuxiliar
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorAuxiliar)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_MayorAuxiliar) + " ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayorAuxiliar) + " = " + nameof(CTA_MayorAuxiliar) + "." + nameof(CTA_MayorAuxiliar.id)
                                        )
                                    : ("")
                            ) +
                            //Tesoreria
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Tesoreria)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(MAE_Tesorerias) + " ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idTesoreria) + " = " + nameof(MAE_Tesorerias) + "." + nameof(MAE_Tesorerias.id)
                                        )
                                    : ("")
                            ) +
                            //Departamento
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.Departamento)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_Departamentos) + " ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idDepartamento) + " = " + nameof(CTA_Departamentos) + "." + nameof(CTA_Departamentos.id)
                                        )
                                    : ("")
                            ) +
                            //MayorCuentaDescuentosCompartidos
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.MayorCuentaDescuentosCompartidos)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_MayorAuxiliar) + " AS AUX_5 ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaDescuentosCompartidos) + " = AUX_5." + nameof(CTA_MayorAuxiliar.id)
                                        )
                                    : ("")
                            ) +
                            //PredefinidosCompras
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosCompras)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_PredefinidosCabeceras) + " AS AUX_9 ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idPredefinidoCabecera_Compras) + " = AUX_9." + nameof(CTA_PredefinidosCabeceras.id)
                                        )
                                    : ("")
                            ) +
                            //PredefinidosPagos
                            (
                                 (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.PredefinidosPagos)))
                                    ?
                                        (
                                         " LEFT JOIN " + nameof(CTA_PredefinidosCabeceras) + " AS AUX_10 ON " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idPredefinidoCabecera_Pagos) + " = AUX_10." + nameof(CTA_PredefinidosCabeceras.id)
                                        )
                                    : ("")
                            ) +
                            //PROVEEDOR_BOLSA
                            " LEFT JOIN ( " +
                                    "SELECT " +
                                        nameof(MAE_Proveedores_Bolsa) + "." + nameof(MAE_Proveedores_Bolsa.id) + "," +
                                        nameof(MAE_Proveedores_Bolsa) + "." + nameof(MAE_Proveedores_Bolsa.idUsuario) + "," +
                                        nameof(MAE_Proveedores_Bolsa) + "." + nameof(MAE_Proveedores_Bolsa.idProveedor) +
                                    " FROM " + nameof(MAE_Proveedores_Bolsa) +
                                    " WHERE " + nameof(MAE_Proveedores_Bolsa) + "." + nameof(MAE_Proveedores_Bolsa.idUsuario) + "=" + Variables.G_MDL_USUARIOVALIDADO_MODELO.id +
                                  " ) AS MAE_Proveedores_Bolsa_Filtrado ON MAE_Proveedores_Bolsa_Filtrado." + nameof(MAE_Proveedores_Bolsa.idProveedor) + "=" + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.id) +
                        " WHERE " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBorrado) + " IS null AND " +
                                    " ( " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + "=@idEmpresa" +
                                        (
                                            (_lst_idEmpresasRelacionadas != null && _lst_idEmpresasRelacionadas.Count > 0)
                                                ? (" OR " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + " in (" + str_Filtros_Empresas + ") ")
                                                : " "
                                        ) +
                                    " ) AND " +
                                    (
                                        _lng_id > -1 
                                        ? nameof(MAE_Proveedores) + "." + (nameof(MAE_Proveedores.id) + "=@id") 
                                        : "1 = 1"
                                    ); 

                //Parametros
                lst_Parametros.Add(new SqlParameter("@idEmpresa", _lng_idEmpresaSeleccionada));
                lst_Parametros.Add(new SqlParameter("@id", _lng_id));

                object[] arr_Parametros = lst_Parametros.ToArray();

                //Rellenar el Modelo
                g_lst_INTERNO_MAE_Proveedores_Listado_Modelo = _obj_Exferia_Entities.Database.SqlQuery<INTERNO_MAE_Proveedores_Listado_Modelo>(str_SQL, arr_Parametros).ToList();

                //Direcciones
                if (g_lst_INTERNO_MAE_Proveedores_Listado_Modelo != null && g_lst_INTERNO_MAE_Proveedores_Listado_Modelo.Count > 0)
                {
                    Agregar_Direcciones(_lst_CamposConRelacionABuscar);
                }

            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(ConsultaRellenar_Listado), true);
            }
        }

        private void Agregar_Direcciones(List<string> _lst_CamposConRelacionABuscar)
        {
            try
            {
                List<long> lst_ids = g_lst_INTERNO_MAE_Proveedores_Listado_Modelo.Select(m => m.id).ToList();

                //Buscar datos de direccion de envio ##################################################################
                List<GEN_Direcciones> lst_Direcciones_Envio = null;

                if (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_NombreVia)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_CodigoPostal)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_Pais)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_Provincia)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_Municipio)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_Poblacion)))
                {
                    lst_Direcciones_Envio = Datos_Generales.GEN_Direcciones_Obtener_Modelo_Listado_Por_IdsProveedorTipoDireccion(lst_ids,
                                                                                                                                 Variables.G_STR_TIPODIRECCION_ENVIO,
                                                                                                                                _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_Pais)),
                                                                                                                                _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_Provincia)),
                                                                                                                                _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_Municipio)),
                                                                                                                                _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio_Poblacion)),
                                                                                                                                false);

                }
                //######################################################################################

                //Buscar datos de direccion de fACTURACION ##################################################################
                List<GEN_Direcciones> lst_Direcciones_Facturacion = null;

                if (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_NombreVia)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_CodigoPostal)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_Pais)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_Provincia)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_Municipio)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_Poblacion)))
                {
                    lst_Direcciones_Facturacion = Datos_Generales.GEN_Direcciones_Obtener_Modelo_Listado_Por_IdsProveedorTipoDireccion(lst_ids,
                                                                                                                                 Variables.G_STR_TIPODIRECCION_FACTURACION,
                                                                                                                                            _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_Pais)),
                                                                                                                                            _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_Provincia)),
                                                                                                                                            _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_Municipio)),
                                                                                                                                            _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion_Poblacion)),
                                                                                                                                            false);

                }
                //######################################################################################

                //Buscar datos de direccion de Fiscal ##################################################################
                List<GEN_Direcciones> lst_Direcciones_Fiscal = null;

                if (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_NombreVia)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_TipoNumeracion)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_NumeroCasa)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_CalificadorNumero)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Bloque)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Portal)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Escalera)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Planta)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Puerta)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_DatosComplementariosDomicilio)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_CodigoPostal)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Pais)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Provincia)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Municipio)) ||
                    _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Poblacion)))
                {
                    lst_Direcciones_Fiscal = Datos_Generales.GEN_Direcciones_Obtener_Modelo_Listado_Por_IdsProveedorTipoDireccion(lst_ids,
                                                                                                                                 Variables.G_STR_TIPODIRECCION_FISCAL,
                                                                                                                                        _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Pais)),
                                                                                                                                        _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Provincia)),
                                                                                                                                        _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Municipio)),
                                                                                                                                        _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_Poblacion)),
                                                                                                                                        _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal_TipoVia)));
                }
                //######################################################################################


                //Rellenar el Listado
                foreach (INTERNO_MAE_Proveedores_Listado_Modelo mdl_INTERNO_MAE_Proveedores_Listado_Modelo in g_lst_INTERNO_MAE_Proveedores_Listado_Modelo)
                {
                    //Direccion de Envio
                    if (lst_Direcciones_Envio != null &&
                        lst_Direcciones_Envio.Count > 0)
                    {
                        mdl_INTERNO_MAE_Proveedores_Listado_Modelo.DireccionEnvio = lst_Direcciones_Envio.Where(m => m.idProveedor != null && m.idProveedor.Value.Equals(mdl_INTERNO_MAE_Proveedores_Listado_Modelo.id)).FirstOrDefault();
                    }

                    //Direccion de Facturacion
                    if (lst_Direcciones_Facturacion != null &&
                        lst_Direcciones_Facturacion.Count > 0)
                    {
                        mdl_INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFacturacion = lst_Direcciones_Facturacion.Where(m => m.idProveedor != null && m.idProveedor.Value.Equals(mdl_INTERNO_MAE_Proveedores_Listado_Modelo.id)).FirstOrDefault();
                    }

                    //Direccion de Fiscal
                    if (lst_Direcciones_Fiscal != null &&
                        lst_Direcciones_Fiscal.Count > 0)
                    {
                        mdl_INTERNO_MAE_Proveedores_Listado_Modelo.DireccionFiscal = lst_Direcciones_Fiscal.Where(m => m.idProveedor != null && m.idProveedor.Value.Equals(mdl_INTERNO_MAE_Proveedores_Listado_Modelo.id)).FirstOrDefault();
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Agregar_Direcciones), true);
            }
        }
        #endregion

        #region Listado Secundario
        public override List<dynamic> Obtener_Listado_Secundario(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            return null;
        }
        public override dynamic Obtener_RegistroListado_Secundario(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo, long _lng_id, List<long> _lst_ids)
        {
            return null;
        }
        protected override void ConsultaRellenar_Listado_Secundario(Exferia_Entities _obj_Exferia_Entities, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionadas, List<string> _lst_CamposConRelacionABuscar, long _lng_id, List<long> _lst_ids, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        { }
        #endregion

        #region F3
        private INTERNO_MAE_Proveedores_Listado_Modelo g_mdl_INTERNO_MAE_Proveedores_Listado_Modelo_F3 = null;

        public override dynamic Obtener_F3(string _str_filtro, string _str_CampoBusqueda, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            dynamic dnm_MAE = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Consulta ......................................................
                ConsultaRellenar_F3(obj_Exferia_Entities, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MAE_Proveedores).Name), _str_CampoBusqueda, _str_filtro, -1, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                // ..............................................................

                if (g_mdl_INTERNO_MAE_Proveedores_Listado_Modelo_F3 != null)
                {
                    dnm_MAE = g_mdl_INTERNO_MAE_Proveedores_Listado_Modelo_F3;
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_F3), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return dnm_MAE;
        }
        public override dynamic Obtener_F3_PorId(long _lng_id, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            dynamic dnm_MAE = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Conuslta ......................................................
                ConsultaRellenar_F3(obj_Exferia_Entities, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MAE_Proveedores).Name), "", "", _lng_id, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                // ..............................................................

                if (g_mdl_INTERNO_MAE_Proveedores_Listado_Modelo_F3 != null)
                {
                    dnm_MAE = g_mdl_INTERNO_MAE_Proveedores_Listado_Modelo_F3;
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_F3_PorId), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return dnm_MAE;
        }
        protected override void ConsultaRellenar_F3(Exferia_Entities _obj_Exferia_Entities, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionadas, string _str_CampoBusqueda, string _str_Filtro, long _lng_id, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            try
            {
                List<SqlParameter> lst_Parametros = new List<SqlParameter>();

                string str_Filtros_Empresas = Funciones.Formar_ContenidoIN_ParaConsultaWhere(_lst_idEmpresasRelacionadas);


                if (_lst_INTERNO_Filtro_OpcionPadre_Modelo != null && _lst_INTERNO_Filtro_OpcionPadre_Modelo.Count > 0)
                {
                    foreach (INTERNO_Filtro_OpcionPadre_Modelo mdl_INTERNO_Filtro_OpcionPadre_Modelo in _lst_INTERNO_Filtro_OpcionPadre_Modelo)
                    {
                        
                    }
                }

                string str_SQL =
                   " SELECT distinct " +
                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.id) + " = " + nameof(MAE_Proveedores.id) + "," +
                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.codigo) + " = " + nameof(MAE_Proveedores.codigo) + "," +
                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.razonSocial) + " = " + nameof(MAE_Proveedores.razonSocial) + "," +
                       nameof(INTERNO_MAE_Proveedores_Listado_Modelo.nombreComercial) + " = " + nameof(MAE_Proveedores.nombreComercial) +
               " FROM " + nameof(MAE_Proveedores) +
               " WHERE " + nameof(MAE_Proveedores.fechaBorrado) + " IS null AND " +
                        " ( " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + "=@idEmpresa" +
                                      (
                                          (_lst_idEmpresasRelacionadas != null && _lst_idEmpresasRelacionadas.Count > 0)
                                              ? (" OR " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + " in (" + str_Filtros_Empresas + ") ")
                                              : " "
                                      ) +
                                  " ) AND " +
                                (
                                 (_lng_id > -1)
                                   ? (nameof(MAE_Proveedores.id) + " = " + _lng_id)
                                   : (
                                        //Filtrar por Codigo
                                        (_str_CampoBusqueda.Equals(nameof(MAE_Proveedores.codigo)))
                                            ? (nameof(MAE_Proveedores.codigo) + "=@Filtro")
                                            //Filtrar por nombreComercial
                                            : (_str_CampoBusqueda.Equals(nameof(MAE_Proveedores.nombreComercial)))
                                              ? (nameof(MAE_Proveedores.nombreComercial) + "=@Filtro")
                                              //Filtrar por Razon Social
                                              : (nameof(MAE_Proveedores.razonSocial) + "=@Filtro")
                                     )
                                ); 

                //Parametros
                lst_Parametros.Add(new SqlParameter("@idEmpresa", _lng_idEmpresaSeleccionada));
                lst_Parametros.Add(new SqlParameter("@Filtro", _str_Filtro));

                object[] arr_Parametros = lst_Parametros.ToArray();

                //Rellenar el Modelo
                g_mdl_INTERNO_MAE_Proveedores_Listado_Modelo_F3 = _obj_Exferia_Entities.Database.SqlQuery<INTERNO_MAE_Proveedores_Listado_Modelo>(str_SQL, arr_Parametros).FirstOrDefault();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(ConsultaRellenar_F3), true);
            }
        }
        #endregion

        #region Obtener

        #region Obtener Simple
        private dynamic g_dnm_Modelo_Obtener = null;

        private static int g_int_TotalHilos_Obtener = 20;
        private bool[] g_bol_Hilos_Terminados_Obtener = new bool[g_int_TotalHilos_Obtener];

        public override dynamic Obtener(long _lng_id)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                string str_SQL =
                " SELECT " +
                         nameof(INTERNO_MAE_Proveedores_Modelo.id) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.id) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.codigo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.codigo) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.razonSocial) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.razonSocial) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.nombreComercial) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.nombreComercial) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.cif) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cif) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.telefono1) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.telefono1) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.telefono2) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.telefono2) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.fax) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fax) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.email) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.email) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.web) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.web) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.registroMercantil) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.registroMercantil) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.observaciones) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.observaciones) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.riesgo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.riesgo) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.descuentoProntoPago) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoProntoPago) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.descuentoGeneral) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoGeneral) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.descuentoFinalFactura) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoFinalFactura) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.acogidoACriterioCaja) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.acogidoACriterioCaja) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.noDeclararEnInformativas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.noDeclararEnInformativas) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.acreedorArrendamiento) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.acreedorArrendamiento) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.proveedorAcreedor) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.proveedorAcreedor) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.proveedorInterno) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.proveedorInterno) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.cancelarPedidosNoCompletados) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cancelarPedidosNoCompletados) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.imprimirTrazabilidad) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.imprimirTrazabilidad) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.papelPreImpreso) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.papelPreImpreso) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.operadorAduanas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.operadorAduanas) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.cargarEnTerminalyTeleVenta) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cargarEnTerminalyTeleVenta) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.lineasTotalesImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasTotalesImpresion) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.lineasEnCabeceraImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasEnCabeceraImpresion) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.lineasEnPieImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasEnPieImpresion) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.fechaAlta) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaAlta) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.fechaBaja) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBaja) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.fechaBorrado) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBorrado) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.recargo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.recargo) + "," +
                         //ids
                         nameof(INTERNO_MAE_Proveedores_Modelo.idEmpresa) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idFormaPago) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idFormaPago) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idImpuestoCabecera) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idImpuestoCabecera) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idMoneda) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMoneda) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idMayor_CuentaContable) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContable) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idMayor_CuentaContraPartida) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContraPartida) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idMayor_CuentaRetencion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaRetencion) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idMayor_CuentaRemesas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaRemesas) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idMayor_CuentaDescuentosCompartidos) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaDescuentosCompartidos) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idMayorAuxiliar) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayorAuxiliar) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idTesoreria) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idTesoreria) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idDepartamento) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idDepartamento) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idPredefinidoCabecera_Compras) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idPredefinidoCabecera_Compras) + "," +
                         nameof(INTERNO_MAE_Proveedores_Modelo.idPredefinidoCabecera_Pagos) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idPredefinidoCabecera_Pagos) + "," +
                          nameof(INTERNO_MAE_Proveedores_Modelo.idRetencionTipo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idRetencionTipo) +
                " FROM " + nameof(MAE_Proveedores) +
                " WHERE " + nameof(MAE_Proveedores.fechaBorrado) + " IS NULL AND " +
                           nameof(MAE_Proveedores.id) + "=@id ";

                //Parametros
                object[] arr_Parametros = new object[]
                {
                     new SqlParameter("@id",  _lng_id)
                };

                //Rellenar el Modelo
                g_dnm_Modelo_Obtener = obj_Exferia_Entities.Database.SqlQuery<INTERNO_MAE_Proveedores_Modelo>(str_SQL, arr_Parametros).FirstOrDefault();

                #region Rellenar Tablas Relacionadas
                if (g_dnm_Modelo_Obtener != null)
                {
                    //reiniciar Valores de los hilos
                    for (int int_Contador = 0; int_Contador < g_int_TotalHilos_Obtener; int_Contador++)
                    {
                        g_bol_Hilos_Terminados_Obtener[int_Contador] = false;
                    }

                    //GEN_Direcciones ##########################################################################################
                    ThreadStart obj_ThreadStart_DIRECCIONES = new ThreadStart(Obtener_Direcciones_Modelo_Obtener);
                    Thread obj_Thread_DIRECCIONES = new Thread(obj_ThreadStart_DIRECCIONES);
                    obj_Thread_DIRECCIONES.Start();

                    //CTA_Departamento ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idDepartamento != null)
                    {
                        ThreadStart obj_ThreadStart_DEPARTAMENTO = new ThreadStart(Obtener_Departamento_Modelo_Obtener);
                        Thread obj_Thread_DEPARTAMENTO = new Thread(obj_ThreadStart_DEPARTAMENTO);
                        obj_Thread_DEPARTAMENTO.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[1] = true;
                    }

                    //CTA_Mayor(Contable) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayor_CuentaContable != null)
                    {
                        ThreadStart obj_ThreadStart_MAYORCUENTACONTABLE = new ThreadStart(Obtener_MayorCuentaContable_Modelo_Obtener);
                        Thread obj_Thread_MAYORCUENTACONTABLE = new Thread(obj_ThreadStart_MAYORCUENTACONTABLE);
                        obj_Thread_MAYORCUENTACONTABLE.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[2] = true;
                    }

                    //CTA_Mayor(Remesa) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayor_CuentaRemesas != null)
                    {
                        ThreadStart obj_ThreadStart_MAYORCUENTAREMESA = new ThreadStart(Obtener_MayorCuentaRemesa_Modelo_Obtener);
                        Thread obj_Thread_MAYORCUENTAREMESA = new Thread(obj_ThreadStart_MAYORCUENTAREMESA);
                        obj_Thread_MAYORCUENTAREMESA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[3] = true;
                    }

                    //CTA_Mayor(ContraPartida) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayor_CuentaContraPartida != null)
                    {
                        ThreadStart obj_ThreadStart_MAYORCUENTACONTRAPARTIDA = new ThreadStart(Obtener_MayorCuentaContraPartida_Modelo_Obtener);
                        Thread obj_Thread_MAYORCUENTACONTRATPARTIDA = new Thread(obj_ThreadStart_MAYORCUENTACONTRAPARTIDA);
                        obj_Thread_MAYORCUENTACONTRATPARTIDA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[4] = true;
                    }

                    //CTA_Mayor(Retencion) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayor_CuentaRetencion != null)
                    {
                        ThreadStart obj_ThreadStart_MAYORCUENTARETENCION = new ThreadStart(Obtener_MayorCuentaRetencion_Modelo_Obtener);
                        Thread obj_Thread_MAYORCUENTARETENCION = new Thread(obj_ThreadStart_MAYORCUENTARETENCION);
                        obj_Thread_MAYORCUENTARETENCION.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[5] = true;
                    }

                    //CTA_Mayor(CuentaDescuentosCompartidos) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayor_CuentaDescuentosCompartidos != null)
                    {
                        ThreadStart obj_ThreadStart_MAYORCUENTADESCUENTOCOMPARTIDO = new ThreadStart(Obtener_MayorCuentaDecuentoCompartido_Modelo_Obtener);
                        Thread obj_Thread_MAYORCUENTADESCUENTOCOMPARTIDO = new Thread(obj_ThreadStart_MAYORCUENTADESCUENTOCOMPARTIDO);
                        obj_Thread_MAYORCUENTADESCUENTOCOMPARTIDO.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[6] = true;
                    }

                    //CTA_MayorAuxiliar ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayorAuxiliar != null)
                    {
                        ThreadStart obj_ThreadStart_MAYORAUXILIAR = new ThreadStart(Obtener_MayorAuxiliar_Modelo_Obtener);
                        Thread obj_Thread_MAYORAUXILIAR = new Thread(obj_ThreadStart_MAYORAUXILIAR);
                        obj_Thread_MAYORAUXILIAR.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[7] = true;
                    }

                    //CTA_PredefinidosCabecera(Compras) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idPredefinidoCabecera_Compras != null)
                    {
                        ThreadStart obj_ThreadStart_PREDEFINIDOCOMPRAS = new ThreadStart(Obtener_PredefinidoCompras_Modelo_Obtener);
                        Thread obj_Thread_PREDEFINIDOCOMPRAS = new Thread(obj_ThreadStart_PREDEFINIDOCOMPRAS);
                        obj_Thread_PREDEFINIDOCOMPRAS.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[8] = true;
                    }

                    //CTA_PredefinidosCabecera(Pagos) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idPredefinidoCabecera_Pagos != null)
                    {
                        ThreadStart obj_ThreadStart_PREDEFINIDOPAGOS = new ThreadStart(Obtener_PredefinidoPagos_Modelo_Obtener);
                        Thread obj_Thread_PREDEFINIDOPAGOS = new Thread(obj_ThreadStart_PREDEFINIDOPAGOS);
                        obj_Thread_PREDEFINIDOPAGOS.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[9] = true;
                    }

                    //GEN_Empresa ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idEmpresa != null)
                    {
                        ThreadStart obj_ThreadStart_EMPRESA = new ThreadStart(Obtener_Empresa_Modelo_Obtener);
                        Thread obj_Thread_EMPRESA = new Thread(obj_ThreadStart_EMPRESA);
                        obj_Thread_EMPRESA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[10] = true;
                    }

                    //GEN_ImpuestosCabecera ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idImpuestoCabecera != null)
                    {
                        ThreadStart obj_ThreadStart_IMPUESTOSCABECERA = new ThreadStart(Obtener_ImpuestosCabecera_Modelo_Obtener);
                        Thread obj_Thread_IMPUESTOSCABECERA = new Thread(obj_ThreadStart_IMPUESTOSCABECERA);
                        obj_Thread_IMPUESTOSCABECERA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[11] = true;
                    }

                    //GEN_Moneda ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMoneda != null)
                    {
                        ThreadStart obj_ThreadStart_MONEDA = new ThreadStart(Obtener_Moneda_Modelo_Obtener);
                        Thread obj_Thread_MONEDA = new Thread(obj_ThreadStart_MONEDA);
                        obj_Thread_MONEDA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[12] = true;
                    }

                    //MAE_Contactos ##########################################################################################
                    ThreadStart obj_ThreadStart_CONTACTOS = new ThreadStart(Obtener_Contactos_Modelo_Obtener);
                    Thread obj_Thread_CONTACTOS = new Thread(obj_ThreadStart_CONTACTOS);
                    obj_Thread_CONTACTOS.Start();

                    //MAE_FormaPago ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idFormaPago != null)
                    {
                        ThreadStart obj_ThreadStart_FORMAPAGO = new ThreadStart(Obtener_FormaPago_Modelo_Obtener);
                        Thread obj_Thread_FORMAPAGO = new Thread(obj_ThreadStart_FORMAPAGO);
                        obj_Thread_FORMAPAGO.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[14] = true;
                    }

                    //MAE_Tesoreria ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idTesoreria != null)
                    {
                        ThreadStart obj_ThreadStart_TESORERIA = new ThreadStart(Obtener_Tesoreria_Modelo_Obtener);
                        Thread obj_Thread_TESORERIA = new Thread(obj_ThreadStart_TESORERIA);
                        obj_Thread_TESORERIA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[15] = true;
                    }

                    //MAE_Proveedores_AgruapacionesProveedoresLineas ##########################################################################################
                    ThreadStart obj_ThreadStart_PROVEEDORAGRUPACIONPROVEEDORLINEA = new ThreadStart(Obtener_ProveedorAgrupacionProveedorLinea_Modelo_Obtener);
                    Thread obj_Thread_PROVEEDORAGRUPACIONPROVEEDORLINEA = new Thread(obj_ThreadStart_PROVEEDORAGRUPACIONPROVEEDORLINEA);
                    obj_Thread_PROVEEDORAGRUPACIONPROVEEDORLINEA.Start();

                    //MAE_CuentasBancariasSEPA_Pagos ##########################################################################################
                    ThreadStart obj_ThreadStart_CUENTASBANCARIAS = new ThreadStart(Obtener_CuentasBancaris_Modelo_Obtener);
                    Thread obj_Thread_CUENTASBANCARIAS = new Thread(obj_ThreadStart_CUENTASBANCARIAS);
                    obj_Thread_CUENTASBANCARIAS.Start();

                    //SRV_Relacion_ClienteProveedor ##########################################################################################
                    ThreadStart obj_ThreadStart_RELACIONCLIENTEPROVEEDOR = new ThreadStart(Obtener_RelacionClienteProveedor_Modelo_Obtener);
                    Thread obj_Thread_RELACIONCLIENTEPROVEEDOR = new Thread(obj_ThreadStart_RELACIONCLIENTEPROVEEDOR);
                    obj_Thread_RELACIONCLIENTEPROVEEDOR.Start();

                    //GEN_RetencionesTipos ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idRetencionTipo != null)
                    {
                        ThreadStart obj_ThreadStart_RETENCIONTIPO = new ThreadStart(Obtener_RetencionTipo_Modelo_Obtener);
                        Thread obj_Thread_RETENCIONTIPO = new Thread(obj_ThreadStart_RETENCIONTIPO);
                        obj_Thread_RETENCIONTIPO.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[19] = true;
                    }

                    //Esperando a que terminen todos los hilos .........................................
                    bool bol_Termino = false;
                    while (bol_Termino == false)
                    {
                        bol_Termino = true;
                        foreach (bool bol_Termino_Hilo in g_bol_Hilos_Terminados_Obtener)
                        {
                            if (bol_Termino_Hilo == false)
                            {
                                bol_Termino = false;
                                break;
                            }
                        }

                        Thread.Sleep(10);
                    }
                    //.................................................................................
                }
                #endregion
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return g_dnm_Modelo_Obtener;
        }

        #region Tablas Relacionadas
        private void Obtener_Direcciones_Modelo_Obtener()
        {
            try
            {
                g_dnm_Modelo_Obtener.GEN_Direcciones = Datos_Generales.GEN_Direcciones_Obtener_Modelo_Listado_Por_IdProveedor(g_dnm_Modelo_Obtener.id);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[0] = true;
            }
        }
        private void Obtener_Departamento_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTADEPARTAMENTO_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idDepartamento };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_Departamentos = (CTA_Departamentos)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[1] = true;
            }
        }
        private void Obtener_MayorCuentaContable_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAMAYOR_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idMayor_CuentaContable };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_Mayor1 = (CTA_Mayor)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[2] = true;
            }
        }
        private void Obtener_MayorCuentaRemesa_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAMAYOR_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idMayor_CuentaRemesas };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_Mayor3 = (CTA_Mayor)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[3] = true;
            }
        }
        private void Obtener_MayorCuentaContraPartida_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAMAYOR_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idMayor_CuentaContraPartida };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_Mayor2 = (CTA_Mayor)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[4] = true;
            }
        }
        private void Obtener_MayorCuentaRetencion_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAMAYOR_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idMayor_CuentaRetencion };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_Mayor4 = (CTA_Mayor)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[5] = true;
            }
        }
        private void Obtener_MayorCuentaDecuentoCompartido_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAMAYOR_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idMayor_CuentaDescuentosCompartidos };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_Mayor = (CTA_Mayor)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[6] = true;
            }
        }
        private void Obtener_MayorAuxiliar_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAMAYORAUXILIAR_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idMayorAuxiliar };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_MayorAuxiliar = (CTA_MayorAuxiliar)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[7] = true;
            }
        }
        private void Obtener_PredefinidoCompras_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idPredefinidoCabecera_Compras };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_PredefinidosCabeceras = (CTA_PredefinidosCabeceras)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[8] = true;
            }
        }
        private void Obtener_PredefinidoPagos_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idPredefinidoCabecera_Pagos };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.CTA_PredefinidosCabeceras1 = (CTA_PredefinidosCabeceras)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[9] = true;
            }
        }
        private void Obtener_Empresa_Modelo_Obtener()
        {
            try
            {
                g_dnm_Modelo_Obtener.GEN_Empresas = Datos_Generales.GEN_Empresas_Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idEmpresa);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[10] = true;
            }
        }
        private void Obtener_ImpuestosCabecera_Modelo_Obtener()
        {
            try
            {
                g_dnm_Modelo_Obtener.GEN_ImpuestosCabecera = Datos_Generales.GEN_ImpuestosCabecera_Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idImpuestoCabecera);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[11] = true;
            }
        }
        private void Obtener_Moneda_Modelo_Obtener()
        {
            try
            {
                g_dnm_Modelo_Obtener.GEN_Monedas = Datos_Generales.GEN_Monedas_Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idMoneda);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[12] = true;
            }
        }
        private void Obtener_Contactos_Modelo_Obtener()
        {
            try
            {
                MAE_Contactos_Datos obj_MAE_Contactos_Datos = new MAE_Contactos_Datos();
                g_dnm_Modelo_Obtener.Contactos = obj_MAE_Contactos_Datos.Obtener_Interno_ModeloListado_Por_idProveedor(g_dnm_Modelo_Obtener.id);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[13] = true;
            }
        }
        private void Obtener_FormaPago_Modelo_Obtener()
        {
            try
            {
                MAE_FormasPago_Datos obj_MAE_FormasPago_Datos = new MAE_FormasPago_Datos();
                g_dnm_Modelo_Obtener.MAE_FormasPago = obj_MAE_FormasPago_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idFormaPago);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[14] = true;
            }
        }
        private void Obtener_Tesoreria_Modelo_Obtener()
        {
            try
            {
                MAE_Tesorerias_Datos obj_MAE_Tesorerias_Datos = new MAE_Tesorerias_Datos();
                g_dnm_Modelo_Obtener.MAE_Tesorerias = obj_MAE_Tesorerias_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idTesoreria, false, false, false, false, false, false, false, false, false, false);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[15] = true;
            }

        }
        private void Obtener_ProveedorAgrupacionProveedorLinea_Modelo_Obtener()
        {
            try
            {
                MAE_Proveedores_AgrupacionesProveedoresLineas_Datos obj_MAE_Proveedores_AgrupacionesProveedoresLineas_Datos = new MAE_Proveedores_AgrupacionesProveedoresLineas_Datos();
                g_dnm_Modelo_Obtener.MAE_Proveedores_AgrupacionesProveedoresLineas = obj_MAE_Proveedores_AgrupacionesProveedoresLineas_Datos.Obtener_ModeloListado_Por_IdProveedor(g_dnm_Modelo_Obtener.id, true);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[16] = true;
            }
        }
        private void Obtener_CuentasBancaris_Modelo_Obtener()
        {
            try
            {
                MAE_CuentasBancariasSEPA_Pagos_Datos obj_MAE_CuentasBancariasSEPA_Pagos_Datos = new MAE_CuentasBancariasSEPA_Pagos_Datos();
                g_dnm_Modelo_Obtener.CuentasBancarias = obj_MAE_CuentasBancariasSEPA_Pagos_Datos.Obtener_Interno_ModeloListado_Por_idProveedoridEmpresaSeleccionada(g_dnm_Modelo_Obtener.id, g_dnm_Modelo_Obtener.idEmpresa, false, true);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[17] = true;
            }
        }
        private void Obtener_RelacionClienteProveedor_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado ##############################################################################################
                Assembly m_assembly_2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_SERVICIOS + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_2 = m_assembly_2.GetType("" + Variables.G_STR_LIBRERIA_SERVICIOS + "." + Variables.G_STR_LIBRERIA_DATOSSERVICIOS);
                //Creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type_2);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSSERVICIOS_PROCEDIMIENTO_SRVRELACIONCLIENTEPROVEEDOR_OBTENER_LISTADO, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { -1, g_dnm_Modelo_Obtener.id };

                g_dnm_Modelo_Obtener.Relaciones_ClienteProveedor = (List<INTERNO_RelacionClienteProveedor_Modelo>)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[18] = true;
            }
        }
        private void Obtener_RetencionTipo_Modelo_Obtener()
        {
            try
            {
                g_dnm_Modelo_Obtener.GEN_RetencionesTipos = Datos_Generales.GEN_RetencionesTipos_Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idRetencionTipo);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[19] = true;
            }
        }
        #endregion

        #endregion

        public override dynamic Obtener_Registro_PorCampo(string _str_Filtro, string _str_CampoBusqueda, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual)
        {
            throw new NotImplementedException();
        }

        #region Para Bolsa
        public List<long> Obtener_Registros_Para_Bolsa(long _lng_idEmpresaSeleccionada,
                                                       long _lng_idEjercicioActual,
                                                       List<string> _lst_CamposConRelacionABuscar,
                                                       Dictionary<string, object> _dct_ListadoFiltros)
        {
            List<long> lst_listado_ids = null;
            List<INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo> lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo = null;
            Exferia_Entities obj_Exferia_Entities = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Empresas
                List<long> lst_idEmpresa = Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MAE_Proveedores).Name);
                string str_Filtros_Empresas = Funciones.Formar_ContenidoIN_ParaConsultaWhere(lst_idEmpresa);

                //Parametros
                List<SqlParameter> lst_Parametros = new List<SqlParameter>();

                string str_SQL =
                 " SELECT " +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.id) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.id) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.codigo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.codigo) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.razonSocial) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.razonSocial) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.nombreComercial) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.nombreComercial) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.cif) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cif) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.telefono1) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.telefono1) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.telefono2) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.telefono2) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.fax) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fax) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.email) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.email) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.web) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.web) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.registroMercantil) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.registroMercantil) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.observaciones) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.observaciones) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.riesgo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.riesgo) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.descuentoProntoPago) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoProntoPago) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.descuentoGeneral) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoGeneral) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.descuentoFinalFactura) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.descuentoFinalFactura) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.acogidoACriterioCaja) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.acogidoACriterioCaja) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.noDeclararEnInformativas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.noDeclararEnInformativas) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.acreedorArrendamiento) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.acreedorArrendamiento) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.proveedorAcreedor) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.proveedorAcreedor) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.proveedorInterno) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.proveedorInterno) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.cancelarPedidosNoCompletados) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cancelarPedidosNoCompletados) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.imprimirTrazabilidad) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.imprimirTrazabilidad) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.papelPreImpreso) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.papelPreImpreso) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.operadorAduanas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.operadorAduanas) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.cargarEnTerminalyTeleVenta) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.cargarEnTerminalyTeleVenta) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.lineasTotalesImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasTotalesImpresion) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.lineasEnCabeceraImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasEnCabeceraImpresion) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.lineasEnPieImpresion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.lineasEnPieImpresion) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.fechaAlta) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaAlta) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.fechaBaja) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBaja) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.fechaBorrado) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBorrado) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.recargo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.recargo) + "," +
                         //ids
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idEmpresa) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idFormaPago) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idFormaPago) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idImpuestoCabecera) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idImpuestoCabecera) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idMoneda) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMoneda) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idMayor_CuentaContable) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContable) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idMayor_CuentaContraPartida) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContraPartida) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idMayor_CuentaRetencion) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaRetencion) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idMayor_CuentaRemesas) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaRemesas) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idMayor_CuentaDescuentosCompartidos) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaDescuentosCompartidos) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idMayorAuxiliar) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayorAuxiliar) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idTesoreria) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idTesoreria) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idDepartamento) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idDepartamento) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idPredefinidoCabecera_Compras) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idPredefinidoCabecera_Compras) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idPredefinidoCabecera_Pagos) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idPredefinidoCabecera_Pagos) + "," +
                         nameof(INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.idRetencionTipo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idRetencionTipo) +
                    " FROM " + nameof(MAE_Proveedores) +
                    " WHERE " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBorrado) + " IS NULL AND " +
                            " ( " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + "=@idEmpresa " +
                                    (
                                        (lst_idEmpresa != null && lst_idEmpresa.Count > 0)
                                            ? (" OR " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idEmpresa) + " in (" + str_Filtros_Empresas + ") ")
                                            : " "
                                    ) +
                                " ) ";

                //Parametros
                object[] arr_Parametros = new object[]
                {
                    new SqlParameter("@idEmpresa", _lng_idEmpresaSeleccionada)
                };

                //Rellenar el Modelo
                lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo = obj_Exferia_Entities.Database.SqlQuery<INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo>(str_SQL, arr_Parametros).ToList();

                //si no es nulo aplicamos el filtro
                if (lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo != null && lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.Count > 0)
                {
                    //Agrego direcciones
                    Agregar_Direcciones_Para_Bolsa(ref lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo);

                    //Filtro
                    var obj_Devuelto = lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo>(_dct_ListadoFiltros, new ABS_Bolsa_MAE_Proveedores()));
                    if (obj_Devuelto != null && obj_Devuelto.Count() > 0)
                    {
                        lst_listado_ids = obj_Devuelto.Select(m => m.id).ToList();
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_Registros_Para_Bolsa), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return lst_listado_ids;
        }
        private void Agregar_Direcciones_Para_Bolsa(ref List<INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo> _lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo)
        {
            try
            {
                List<long> lst_ids = _lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.Select(m => m.id).ToList();

                //Buscar datos de direccion de envio ##################################################################
                List<GEN_Direcciones> lst_Direcciones_Envio = Datos_Generales.GEN_Direcciones_Obtener_Modelo_Listado_Por_IdsProveedorTipoDireccion(lst_ids,
                                                                                                                                    Variables.G_STR_TIPODIRECCION_ENVIO,
                                                                                                                                    false,
                                                                                                                                    false,
                                                                                                                                    false,
                                                                                                                                    false,
                                                                                                                                    false);


                //######################################################################################

                //Buscar datos de direccion de fACTURACION ##################################################################
                List<GEN_Direcciones> lst_Direcciones_Facturacion = Datos_Generales.GEN_Direcciones_Obtener_Modelo_Listado_Por_IdsProveedorTipoDireccion(lst_ids,
                                                                                                                                    Variables.G_STR_TIPODIRECCION_FACTURACION,
                                                                                                                                        false,
                                                                                                                                        false,
                                                                                                                                        false,
                                                                                                                                        false,
                                                                                                                                        false);


                //######################################################################################

                //Buscar datos de direccion de Fiscal ##################################################################
                List<GEN_Direcciones> lst_Direcciones_Fiscal = Datos_Generales.GEN_Direcciones_Obtener_Modelo_Listado_Por_IdsProveedorTipoDireccion(lst_ids,
                                                                                                                                    Variables.G_STR_TIPODIRECCION_FISCAL,
                                                                                                                                    false,
                                                                                                                                    false,
                                                                                                                                    false,
                                                                                                                                    false,
                                                                                                                                    false);


                //######################################################################################


                //Rellenar el Listado
                foreach (INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo mdl_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo in _lst_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo)
                {
                    //Direccion de Envio
                    if (lst_Direcciones_Envio != null &&
                        lst_Direcciones_Envio.Count > 0)
                    {
                        mdl_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.DireccionEnvio = lst_Direcciones_Envio.Where(m => m.idProveedor != null && m.idProveedor.Value.Equals(mdl_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.id)).FirstOrDefault();
                    }

                    //Direccion de Facturacion
                    if (lst_Direcciones_Facturacion != null &&
                        lst_Direcciones_Facturacion.Count > 0)
                    {
                        mdl_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.DireccionFacturacion = lst_Direcciones_Facturacion.Where(m => m.idProveedor != null && m.idProveedor.Value.Equals(mdl_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.id)).FirstOrDefault();
                    }

                    //Direccion de Fiscal
                    if (lst_Direcciones_Fiscal != null &&
                        lst_Direcciones_Fiscal.Count > 0)
                    {
                        mdl_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.DireccionFiscal = lst_Direcciones_Fiscal.Where(m => m.idProveedor != null && m.idProveedor.Value.Equals(mdl_INTERNO_MAE_Proveedores_Bolsa_Listado_Modelo.id)).FirstOrDefault();
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Agregar_Direcciones_Para_Bolsa), true);
            }
        }
        #endregion

        public long? Obtener_IdMayor_CuentaContable(long _lng_id)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            long? lng_idMayor_CuentaContable = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                string str_SQL =
                " SELECT " +
                        nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.idMayor_CuentaContable) +
                        
                " FROM " + nameof(MAE_Proveedores) +
                " WHERE " + nameof(MAE_Proveedores.fechaBorrado) + " IS NULL AND " +
                           nameof(MAE_Proveedores.id) + "=@id ";

                //Parametros
                object[] arr_Parametros = new object[]
                {
                     new SqlParameter("@id",  _lng_id)
                };

                //Rellenar el Modelo
                lng_idMayor_CuentaContable = obj_Exferia_Entities.Database.SqlQuery<long?>(str_SQL, arr_Parametros).FirstOrDefault();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_IdMayor_CuentaContable), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return lng_idMayor_CuentaContable;
        }

        #endregion

        #region Para Listado
        public List<INTERNO_MAE_Proveedores_ListadoSimple_Modelo> Obtener_ParaListadoSimple()
        {
            List<INTERNO_MAE_Proveedores_ListadoSimple_Modelo> lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo = null;
            Exferia_Entities obj_Exferia_Entities = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                string str_SQL =
                 " SELECT " +
                         nameof(INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Id) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.id) + "," +
                         nameof(INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Codigo) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.codigo) + "," +
                         nameof(INTERNO_MAE_Proveedores_ListadoSimple_Modelo.RazonSocial) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.razonSocial) + "," +
                         nameof(INTERNO_MAE_Proveedores_ListadoSimple_Modelo.NombreComercial) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.nombreComercial) + "," +
                         nameof(INTERNO_MAE_Proveedores_ListadoSimple_Modelo.FechaBaja) + " = " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBaja) + "," +
                         nameof(INTERNO_MAE_Proveedores_ListadoSimple_Modelo.Bolsa) + " = (CASE WHEN MAE_Proveedores_Bolsa_Filtrado." + nameof(MAE_Proveedores_Bolsa.id) + " > -1 THEN convert(bit,1) ELSE convert(bit,0) END) " +
                    " FROM " + nameof(MAE_Proveedores) +
                    //PROVEEDOR_BOLSA
                    " LEFT JOIN ( " +
                            "SELECT " +
                                nameof(MAE_Proveedores_Bolsa) + "." + nameof(MAE_Proveedores_Bolsa.id) + "," +
                                nameof(MAE_Proveedores_Bolsa) + "." + nameof(MAE_Proveedores_Bolsa.idUsuario) + "," +
                                nameof(MAE_Proveedores_Bolsa) + "." + nameof(MAE_Proveedores_Bolsa.idProveedor) +
                            " FROM " + nameof(MAE_Proveedores_Bolsa) +
                            " WHERE " + nameof(MAE_Proveedores_Bolsa) + "." + nameof(MAE_Proveedores_Bolsa.idUsuario) + "=" + Variables.G_MDL_USUARIOVALIDADO_MODELO.id +
                            " ) AS MAE_Proveedores_Bolsa_Filtrado ON MAE_Proveedores_Bolsa_Filtrado." + nameof(MAE_Proveedores_Bolsa.idProveedor) + "=" + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.id) +
                    " WHERE " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.fechaBorrado) + " IS NULL ";

                //Rellenar el Modelo
                lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo = obj_Exferia_Entities.Database.SqlQuery<INTERNO_MAE_Proveedores_ListadoSimple_Modelo>(str_SQL).ToList();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_ParaListadoSimple), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return lst_INTERNO_MAE_Proveedores_ListadoSimple_Modelo;
        }

        #endregion

        #region MODELOS

        #region Modelo Simple
        private MAE_Proveedores g_mdl_MAE_Proveedores = null;
        public MAE_Proveedores Obtener_Modelo_Por_Id(long _lng_id,
                                                     bool _bol_Cargar_Empresa,
                                                     bool _bol_Cargar_FormaPago,
                                                     bool _bol_Cargar_ImpuestosCabecera,
                                                     bool _bol_Cargar_Moneda,
                                                     bool _bol_Cargar_Direcciones,
                                                     bool _bol_Cargar_PredefinidoCabecera,
                                                     bool _bol_Cargar_RetencionTipo)
        {
            try
            {
                string str_SQL = Obtener_Consulta_Modelo() +
                                 //WHERE
                                 " WHERE " + nameof(MAE_Proveedores) + "." + nameof(MAE_Proveedores.id) + "=@id";

                //Parametros
                object[] arr_Parametros = new object[]
                {
                     new SqlParameter("@id",  _lng_id)
                };

                //Ejecutar y rellenar el modelo
                Ejecutar_Consulta_Modelo(str_SQL,
                                         arr_Parametros,
                                         _bol_Cargar_Empresa,
                                         _bol_Cargar_FormaPago,
                                         _bol_Cargar_ImpuestosCabecera,
                                         _bol_Cargar_Moneda,
                                         _bol_Cargar_Direcciones,
                                         _bol_Cargar_PredefinidoCabecera,
                                         _bol_Cargar_RetencionTipo);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_Modelo_Por_Id), true);
            }

            return g_mdl_MAE_Proveedores;
        }

        #region Ejecutar Consulta
        private static int g_int_TotalHilos_Modelo = 8;
        private bool[] g_bol_Hilos_Terminados_Modelo = new bool[g_int_TotalHilos_Modelo];


        private void Ejecutar_Consulta_Modelo(string _str_SQL,
                                          object[] _arr_Parametros,
                                          bool _bol_Cargar_Empresa,
                                          bool _bol_Cargar_FormaPago,
                                          bool _bol_Cargar_ImpuestosCabecera,
                                          bool _bol_Cargar_Moneda,
                                          bool _bol_Cargar_Direcciones,
                                          bool _bol_Cargar_PredefinidoCabecera,
                                          bool _bol_Cargar_RetencionTipo)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            try
            {
                //Conexion
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                g_mdl_MAE_Proveedores = obj_Exferia_Entities.Database.SqlQuery<MAE_Proveedores>(_str_SQL, _arr_Parametros).FirstOrDefault();

                #region Rellenar tablas Relacionadas
                if (g_mdl_MAE_Proveedores != null)
                {
                    //reiniciar Valores de los hilos
                    for (int int_Contador = 0; int_Contador < g_int_TotalHilos_Modelo; int_Contador++)
                    {
                        g_bol_Hilos_Terminados_Modelo[int_Contador] = false;
                    }

                    //GEN_Empresa ##########################################################################################
                    if (_bol_Cargar_Empresa)
                    {
                        ThreadStart obj_ThreadStart_EMPRESA = new ThreadStart(Obtener_Empresa_Modelo);
                        Thread obj_Thread_EMPRESA = new Thread(obj_ThreadStart_EMPRESA);
                        obj_Thread_EMPRESA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Modelo[0] = true;
                    }

                    //MAE_FormaPago ##########################################################################################
                    if (_bol_Cargar_FormaPago)
                    {
                        ThreadStart obj_ThreadStart_FORMAPAGO = new ThreadStart(Obtener_FormaPago_Modelo);
                        Thread obj_Thread_FORMAPAGO = new Thread(obj_ThreadStart_FORMAPAGO);
                        obj_Thread_FORMAPAGO.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Modelo[1] = true;
                    }

                    //GEN_ImpuestosCabecera ##########################################################################################
                    if (_bol_Cargar_ImpuestosCabecera)
                    {
                        ThreadStart obj_ThreadStart_IMPUESTOSCABECERA = new ThreadStart(Obtener_ImpuestosCabecera_Modelo);
                        Thread obj_Thread_IMPUESTOSCABECERA = new Thread(obj_ThreadStart_IMPUESTOSCABECERA);
                        obj_Thread_IMPUESTOSCABECERA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Modelo[2] = true;
                    }

                    //GEN_Moneda ##########################################################################################
                    if (_bol_Cargar_Moneda)
                    {
                        ThreadStart obj_ThreadStart_MONEDA = new ThreadStart(Obtener_Moneda_Modelo);
                        Thread obj_Thread_MONEDA = new Thread(obj_ThreadStart_MONEDA);
                        obj_Thread_MONEDA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Modelo[3] = true;
                    }

                    //GEN_Direcciones ##########################################################################################
                    if (_bol_Cargar_Direcciones)
                    {
                        ThreadStart obj_ThreadStart_DIRECCIONES = new ThreadStart(Obtener_Direcciones_Modelo);
                        Thread obj_Thread_DIRECCIONES = new Thread(obj_ThreadStart_DIRECCIONES);
                        obj_Thread_DIRECCIONES.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Modelo[4] = true;
                    }

                    //CTA_PredefinidosCabecera ##########################################################################################
                    if (_bol_Cargar_PredefinidoCabecera)
                    {
                        //Compras
                        if (g_mdl_MAE_Proveedores.idPredefinidoCabecera_Compras!=null)
                        {
                            ThreadStart obj_ThreadStart_PREDEFINIDOCABECERACOMPRAS = new ThreadStart(Obtener_PredefinidoCabecera_Compras_Modelo);
                            Thread obj_Thread_PREDEFINIDOCABECERACOMPRAS = new Thread(obj_ThreadStart_PREDEFINIDOCABECERACOMPRAS);
                            obj_Thread_PREDEFINIDOCABECERACOMPRAS.Start();
                        }
                        else
                        {
                            g_bol_Hilos_Terminados_Modelo[5] = true;
                        }

                        //Pagos
                        if (g_mdl_MAE_Proveedores.idPredefinidoCabecera_Pagos != null)
                        {
                            ThreadStart obj_ThreadStart_PREDEFINIDOCABECERAPAGOS = new ThreadStart(Obtener_PredefinidoCabecera_Pagos_Modelo);
                            Thread obj_Thread_PREDEFINIDOCABECERAPAGOS = new Thread(obj_ThreadStart_PREDEFINIDOCABECERAPAGOS);
                            obj_Thread_PREDEFINIDOCABECERAPAGOS.Start();
                        }
                        else
                        {
                            g_bol_Hilos_Terminados_Modelo[6] = true;
                        }
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Modelo[5] = true;
                        g_bol_Hilos_Terminados_Modelo[6] = true;
                    }

                    //GEN_Direcciones ##########################################################################################
                    if (_bol_Cargar_RetencionTipo &&
                        g_mdl_MAE_Proveedores.idRetencionTipo!=null)
                    {
                        ThreadStart obj_ThreadStart_RETENCIONTIPO = new ThreadStart(Obtener_RetencionTipo_Modelo);
                        Thread obj_Thread_RETENCIONTIPO = new Thread(obj_ThreadStart_RETENCIONTIPO);
                        obj_Thread_RETENCIONTIPO.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Modelo[7] = true;
                    }

                    //Esperando a que terminen todos los hilos .........................................
                    bool bol_Termino = false;
                    while (bol_Termino == false)
                    {
                        bol_Termino = true;
                        foreach (bool bol_Termino_Hilo in g_bol_Hilos_Terminados_Modelo)
                        {
                            if (bol_Termino_Hilo == false)
                            {
                                bol_Termino = false;
                                break;
                            }
                        }

                        Thread.Sleep(10);
                    }
                    //.................................................................................
                }
                #endregion
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Ejecutar_Consulta_Modelo), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
        }

        #region Tablas Relacionadas
        private void Obtener_Empresa_Modelo()
        {
            try
            {
                g_mdl_MAE_Proveedores.GEN_Empresas = Datos_Generales.GEN_Empresas_Obtener_Modelo_Por_Id(g_mdl_MAE_Proveedores.idEmpresa);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[0] = true;
            }
        }
        private void Obtener_FormaPago_Modelo()
        {
            try
            {
                MAE_FormasPago_Datos obj_MAE_FormasPago_Datos = new MAE_FormasPago_Datos();
                g_mdl_MAE_Proveedores.MAE_FormasPago = obj_MAE_FormasPago_Datos.Obtener_Modelo_Por_Id(g_mdl_MAE_Proveedores.idFormaPago);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[1] = true;
            }
        }
        private void Obtener_ImpuestosCabecera_Modelo()
        {
            try
            {
                g_mdl_MAE_Proveedores.GEN_ImpuestosCabecera = Datos_Generales.GEN_ImpuestosCabecera_Obtener_Modelo_Por_Id(g_mdl_MAE_Proveedores.idImpuestoCabecera);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[2] = true;
            }
        }
        private void Obtener_Moneda_Modelo()
        {
            try
            {
                g_mdl_MAE_Proveedores.GEN_Monedas = Datos_Generales.GEN_Monedas_Obtener_Modelo_Por_Id(g_mdl_MAE_Proveedores.idMoneda);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[3] = true;
            }
        }
        private void Obtener_Direcciones_Modelo()
        {
            try
            {
                g_mdl_MAE_Proveedores.GEN_Direcciones = Datos_Generales.GEN_Direcciones_Obtener_Modelo_Listado_Por_IdProveedor(g_mdl_MAE_Proveedores.id);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[4] = true;
            }
        }
        private void Obtener_PredefinidoCabecera_Compras_Modelo()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_mdl_MAE_Proveedores.idPredefinidoCabecera_Compras.Value };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_mdl_MAE_Proveedores.CTA_PredefinidosCabeceras = (CTA_PredefinidosCabeceras)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[5] = true;
            }
        }
        private void Obtener_PredefinidoCabecera_Pagos_Modelo()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_mdl_MAE_Proveedores.idPredefinidoCabecera_Pagos.Value };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_mdl_MAE_Proveedores.CTA_PredefinidosCabeceras1 = (CTA_PredefinidosCabeceras)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[6] = true;
            }
        }
        private void Obtener_RetencionTipo_Modelo()
        {
            try
            {
                g_mdl_MAE_Proveedores.GEN_RetencionesTipos = Datos_Generales.GEN_RetencionesTipos_Obtener_Modelo_Por_Id(g_mdl_MAE_Proveedores.idRetencionTipo.Value);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[7] = true;
            }
        }
        #endregion

        #endregion

        #endregion

        #region Modelo Listado
        private List<MAE_Proveedores> g_lst_MAE_Proveedores = null;
        public List<MAE_Proveedores> Obtener_ModeloListado_Por_Ids(List<long> _lst_Ids)
        {
            try
            {
                if (_lst_Ids != null && _lst_Ids.Count > 0)
                {
                    string str_Filtro_IDS = Funciones.Formar_ContenidoIN_ParaConsultaWhere(nameof(MAE_Proveedores),
                                                                                             nameof(MAE_Proveedores.id),
                                                                                             G_ENUM_FORMARCONTENIDOIN_CONDICIONANTES.NADA,
                                                                                             _lst_Ids);

                    //Consulta
                    string str_SQL = Obtener_Consulta_Modelo() +
                                                " WHERE " +
                                                    str_Filtro_IDS;

                    //Ejecutar y rellenar el listado
                    Ejecutar_Consulta_Modelo_Listado(str_SQL,
                                                     new object[] { });

                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Obtener_ModeloListado_Por_Ids), true);
            }

            return g_lst_MAE_Proveedores;
        }

        #region Ejecutar Consulta
        private void Ejecutar_Consulta_Modelo_Listado(string _str_SQL,
                                                    object[] _arr_Parametros)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            try
            {
                //Conexion
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;


                //Rellenar el modelo
                g_lst_MAE_Proveedores = obj_Exferia_Entities.Database.SqlQuery<MAE_Proveedores>(_str_SQL, _arr_Parametros).ToList();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Ejecutar_Consulta_Modelo_Listado), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
        }

        #endregion
        #endregion

        private string Obtener_Consulta_Modelo()
        {
            return
                " SELECT " +
                    nameof(MAE_Proveedores.id) + " , " +
                    nameof(MAE_Proveedores.codigo) + " , " +
                    nameof(MAE_Proveedores.razonSocial) + " , " +
                    nameof(MAE_Proveedores.nombreComercial) + " , " +
                    nameof(MAE_Proveedores.idEmpresa) + " , " +
                    nameof(MAE_Proveedores.idFormaPago) + " , " +
                    nameof(MAE_Proveedores.idImpuestoCabecera) + " , " +
                    nameof(MAE_Proveedores.idMoneda) + " , " +
                    nameof(MAE_Proveedores.idMayor_CuentaContable) + " , " +
                    nameof(MAE_Proveedores.idMayor_CuentaContraPartida) + " , " +
                    nameof(MAE_Proveedores.idMayor_CuentaRetencion) + " , " +
                    nameof(MAE_Proveedores.idMayor_CuentaRemesas) + " , " +
                    nameof(MAE_Proveedores.idMayor_CuentaDescuentosCompartidos) + " , " +
                    nameof(MAE_Proveedores.idMayorAuxiliar) + " , " +
                    nameof(MAE_Proveedores.idTesoreria) + " , " +
                    nameof(MAE_Proveedores.idDepartamento) + " , " +
                    nameof(MAE_Proveedores.idRetencionTipo) + " , " +
                    nameof(MAE_Proveedores.cif) + " , " +
                    nameof(MAE_Proveedores.telefono1) + " , " +
                    nameof(MAE_Proveedores.telefono2) + " , " +
                    nameof(MAE_Proveedores.fax) + " , " +
                    nameof(MAE_Proveedores.email) + " , " +
                    nameof(MAE_Proveedores.web) + " , " +
                    nameof(MAE_Proveedores.registroMercantil) + " , " +
                    nameof(MAE_Proveedores.observaciones) + " , " +
                    nameof(MAE_Proveedores.riesgo) + " , " +
                    nameof(MAE_Proveedores.descuentoProntoPago) + " , " +
                    nameof(MAE_Proveedores.descuentoGeneral) + " , " +
                    nameof(MAE_Proveedores.descuentoFinalFactura) + " , " +
                    nameof(MAE_Proveedores.acreedorArrendamiento) + " , " +
                    nameof(MAE_Proveedores.noDeclararEnInformativas) + " , " +
                    nameof(MAE_Proveedores.acogidoACriterioCaja) + " , " +
                    nameof(MAE_Proveedores.proveedorAcreedor) + " , " +
                    nameof(MAE_Proveedores.proveedorInterno) + " , " +
                    nameof(MAE_Proveedores.cancelarPedidosNoCompletados) + " , " +
                    nameof(MAE_Proveedores.imprimirTrazabilidad) + " , " +
                    nameof(MAE_Proveedores.papelPreImpreso) + " , " +
                    nameof(MAE_Proveedores.operadorAduanas) + " , " +
                    nameof(MAE_Proveedores.cargarEnTerminalyTeleVenta) + " , " +
                    nameof(MAE_Proveedores.lineasTotalesImpresion) + " , " +
                    nameof(MAE_Proveedores.lineasEnCabeceraImpresion) + " , " +
                    nameof(MAE_Proveedores.lineasEnPieImpresion) + " , " +
                    nameof(MAE_Proveedores.fechaAlta) + " , " +
                    nameof(MAE_Proveedores.fechaBaja) + " , " +
                    nameof(MAE_Proveedores.idPredefinidoCabecera_Compras) + " , " +
                    nameof(MAE_Proveedores.idPredefinidoCabecera_Pagos) + " , " +
                    nameof(MAE_Proveedores.fechaBorrado) + " , " +
                    nameof(MAE_Proveedores.recargo) + 
                " FROM " + nameof(MAE_Proveedores);
        }
        #endregion

        #region Grabar
        public override INTERNO_ValorDevuelto_Modelo Grabar(object _mdl_obj)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                MAE_Proveedores mdl_MAE_Proveedores_AGrabar = (MAE_Proveedores)_mdl_obj;
                MAE_Proveedores mdl_MAE_Proveedores_DatosViejos = new MAE_Proveedores();

                // Ver si existe ######################################################################
                MAE_Proveedores mdl_MAE_Proveedores_Final = Obtener_Modelo_Por_Id(mdl_MAE_Proveedores_AGrabar.id, false, false, false,false,false,false,false);
                //#####################################################################################

                //UPDATE
                if (mdl_MAE_Proveedores_Final != null)
                {
                    //Tipo de Accion que se va a realizar
                    mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_MODIFICAR;

                    //Datos viejos para la trazabilidad
                    Funciones.CopiarPropiedadesObjetos(mdl_MAE_Proveedores_Final, mdl_MAE_Proveedores_DatosViejos, false, false);

                    // Cargar los Datos Nuevos del Modelo
                    Funciones.CopiarPropiedadesObjetos(mdl_MAE_Proveedores_AGrabar, mdl_MAE_Proveedores_Final, false, false);

                    #region Update
                    string str_SQL_Update = " UPDATE " + nameof(MAE_Proveedores) +
                                            " SET " +
                                                nameof(MAE_Proveedores.codigo) + "=@codigo, " +
                                                nameof(MAE_Proveedores.razonSocial) + "=@razonSocial, " +
                                                nameof(MAE_Proveedores.nombreComercial) + "=@nombreComercial, " +
                                                nameof(MAE_Proveedores.idEmpresa) + "=@idEmpresa, " +
                                                nameof(MAE_Proveedores.idFormaPago) + "=@idFormaPago, " +
                                                nameof(MAE_Proveedores.idImpuestoCabecera) + "=@idImpuestoCabecera, " +
                                                nameof(MAE_Proveedores.idMoneda) + "=@idMoneda, " +
                                                nameof(MAE_Proveedores.idMayor_CuentaContable) + "=@idMayor_CuentaContable, " +
                                                nameof(MAE_Proveedores.idMayor_CuentaContraPartida) + "=@idMayor_CuentaContraPartida, " +
                                                nameof(MAE_Proveedores.idMayor_CuentaRetencion) + "=@idMayor_CuentaRetencion, " +
                                                nameof(MAE_Proveedores.idMayor_CuentaRemesas) + "=@idMayor_CuentaRemesas, " +
                                                nameof(MAE_Proveedores.idMayor_CuentaDescuentosCompartidos) + "=@idMayor_CuentaDescuentosCompartidos, " +
                                                nameof(MAE_Proveedores.idMayorAuxiliar) + "=@idMayorAuxiliar, " +
                                                nameof(MAE_Proveedores.idTesoreria) + "=@idTesoreria, " +
                                                nameof(MAE_Proveedores.idDepartamento) + "=@idDepartamento, " +
                                                nameof(MAE_Proveedores.cif) + "=@cif, " +
                                                nameof(MAE_Proveedores.telefono1) + "=@telefono1, " +
                                                nameof(MAE_Proveedores.telefono2) + "=@telefono2, " +
                                                nameof(MAE_Proveedores.fax) + "=@fax, " +
                                                nameof(MAE_Proveedores.email) + "=@email, " +
                                                nameof(MAE_Proveedores.web) + "=@web, " +
                                                nameof(MAE_Proveedores.registroMercantil) + "=@registroMercantil, " +
                                                nameof(MAE_Proveedores.observaciones) + "=@observaciones, " +
                                                nameof(MAE_Proveedores.riesgo) + "=@riesgo, " +
                                                nameof(MAE_Proveedores.descuentoProntoPago) + "=@descuentoProntoPago, " +
                                                nameof(MAE_Proveedores.descuentoGeneral) + "=@descuentoGeneral, " +
                                                nameof(MAE_Proveedores.descuentoFinalFactura) + "=@descuentoFinalFactura, " +
                                                nameof(MAE_Proveedores.idRetencionTipo) + "=@idRetencionTipo, " +
                                                nameof(MAE_Proveedores.acreedorArrendamiento) + "=@acreedorArrendamiento, " +
                                                nameof(MAE_Proveedores.noDeclararEnInformativas) + "=@noDeclararEnInformativas, " +
                                                nameof(MAE_Proveedores.acogidoACriterioCaja) + "=@acogidoACriterioCaja, " +
                                                nameof(MAE_Proveedores.proveedorAcreedor) + "=@proveedorAcreedor, " +
                                                nameof(MAE_Proveedores.proveedorInterno) + "=@proveedorInterno, " +
                                                nameof(MAE_Proveedores.cancelarPedidosNoCompletados) + "=@cancelarPedidosNoCompletados, " +
                                                nameof(MAE_Proveedores.imprimirTrazabilidad) + "=@imprimirTrazabilidad, " +
                                                nameof(MAE_Proveedores.papelPreImpreso) + "=@papelPreImpreso, " +
                                                nameof(MAE_Proveedores.operadorAduanas) + "=@operadorAduanas, " +
                                                nameof(MAE_Proveedores.cargarEnTerminalyTeleVenta) + "=@cargarEnTerminalyTeleVenta, " +
                                                nameof(MAE_Proveedores.lineasTotalesImpresion) + "=@lineasTotalesImpresion, " +
                                                nameof(MAE_Proveedores.lineasEnCabeceraImpresion) + "=@lineasEnCabeceraImpresion, " +
                                                nameof(MAE_Proveedores.lineasEnPieImpresion) + "=@lineasEnPieImpresion, " +
                                                nameof(MAE_Proveedores.fechaAlta) + "=@fechaAlta, " +
                                                nameof(MAE_Proveedores.fechaBaja) + "=@fechaBaja, " +
                                                nameof(MAE_Proveedores.idPredefinidoCabecera_Compras) + "=@idPredefinidoCabecera_Compras, " +
                                                nameof(MAE_Proveedores.idPredefinidoCabecera_Pagos) + "=@idPredefinidoCabecera_Pagos, " +
                                                nameof(MAE_Proveedores.fechaBorrado) + "=@fechaBorrado, " +
                                                nameof(MAE_Proveedores.recargo) + "=@recargo " +
                                            " WHERE " +
                                                nameof(MAE_Proveedores.id) + "=@id";
                    //Parametros
                    object[] arr_Parametros_Update = new object[]
                    {
                        new SqlParameter("@codigo",  mdl_MAE_Proveedores_Final.codigo),
                        new SqlParameter("@razonSocial",  mdl_MAE_Proveedores_Final.razonSocial),
                        new SqlParameter("@nombreComercial",  mdl_MAE_Proveedores_Final.nombreComercial),
                        new SqlParameter("@idEmpresa",  mdl_MAE_Proveedores_Final.idEmpresa),
                        new SqlParameter("@idFormaPago",  mdl_MAE_Proveedores_Final.idFormaPago),
                        new SqlParameter("@idImpuestoCabecera",  mdl_MAE_Proveedores_Final.idImpuestoCabecera),
                        new SqlParameter("@idMoneda",  mdl_MAE_Proveedores_Final.idMoneda),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaContable != null
                            ?   new SqlParameter("@idMayor_CuentaContable", mdl_MAE_Proveedores_Final.idMayor_CuentaContable.Value)
                            :   new SqlParameter("@idMayor_CuentaContable",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaContraPartida != null
                            ?   new SqlParameter("@idMayor_CuentaContraPartida", mdl_MAE_Proveedores_Final.idMayor_CuentaContraPartida.Value)
                            :   new SqlParameter("@idMayor_CuentaContraPartida",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaRetencion != null
                            ?   new SqlParameter("@idMayor_CuentaRetencion", mdl_MAE_Proveedores_Final.idMayor_CuentaRetencion.Value)
                            :   new SqlParameter("@idMayor_CuentaRetencion",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaRemesas != null
                            ?   new SqlParameter("@idMayor_CuentaRemesas", mdl_MAE_Proveedores_Final.idMayor_CuentaRemesas.Value)
                            :   new SqlParameter("@idMayor_CuentaRemesas",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaDescuentosCompartidos != null
                            ?   new SqlParameter("@idMayor_CuentaDescuentosCompartidos", mdl_MAE_Proveedores_Final.idMayor_CuentaDescuentosCompartidos.Value)
                            :   new SqlParameter("@idMayor_CuentaDescuentosCompartidos",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayorAuxiliar != null
                            ?   new SqlParameter("@idMayorAuxiliar", mdl_MAE_Proveedores_Final.idMayorAuxiliar.Value)
                            :   new SqlParameter("@idMayorAuxiliar",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idTesoreria != null
                            ?   new SqlParameter("@idTesoreria", mdl_MAE_Proveedores_Final.idTesoreria.Value)
                            :   new SqlParameter("@idTesoreria",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idDepartamento != null
                            ?   new SqlParameter("@idDepartamento", mdl_MAE_Proveedores_Final.idDepartamento.Value)
                            :   new SqlParameter("@idDepartamento",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.cif != null
                            ?   new SqlParameter("@cif", mdl_MAE_Proveedores_Final.cif)
                            :   new SqlParameter("@cif",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.telefono1 != null
                            ?   new SqlParameter("@telefono1", mdl_MAE_Proveedores_Final.telefono1)
                            :   new SqlParameter("@telefono1",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.telefono2 != null
                            ?   new SqlParameter("@telefono2", mdl_MAE_Proveedores_Final.telefono2)
                            :   new SqlParameter("@telefono2",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.fax != null
                            ?   new SqlParameter("@fax", mdl_MAE_Proveedores_Final.fax)
                            :   new SqlParameter("@fax",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.email != null
                            ?   new SqlParameter("@email", mdl_MAE_Proveedores_Final.email)
                            :   new SqlParameter("@email",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.web != null
                            ?   new SqlParameter("@web", mdl_MAE_Proveedores_Final.web)
                            :   new SqlParameter("@web",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.registroMercantil != null
                            ?   new SqlParameter("@registroMercantil", mdl_MAE_Proveedores_Final.registroMercantil)
                            :   new SqlParameter("@registroMercantil",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.observaciones != null
                            ?   new SqlParameter("@observaciones", mdl_MAE_Proveedores_Final.observaciones)
                            :   new SqlParameter("@observaciones",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.riesgo != null
                            ?   new SqlParameter("@riesgo", mdl_MAE_Proveedores_Final.riesgo.Value)
                            :   new SqlParameter("@riesgo",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.descuentoProntoPago != null
                            ?   new SqlParameter("@descuentoProntoPago", mdl_MAE_Proveedores_Final.descuentoProntoPago.Value)
                            :   new SqlParameter("@descuentoProntoPago",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.descuentoGeneral != null
                            ?   new SqlParameter("@descuentoGeneral", mdl_MAE_Proveedores_Final.descuentoGeneral.Value)
                            :   new SqlParameter("@descuentoGeneral",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.descuentoFinalFactura != null
                            ?   new SqlParameter("@descuentoFinalFactura", mdl_MAE_Proveedores_Final.descuentoFinalFactura.Value)
                            :   new SqlParameter("@descuentoFinalFactura",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idRetencionTipo != null
                            ?   new SqlParameter("@idRetencionTipo", mdl_MAE_Proveedores_Final.idRetencionTipo.Value)
                            :   new SqlParameter("@idRetencionTipo",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.acreedorArrendamiento != null
                            ?   new SqlParameter("@acreedorArrendamiento", mdl_MAE_Proveedores_Final.acreedorArrendamiento.Value)
                            :   new SqlParameter("@acreedorArrendamiento",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.noDeclararEnInformativas != null
                            ?   new SqlParameter("@noDeclararEnInformativas", mdl_MAE_Proveedores_Final.noDeclararEnInformativas.Value)
                            :   new SqlParameter("@noDeclararEnInformativas",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.acogidoACriterioCaja != null
                            ?   new SqlParameter("@acogidoACriterioCaja", mdl_MAE_Proveedores_Final.acogidoACriterioCaja.Value)
                            :   new SqlParameter("@acogidoACriterioCaja",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.proveedorAcreedor != null
                            ?   new SqlParameter("@proveedorAcreedor", mdl_MAE_Proveedores_Final.proveedorAcreedor.Value)
                            :   new SqlParameter("@proveedorAcreedor",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.proveedorInterno != null
                            ?   new SqlParameter("@proveedorInterno", mdl_MAE_Proveedores_Final.proveedorInterno.Value)
                            :   new SqlParameter("@proveedorInterno",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.cancelarPedidosNoCompletados != null
                            ?   new SqlParameter("@cancelarPedidosNoCompletados", mdl_MAE_Proveedores_Final.cancelarPedidosNoCompletados.Value)
                            :   new SqlParameter("@cancelarPedidosNoCompletados",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.imprimirTrazabilidad != null
                            ?   new SqlParameter("@imprimirTrazabilidad", mdl_MAE_Proveedores_Final.imprimirTrazabilidad.Value)
                            :   new SqlParameter("@imprimirTrazabilidad",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.papelPreImpreso != null
                            ?   new SqlParameter("@papelPreImpreso", mdl_MAE_Proveedores_Final.papelPreImpreso.Value)
                            :   new SqlParameter("@papelPreImpreso",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.operadorAduanas != null
                            ?   new SqlParameter("@operadorAduanas", mdl_MAE_Proveedores_Final.operadorAduanas.Value)
                            :   new SqlParameter("@operadorAduanas",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.cargarEnTerminalyTeleVenta != null
                            ?   new SqlParameter("@cargarEnTerminalyTeleVenta", mdl_MAE_Proveedores_Final.cargarEnTerminalyTeleVenta)
                            :   new SqlParameter("@cargarEnTerminalyTeleVenta",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.lineasTotalesImpresion != null
                            ?   new SqlParameter("@lineasTotalesImpresion", mdl_MAE_Proveedores_Final.lineasTotalesImpresion.Value)
                            :   new SqlParameter("@lineasTotalesImpresion",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.lineasEnPieImpresion != null
                            ?   new SqlParameter("@lineasEnPieImpresion", mdl_MAE_Proveedores_Final.lineasEnPieImpresion.Value)
                            :   new SqlParameter("@lineasEnPieImpresion",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.lineasEnCabeceraImpresion != null
                            ?   new SqlParameter("@lineasEnCabeceraImpresion", mdl_MAE_Proveedores_Final.lineasEnCabeceraImpresion.Value)
                            :   new SqlParameter("@lineasEnCabeceraImpresion",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.fechaAlta != null
                            ?   new SqlParameter("@fechaAlta", mdl_MAE_Proveedores_Final.fechaAlta.Value)
                            :   new SqlParameter("@fechaAlta",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.fechaBaja != null
                            ?   new SqlParameter("@fechaBaja", mdl_MAE_Proveedores_Final.fechaBaja.Value)
                            :   new SqlParameter("@fechaBaja",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idPredefinidoCabecera_Compras != null
                            ?   new SqlParameter("@idPredefinidoCabecera_Compras", mdl_MAE_Proveedores_Final.idPredefinidoCabecera_Compras.Value)
                            :   new SqlParameter("@idPredefinidoCabecera_Compras",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idPredefinidoCabecera_Pagos != null
                            ?   new SqlParameter("@idPredefinidoCabecera_Pagos", mdl_MAE_Proveedores_Final.idPredefinidoCabecera_Pagos.Value)
                            :   new SqlParameter("@idPredefinidoCabecera_Pagos",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.fechaBorrado != null
                            ?   new SqlParameter("@fechaBorrado", mdl_MAE_Proveedores_Final.fechaBorrado.Value)
                            :   new SqlParameter("@fechaBorrado",  DBNull.Value),
                         mdl_MAE_Proveedores_Final.recargo != null
                            ?   new SqlParameter("@recargo", mdl_MAE_Proveedores_Final.recargo)
                            :   new SqlParameter("@recargo",  DBNull.Value),
                        new SqlParameter("@id", mdl_MAE_Proveedores_Final.id)
                    };
                    #endregion

                    //Update
                    obj_Exferia_Entities.Database.ExecuteSqlCommand(str_SQL_Update, arr_Parametros_Update);

                    //Id de la tabla
                    mdl_INTERNO_ValorDevuelto_Modelo.Id = mdl_MAE_Proveedores_Final.id;
                }
                //INSERT
                else
                {
                    mdl_MAE_Proveedores_Final = new MAE_Proveedores();

                    //Tipo de Accion que se va a realizar
                    mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_INSERTAR;

                    // Cargar los Datos del Modelo
                    Funciones.CopiarPropiedadesObjetos(mdl_MAE_Proveedores_AGrabar, mdl_MAE_Proveedores_Final, false, false);

                    #region INSERT
                    string str_SQL_Insert = " INSERT INTO " + nameof(MAE_Proveedores) +
                                                " (" +
                                                        nameof(MAE_Proveedores.codigo) + "," +
                                                        nameof(MAE_Proveedores.razonSocial) + "," +
                                                        nameof(MAE_Proveedores.nombreComercial) + "," +
                                                        nameof(MAE_Proveedores.idEmpresa) + "," +
                                                        nameof(MAE_Proveedores.idFormaPago) + "," +
                                                        nameof(MAE_Proveedores.idImpuestoCabecera) + "," +
                                                        nameof(MAE_Proveedores.idMoneda) + "," +
                                                        nameof(MAE_Proveedores.idMayor_CuentaContable) + "," +
                                                        nameof(MAE_Proveedores.idMayor_CuentaContraPartida) + "," +
                                                        nameof(MAE_Proveedores.idMayor_CuentaRetencion) + "," +
                                                        nameof(MAE_Proveedores.idMayor_CuentaRemesas) + "," +
                                                        nameof(MAE_Proveedores.idMayor_CuentaDescuentosCompartidos) + "," +
                                                        nameof(MAE_Proveedores.idMayorAuxiliar) + "," +
                                                        nameof(MAE_Proveedores.idTesoreria) + "," +
                                                        nameof(MAE_Proveedores.idDepartamento) + "," +
                                                        nameof(MAE_Proveedores.cif) + "," +
                                                        nameof(MAE_Proveedores.telefono1)  + "," +
                                                        nameof(MAE_Proveedores.telefono2) + "," +
                                                        nameof(MAE_Proveedores.fax) + "," +
                                                        nameof(MAE_Proveedores.email) + "," +
                                                        nameof(MAE_Proveedores.web) + "," +
                                                        nameof(MAE_Proveedores.registroMercantil) + "," +
                                                        nameof(MAE_Proveedores.observaciones) + "," +
                                                        nameof(MAE_Proveedores.riesgo) + "," +
                                                        nameof(MAE_Proveedores.descuentoProntoPago) + "," +
                                                        nameof(MAE_Proveedores.descuentoGeneral) + "," +
                                                        nameof(MAE_Proveedores.descuentoFinalFactura) + "," +
                                                        nameof(MAE_Proveedores.idRetencionTipo)  + "," +
                                                        nameof(MAE_Proveedores.acreedorArrendamiento)  + "," +
                                                        nameof(MAE_Proveedores.noDeclararEnInformativas)  + "," +
                                                        nameof(MAE_Proveedores.acogidoACriterioCaja) + "," +
                                                        nameof(MAE_Proveedores.proveedorAcreedor) + "," +
                                                        nameof(MAE_Proveedores.proveedorInterno) + "," +
                                                        nameof(MAE_Proveedores.cancelarPedidosNoCompletados) + "," +
                                                        nameof(MAE_Proveedores.imprimirTrazabilidad) + "," +
                                                        nameof(MAE_Proveedores.papelPreImpreso)  + "," +
                                                        nameof(MAE_Proveedores.operadorAduanas)  + "," +
                                                        nameof(MAE_Proveedores.cargarEnTerminalyTeleVenta) + "," +
                                                        nameof(MAE_Proveedores.lineasTotalesImpresion) + "," +
                                                        nameof(MAE_Proveedores.lineasEnCabeceraImpresion) + "," +
                                                        nameof(MAE_Proveedores.lineasEnPieImpresion) + "," +
                                                        nameof(MAE_Proveedores.fechaAlta)  + "," +
                                                        nameof(MAE_Proveedores.fechaBaja) + "," +
                                                        nameof(MAE_Proveedores.idPredefinidoCabecera_Compras) + "," +
                                                        nameof(MAE_Proveedores.idPredefinidoCabecera_Pagos) + "," +
                                                        nameof(MAE_Proveedores.fechaBorrado) + "," +
                                                        nameof(MAE_Proveedores.recargo) + 
                                                " ) " +
                                                " OUTPUT INSERTED." + nameof(MAE_Proveedores.id) +
                                                " VALUES " +
                                                " ( " +
                                                     "@codigo," +
                                                     "@razonSocial," +
                                                     "@nombreComercial," +
                                                     "@idEmpresa," +
                                                     "@idFormaPago," +
                                                     "@idImpuestoCabecera," +
                                                     "@idMoneda," +
                                                     "@idMayor_CuentaContable," +
                                                     "@idMayor_CuentaContraPartida," +
                                                     "@idMayor_CuentaRetencion," +
                                                     "@idMayor_CuentaRemesas," +
                                                     "@idMayor_CuentaDescuentosCompartidos," +
                                                     "@idMayorAuxiliar," +
                                                     "@idTesoreria," +
                                                     "@idDepartamento," +
                                                     "@cif," +
                                                     "@telefono1," +
                                                     "@telefono2," +
                                                     "@fax," +
                                                     "@email," +
                                                     "@web," +
                                                     "@registroMercantil," +
                                                     "@observaciones," +
                                                     "@riesgo," +
                                                     "@descuentoProntoPago," +
                                                     "@descuentoGeneral," +
                                                     "@descuentoFinalFactura," +
                                                     "@idRetencionTipo," +
                                                     "@acreedorArrendamiento," +
                                                     "@noDeclararEnInformativas," +
                                                     "@acogidoACriterioCaja," +
                                                     "@proveedorAcreedor," +
                                                     "@proveedorInterno," +
                                                     "@cancelarPedidosNoCompletados," +
                                                     "@imprimirTrazabilidad," +
                                                     "@papelPreImpreso," +
                                                     "@operadorAduanas," +
                                                     "@cargarEnTerminalyTeleVenta," +
                                                     "@lineasTotalesImpresion," +
                                                     "@lineasEnCabeceraImpresion," +
                                                     "@lineasEnPieImpresion," +
                                                     "@fechaAlta," +
                                                     "@fechaBaja," +
                                                     "@idPredefinidoCabecera_Compras," +
                                                     "@idPredefinidoCabecera_Pagos," +
                                                     "@fechaBorrado," +
                                                     "@recargo" +
                                                " ) ";
                    //Parametros
                    object[] arr_Parametros_Insert = new object[]
                    {
                        new SqlParameter("@codigo",  mdl_MAE_Proveedores_Final.codigo),
                        new SqlParameter("@razonSocial",  mdl_MAE_Proveedores_Final.razonSocial),
                        new SqlParameter("@nombreComercial",  mdl_MAE_Proveedores_Final.nombreComercial),
                        new SqlParameter("@idEmpresa",  mdl_MAE_Proveedores_Final.idEmpresa),
                        new SqlParameter("@idFormaPago",  mdl_MAE_Proveedores_Final.idFormaPago),
                        new SqlParameter("@idImpuestoCabecera",  mdl_MAE_Proveedores_Final.idImpuestoCabecera),
                        new SqlParameter("@idMoneda",  mdl_MAE_Proveedores_Final.idMoneda),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaContable != null
                            ?   new SqlParameter("@idMayor_CuentaContable", mdl_MAE_Proveedores_Final.idMayor_CuentaContable.Value)
                            :   new SqlParameter("@idMayor_CuentaContable",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaContraPartida != null
                            ?   new SqlParameter("@idMayor_CuentaContraPartida", mdl_MAE_Proveedores_Final.idMayor_CuentaContraPartida.Value)
                            :   new SqlParameter("@idMayor_CuentaContraPartida",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaRetencion != null
                            ?   new SqlParameter("@idMayor_CuentaRetencion", mdl_MAE_Proveedores_Final.idMayor_CuentaRetencion.Value)
                            :   new SqlParameter("@idMayor_CuentaRetencion",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaRemesas != null
                            ?   new SqlParameter("@idMayor_CuentaRemesas", mdl_MAE_Proveedores_Final.idMayor_CuentaRemesas.Value)
                            :   new SqlParameter("@idMayor_CuentaRemesas",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayor_CuentaDescuentosCompartidos != null
                            ?   new SqlParameter("@idMayor_CuentaDescuentosCompartidos", mdl_MAE_Proveedores_Final.idMayor_CuentaDescuentosCompartidos.Value)
                            :   new SqlParameter("@idMayor_CuentaDescuentosCompartidos",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idMayorAuxiliar != null
                            ?   new SqlParameter("@idMayorAuxiliar", mdl_MAE_Proveedores_Final.idMayorAuxiliar.Value)
                            :   new SqlParameter("@idMayorAuxiliar",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idTesoreria != null
                            ?   new SqlParameter("@idTesoreria", mdl_MAE_Proveedores_Final.idTesoreria.Value)
                            :   new SqlParameter("@idTesoreria",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idDepartamento != null
                            ?   new SqlParameter("@idDepartamento", mdl_MAE_Proveedores_Final.idDepartamento.Value)
                            :   new SqlParameter("@idDepartamento",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.cif != null
                            ?   new SqlParameter("@cif", mdl_MAE_Proveedores_Final.cif)
                            :   new SqlParameter("@cif",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.telefono1 != null
                            ?   new SqlParameter("@telefono1", mdl_MAE_Proveedores_Final.telefono1)
                            :   new SqlParameter("@telefono1",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.telefono2 != null
                            ?   new SqlParameter("@telefono2", mdl_MAE_Proveedores_Final.telefono2)
                            :   new SqlParameter("@telefono2",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.fax != null
                            ?   new SqlParameter("@fax", mdl_MAE_Proveedores_Final.fax)
                            :   new SqlParameter("@fax",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.email != null
                            ?   new SqlParameter("@email", mdl_MAE_Proveedores_Final.email)
                            :   new SqlParameter("@email",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.web != null
                            ?   new SqlParameter("@web", mdl_MAE_Proveedores_Final.web)
                            :   new SqlParameter("@web",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.registroMercantil != null
                            ?   new SqlParameter("@registroMercantil", mdl_MAE_Proveedores_Final.registroMercantil)
                            :   new SqlParameter("@registroMercantil",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.observaciones != null
                            ?   new SqlParameter("@observaciones", mdl_MAE_Proveedores_Final.observaciones)
                            :   new SqlParameter("@observaciones",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.riesgo != null
                            ?   new SqlParameter("@riesgo", mdl_MAE_Proveedores_Final.riesgo.Value)
                            :   new SqlParameter("@riesgo",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.descuentoProntoPago != null
                            ?   new SqlParameter("@descuentoProntoPago", mdl_MAE_Proveedores_Final.descuentoProntoPago.Value)
                            :   new SqlParameter("@descuentoProntoPago",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.descuentoGeneral != null
                            ?   new SqlParameter("@descuentoGeneral", mdl_MAE_Proveedores_Final.descuentoGeneral.Value)
                            :   new SqlParameter("@descuentoGeneral",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.descuentoFinalFactura != null
                            ?   new SqlParameter("@descuentoFinalFactura", mdl_MAE_Proveedores_Final.descuentoFinalFactura.Value)
                            :   new SqlParameter("@descuentoFinalFactura",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idRetencionTipo != null
                            ?   new SqlParameter("@idRetencionTipo", mdl_MAE_Proveedores_Final.idRetencionTipo.Value)
                            :   new SqlParameter("@idRetencionTipo",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.acreedorArrendamiento != null
                            ?   new SqlParameter("@acreedorArrendamiento", mdl_MAE_Proveedores_Final.acreedorArrendamiento.Value)
                            :   new SqlParameter("@acreedorArrendamiento",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.noDeclararEnInformativas != null
                            ?   new SqlParameter("@noDeclararEnInformativas", mdl_MAE_Proveedores_Final.noDeclararEnInformativas.Value)
                            :   new SqlParameter("@noDeclararEnInformativas",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.acogidoACriterioCaja != null
                            ?   new SqlParameter("@acogidoACriterioCaja", mdl_MAE_Proveedores_Final.acogidoACriterioCaja.Value)
                            :   new SqlParameter("@acogidoACriterioCaja",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.proveedorAcreedor != null
                            ?   new SqlParameter("@proveedorAcreedor", mdl_MAE_Proveedores_Final.proveedorAcreedor.Value)
                            :   new SqlParameter("@proveedorAcreedor",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.proveedorInterno != null
                            ?   new SqlParameter("@proveedorInterno", mdl_MAE_Proveedores_Final.proveedorInterno.Value)
                            :   new SqlParameter("@proveedorInterno",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.cancelarPedidosNoCompletados != null
                            ?   new SqlParameter("@cancelarPedidosNoCompletados", mdl_MAE_Proveedores_Final.cancelarPedidosNoCompletados.Value)
                            :   new SqlParameter("@cancelarPedidosNoCompletados",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.imprimirTrazabilidad != null
                            ?   new SqlParameter("@imprimirTrazabilidad", mdl_MAE_Proveedores_Final.imprimirTrazabilidad.Value)
                            :   new SqlParameter("@imprimirTrazabilidad",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.papelPreImpreso != null
                            ?   new SqlParameter("@papelPreImpreso", mdl_MAE_Proveedores_Final.papelPreImpreso.Value)
                            :   new SqlParameter("@papelPreImpreso",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.operadorAduanas != null
                            ?   new SqlParameter("@operadorAduanas", mdl_MAE_Proveedores_Final.operadorAduanas.Value)
                            :   new SqlParameter("@operadorAduanas",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.cargarEnTerminalyTeleVenta != null
                            ?   new SqlParameter("@cargarEnTerminalyTeleVenta", mdl_MAE_Proveedores_Final.cargarEnTerminalyTeleVenta)
                            :   new SqlParameter("@cargarEnTerminalyTeleVenta",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.lineasTotalesImpresion != null
                            ?   new SqlParameter("@lineasTotalesImpresion", mdl_MAE_Proveedores_Final.lineasTotalesImpresion.Value)
                            :   new SqlParameter("@lineasTotalesImpresion",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.lineasEnPieImpresion != null
                            ?   new SqlParameter("@lineasEnPieImpresion", mdl_MAE_Proveedores_Final.lineasEnPieImpresion.Value)
                            :   new SqlParameter("@lineasEnPieImpresion",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.lineasEnCabeceraImpresion != null
                            ?   new SqlParameter("@lineasEnCabeceraImpresion", mdl_MAE_Proveedores_Final.lineasEnCabeceraImpresion.Value)
                            :   new SqlParameter("@lineasEnCabeceraImpresion",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.fechaAlta != null
                            ?   new SqlParameter("@fechaAlta", mdl_MAE_Proveedores_Final.fechaAlta.Value)
                            :   new SqlParameter("@fechaAlta",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.fechaBaja != null
                            ?   new SqlParameter("@fechaBaja", mdl_MAE_Proveedores_Final.fechaBaja.Value)
                            :   new SqlParameter("@fechaBaja",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idPredefinidoCabecera_Compras != null
                            ?   new SqlParameter("@idPredefinidoCabecera_Compras", mdl_MAE_Proveedores_Final.idPredefinidoCabecera_Compras.Value)
                            :   new SqlParameter("@idPredefinidoCabecera_Compras",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.idPredefinidoCabecera_Pagos != null
                            ?   new SqlParameter("@idPredefinidoCabecera_Pagos", mdl_MAE_Proveedores_Final.idPredefinidoCabecera_Pagos.Value)
                            :   new SqlParameter("@idPredefinidoCabecera_Pagos",  DBNull.Value),
                        mdl_MAE_Proveedores_Final.fechaBorrado != null
                            ?   new SqlParameter("@fechaBorrado", mdl_MAE_Proveedores_Final.fechaBorrado.Value)
                            :   new SqlParameter("@fechaBorrado",  DBNull.Value),
                         mdl_MAE_Proveedores_Final.recargo != null
                            ?   new SqlParameter("@recargo", mdl_MAE_Proveedores_Final.recargo)
                            :   new SqlParameter("@recargo",  DBNull.Value)
                    };
                    #endregion

                    //Id de la tabla
                    mdl_INTERNO_ValorDevuelto_Modelo.Id = obj_Exferia_Entities.Database.SqlQuery<long>(str_SQL_Insert, arr_Parametros_Insert).Single();
                }

                // Grabar un registro de trazabilidad con los datos de la transaccion realizada.
                Datos_Generales.USR_Trazabilidad_Grabar(typeof(MAE_Proveedores), mdl_MAE_Proveedores_DatosViejos, mdl_MAE_Proveedores_Final, mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion, obj_Exferia_Entities);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Grabar), true);
            }
            finally
            {
                
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Borrar
        public override INTERNO_ValorDevuelto_Modelo Borrar(long _lng_id)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            //Tipo de Accion que se va a realizar
            mdl_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_ELIMINAR;
           
            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                // Ver si existe ######################################################################
                MAE_Proveedores mdl_MAE_Proveedores_Final = Obtener_Modelo_Por_Id(_lng_id, false, false, false,false,false,false,false);
                //######################################################################################

                if (mdl_MAE_Proveedores_Final != null)
                {
                    #region Update
                    string str_SQL_Update = " UPDATE " + nameof(MAE_Proveedores) +
                                                " SET " +
                                                nameof(MAE_Proveedores.fechaBorrado) + "=@fechaBorrado " +
                                            " WHERE " +
                                                nameof(MAE_Proveedores.id) + "=@id";
                    //Parametros
                    object[] arr_Parametros_Update = new object[]
                    {
                                 new SqlParameter("@fechaBorrado",  DateTime.Now),
                                new SqlParameter("@id", _lng_id)
                    };
                    #endregion

                    //Update
                    obj_Exferia_Entities.Database.ExecuteSqlCommand(str_SQL_Update, arr_Parametros_Update);

                    // Grabar un registro de trazabilidad con los datos de la transaccion realizada.
                    Datos_Generales.USR_Trazabilidad_Grabar(typeof(MAE_Proveedores), null, mdl_MAE_Proveedores_Final, G_ENUM_TIPOACCION.INT_ELIMINAR, obj_Exferia_Entities);
                }

                // Devolver también el Objeto
                mdl_ValorDevuelto_Modelo.Id = _lng_id;
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MAE_Proveedores_Datos) + "/" + nameof(Borrar), true);
            }
            finally
            {
                
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return mdl_ValorDevuelto_Modelo;
        }
        public override INTERNO_ValorDevuelto_Modelo Borrar(long _lng_id, long _lng_idAuxiliar)
        {
            throw new NotImplementedException();
        }
        public override INTERNO_ValorDevuelto_Modelo Borrar(object _mdl_obj)
        {
            return null;
        }
        #endregion
    }
}
