using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Generales;
using Exferia_Aplicacion.Modelos_Hermes;
using Exferia_Aplicacion.Modelos_Maestros;
using Exferia_Aplicacion.Modelos_MantenimientoAgrupacionesCabecera;
using Exferia_Aplicacion.Sincronizacion;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_General._3_Vistas.ListadosSeleccion;
using Exferia_Maestros._0_Modelos;
using Exferia_Maestros._1_Datos;
using Exferia_Maestros._3_Vistas.ControlesPersonalizados_DentroPaneles;
using Exferia_Maestros._3_Vistas.Listados;
using Exferia_Maestros.General;
using GMap.NET;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Transactions;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Maestros._3_Vistas.Controladoras
{
    public class P_Cliente_AUX_2_Controladora
    {
        #region Variables Generales
        private P_Cliente_AUX_2 g_frm_P_Cliente_AUX_2 = null;//Variable que enlaza con la pantalla asociada
        private PE_Esperando g_frm_PE_Esperando;//Pantalla de Espera, para cuando se ejecutan tareas pesadas como cargar, guardar, etc

        //Clases de Datos Necesarias para la carga de datos
        private MAE_Clientes_Datos g_obj_MAE_Clientes_Datos = new MAE_Clientes_Datos();
        private MAE_CuentasBancariasSEPA_Cobros_Datos g_obj_MAE_CuentasBancariasSEPA_Cobros_Datos = new MAE_CuentasBancariasSEPA_Cobros_Datos();
        private MAE_Contactos_Datos g_obj_MAE_Contactos_Datos = new MAE_Contactos_Datos();
        private MAE_ContactosTelefonos_Datos g_obj_MAE_ContactosTelefonos_Datos = new MAE_ContactosTelefonos_Datos();
        private MAE_ContactosEmails_Datos g_obj_MAE_ContactosEmails_Datos = new MAE_ContactosEmails_Datos();
        private MAE_AgrupacionesClientesCabeceras_Datos g_obj_MAE_AgrupacionesClientesCabeceras_Datos = new MAE_AgrupacionesClientesCabeceras_Datos();
        private MAE_AgrupacionesClientesLineas_Datos g_obj_MAE_AgrupacionesClientesLineas_Datos = new MAE_AgrupacionesClientesLineas_Datos();
        private MAE_Clientes_AgrupacionesClientesLineas_Datos g_obj_MAE_Clientes_AgrupacionesClientesLineas_Datos = new MAE_Clientes_AgrupacionesClientesLineas_Datos();
        private MAE_ClientesEmails_Datos g_obj_MAE_ClientesEmails_Datos = new MAE_ClientesEmails_Datos();
        private MAE_Clientes_TarifasCabecera_Datos g_obj_MAE_Clientes_TarifasCabecera_Datos = new MAE_Clientes_TarifasCabecera_Datos();

        public INTERNO_MAE_Clientes_Modelo g_mdl_INTERNO_MAE_Clientes_Modelo = null;//Modelo de los datos del cliente, cargados
        public INTERNO_HRM_Contratos_Modelo g_mdl_INTERNO_HRM_Contratos_Modelo = null;//Modelo de los datos del cliente, cargados
        public GEN_Direcciones g_mdl_GEN_Direcciones = null;//Modelo de los datos fiscales, cargados

        public bool g_bol_Termino_CargaDatos_Inicial = false;//Se utiliza para saber cuando se termina la carga de datos estaticos inciales

        public bool g_bol_ModificacionDatosAfectaLineas = true;//Se utiliza para saber si se modificaron datos que afectan a las lineas

        //Tareea Asincrona de carga de datos
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos = null;
        public bool g_bol_Termino_TareaAsincrona_CargarDatos = true;

        //Tareea Asincrona de grabar de datos
        private BackgroundWorker g_obj_TareaAsincrona_GrabarDatos = null;
        private bool g_bol_GrabarDatos_TerminoCorrectamente = true;

        //Tareea Asincrona de borrar de datos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos = null;

        //Tarea Asincrona de carga del Mapa
        private BackgroundWorker g_obj_TareaAsincrona_CargarMapa = null;

        //Listados Estaticos, para cargar y buscar en los combos 
        private List<INTERNO_ComboBox_Modelo> g_lst_AlbaranValorado_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();
        private List<INTERNO_ComboBox_Modelo> g_lst_ModoDescuento_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();
        private List<INTERNO_ComboBox_Modelo> g_lst_TipoDocumento_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();
        public List<INTERNO_ComboBox_Modelo> g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE = new List<INTERNO_ComboBox_Modelo>();
        private List<INTERNO_ComboBox_Modelo> g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA = new List<INTERNO_ComboBox_Modelo>();
        private List<INTERNO_ComboBox_Modelo> g_lst_TipoPuntoVerde_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();
        private List<INTERNO_ComboBox_Modelo> g_lst_OrdenAplicacionDescuento_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();
        private List<INTERNO_ComboBox_Modelo> g_lst_SaltoEscala_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();

        public bool g_bol_CampoCodigo_Numerico = false;

        private List<long> g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado = new List<long>();
        public List<dynamic> g_lst_AgrupacionesCabeceras_ListadoRegistros = null;

        public List<long> g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado = new List<long>();
        public List<dynamic> g_lst_AgrupacionesLineas_ListadoRegistros = null;

        //Obtencion de los valores de los registros desde base de datos ############################
        private BackgroundWorker g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos = null;
        public bool g_bol_Obtencion_AgrupacionesCabecerasLineasCompleto_BaseDatos_Termino = false;

        //Actualizar los valores de Agrupaciones desde base de datos ############################
        private BackgroundWorker g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos = null;

        //Tarifas ......................................................................................
        private List<long> g_lst_Tarifas_RegistrosSeleccionados_Listado = new List<long>();
        public List<dynamic> g_lst_Tarifas_ListadoRegistros = null;

        //Obtencion de los valores de los registros desde base de datos ############################
        private BackgroundWorker g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos = null;
        public bool g_bol_Obtencion_TarifasCompleto_BaseDatos_Termino = false;

        //Actualizar los valores de Tarifas desde base de datos ############################
        private BackgroundWorker g_obj_TareaAsincrona_Actualizar_Tarifas_Desde_BaseDatos = null;

        #region Contactos
        //Listado de Contactos
        public List<INTERNO_Contactos_Modelo> g_lst_INTERNO_MAE_Contactos_Listado_Modelo = null;
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Contactos_Columnas;

        //Filtrado del listado de Contactos
        public List<string> g_lst_ColumnasAMostrar_MAE_Contactos = new List<string>();
        public ABS_Listado g_obj_ABS_Listado_MAE_Contactos_Clientes = null;
        public string g_str_Opcion_Contactos = Variables.G_STR_OPCION_MAE_CONTACTO_CLIENTE;
        public Dictionary<string, object> g_dct_ListadoFiltros_MAE_Contactos = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Contactos = 0;
        private int g_int_TotalRegistros_Contactos = 0;

        //Tareea Asincrona de borrar de datos Contactos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos_Contactos = null;

        //Tarea Asincrona para la Rellenar DataGridView de Contactos
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_Contacto = null;
        #endregion


        #region Copntratos
        public List<INTERNO_Contratos_Modelo> g_lst_INTERNO_HRM_Contratos_Listado_Modelo = null;
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Contratos_Columnas;
        public string g_str_Opcion_Contratos = Variables.G_STR_OPCION_HRM_CONTRATO_CLIENTE;

        public List<string> g_lst_ColumnasAMostrar_HRM_Contratos = new List<string>();
        public ABS_Listado g_obj_ABS_Listado_HRM_Contratos_Clientes = null;
        public Dictionary<string, object> g_dct_ListadoFiltros_HRM_Contratos = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Contratos = 0;
        private int g_int_TotalRegistros_Contratos = 0;


        //Tarea Asincrona para la Rellenar DataGridView de Contactos
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_Contrato = null;
        #endregion Contratos

        #region Cuentas Bancarias
        //Listado de CuentasBancarias
        public List<INTERNO_CuentasBancarias_Modelo> g_lst_INTERNO_CuentasBancarias_Modelo = null;
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_CuentesBancarias_Columnas;

        //Filtrado del listado de CuentasBancarias
        public List<string> g_lst_ColumnasAMostrar_MAE_CuentasBancarias_SEPA_Cobros = new List<string>();
        public ABS_Listado g_obj_ABS_Listado_MAE_CuentasBancariasSEPA_Cobros_Clientes = null;
        public string g_str_Opcion_CuentesBancarias = Variables.G_STR_OPCION_MAE_CUENTABANCARIA_CLIENTE;
        public Dictionary<string, object> g_dct_ListadoFiltros_MAE_CuentasBancarias_SEPA_Cobros = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_CuentasBancarias = 0;
        private int g_int_TotalRegistros_CuentasBancarias = 0;

        //Tareea Asincrona de borrar de datos CuentaBancarias
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos_CuentasBancarias = null;

        //Tarea Asincrona para la Rellenar DataGridView de Cuentas Bancarias
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias = null;
        #endregion

        #region Agrupaciones Registros Seleccionados
        //Tarea Asincrona para la Rellenar DataGridView de Agrupaciones Registros Seleccionados
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados = null;
        public bool g_bol_CancelarTareaAsincrona_Agrupaciones_RegistrosSeleccionados = false;

        //Tarea Asincrona de Vaciar Registros Seleccionados
        private BackgroundWorker g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados = null;
        public bool g_bol_CancelarTareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados = false;
        private List<long> g_lst_Agrupaciones_RegistrosSeleccionados_AVaciar = null;
        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Agrupaciones_RegistrosSeleccionados_Columnas;

        //Filtrado del Listado de Incluir Registros
        public List<string> g_lst_ColumnasAMostrar_Agrupaciones_RegistrosSeleccionados = new List<string>();
        public ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2 g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2 = new ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2();
        public Dictionary<string, object> g_dct_ListadoFiltros_Agrupaciones_RegistrosSeleccionados = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Agrupaciones_RegistrosSeleccionados = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_Agrupaciones_RegistrosSeleccionados = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #region Agrupaciones Incluir Registros Cabeceras

        //Tarea Asincrona de Marcar/Desmarcar 
        private BackgroundWorker g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras = null;
        public bool g_bol_CancelarTareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras = false;

        private List<dynamic> g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = null;

        //Tarea Asincrona para la Rellenar DataGridView de Incluir Registros
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras = null;
        public bool g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Cabeceras = false;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Agrupaciones_IncluirRegistros_Cabeceras_Columnas;

        //Filtrado del Listado de Incluir Registros
        public List<string> g_lst_ColumnasAMostrar_Agrupaciones_IncluirRegistros_Cabeceras = new List<string>();
        public ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros g_obj_ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros_Cabeceras = new ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros();
        public Dictionary<string, object> g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Cabeceras = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Agrupaciones_IncluirRegistros_Cabeceras = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_Agrupaciones_IncluirRegistros_Cabeceras = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #region Agrupaciones Incluir Registros Lineas

        //Tareea Asincrona de Marcar/Desmarcar 
        private BackgroundWorker g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas = null;
        public bool g_bol_CancelarTareaAsincrona_Agrupaciones_MarcarDesmarca_IncluirRegistros_Lineas = false;

        private List<dynamic> g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = null;

        //Tarea Asincrona para la Rellenar DataGridView de Incluir Registros
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas = null;
        public bool g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Lineas = false;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Agrupaciones_IncluirRegistros_Lineas_Columnas;

        //Filtrado del Listado de Incluir Registros
        public List<string> g_lst_ColumnasAMostrar_Agrupaciones_IncluirRegistros_Lineas = new List<string>();
        public ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros_Lineas = new ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros();
        public Dictionary<string, object> g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Lineas = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Agrupaciones_IncluirRegistros_Lineas = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_Agrupaciones_IncluirRegistros_Lineas = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #region Clientes(Cadena)
        //Obtencion de los valores de los registros desde base de datos ############################
        private BackgroundWorker g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos = null;
        public bool g_bol_Obtencion_Listados_Completo_ClientesCadena_BaseDatos_Termino = false;

        public List<dynamic> g_lst_ClientesCadena_ListadoRegistros = null;

        //Actualizar los valores de Clientes(Cadenas) desde base de datos ############################
        private BackgroundWorker g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos = null;

        #region Clientes(Cadena) Registros Seleccionados
        public List<long> g_lst_ClientesCadena_RegistrosSeleccionados_Listado = new List<long>();

        //Tarea Asincrona para la Rellenar DataGridView de Clientes(Cadena) Registros Seleccionados
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados = null;
        public bool g_bol_CancelarTareaAsincrona_ClientesCadena_RegistrosSeleccionados = false;

        //Tarea Asincrona de Vaciar Registros Seleccionados
        private BackgroundWorker g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados = null;
        public bool g_bol_CancelarTareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados = false;
        private List<long> g_lst_ClientesCadena_RegistrosSeleccionados_AVaciar = null;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_ClientesCadena_RegistrosSeleccionados_Columnas;

        //Filtrado del Listado de Incluir Registros
        public List<string> g_lst_ColumnasAMostrar_ClientesCadena_RegistrosSeleccionados = new List<string>();
        public List<string> g_lst_Columnas_ClientesCadena_RegistrosSeleccionados = new List<string>();
        public ABS_Listado_MAE_Clientes_P_Cliente_AUX_2 g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2 = new ABS_Listado_MAE_Clientes_P_Cliente_AUX_2();
        public Dictionary<string, object> g_dct_ListadoFiltros_ClientesCadena_RegistrosSeleccionados = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_ClientesCadena_RegistrosSeleccionados = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_ClientesCadena_RegistrosSeleccionados = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #region Clientes(Cadena) Incluir Registros
        //Tareea Asincrona de Marcar/Desmarcar 
        private BackgroundWorker g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros = null;
        public bool g_bol_CancelarTareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros = false;

        private List<dynamic> g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = null;

        //Tarea Asincrona para la Rellenar DataGridView de Incluir Registros
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros = null;
        public bool g_bol_CancelarTareaAsincrona_ClientesCadena_IncluirRegistros = false;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_ClientesCadena_IncluirRegistros_Columnas;

        //Filtrado del Listado de Incluir Registros
        public List<string> g_lst_ColumnasAMostrar_ClientesCadena_IncluirRegistros = new List<string>();
        public List<string> g_lst_Columnas_ClientesCadena_IncluirRegistros = new List<string>();
        public ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros = new ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros();
        public Dictionary<string, object> g_dct_ListadoFiltros_ClientesCadena_IncluirRegistros = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_ClientesCadena_IncluirRegistros = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_ClientesCadena_IncluirRegistros = new List<INTERNO_ComboBox_Modelo>();
        #endregion
        #endregion

        #region Emails
        //Variables para la creacion de emails ##############
        private List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_TIPO = null;
        private int g_int_CTU_P_Clientes_AUX_2_Emails_PosicionY = 5;
        private int g_int_CTU_P_Clientes_AUX_2_Emails_Alto = 28;
        private int g_int_CTU_P_Clientes_AUX_2_Emails_Cantidad = 0;
        private List<int> g_lst_CTU_P_Clientes_AUX_2_Emails = new List<int>();
        #endregion

        #region Seguros
        private List<MAE_TiposTransportes> g_lst_MAE_TiposTransportes = null;
        private List<Exferia_ComboBox> g_lst_Exferia_ComboBox_Seguros = new List<Exferia_ComboBox>();
        private int g_int_CTU_P_Clientes_AUX_2_Seguros_PosicionY = 5;
        private int g_int_CTU_P_Clientes_AUX_2_Seguros_Alto = 28;
        private int g_int_CTU_P_Clientes_AUX_2_Seguros_Cantidad = 0;
        private List<int> g_lst_CTU_P_Clientes_AUX_2_Seguros = new List<int>();
        #endregion Seguros

        #region Tarifas Registros Seleccionados
        //Tarea Asincrona para la Rellenar DataGridView de Tarifas Registros Seleccionados
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados = null;
        public bool g_bol_CancelarTareaAsincrona_Tarifas_RegistrosSeleccionados = false;

        //Tarea Asincrona de Vaciar Registros Seleccionados
        private BackgroundWorker g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados = null;
        public bool g_bol_CancelarTareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados = false;
        private List<long> g_lst_Tarifas_RegistrosSeleccionados_AVaciar = null;
        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Tarifas_RegistrosSeleccionados_Columnas;

        //Filtrado del Listado de Incluir Registros
        public List<string> g_lst_ColumnasAMostrar_Tarifas_RegistrosSeleccionados = new List<string>();
        public ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2 g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2 = new ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2();
        public Dictionary<string, object> g_dct_ListadoFiltros_Tarifas_RegistrosSeleccionados = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Tarifas_RegistrosSeleccionados = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_Tarifas_RegistrosSeleccionados = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #region Tarifas Incluir Registros Cabeceras

        //Tarea Asincrona de Marcar/Desmarcar 
        private BackgroundWorker g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras = null;
        public bool g_bol_CancelarTareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras = false;

        private List<dynamic> g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = null;

        //Tarea Asincrona para la Rellenar DataGridView de Incluir Registros
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras = null;
        public bool g_bol_CancelarTareaAsincrona_Tarifas_IncluirRegistros_Cabeceras = false;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Tarifas_IncluirRegistros_Cabeceras_Columnas;

        //Filtrado del Listado de Incluir Registros
        public List<string> g_lst_ColumnasAMostrar_Tarifas_IncluirRegistros_Cabeceras = new List<string>();
        public ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros = new ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros();
        public Dictionary<string, object> g_dct_ListadoFiltros_Tarifas_IncluirRegistros_Cabeceras = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Tarifas_IncluirRegistros_Cabeceras = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_Tarifas_IncluirRegistros_Cabeceras = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #region Tarifas Lineas
        //Tarea Asincrona para la Rellenar DataGridView de Incluir Registros
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas = null;
        public bool g_bol_CancelarTareaAsincrona_Tarifas_Lineas = false;

        private List<dynamic> g_lst_ListadoRegistros_Filtrados_Tarifas_Lineas = null;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Tarifas_Lineas_Columnas;

        //Filtrado del Listado de Incluir Registros
        public List<string> g_lst_ColumnasAMostrar_Tarifas_Lineas = new List<string>();
        public ABS_Listado_HRM_TarifasLineas_P_Cliente_AUX_2 g_obj_ABS_Listado_HRM_TarifasLineas_P_Cliente_AUX_2 = new ABS_Listado_HRM_TarifasLineas_P_Cliente_AUX_2();
        public Dictionary<string, object> g_dct_ListadoFiltros_Tarifas_Lineas = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Tarifas_Lineas = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_Tarifas_Lineas = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #endregion

        #region Constructor
        public P_Cliente_AUX_2_Controladora(P_Cliente_AUX_2 _frm_P_Cliente_AUX_2)
        {
            g_frm_P_Cliente_AUX_2 = _frm_P_Cliente_AUX_2;

            //cargar todos los valores de los combos estaticos
            Cargar_DatosIniciales();

            g_obj_ABS_Listado_MAE_Contactos_Clientes = new ABS_Listado_MAE_Contactos_Clientes();
            g_obj_ABS_Listado_HRM_Contratos_Clientes = new ABS_Listado_HRM_Contratos_Clientes();
            g_obj_ABS_Listado_MAE_CuentasBancariasSEPA_Cobros_Clientes = new ABS_Listado_MAE_CuentaBancarias_SEPA_Cobros(Variables.G_STR_OPCION_MAE_CUENTABANCARIA_CLIENTE);

            g_bol_Termino_CargaDatos_Inicial = true;
        }
        #endregion

        #region Datos Iniciales
        private void Cargar_DatosIniciales()
        {
            //Rellenamos y cargamos los f3 y los listados estaticos en las direcciones
            g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.ActualizarRegistros(g_frm_P_Cliente_AUX_2);
            g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.ActualizarRegistros(g_frm_P_Cliente_AUX_2);
            g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.ActualizarRegistros(g_frm_P_Cliente_AUX_2);

            // Exferia_ComboBox_AlbaranValorado
            g_lst_AlbaranValorado_INTERNO_ComboBox_Modelo = ListadosEstaticos.Devolver_AlbaranesValorados();
            if (g_lst_AlbaranValorado_INTERNO_ComboBox_Modelo != null)
            {
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_AlbaranValorado.Items.Clear();
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_AlbaranValorado.DataSource = g_lst_AlbaranValorado_INTERNO_ComboBox_Modelo;
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_AlbaranValorado.SelectedIndex = 0;
            }
            // Exferia_ComboBox_TipoDocumento
            g_lst_TipoDocumento_INTERNO_ComboBox_Modelo = ListadosEstaticos.Devolver_TiposDocumento();
            if (g_lst_TipoDocumento_INTERNO_ComboBox_Modelo != null)
            {
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoDocumento.Items.Clear();
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoDocumento.DataSource = g_lst_TipoDocumento_INTERNO_ComboBox_Modelo;
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoDocumento.SelectedIndex = 1;
            }
            // Exferia_ComboBox_TipoPuntoVerde
            g_lst_TipoPuntoVerde_INTERNO_ComboBox_Modelo = ListadosEstaticos.Devolver_TiposPuntoVerde();
            if (g_lst_TipoPuntoVerde_INTERNO_ComboBox_Modelo != null)
            {
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoPuntoVerde.Items.Clear();
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoPuntoVerde.DataSource = g_lst_TipoPuntoVerde_INTERNO_ComboBox_Modelo;
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoPuntoVerde.SelectedIndex = 2;
            }

            //Combo modelo de factura cliente
            g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE = ListadosEstaticos.Devolver_ModelosFactura_Cliente();
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.DataSource = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE;
            Filtrar_Combo_ModeloFactura_Cliente();

            //Combo modelo de factura Cadena
            g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA = ListadosEstaticos.Devolver_ModelosFactura_Cadena();
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cadena.DataSource = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA;
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cadena.SelectedItem = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA.Where(m => m.Identificador.Equals(Variables.G_MDL_TIPOMODELOFACTURA_DESGLOSEALBARANES.Codigo)).FirstOrDefault();


            // SaltoEscala
            g_lst_SaltoEscala_INTERNO_ComboBox_Modelo = ListadosEstaticos.Devolver_SaltoEscala();
            if (g_lst_SaltoEscala_INTERNO_ComboBox_Modelo != null)
            {
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_SaltoEscala.Items.Clear();
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_SaltoEscala.DataSource = g_lst_SaltoEscala_INTERNO_ComboBox_Modelo;
                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_SaltoEscala.SelectedIndex = 1;
            }

            //rellenar el rbol secundario de seleccion
            Rellenar_ArbolSecundarioSeleccion();

            //Tipos de Emails
            g_lst_INTERNO_ComboBox_Modelo_TIPO = ListadosEstaticos.Devolver_TipoEmail();
        }

        private void Rellenar_ArbolSecundarioSeleccion()
        {
            try
            {
                List<INTERNO_ArbolSecundarioSeleccion_Modelo> lst_INTERNO_ArbolSecundarioSeleccion_Modelo_FINAL = new List<INTERNO_ArbolSecundarioSeleccion_Modelo>();
                //Cliente
                lst_INTERNO_ArbolSecundarioSeleccion_Modelo_FINAL.AddRange(Variables.G_LST_ARBOLSECUNDARIOSELECCION_CLIENTE);
                //Cliente-Cartera
                lst_INTERNO_ArbolSecundarioSeleccion_Modelo_FINAL.AddRange(Variables.G_LST_ARBOLSECUNDARIOSELECCION_CLIENTE_CARTERA);
                //Cliente-Contabilidad
                lst_INTERNO_ArbolSecundarioSeleccion_Modelo_FINAL.AddRange(Variables.G_LST_ARBOLSECUNDARIOSELECCION_CLIENTE_CONTABILIDAD);

                //Cargar los valores
                g_frm_P_Cliente_AUX_2.Exferia_ArbolSecundarioSeleccion_Cliente.Cargar(lst_INTERNO_ArbolSecundarioSeleccion_Modelo_FINAL, g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales, g_frm_P_Cliente_AUX_2.P_Base_FechaTrabajo, g_frm_P_Cliente_AUX_2);

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_ArbolSecundarioSeleccion));
            }
        }

        public void Datos_PorDefecto()
        {
            try
            {
                //fecha
                g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta.Exferia_FechaSeleccion_Fecha = Variables.G_DTT_FECHA_INICIAL_PORDEFECTO.ToString("dd/MM/yyyy");

                //permitecobraralbaran
                g_frm_P_Cliente_AUX_2.Exferia_CheckBox_PermiteCobrarAlbaran.Checked = g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.bol_Empresa_PermiteCobrarAlbaran;

                //CTA_PredefinidosCabeceras_Venta
                //Cargamos el ensamblado #########################################################################################################################################################################
                Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_DEFECTO, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros_1 = { Variables.G_PREDEFINIDOFICHEROS_FACTURASDEVENTA.Id };

                //Pasamos los parametros al metodo y lo ejecutamos
                CTA_PredefinidosCabeceras mdl_CTA_PredefinidosCabeceras_Venta = (CTA_PredefinidosCabeceras)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                //##################################################################################################################################################################################################

                if (mdl_CTA_PredefinidosCabeceras_Venta != null &&
                    mdl_CTA_PredefinidosCabeceras_Venta.idPredefinidoFichero != null &&
                    mdl_CTA_PredefinidosCabeceras_Venta.idPredefinidoFichero.Value.Equals(Variables.G_PREDEFINIDOFICHEROS_FACTURASDEVENTA.Id))
                {
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras_Venta.id;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras_Venta.codigo;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras_Venta.descripcion;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras_Venta.fechaBorrado;
                }

                //CTA_PredefinidosCabeceras_Cobro
                //Cargamos el ensamblado #########################################################################################################################################################################
                Assembly m_assembly_2 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_2 = m_assembly_2.GetType("" + Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase_2 = Activator.CreateInstance(m_type_2);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo_2 = obj_Clase_2.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_DEFECTO, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros_2 = { Variables.G_PREDEFINIDOFICHEROS_COBROS.Id };

                //Pasamos los parametros al metodo y lo ejecutamos
                CTA_PredefinidosCabeceras mdl_CTA_PredefinidosCabeceras_Cobro = (CTA_PredefinidosCabeceras)obj_MethodInfo_2.Invoke(obj_Clase_2, arr_Parametros_2);
                //##################################################################################################################################################################################################

                if (mdl_CTA_PredefinidosCabeceras_Cobro != null &&
                    mdl_CTA_PredefinidosCabeceras_Cobro.idPredefinidoFichero != null &&
                    mdl_CTA_PredefinidosCabeceras_Cobro.idPredefinidoFichero.Value.Equals(Variables.G_PREDEFINIDOFICHEROS_COBROS.Id))
                {
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras_Cobro.id;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras_Cobro.codigo;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras_Cobro.descripcion;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras_Cobro.fechaBorrado;
                }

                //Delegacion
                if (g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.Delegacion != null)
                {
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Id = g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.Delegacion.id;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Codigo = g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.Delegacion.codigo;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Descripcion = g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.Delegacion.descripcion;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_FechaBorrado = g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.Delegacion.fechaBorrado;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Datos_PorDefecto));
            }
            finally
            {
                g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;
            }
        }

        public void Filtrar_Combo_ModeloFactura_Cliente()
        {
            try
            {
                if (g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE != null)
                {
                    //Quitar el Desgloce por centros
                    string str_ModeloFactura_Seleccion = "-1";
                    if (g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Checked == false)
                    {
                        str_ModeloFactura_Seleccion = Variables.G_MDL_TIPOMODELOFACTURA_DESGLOSEALBARANES.Codigo;
                    }

                    //Seleccionar el modelo de factura
                    g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.SelectedItem = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE.Where(m => m.Identificador.Equals(str_ModeloFactura_Seleccion)).FirstOrDefault();

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Filtrar_Combo_ModeloFactura_Cliente));
            }
        }
        #endregion

        #region Vaciar Datos
        public void VaciarDatos()
        {
            //codigo
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo.Text = "";

            //nombre
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Nombre.Text = "";

            //razonSocial
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_RazonSocial.Text = "";

            //emailPersonal
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Email_EmailPersonal.Exferia_TextBox_Email_Valor = "";

            //Web
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_URL_Web.Exferia_TextBox_URL_Valor = "";

            //Telefono1
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Telefono1.Text = "";

            //Telefono2
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Telefono2.Text = "";

            //Fax
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Fax.Text = "";

            //CIF
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_Valor = "";

            //Riesgo
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Riesgo.Text = "";

            //DescuentoProntoPago
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoProntoPago.Text = "";

            //DescuentosFinAlbaran
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text = "";

            //NumeroProveedor
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_NumeroProveedor.Text = "";

            //DescuentoGeneral
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoGeneral.Text = "";

            //EANCliente
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANCliente.Text = "";

            //EANDocumento
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANDocumento.Text = "";

            //EANEntrega
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANEntrega.Text = "";

            //DiasRiesgo
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DiasRiesgo.Text = "";

            //DocumentosRiesgo
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DocumentosRiesgo.Text = "";

            //DescuentoFinFactura
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text = "";

            //EANVendedor
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANVendedor.Text = "";

            //Confidencial
            g_frm_P_Cliente_AUX_2.Exferia_RichTextBox_ConBotones_Confidencial.Exferia_RichTextBox_RTF = "";

            //Observaciones
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Observaciones.Text = "";

            //Mapa
            g_frm_P_Cliente_AUX_2.CTU_Mapa.DatosMapa_Puntos().Clear();

            //Retencion
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Retencion.Checked = false;

            //Recargo
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Recargo.Checked = false;

            //noDeclararModelosOficiales
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_NoDelcararModeloOficiales.Checked = false;

            //CriterioCaja
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_CriterioCaja.Checked = false;

            //PermiteDepositos
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_PermiteDepositos.Checked = false;

            //ImprimirDeudaAcumulada
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDeudaAcumulada.Checked = false;

            //Imprimirtrazabilidad
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Imprimirtrazabilidad.Checked = false;

            //NoFacturar
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_NoFacturar.Checked = false;

            //Alta
            g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta.Exferia_FechaSeleccion_Fecha = "";

            //Baja
            g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Baja.Exferia_FechaSeleccion_Fecha = "";

            //AlbaranValorado
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_AlbaranValorado.SelectedItem = null;

            //TipoDocumento
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoDocumento.SelectedItem = null;

            //TipoPuntoVerde
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoPuntoVerde.SelectedItem = null;

            //PermiteCobrarAlbaran
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_PermiteCobrarAlbaran.Checked = false;

            ////SeguroPorcentaje
            //g_frm_P_Cliente_AUX_2.Exferia_TextBox_SeguroPorcentaje.Text = "";

            ////SeguroMinimo
            //g_frm_P_Cliente_AUX_2.Exferia_TextBox_SeguroMinimo.Text = "";

            //ComisionReembolsoPorcentaje
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoPorcentaje.Text = "";

            //ComisionReembolsoMinimo
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoMinimo.Text = "";

            //ComisionReembolsoMaximo
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoMaximo.Text = "";

            //IncrementeRecogidaPorcentaje
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_IncrementeRecogidaPorcentaje.Text = "";

            //FormasPago
            g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_FechaBorrado = null;

            //Monedas
            g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_FechaBorrado = null;

            //CuentasContable
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_FechaBorrado = null;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_IdEjercicio_Baja = null;

            //CuentasRetencion
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_FechaBorrado = null;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_IdEjercicio_Baja = null;

            //Impuestos
            g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_FechaBorrado = null;

            //Vendedores
            g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_FechaBorrado = null;

            //MotivosAlta
            g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_FechaBorrado = null;

            //MotivosBaja
            g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_FechaBorrado = null;

            //Mayor_Remesas
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_FechaBorrado = null;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_IdEjercicio_Baja = null;

            //Mayor_ContraPartida
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_FechaBorrado = null;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_IdEjercicio_Baja = null;

            //MayorAuxiliar
            g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_FechaBorrado = null;

            //VendedorCobrador
            g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_FechaBorrado = null;

            //Departamentos
            g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_FechaBorrado = null;

            //Tesoreria
            g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_FechaBorrado = null;

            //Prioridad
            g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_FechaBorrado = null;

            //PredefinidoCabecera_Ventas
            g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //PredefinidoCabecera_Cobros
            g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //Direcciones
            g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.VaciarDatos();
            g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.VaciarDatos();
            g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.VaciarDatos();

            //CuentasBancarias 
            if (g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows.Count > 0)
            {
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows.Clear();
            }

            //Contactos 
            if (g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.Rows.Count > 0)
            {
                g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.Rows.Clear();
            }

            //Vaciar los Checkeados en el Listado de Incluir Registros y de Registros Seleccionados
            if (g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado != null && g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Count > 0)
            {
                Actualizar_AgrupacionesCabeceras_BaseDatos_Seleccionados_Colectivo(g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado, false);
                Actualizar_AgrupacionesLineas_BaseDatos_Seleccionados_Colectivo(g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado, false);

                Rellenar_DataGridView_Agrupaciones_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_RegistrosSeleccionados_Busqueda.Text);
                Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_IncluirRegistros_Cabeceras_Busqueda.Text);
            }

            //Vaciar los Checkeados en el Listado de Incluir Registros y de Registros Seleccionados
            if (g_lst_Tarifas_RegistrosSeleccionados_Listado != null && g_lst_Tarifas_RegistrosSeleccionados_Listado.Count > 0)
            {
                Actualizar_Tarifas_BaseDatos_Seleccionados_Colectivo(g_lst_Tarifas_RegistrosSeleccionados_Listado, false);

                Rellenar_DataGridView_Tarifas_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Tarifas_RegistrosSeleccionados_Busqueda.Text);
                Rellenar_DataGridView_Tarifas_IncluirRegistros_Cabeceras(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Tarifas_IncluirRegistros_Cabeceras_Busqueda.Text);
            }

            //ClientesCadena
            if (g_lst_ClientesCadena_RegistrosSeleccionados_Listado != null &&
                g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Count > 0)
            {
                Actualizar_ClientesCadena_BaseDatos_Seleccionados_Colectivo(g_lst_ClientesCadena_RegistrosSeleccionados_Listado, false);
                Actualizar_ClientesCadena_BaseDatos_Seleccionados_Colectivo(g_lst_ClientesCadena_RegistrosSeleccionados_Listado, false);

                Rellenar_DataGridView_ClientesCadena_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_RegistrosSeleccionados_Busqueda.Text);
                Rellenar_DataGridView_ClientesCadena_IncluirRegistros(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_IncluirRegistros_Busqueda.Text);
            }
            g_lst_ClientesCadena_ListadoRegistros = null;
            g_lst_ClientesCadena_RegistrosSeleccionados_AVaciar = null;

            //EnviarPorEmail
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_EnviarPorEmail.Checked = false;

            //AtencionDe
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_AtencionDe.Text = "";

            //Referencia
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Referencia.Text = "";

            //Web_Usuario
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Web_Usuario.Text = "";

            //Web_Clave
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_Web_Clave.Text = "";

            //Cliente
            g_frm_P_Cliente_AUX_2.Exferia_RadioButton_ClienteCadena_Cliente.Checked = true;
            g_frm_P_Cliente_AUX_2.Exferia_TabControl_ClienteCadena.TabPages.Remove(g_frm_P_Cliente_AUX_2.TabPage_Cliente);
            g_frm_P_Cliente_AUX_2.Exferia_TabControl_ClienteCadena.TabPages.Remove(g_frm_P_Cliente_AUX_2.TabPage_Cadena);
            g_frm_P_Cliente_AUX_2.Exferia_TabControl_ClienteCadena.TabPages.Add(g_frm_P_Cliente_AUX_2.TabPage_Cliente);

            //(F3) Cliente(Cadena) 
            g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Id = -1;
            g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Codigo = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Descripcion = "";
            g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_FechaBorrado = null;
            #region Filtro solo Cadenas para el F3
            //Filtrado de Opciones del Padre
            List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();
            //Para que busque con el Filtro solo cadenas
            lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_MAE_Clientes_Listado_Modelo.cadena), -1, true));
            //Filtros para facturas
            g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
            #endregion

            //ModeloFactura CLIENTE
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.SelectedItem = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE.Where(m => m.Identificador.Equals(Variables.G_MDL_TIPOMODELOFACTURA_DESGLOSEALBARANES.Codigo)).FirstOrDefault();
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.Enabled = true;

            //ModeloFactura CADENA
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cadena.SelectedItem = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA.Where(m => m.Identificador.Equals(Variables.G_MDL_TIPOMODELOFACTURA_DESGLOSEALBARANES.Codigo)).FirstOrDefault();

            //ImprimirDatosCadena
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDatosCadena.Checked = false;
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDatosCadena.Enabled = false;

            //FacturarDatosCadena
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Checked = false;
            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Enabled = false;

            //Emails
            g_int_CTU_P_Clientes_AUX_2_Emails_PosicionY = 5;
            g_int_CTU_P_Clientes_AUX_2_Emails_Cantidad = 0;
            g_lst_CTU_P_Clientes_AUX_2_Emails.Clear();
            g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Clear();

            //SaltoEscala
            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_SaltoEscala.SelectedIndex = 1;

            //ConversionValumen
            g_frm_P_Cliente_AUX_2.Exferia_TextBox_ConversionVolumen.Text = "";

            string[] str_Separador = new string[] { " [" };
            //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
            if (g_frm_P_Cliente_AUX_2.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
            {
                g_frm_P_Cliente_AUX_2.P_Base_TituloPantalla = (g_frm_P_Cliente_AUX_2.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
            }

            //Actualizar el Boton de Seleccion de pantalla ####################################################
            Variables.G_EMS_CONTROL_MENUSUPERIOR.Update_Texto_NombrePantalla(g_frm_P_Cliente_AUX_2.Tag.ToString());
            //#################################################################################################

            g_mdl_INTERNO_MAE_Clientes_Modelo = null;
        }
        #endregion

        #region Buscar Codigo Siguiente
        public INTERNO_ValorDevuelto_Modelo Buscar_CodigoSiguiente()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                string str_CodigoSiguiente = Datos_Generales.Buscar_CodigoSiguiente(nameof(MAE_Clientes),
                                                                                    nameof(MAE_Clientes.codigo),
                                                                                    nameof(MAE_Clientes.idEmpresa),
                                                                                    g_mdl_INTERNO_MAE_Clientes_Modelo != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.idEmpresa : Datos_Generales.GEN_Empresas_Devolver_IdEmpresa_AGrabar(g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.lng_idEmpresa, nameof(MAE_Clientes)),
                                                                                    true,
                                                                                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo.Exferia_TextBox_MaxLength);
                if (!str_CodigoSiguiente.Equals("-1"))
                {
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo.Text = str_CodigoSiguiente;
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_CODIGOSIGUIENTE_LIMITEALCANZADO(g_frm_P_Cliente_AUX_2.Exferia_Label_Codigo.Text);
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BUSCARCODIGOSIGUIENTE();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Buscar_CodigoSiguiente));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BUSCARCODIGOSIGUIENTE();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Comprobacion de cambios, para  grabar o no antes de salir o cambiar de registro
        public bool ComprobarCambios()
        {
            if (g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla)
            {
                GrabarDatos();

                //Te quedas espernado a que termine la tarea asincrona de grabar
                while (g_obj_TareaAsincrona_GrabarDatos.IsBusy)
                    Application.DoEvents();

                return g_bol_GrabarDatos_TerminoCorrectamente;
            }
            return true;
        }
        public bool ComprobarCambios_AfectaLineas()
        {
            if (g_bol_ModificacionDatosAfectaLineas)
            {
                GrabarDatos();

                //Te quedas esperando a que termine la tareaAsincrona de Grabar
                while (g_obj_TareaAsincrona_GrabarDatos.IsBusy)
                    Application.DoEvents();

                return g_bol_GrabarDatos_TerminoCorrectamente;
            }
            return true;
        }
        #endregion

        #region Cargar Datos
        public void RecargarDatos()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Cliente_AUX_2.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando = new PE_Esperando();

                // Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_CargarDatos != null)
                {
                    while (g_obj_TareaAsincrona_CargarDatos.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_CargarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_CargarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_DoWork);
                    g_obj_TareaAsincrona_CargarDatos.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_CargarDatos_ProgressChanged);
                    g_obj_TareaAsincrona_CargarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Completed);
                    g_obj_TareaAsincrona_CargarDatos.WorkerReportsProgress = true;
                }

                g_bol_Termino_TareaAsincrona_CargarDatos = false;

                //Vaciar
                VaciarDatos();

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_CargarDatos.RunWorkerAsync();
                //#################################################################################################

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_P_Cliente_AUX_2.Enabled = true;

                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                g_bol_Termino_TareaAsincrona_CargarDatos = true;

                throw new Control_Errores(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA(), ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(RecargarDatos), true);
            }
        }
        private void TareaAsincrona_CargarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Cargar Valores
                if (CargarDatos(g_frm_P_Cliente_AUX_2.P_Base_id) == false)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
                else
                {
                    //...........................................................
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo != null)
                    {
                        //Cargar Listado Cuentas bancarias ...........................................................
                        if (g_mdl_INTERNO_MAE_Clientes_Modelo.CuentasBancarias != null)
                        {
                            g_lst_INTERNO_CuentasBancarias_Modelo = g_mdl_INTERNO_MAE_Clientes_Modelo.CuentasBancarias;
                        }

                        //Cargar Listado Contactos ...........................................................
                        if (g_mdl_INTERNO_MAE_Clientes_Modelo.Contactos != null)
                        {
                            g_lst_INTERNO_MAE_Contactos_Listado_Modelo = g_mdl_INTERNO_MAE_Clientes_Modelo.Contactos;
                        }

                        //Cargar Listado Contratos ...........................................................
                        if (g_mdl_INTERNO_MAE_Clientes_Modelo.HRM_Contratos != null)
                        {
                            g_lst_INTERNO_HRM_Contratos_Listado_Modelo = g_mdl_INTERNO_MAE_Clientes_Modelo.HRM_Contratos.Select(_mdl => new INTERNO_Contratos_Modelo()
                            {
                                id = _mdl.id,
                                codigo = _mdl.codigo,
                                descripcion = _mdl.descripcion,
                                fecha = _mdl.fecha,
                                fechaBorrado = _mdl.fechaBorrado
                            }).ToList();
                        }

                        //Emails 
                        if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails != null && g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails.Count() > 0)
                        {
                            foreach (MAE_ClientesEmails mdl_MAE_ClientesEmails in g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails)
                            {
                                ((BackgroundWorker)sender).ReportProgress(1, mdl_MAE_ClientesEmails);
                            }
                        }

                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_CargarDatos_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.ProgressPercentage.Equals(1))
                {
                    CrearEmails((MAE_ClientesEmails)e.UserState);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_ProgressChanged));
            }
        }
        private void TareaAsincrona_CargarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            //Desbloquear el Formulario
            g_frm_P_Cliente_AUX_2.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    g_frm_P_Cliente_AUX_2.Salir_P_Base();
                }
                else
                {
                    //Actualizar el Filtro del F3
                    #region Filtro solo Cadenas
                    //Filtrado de Opciones del Padre
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();
                    //Para que busque con el Filtro solo cadenas
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_MAE_Clientes_Listado_Modelo.cadena), -1, true));
                    //Para que busque con el Filtro solo cadenas y no busque la cadena actual si la fuera
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.cadena != null && g_mdl_INTERNO_MAE_Clientes_Modelo.cadena.Value)
                    {
                        lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_MAE_Clientes_Listado_Modelo.cadena), g_mdl_INTERNO_MAE_Clientes_Modelo.id, true));
                    }
                    else
                    {
                        lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_MAE_Clientes_Listado_Modelo.cadena), -1, true));
                    }

                    //Filtros para facturas
                    g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                    #endregion

                    #region Tab de Facturacion
                    g_frm_P_Cliente_AUX_2.Exferia_TabControl_ClienteCadena.TabPages.Remove(g_frm_P_Cliente_AUX_2.TabPage_Cliente);
                    g_frm_P_Cliente_AUX_2.Exferia_TabControl_ClienteCadena.TabPages.Remove(g_frm_P_Cliente_AUX_2.TabPage_Cadena);

                    //Seleccionar Cliente
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.cadena == null || g_mdl_INTERNO_MAE_Clientes_Modelo.cadena.Value == false)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_RadioButton_ClienteCadena_Cliente.Checked = true;
                        g_frm_P_Cliente_AUX_2.Exferia_TabControl_ClienteCadena.TabPages.Add(g_frm_P_Cliente_AUX_2.TabPage_Cliente);
                    }
                    //Seleccinar Cadena
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_RadioButton_ClienteCadena_Cadena.Checked = true;
                        g_frm_P_Cliente_AUX_2.Exferia_TabControl_ClienteCadena.TabPages.Add(g_frm_P_Cliente_AUX_2.TabPage_Cadena);
                    }
                    #endregion

                    #region ClienteCadena(facturar)
                    if ((g_mdl_INTERNO_MAE_Clientes_Modelo.cadena == null ||
                        g_mdl_INTERNO_MAE_Clientes_Modelo.cadena == false) &&
                        g_mdl_INTERNO_MAE_Clientes_Modelo.idCliente_Cadena != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Enabled = true;

                        //Facturar con cadena
                        if (g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Checked)
                        {
                            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDatosCadena.Enabled = false;
                            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.Enabled = false;

                            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.SelectedItem = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE.Where(m => m.Identificador.Equals("-1")).FirstOrDefault();

                        }
                        else
                        {
                            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDatosCadena.Enabled = true;
                            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.Enabled = true;
                        }
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Enabled = false;
                        g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDatosCadena.Enabled = false;
                        g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.Enabled = true;

                    }
                    #endregion

                    //Validar Controles Personalizados
                    CIFNIF_Actualizar_Validacion();
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Email_EmailPersonal.Validar_Email();
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_URL_Web.Validar_URL();

                    #region Segun el tipo de Documento muestro los descuentos que correspondan
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.tipoDocumento == null ||
                        g_mdl_INTERNO_MAE_Clientes_Modelo.tipoDocumento.Trim().Length == 0)
                    {
                        //Bloqueo Todo
                        g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text = "";
                        g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Visible = false;
                        g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentosFinAlbaran.Visible = false;

                        g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text = "";
                        g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Visible = false;
                        g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentoFinFactura.Visible = false;
                    }
                    else
                    {
                        //Si es Factura Desbloqueo desceunto de factura
                        if (g_mdl_INTERNO_MAE_Clientes_Modelo.tipoDocumento == Variables.G_MDL_TIPODOCUMENTOS_VENTA_FACTURA.Codigo)
                        {
                            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text = "";
                            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Visible = false;
                            g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentosFinAlbaran.Visible = false;

                            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Visible = true;
                            g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentoFinFactura.Visible = true;
                        }
                        //Si es Albaran desbloqueo descuento albaran
                        else if (g_mdl_INTERNO_MAE_Clientes_Modelo.tipoDocumento == Variables.G_MDL_TIPODOCUMENTOS_VENTA_ALBARAN.Codigo)
                        {
                            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text = "";
                            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Visible = false;
                            g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentoFinFactura.Visible = false;

                            g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Visible = true;
                            g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentosFinAlbaran.Visible = true;
                        }
                    }
                    #endregion

                    Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_IncluirRegistros_Cabeceras_Busqueda.Text);
                    Rellenar_DataGridView_Agrupaciones_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_RegistrosSeleccionados_Busqueda.Text);

                    Rellenar_DataGridView_Tarifas_IncluirRegistros_Cabeceras(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Tarifas_IncluirRegistros_Cabeceras_Busqueda.Text);
                    Rellenar_DataGridView_Tarifas_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Tarifas_RegistrosSeleccionados_Busqueda.Text);

                    Rellenar_DataGrid_Contactos();
                    Rellenar_DataGrid_Contratos();
                    Rellenar_DataGrid_CuentasBancarias();

                    g_frm_P_Cliente_AUX_2.Exferia_ArbolSecundarioSeleccion_Cliente.RecargarSeleccionNodo();

                    Obtener_Listados_Completo_ClientesCadena_BaseDatos();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Cliente_AUX_2.Salir_P_Base();
            }
            finally
            {
                g_bol_Termino_TareaAsincrona_CargarDatos = true;

                //Hacemos foco al primer control.
                Funciones.Poner_Foco_Objeto(g_frm_P_Cliente_AUX_2, g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF);

                g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;
            }
        }

        public bool CargarDatos(long _lng_id)
        {
            bool bol_ValorDevuelto = true;

            try
            {
                g_mdl_INTERNO_MAE_Clientes_Modelo = g_obj_MAE_Clientes_Datos.Obtener(_lng_id);

                //Si no es Nulo Cargo lo Datos
                if (g_mdl_INTERNO_MAE_Clientes_Modelo != null)
                {

                    //Paginador ................................................................................
                    if (g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen != null &&
                        g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados != null &&
                        g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Count > 0)
                    {
                        long lng_id_ParaPaginacion = g_mdl_INTERNO_MAE_Clientes_Modelo.id;
                        int int_PaginaDelObjeto = g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.IndexOf(g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Where(n => n.ID.Equals(lng_id_ParaPaginacion)).FirstOrDefault());

                        g_frm_P_Cliente_AUX_2.g_obj_Funciones_Paginador.SetPaginaActual(int_PaginaDelObjeto);
                        // Asignando al paginador la pagina actual.
                        g_frm_P_Cliente_AUX_2.Exferia_Paginador_Clientes.PaginaActual = g_frm_P_Cliente_AUX_2.g_obj_Funciones_Paginador.GetPaginaActual();
                    }
                    //...........................................................................................

                    //ArbolSecundarioSeleccion Identificadores Necesarios .......................................
                    //idCliente
                    g_frm_P_Cliente_AUX_2.Exferia_ArbolSecundarioSeleccion_Cliente.Exferia_ArbolSecundarioSeleccion_IDCLIENTE = g_mdl_INTERNO_MAE_Clientes_Modelo.id;
                    //...........................................................................................

                    //Codigo
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.codigo;
                    //Nombre
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Nombre.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.nombreComercial;
                    //RazonSocial
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_RazonSocial.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.razonSocial;
                    CuentasContables_Rellenar_RazonSocial(g_mdl_INTERNO_MAE_Clientes_Modelo.razonSocial);

                    //Telefono 1
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Telefono1.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.telefono1;
                    //Telefono2
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Telefono2.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.telefono2;
                    //Fax
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Fax.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.fax;
                    //Riesgo
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Riesgo.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.riesgo.ToString();
                    //Descuento pronto pago
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoProntoPago.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.descuentoProntoPago.ToString();
                    //Descuento fin Albaran
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.descuentoFinalAlbaran.ToString();
                    //Numero proveedor
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_NumeroProveedor.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.numeroProveedor;
                    //Descuento General
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoGeneral.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.descuentoGeneral.ToString();
                    //Ean Cliente
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANCliente.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.EAN_Cliente;
                    //Ean Docmento
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANDocumento.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.EAN_Documento;
                    //Ean Entrega
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANEntrega.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.EAN_Entrega;
                    //Dias riesgo
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_DiasRiesgo.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.diasRiesgo.ToString();
                    //Documentos riesgo
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_DocumentosRiesgo.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.documentosRiesgo.ToString();
                    //Descuento Fin de factura
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.descuentoFinalFactura.ToString();
                    //Ean Vendedor
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANVendedor.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.EAN_Vendedor;
                    //Confidencial
                    g_frm_P_Cliente_AUX_2.Exferia_RichTextBox_ConBotones_Confidencial.Exferia_RichTextBox_RTF = g_mdl_INTERNO_MAE_Clientes_Modelo.confidencial;
                    //Observaciones
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Observaciones.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.observaciones;

                    //CIFNIF
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_Valor = g_mdl_INTERNO_MAE_Clientes_Modelo.cif;

                    //permiteCobrarAlbaran
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_PermiteCobrarAlbaran.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.permiteCobrarAlbaran != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.permiteCobrarAlbaran.Value : false; ;

                    //Email
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Email_EmailPersonal.Exferia_TextBox_Email_Valor = g_mdl_INTERNO_MAE_Clientes_Modelo.email;

                    //URL
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_URL_Web.Exferia_TextBox_URL_Valor = g_mdl_INTERNO_MAE_Clientes_Modelo.web;

                    //AplicarRiesgo
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.aplicarRiesgo == "2")
                    { g_frm_P_Cliente_AUX_2.Exferia_RadioButton_AplicarRiesgo_AvisaBloquea.Checked = true; }
                    else if (g_mdl_INTERNO_MAE_Clientes_Modelo.aplicarRiesgo == "1")
                    { g_frm_P_Cliente_AUX_2.Exferia_RadioButton_AplicarRiesgo_Avisa.Checked = true; }
                    else
                    { g_frm_P_Cliente_AUX_2.Exferia_RadioButton_AplicarRiesgo_NoAvisa.Checked = true; }

                    //Retencion
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Retencion.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.retencion != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.retencion.Value : false;
                    //Recargo
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Recargo.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.recargo != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.recargo.Value : false;
                    //noDeclararModelosOficiales
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_NoDelcararModeloOficiales.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.noDeclararModelosOficiales != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.noDeclararModelosOficiales.Value : false;
                    //criterioCaja
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_CriterioCaja.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.criterioCaja != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.criterioCaja.Value : false;
                    //Permite Depositos
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_PermiteDepositos.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.permiteDepositos != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.permiteDepositos.Value : false;
                    //Imprmir deuda Acumulada
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDeudaAcumulada.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.imprimirDeudaAcumulada != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.imprimirDeudaAcumulada.Value : false;
                    //Imprimir datos Cadena
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDatosCadena.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.imprimirDatosCadena != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.imprimirDatosCadena.Value : false;
                    //facturar datos cadena
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.facturarDatosCadena != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.facturarDatosCadena.Value : false;
                    //Imprimir trazabilidad
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Imprimirtrazabilidad.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.imprimir_Trazabilidad != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.imprimir_Trazabilidad.Value : false;

                    //No facturar
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_NoFacturar.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.noFacturar != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.noFacturar.Value : false;

                    //fecha Alta
                    g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta.Exferia_FechaSeleccion_Fecha = g_mdl_INTERNO_MAE_Clientes_Modelo.fechaAlta.ToString("dd/MM/yyyy");

                    //Fecha Baja
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.fechaBaja != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Baja.Exferia_FechaSeleccion_Fecha = g_mdl_INTERNO_MAE_Clientes_Modelo.fechaBaja.Value.ToString("dd/MM/yyyy");
                    }

                    //albaranValorado
                    INTERNO_ComboBox_Modelo mdl_AlbaranValorado_INTERNO_ComboBox_Modelo = null;
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.albaranValorado != null && g_mdl_INTERNO_MAE_Clientes_Modelo.albaranValorado.Trim().Length > 0)
                    {
                        mdl_AlbaranValorado_INTERNO_ComboBox_Modelo = g_lst_AlbaranValorado_INTERNO_ComboBox_Modelo.Where(m => m.Identificador.Equals(g_mdl_INTERNO_MAE_Clientes_Modelo.albaranValorado)).FirstOrDefault();
                        if (mdl_AlbaranValorado_INTERNO_ComboBox_Modelo != null)
                        {
                            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_AlbaranValorado.SelectedItem = mdl_AlbaranValorado_INTERNO_ComboBox_Modelo;
                        }
                    }

                    //TipoDocumento
                    INTERNO_ComboBox_Modelo mdl_TipoDocumento_INTERNO_ComboBox_Modelo = null;
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.tipoDocumento != null && g_mdl_INTERNO_MAE_Clientes_Modelo.tipoDocumento.Trim().Length > 0)
                    {
                        mdl_TipoDocumento_INTERNO_ComboBox_Modelo = g_lst_TipoDocumento_INTERNO_ComboBox_Modelo.Where(m => m.Identificador.Equals(g_mdl_INTERNO_MAE_Clientes_Modelo.tipoDocumento)).FirstOrDefault();
                        if (mdl_TipoDocumento_INTERNO_ComboBox_Modelo != null)
                        {
                            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoDocumento.SelectedItem = mdl_TipoDocumento_INTERNO_ComboBox_Modelo;
                        }
                    }

                    //Cadena
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.cadena != null && g_mdl_INTERNO_MAE_Clientes_Modelo.cadena.Value)
                    {
                        //ModeloFactura Cadena
                        INTERNO_ComboBox_Modelo mdl_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA;
                        if (g_mdl_INTERNO_MAE_Clientes_Modelo.modeloFactura != null && g_mdl_INTERNO_MAE_Clientes_Modelo.modeloFactura.Trim().Length > 0)
                        {
                            mdl_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA.Where(m => m.Identificador.Equals(g_mdl_INTERNO_MAE_Clientes_Modelo.modeloFactura)).FirstOrDefault();
                            if (mdl_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA != null)
                            {
                                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cadena.SelectedItem = mdl_ModeloFactura_INTERNO_ComboBox_Modelo_CADENA;
                            }
                        }
                    }
                    //Cliente
                    else
                    {
                        //ModeloFactura Cliente
                        INTERNO_ComboBox_Modelo mdl_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE;
                        if (g_mdl_INTERNO_MAE_Clientes_Modelo.modeloFactura != null && g_mdl_INTERNO_MAE_Clientes_Modelo.modeloFactura.Trim().Length > 0)
                        {
                            mdl_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE = g_lst_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE.Where(m => m.Identificador.Equals(g_mdl_INTERNO_MAE_Clientes_Modelo.modeloFactura)).FirstOrDefault();
                            if (mdl_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE != null)
                            {
                                g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.SelectedItem = mdl_ModeloFactura_INTERNO_ComboBox_Modelo_CLIENTE;
                            }
                        }
                    }

                    //TipoPuntoVerde
                    INTERNO_ComboBox_Modelo mdl_TipoPuntoVerde_INTERNO_ComboBox_Modelo = null;
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.tipoPuntoVerde != null && g_mdl_INTERNO_MAE_Clientes_Modelo.tipoPuntoVerde.Trim().Length > 0)
                    {
                        mdl_TipoPuntoVerde_INTERNO_ComboBox_Modelo = g_lst_TipoPuntoVerde_INTERNO_ComboBox_Modelo.Where(m => m.Identificador.Equals(g_mdl_INTERNO_MAE_Clientes_Modelo.tipoPuntoVerde)).FirstOrDefault();
                        if (mdl_TipoPuntoVerde_INTERNO_ComboBox_Modelo != null)
                        {
                            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoPuntoVerde.SelectedItem = mdl_TipoPuntoVerde_INTERNO_ComboBox_Modelo;
                        }
                    }

                    //FormasPago
                    g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_FormasPago.id;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_FormasPago.codigo;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_FormasPago.descripcion;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_FormasPago.fechaBorrado;

                    //Monedas
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Monedas.id;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Monedas.moneda;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Monedas.descripcion;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Monedas.fechaBorrado;

                    //Mayor_CuentasContable
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor.fechaBorrado;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_IdEjercicio_Baja = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor.idEjercicio_Baja;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_FechaBorrado = null;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_IdEjercicio_Baja = null;
                    }

                    //Mayor_CuentasRetencion
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor1 != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor1.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor1.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor1.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor1.fechaBorrado;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_IdEjercicio_Baja = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor1.idEjercicio_Baja;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_FechaBorrado = null;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_IdEjercicio_Baja = null;
                    }

                    //Mayor_Remesas
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor2 != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor2.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor2.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor2.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor2.fechaBorrado;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_IdEjercicio_Baja = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor2.idEjercicio_Baja;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_FechaBorrado = null;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_IdEjercicio_Baja = null;
                    }

                    //Mayor_ContraPartida
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor3 != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor3.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor3.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor3.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor3.fechaBorrado;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_IdEjercicio_Baja = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Mayor3.idEjercicio_Baja;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_FechaBorrado = null;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_IdEjercicio_Baja = null;
                    }

                    //MayorAuxiliar
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_MayorAuxiliar != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_MayorAuxiliar.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_MayorAuxiliar.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_MayorAuxiliar.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_MayorAuxiliar.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_FechaBorrado = null;
                    }

                    //Impuestos 
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_ImpuestosCabecera.id;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_ImpuestosCabecera.codigo;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_ImpuestosCabecera.descripcion;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_ImpuestosCabecera.fechaBorrado;

                    //Vendedores
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores.nombre;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_FechaBorrado = null;
                    }

                    //MotivosAlta
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_FechaBorrado = null;
                    }

                    //MotivosBaja
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja1 != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja1.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja1.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja1.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_MotivosAltaBaja1.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_FechaBorrado = null;
                    }

                    //VendedorCobrador
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores1 != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores1.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores1.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores1.nombre;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Vendedores1.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_FechaBorrado = null;
                    }

                    //Departamentos
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Departamentos != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Departamentos.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Departamentos.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Departamentos.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_Departamentos.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_FechaBorrado = null;
                    }

                    //Tesoreria
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Tesorerias != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Tesorerias.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Tesorerias.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Tesorerias.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Tesorerias.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_FechaBorrado = null;
                    }

                    //Delegacion
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Delegaciones1.id;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Delegaciones1.codigo;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Delegaciones1.descripcion;
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Delegaciones1.fechaBorrado;


                    //Prioridad
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Prioridades != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Prioridades.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Prioridades.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Prioridades.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Prioridades.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_FechaBorrado = null;
                    }

                    //PredefinidoCabecera_Ventas
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //PredefinidoCabecera_Cobros
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras1 != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras1.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras1.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras1.descripcion;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.CTA_PredefinidosCabeceras1.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Listado de Agrupaciones Cliente Linea relacionados
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_AgrupacionesClientesLineas != null &&
                        g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_AgrupacionesClientesLineas.Count > 0)
                    {
                        //Cabeceras
                        g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_AgrupacionesClientesLineas.Where(m => m.MAE_AgrupacionesClientesLineas.fechaBorrado == null && m.MAE_AgrupacionesClientesLineas.MAE_AgrupacionesClientesCabeceras.fechaBorrado == null).Select(m => m.MAE_AgrupacionesClientesLineas.idAgrupacionClienteCabecera).ToList();
                        Actualizar_AgrupacionesCabeceras_BaseDatos_Seleccionados_Colectivo(g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado, true);

                        //Lineas
                        g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_AgrupacionesClientesLineas.Where(m => m.MAE_AgrupacionesClientesLineas.fechaBorrado == null && m.MAE_AgrupacionesClientesLineas.MAE_AgrupacionesClientesCabeceras.fechaBorrado == null).Select(m => m.idAgrupacionClienteLinea).ToList();
                        Actualizar_AgrupacionesLineas_BaseDatos_Seleccionados_Colectivo(g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado, true);
                    }

                    //Listado de Tarifas Cliente Linea relacionados
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_TarifasCabecera != null &&
                        g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_TarifasCabecera.Count > 0)
                    {
                        //Cabeceras
                        g_lst_Tarifas_RegistrosSeleccionados_Listado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_TarifasCabecera.Select(m => m.idTarifaCabecera).ToList();
                        Actualizar_Tarifas_BaseDatos_Seleccionados_Colectivo(g_lst_Tarifas_RegistrosSeleccionados_Listado, true);
                    }

                    //Cargar datos de direcciones
                    Cargar_Datos_Direcciones();

                    //Listado de ClientesCadena relacionados
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.ClientesCadena != null &&
                        g_mdl_INTERNO_MAE_Clientes_Modelo.ClientesCadena.Count > 0)
                    {
                        g_lst_ClientesCadena_RegistrosSeleccionados_Listado.AddRange(g_mdl_INTERNO_MAE_Clientes_Modelo.ClientesCadena);
                    }

                    //Cadena relacionada
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes2 != null)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Id = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes2.id;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes2.codigo;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Descripcion = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes2.razonSocial;
                        g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes2.fechaBorrado;
                    }

                    //EnviarPorEmail
                    g_frm_P_Cliente_AUX_2.Exferia_CheckBox_EnviarPorEmail.Checked = g_mdl_INTERNO_MAE_Clientes_Modelo.enviarPorEmail != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.enviarPorEmail.Value : false;

                    //AtencionDe
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_AtencionDe.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.atencionDe;

                    //Referencia
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Referencia.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.referenciasFacturas;

                    //Web_Usuario
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Web_Usuario.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.web_Usuario;

                    //Web_Clave
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Web_Clave.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.web_Clave;

                    //Web_Clave
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_ConversionVolumen.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.conversionVolumen != null ? string.Format("{0:0.000}", g_mdl_INTERNO_MAE_Clientes_Modelo.conversionVolumen.Value) : "";

                    //SaltoEscala
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.saltoEscala != null && g_mdl_INTERNO_MAE_Clientes_Modelo.saltoEscala.Trim().Length > 0)
                    {
                        INTERNO_ComboBox_Modelo mdl_SaltoEscala_INTERNO_ComboBox_Modelo = g_lst_SaltoEscala_INTERNO_ComboBox_Modelo.Where(m => m.Identificador.Equals(g_mdl_INTERNO_MAE_Clientes_Modelo.saltoEscala)).FirstOrDefault();
                        if (mdl_SaltoEscala_INTERNO_ComboBox_Modelo != null)
                        {
                            g_frm_P_Cliente_AUX_2.Exferia_ComboBox_SaltoEscala.SelectedItem = mdl_SaltoEscala_INTERNO_ComboBox_Modelo;
                        }
                    }
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_Web_Clave.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.web_Clave;

                    ////seguro_Porcentaje
                    //g_frm_P_Cliente_AUX_2.Exferia_TextBox_SeguroPorcentaje.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.seguro_Porcentaje != null ? string.Format("{0:0.00}", g_mdl_INTERNO_MAE_Clientes_Modelo.seguro_Porcentaje.Value) : "";

                    ////seguro_Minimo
                    //g_frm_P_Cliente_AUX_2.Exferia_TextBox_SeguroMinimo.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.seguro_Minimo != null ? string.Format("{0:0.00}", g_mdl_INTERNO_MAE_Clientes_Modelo.seguro_Minimo.Value) : "";

                    //comisionReembolso_Porcentaje
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoPorcentaje.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.comisionReembolso_Porcentaje != null ? string.Format("{0:0.00}", g_mdl_INTERNO_MAE_Clientes_Modelo.comisionReembolso_Porcentaje.Value) : "";

                    //comisionReembolso_Minimo
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoMinimo.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.comisionReembolso_Minimo != null ? string.Format("{0:0.00}", g_mdl_INTERNO_MAE_Clientes_Modelo.comisionReembolso_Minimo.Value) : "";

                    //comisionReembolso_Maximo
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoMaximo.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.comisionReembolso_Maximo != null ? string.Format("{0:0.00}", g_mdl_INTERNO_MAE_Clientes_Modelo.comisionReembolso_Maximo.Value) : "";

                    //incrementoRecogida_Porcentaje
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_IncrementeRecogidaPorcentaje.Text = g_mdl_INTERNO_MAE_Clientes_Modelo.incrementoRecogida_Porcentaje != null ? string.Format("{0:0.00}", g_mdl_INTERNO_MAE_Clientes_Modelo.incrementoRecogida_Porcentaje.Value) : "";


                    // Mostrar Campo en el Titulo de mantenimiento
                    string str_MenuSuperior_Codigo = "";
                    if (g_frm_P_Cliente_AUX_2.g_mdl_PRV_OpcionesDetalle != null &&
                        g_frm_P_Cliente_AUX_2.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento != null &&
                        g_frm_P_Cliente_AUX_2.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Trim().Length > 0)
                    {
                        //Obtener el Array de Campos
                        string[] arr_Campos = g_frm_P_Cliente_AUX_2.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Split(new Char[] { ',' });
                        string str_ValorAMostrarFinal = "";

                        string[] str_Separador = new string[] { " [" };
                        //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
                        if (g_frm_P_Cliente_AUX_2.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
                        {
                            g_frm_P_Cliente_AUX_2.P_Base_TituloPantalla = (g_frm_P_Cliente_AUX_2.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
                        }

                        dynamic dnm_Objeto = g_mdl_INTERNO_MAE_Clientes_Modelo;
                        foreach (string str_campo in arr_Campos)
                        {
                            var Valor = dnm_Objeto.GetType().GetProperty(str_campo).GetValue(dnm_Objeto, null);
                            if (Valor != null)
                            {
                                str_ValorAMostrarFinal += " " + Valor;
                            }

                            // codigo
                            if (str_campo.Equals(nameof(g_mdl_INTERNO_MAE_Clientes_Modelo.codigo)))
                            {
                                str_MenuSuperior_Codigo = g_mdl_INTERNO_MAE_Clientes_Modelo.codigo;
                            }
                        }
                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_Cliente_AUX_2.P_Base_TituloPantalla += " [" + str_ValorAMostrarFinal + "] -Modificar";
                        }
                    }

                    CargarTiposTransportes();
                    CargarListadoSeguros();
                    //Actualizar el Boton de Seleccion de pantalla ####################################################
                    Variables.G_EMS_CONTROL_MENUSUPERIOR.Add_Texto_NombrePantalla_Descripciones(g_frm_P_Cliente_AUX_2.Tag.ToString(), str_MenuSuperior_Codigo);
                    //#################################################################################################

                    g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(CargarDatos));
                bol_ValorDevuelto = false;
            }

            return bol_ValorDevuelto;
        }

        #endregion

        private void Cargar_Datos_Direcciones()
        {
            //Cargamos las Direcciones si las tuviera
            if (g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Direcciones != null && g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Direcciones.Count > 0)
            {
                GEN_Direcciones mdl_GEN_Direcciones = null;

                //Direccion Envio
                mdl_GEN_Direcciones = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Direcciones.Where(m => m.tipoDireccion != null && m.tipoDireccion.Equals(Variables.G_STR_TIPODIRECCION_ENVIO)).FirstOrDefault();
                if (mdl_GEN_Direcciones != null)
                {
                    g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.CargarDatos(mdl_GEN_Direcciones);
                    g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.int_TIPODIRECCION = Convert.ToInt32(mdl_GEN_Direcciones.tipoDireccion);
                }

                //Direccion Facturacion
                mdl_GEN_Direcciones = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Direcciones.Where(m => m.tipoDireccion != null && m.tipoDireccion.Equals(Variables.G_STR_TIPODIRECCION_FACTURACION)).FirstOrDefault();
                if (mdl_GEN_Direcciones != null)
                {
                    g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.CargarDatos(mdl_GEN_Direcciones);
                    g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.int_TIPODIRECCION = Convert.ToInt32(mdl_GEN_Direcciones.tipoDireccion);
                }

                //Direccion Fiscal
                mdl_GEN_Direcciones = g_mdl_INTERNO_MAE_Clientes_Modelo.GEN_Direcciones.Where(m => m.tipoDireccion != null && m.tipoDireccion.Equals(Variables.G_STR_TIPODIRECCION_FISCAL)).FirstOrDefault();
                if (mdl_GEN_Direcciones != null)
                {
                    g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.CargarDatos(mdl_GEN_Direcciones);
                    g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.int_TIPODIRECCION = Convert.ToInt32(mdl_GEN_Direcciones.tipoDireccion);
                }
            }
        }

        #region Cuentas Bancarias 

        #region Rellenar DataGrid de CuentasBancarias
        public void Rellenar_DataGrid_CuentasBancarias()
        {
            try
            {
                if (g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias != null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_CuentasBancarias_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_CuentasBancarias_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_CuentasBancarias_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias.WorkerSupportsCancellation = true;
                }



                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows.Clear();
                g_int_TotalRegistrosInsertados_CuentasBancarias = 0;
                g_int_TotalRegistros_CuentasBancarias = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_CuentasBancarias_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_CuentasBancarias;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_CuentasBancarias_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_CuentasBancarias;

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_CuentesBancarias.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGrid_CuentasBancarias));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_CuentasBancarias_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                List<INTERNO_CuentasBancarias_Modelo> lst_INTERNO_CuentasBancarias_Modelo = Filtrar_CuentasBancarias();

                if (lst_INTERNO_CuentasBancarias_Modelo != null && lst_INTERNO_CuentasBancarias_Modelo.Count > 0)
                {
                    //Total
                    g_int_TotalRegistros_CuentasBancarias = lst_INTERNO_CuentasBancarias_Modelo.Count();

                    foreach (INTERNO_CuentasBancarias_Modelo mdl_INTERNO_CuentasBancarias_Modelo in lst_INTERNO_CuentasBancarias_Modelo)
                    {
                        //Se Cancelo la tarea asincrona #########################
                        if (((BackgroundWorker)sender).CancellationPending)
                        {
                            e.Cancel = true;
                            return;
                        }

                        //Progreso
                        g_int_TotalRegistrosInsertados_CuentasBancarias += 1;

                        //Añadir al DataGridView
                        ((BackgroundWorker)sender).ReportProgress(2, Transformar_Modelo_A_Row_CuentasBancarias(mdl_INTERNO_CuentasBancarias_Modelo, null));

                        //Esperar un poco
                        Thread.Sleep(1);
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        public DataGridViewRow Transformar_Modelo_A_Row_CuentasBancarias(INTERNO_CuentasBancarias_Modelo _mdl_INTERNO_CuentasBancarias_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias);
            }

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_CuentesBancarias_Columnas)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_CuentasBancarias_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_CuentasBancarias_Modelo, null);
                    if (dtt_Valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dtt_Valor.Value;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                {
                    bool? bol_Valor = (bool?)_mdl_INTERNO_CuentasBancarias_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_CuentasBancarias_Modelo, null);
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = bol_Valor != null && bol_Valor.Value ? "X" : "";
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                {
                    decimal? dcm_valor = (decimal?)_mdl_INTERNO_CuentasBancarias_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_CuentasBancarias_Modelo, null);
                    if (dcm_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                {
                    long? lng_valor = (long?)_mdl_INTERNO_CuentasBancarias_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_CuentasBancarias_Modelo, null);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                {
                    int? int_valor = (int?)_mdl_INTERNO_CuentasBancarias_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_CuentasBancarias_Modelo, null);
                    if (int_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = int_valor;
                    }
                }
                else
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_CuentasBancarias_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_CuentasBancarias_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        private void TareaAsincrona_Rellenar_DataGrid_CuentasBancarias_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de CuentasBancarias
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows.Add((DataGridViewRow)e.UserState);

                //Barra de Progreso
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_CuentasBancarias_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_CuentasBancarias;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_CuentasBancarias_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_CuentasBancarias;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_CuentasBancarias_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_Cliente_AUX_2.CuentasBancarias_Ordenar_DataGridView();
            }
        }

        private List<INTERNO_CuentasBancarias_Modelo> Filtrar_CuentasBancarias()
        {
            //Filtros Avanzados
            if (g_dct_ListadoFiltros_MAE_CuentasBancarias_SEPA_Cobros != null && g_dct_ListadoFiltros_MAE_CuentasBancarias_SEPA_Cobros.Count > 0)
            {
                return g_lst_INTERNO_CuentasBancarias_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_CuentasBancarias_Modelo>(g_dct_ListadoFiltros_MAE_CuentasBancarias_SEPA_Cobros, g_obj_ABS_Listado_MAE_CuentasBancariasSEPA_Cobros_Clientes)).ToList();
            }
            else
            {
                return g_lst_INTERNO_CuentasBancarias_Modelo;
            }
        }
        #endregion

        public void Poner_PorDefecto_CuentaBancaria()
        {
            //Ver si hay algunbo seleccionado
            if (g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows.Count > 0 && g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.SelectedRows.Count > 0)
            {
                bool bol_Actualizo_Correctamente = true;

                INTERNO_CuentasBancarias_Modelo mdl_PorDefecto_Anterior = g_lst_INTERNO_CuentasBancarias_Modelo.Where(m => m.porDefecto != null && m.porDefecto.Value == true).FirstOrDefault();
                if (mdl_PorDefecto_Anterior != null)
                {
                    bol_Actualizo_Correctamente = Datos_Generales.Actualizar_Valor_Campo(mdl_PorDefecto_Anterior.id, nameof(MAE_CuentasBancariasSEPA_Cobros), nameof(MAE_CuentasBancariasSEPA_Cobros.porDefecto), 0, false);
                    if (bol_Actualizo_Correctamente == false)
                    {
                        Mensajes.MostrarMensaje(Mensajes.G_STR_ERROR_GRABAR());
                    }
                    else
                    {
                        g_lst_INTERNO_CuentasBancarias_Modelo[g_lst_INTERNO_CuentasBancarias_Modelo.FindIndex(m => m.id.Equals(mdl_PorDefecto_Anterior.id))].porDefecto = false;

                        CuentasBancarias_Actualizar_Registro(mdl_PorDefecto_Anterior.id, G_ENUM_TIPOACCION.INT_MODIFICAR);
                    }
                }

                if (bol_Actualizo_Correctamente)
                {
                    bol_Actualizo_Correctamente = Datos_Generales.Actualizar_Valor_Campo(long.Parse(g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.SelectedRows[0].Cells[0].Value.ToString()), nameof(MAE_CuentasBancariasSEPA_Cobros), nameof(MAE_CuentasBancariasSEPA_Cobros.porDefecto), 1, false);
                    if (bol_Actualizo_Correctamente == false)
                    {
                        Mensajes.MostrarMensaje(Mensajes.G_STR_ERROR_GRABAR());
                    }
                    else
                    {
                        long lng_idCuentaBancaria = long.Parse(g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.SelectedRows[0].Cells[0].Value.ToString());
                        g_lst_INTERNO_CuentasBancarias_Modelo.Where(m => m.id.Equals(long.Parse(g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.SelectedRows[0].Cells[0].Value.ToString()))).FirstOrDefault().porDefecto = true;

                        CuentasBancarias_Actualizar_Registro(lng_idCuentaBancaria, G_ENUM_TIPOACCION.INT_MODIFICAR);
                    }
                }
            }
            else
            {
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_LISTADOS_NOHAYREGISTROSSELECCIONADOS());
            }
        }

        public void CuentasBancarias_Actualizar_Registro(long _lng_idCuentaBancaria, G_ENUM_TIPOACCION _enum_TipoAccion)
        {
            try
            {
                //Buscar el Registro en Base de datos
                INTERNO_CuentasBancarias_Modelo mdl_INTERNO_CuentasBancarias_Modelo = g_obj_MAE_CuentasBancariasSEPA_Cobros_Datos.Obtener(_lng_idCuentaBancaria);

                if (mdl_INTERNO_CuentasBancarias_Modelo != null)
                {
                    //Actualizar primero el List<> General ################################################################################
                    if (g_lst_INTERNO_CuentasBancarias_Modelo != null && g_lst_INTERNO_CuentasBancarias_Modelo.Count > 0)
                    {
                        MAE_CuentasBancariasSEPA_Cobros mdl_MAE_CuentasBancariasSEPA_Cobros_BUSQUEDA = g_lst_INTERNO_CuentasBancarias_Modelo.Where(m => m.id.Equals(mdl_INTERNO_CuentasBancarias_Modelo.id)).FirstOrDefault();
                        if (mdl_MAE_CuentasBancariasSEPA_Cobros_BUSQUEDA != null)
                        {
                            g_lst_INTERNO_CuentasBancarias_Modelo[g_lst_INTERNO_CuentasBancarias_Modelo.FindIndex(m => m.id.Equals(mdl_INTERNO_CuentasBancarias_Modelo.id))] = mdl_INTERNO_CuentasBancarias_Modelo;
                        }
                        else
                        {
                            g_lst_INTERNO_CuentasBancarias_Modelo.Add(mdl_INTERNO_CuentasBancarias_Modelo);
                        }
                    }
                    else
                    {
                        if (g_lst_INTERNO_CuentasBancarias_Modelo == null)
                        {
                            g_lst_INTERNO_CuentasBancarias_Modelo = new List<INTERNO_CuentasBancarias_Modelo>();
                        }

                        g_lst_INTERNO_CuentasBancarias_Modelo.Add(mdl_INTERNO_CuentasBancarias_Modelo);
                    }

                    //Actualizar el DataGridView #####################################################################################
                    //Modificar
                    if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_MODIFICAR))
                    {
                        DataGridViewRow row = g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows
                                   .Cast<DataGridViewRow>()
                                   .Where(r => r.Cells[nameof(MAE_CuentasBancariasSEPA_Cobros.id)].Value.Equals(_lng_idCuentaBancaria)).FirstOrDefault();

                        if (row != null)//Modificada
                        {
                            //Actualizar el Grid
                            Transformar_Modelo_A_Row_CuentasBancarias(mdl_INTERNO_CuentasBancarias_Modelo, row);

                            //Ordenar Listado
                            g_frm_P_Cliente_AUX_2.CuentasBancarias_Ordenar_DataGridView();
                        }
                    }
                    //Insertar
                    else if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_INSERTAR))
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows.Add(Transformar_Modelo_A_Row_CuentasBancarias(mdl_INTERNO_CuentasBancarias_Modelo, null));

                        //Ordenar Listado
                        g_frm_P_Cliente_AUX_2.CuentasBancarias_Ordenar_DataGridView();
                    }
                }
            }
            catch (Control_Errores)
            {
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(CuentasBancarias_Actualizar_Registro));
            }
        }
        public void CuentasBancarias_Borrar_Registro(List<long> _lst_idCuentasBancarias)
        {
            try
            {
                //Borrar primero el List<> General ################################################################################
                if (g_lst_INTERNO_CuentasBancarias_Modelo != null && g_lst_INTERNO_CuentasBancarias_Modelo.Count > 0)
                {
                    List<INTERNO_CuentasBancarias_Modelo> lst_INTERNO_CuentasBancarias_Modelo_BUSQUEDA = g_lst_INTERNO_CuentasBancarias_Modelo.Where(m => _lst_idCuentasBancarias.Contains(m.id)).ToList();
                    if (lst_INTERNO_CuentasBancarias_Modelo_BUSQUEDA != null && lst_INTERNO_CuentasBancarias_Modelo_BUSQUEDA.Count > 0)
                    {
                        foreach (INTERNO_CuentasBancarias_Modelo mdl_INTERNO_CuentasBancarias_Modelo in lst_INTERNO_CuentasBancarias_Modelo_BUSQUEDA)
                        {
                            g_lst_INTERNO_CuentasBancarias_Modelo.Remove(mdl_INTERNO_CuentasBancarias_Modelo);
                        }
                    }
                }

                //Borrar del DataGridView
                List<DataGridViewRow> lst_DataGridViewRow = g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows
                                .Cast<DataGridViewRow>()
                                .Where(r => _lst_idCuentasBancarias.Contains(long.Parse(r.Cells[nameof(INTERNO_CuentasBancarias_Modelo.id)].Value.ToString()))).ToList();

                if (lst_DataGridViewRow != null && lst_DataGridViewRow.Count > 0)
                {
                    //Borrar del Grid
                    foreach (DataGridViewRow dgvr_Borrar in lst_DataGridViewRow)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_DataGridView_CuentasBancarias.Rows.Remove(dgvr_Borrar);
                    }
                }

                //Restar Cantidad de Lineas Borradas
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_CuentasBancarias_BarraProgreso.Exferia_BarraProgreso_Total -= _lst_idCuentasBancarias.Count();
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_CuentasBancarias_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Contactos - _lst_idCuentasBancarias.Count();

                g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;
            }
            catch (Control_Errores)
            {
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(CuentasBancarias_Borrar_Registro));
            }
        }

        #region Borrar Datos CuentasBancarias
        public void BorrarDatos_CuentasBancarias(List<long> _lst_idCuentaBancaria)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_Cliente_AUX_2.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

                    List<object> lst_Argumentos = new List<object>();
                    lst_Argumentos.Add(_lst_idCuentaBancaria);

                    g_obj_TareaAsincrona_BorrarDatos_CuentasBancarias = new BackgroundWorker();
                    g_obj_TareaAsincrona_BorrarDatos_CuentasBancarias.DoWork += new DoWorkEventHandler(TareaAsincrona_BorrarDatos_CuentasBancarias_DoWork);
                    g_obj_TareaAsincrona_BorrarDatos_CuentasBancarias.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_BorrarDatos_CuentasBancarias_Completed);
                    g_obj_TareaAsincrona_BorrarDatos_CuentasBancarias.RunWorkerAsync(lst_Argumentos);

                    g_frm_PE_Esperando.ShowDialog();
                }
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                g_frm_P_Cliente_AUX_2.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(BorrarDatos_CuentasBancarias));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_BorrarDatos_CuentasBancarias_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
            {
                try
                {
                    //Argumentos
                    List<object> lst_Argumentos = (List<object>)e.Argument;
                    List<long> lst_idCuentaBancaria = (List<long>)lst_Argumentos[0];

                    INTERNO_OpcionesDetalle_Modelo mdl_INTERNO_OpcionesDetalle_Modelo_CUENTASBANCARIAS_SOCIOS = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_MAE_CUENTABANCARIA_CLIENTE);

                    // Borrar 
                    mdl_ValorDevuelto_Modelo = Borrar_Externo(mdl_INTERNO_OpcionesDetalle_Modelo_CUENTASBANCARIAS_SOCIOS, lst_idCuentaBancaria);

                    //Si esta todo Correcto cierro transaccion
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        mdl_ValorDevuelto_Modelo.Listado_Id = lst_idCuentaBancaria;
                        mdl_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_ELIMINAR;
                        transaccion_SQL.Complete();
                    }

                    transaccion_SQL.Dispose();
                }
                catch (ThreadAbortException ex)
                {
                    transaccion_SQL.Dispose();

                    Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_CuentasBancarias_DoWork));

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                catch (Control_Errores)
                {
                    transaccion_SQL.Dispose();

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                catch (Exception ex)
                {
                    transaccion_SQL.Dispose();

                    Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_CuentasBancarias_DoWork));

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                finally
                {
                    e.Result = mdl_ValorDevuelto_Modelo;
                }
            }
        }
        private void TareaAsincrona_BorrarDatos_CuentasBancarias_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Cliente_AUX_2.Enabled = true;

            try
            {


                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    // Devolver al Listado el Row Borrar
                    List<object> lst_obj = new List<object>();
                    lst_obj.Add(Variables.G_STR_OPCION_MAE_CUENTABANCARIA_CLIENTE);
                    lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Listado_Id);

                    g_frm_P_Cliente_AUX_2.P_Base_ActualizarRegistro_ConObjeto(lst_obj, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);

                    g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_CuentasBancarias_Completed));
            }
        }
        #endregion
        #endregion

        #region Contactos

        #region Rellenar DataGrid de Contactos
        public void Rellenar_DataGrid_Contactos()
        {
            try
            {
                if (g_TareaAsincrona_Rellenar_DataGrid_Contacto != null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_Contacto.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_Contacto.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_Contacto = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_Contacto.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Contacto_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_Contacto.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Contacto_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_Contacto.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Contacto_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_Contacto.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_Contacto.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.Rows.Clear();
                g_int_TotalRegistrosInsertados_Contactos = 0;
                g_int_TotalRegistros_Contactos = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contactos_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Contactos;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contactos_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Contactos;

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_Contacto.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGrid_Contactos));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Contacto_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                List<INTERNO_Contactos_Modelo> lst_INTERNO_MAE_Contactos_Listado_Modelo = Filtrar_Contactos();

                if (lst_INTERNO_MAE_Contactos_Listado_Modelo != null && lst_INTERNO_MAE_Contactos_Listado_Modelo.Count > 0)
                {
                    //Total
                    g_int_TotalRegistros_Contactos = lst_INTERNO_MAE_Contactos_Listado_Modelo.Count();

                    foreach (INTERNO_Contactos_Modelo mdl_INTERNO_Contactos_Modelo in lst_INTERNO_MAE_Contactos_Listado_Modelo)
                    {
                        //Se Cancelo la tarea asincrona #########################
                        if (((BackgroundWorker)sender).CancellationPending)
                        {
                            e.Cancel = true;
                            return;
                        }

                        //Progreso
                        g_int_TotalRegistrosInsertados_Contactos += 1;

                        //Añadir al DataGridView
                        ((BackgroundWorker)sender).ReportProgress(2, Transformar_Modelo_A_Row_Contacto(mdl_INTERNO_Contactos_Modelo, null));

                        //Esperar un poco
                        Thread.Sleep(1);
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Contacto(INTERNO_Contactos_Modelo _mdl_INTERNO_MAE_Contactos_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos);
            }

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Contactos_Columnas)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_MAE_Contactos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MAE_Contactos_Listado_Modelo, null);
                    if (dtt_Valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dtt_Valor.Value;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                {
                    bool? bol_Valor = (bool?)_mdl_INTERNO_MAE_Contactos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MAE_Contactos_Listado_Modelo, null);
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = bol_Valor != null && bol_Valor.Value ? "X" : "";
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                {
                    decimal? dcm_valor = (decimal?)_mdl_INTERNO_MAE_Contactos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MAE_Contactos_Listado_Modelo, null);
                    if (dcm_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                {
                    long? lng_valor = (long?)_mdl_INTERNO_MAE_Contactos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MAE_Contactos_Listado_Modelo, null);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                {
                    int? int_valor = (int?)_mdl_INTERNO_MAE_Contactos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MAE_Contactos_Listado_Modelo, null);
                    if (int_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = int_valor;
                    }
                }
                else
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_MAE_Contactos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MAE_Contactos_Listado_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        private void TareaAsincrona_Rellenar_DataGrid_Contacto_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de RemesaLinea
                g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.Rows.Add((DataGridViewRow)e.UserState);

                //Barra de Progreso
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contactos_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Contactos;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contactos_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Contactos;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Contacto_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_Cliente_AUX_2.Contactos_Ordenar_DataGridView();
            }
        }

        private List<INTERNO_Contactos_Modelo> Filtrar_Contactos()
        {
            //Filtros Avanzados
            if (g_dct_ListadoFiltros_MAE_Contactos != null && g_dct_ListadoFiltros_MAE_Contactos.Count > 0)
            {
                return g_lst_INTERNO_MAE_Contactos_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_Contactos_Modelo>(g_dct_ListadoFiltros_MAE_Contactos, g_obj_ABS_Listado_MAE_Contactos_Clientes)).ToList();
            }
            else
            {
                return g_lst_INTERNO_MAE_Contactos_Listado_Modelo;
            }
        }
        #endregion

        public void Contactos_Actualizar_Registro(long _lng_idContacto, G_ENUM_TIPOACCION _enum_TipoAccion)
        {
            try
            {
                //Buscar el Registro en Base de datos
                INTERNO_Contactos_Modelo mdl_INTERNO_MAE_Contactos_Listado_Modelo = g_obj_MAE_Contactos_Datos.Obtener(_lng_idContacto);

                if (mdl_INTERNO_MAE_Contactos_Listado_Modelo != null)
                {
                    //Actualizar primero el List<> General ################################################################################
                    if (g_lst_INTERNO_MAE_Contactos_Listado_Modelo != null && g_lst_INTERNO_MAE_Contactos_Listado_Modelo.Count > 0)
                    {
                        INTERNO_Contactos_Modelo mdl_INTERNO_MAE_Contactos_Listado_Modelo_BUSQUEDA = g_lst_INTERNO_MAE_Contactos_Listado_Modelo.Where(m => m.id.Equals(mdl_INTERNO_MAE_Contactos_Listado_Modelo.id)).FirstOrDefault();
                        if (mdl_INTERNO_MAE_Contactos_Listado_Modelo_BUSQUEDA != null)
                        {
                            g_lst_INTERNO_MAE_Contactos_Listado_Modelo[g_lst_INTERNO_MAE_Contactos_Listado_Modelo.FindIndex(m => m.id.Equals(mdl_INTERNO_MAE_Contactos_Listado_Modelo.id))] = mdl_INTERNO_MAE_Contactos_Listado_Modelo;
                        }
                        else
                        {
                            g_lst_INTERNO_MAE_Contactos_Listado_Modelo.Add(mdl_INTERNO_MAE_Contactos_Listado_Modelo);
                        }
                    }
                    else
                    {
                        if (g_lst_INTERNO_MAE_Contactos_Listado_Modelo == null)
                        {
                            g_lst_INTERNO_MAE_Contactos_Listado_Modelo = new List<INTERNO_Contactos_Modelo>();
                        }

                        g_lst_INTERNO_MAE_Contactos_Listado_Modelo.Add(mdl_INTERNO_MAE_Contactos_Listado_Modelo);
                    }
                }

                //Actualizar el DataGridView #####################################################################################
                //Modificar
                if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_MODIFICAR))
                {
                    DataGridViewRow row = g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.Rows
                               .Cast<DataGridViewRow>()
                               .Where(r => r.Cells[nameof(INTERNO_Contactos_Modelo.id)].Value.Equals(_lng_idContacto)).FirstOrDefault();

                    if (row != null)//Modificada
                    {
                        //Actualizar el Grid
                        Transformar_Modelo_A_Row_Contacto(mdl_INTERNO_MAE_Contactos_Listado_Modelo, row);

                        //Ordenar Listado
                        g_frm_P_Cliente_AUX_2.Contactos_Ordenar_DataGridView();
                    }
                }
                //Insertar
                else if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_INSERTAR))
                {
                    g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.Rows.Add(Transformar_Modelo_A_Row_Contacto(mdl_INTERNO_MAE_Contactos_Listado_Modelo, null));

                    //Ordenar Listado
                    g_frm_P_Cliente_AUX_2.Contactos_Ordenar_DataGridView();
                }

                //Sumar Cantidad de Lineas Borradas
                g_int_TotalRegistros_Contactos += 1;
                g_int_TotalRegistrosInsertados_Contactos += 1;

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contactos_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistrosInsertados_Contactos;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contactos_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistros_Contactos;
            }
            catch (Control_Errores)
            {
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Contactos_Actualizar_Registro));
            }
        }
        public void Contactos_Borrar_Registro(List<long> _lst_idContactos)
        {
            try
            {
                //Borrar primero el List<> General ################################################################################
                if (g_lst_INTERNO_MAE_Contactos_Listado_Modelo != null && g_lst_INTERNO_MAE_Contactos_Listado_Modelo.Count > 0)
                {
                    List<INTERNO_Contactos_Modelo> lst_INTERNO_MAE_Contactos_Listado_Modelo_BUSQUEDA = g_lst_INTERNO_MAE_Contactos_Listado_Modelo.Where(m => _lst_idContactos.Contains(m.id)).ToList();
                    if (lst_INTERNO_MAE_Contactos_Listado_Modelo_BUSQUEDA != null && lst_INTERNO_MAE_Contactos_Listado_Modelo_BUSQUEDA.Count > 0)
                    {
                        foreach (INTERNO_Contactos_Modelo mdl_INTERNO_MAE_Contactos_Listado_Modelo in lst_INTERNO_MAE_Contactos_Listado_Modelo_BUSQUEDA)
                        {
                            g_lst_INTERNO_MAE_Contactos_Listado_Modelo.Remove(mdl_INTERNO_MAE_Contactos_Listado_Modelo);
                        }
                    }
                }

                //Borrar del DataGridView
                List<DataGridViewRow> lst_DataGridViewRow = g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.Rows
                                .Cast<DataGridViewRow>()
                                .Where(r => _lst_idContactos.Contains(long.Parse(r.Cells[nameof(INTERNO_Contactos_Modelo.id)].Value.ToString()))).ToList();

                if (lst_DataGridViewRow != null && lst_DataGridViewRow.Count > 0)
                {
                    //Borrar del Grid
                    foreach (DataGridViewRow dgvr_Borrar in lst_DataGridViewRow)
                    {
                        g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contactos.Rows.Remove(dgvr_Borrar);
                    }
                }

                //Restar Cantidad de Lineas Borradas
                g_int_TotalRegistros_Contactos = g_int_TotalRegistrosInsertados_Contactos - _lst_idContactos.Count();
                g_int_TotalRegistrosInsertados_Contactos -= _lst_idContactos.Count();

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contactos_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistrosInsertados_Contactos;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contactos_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistros_Contactos;

                g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;
            }
            catch (Control_Errores)
            {
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Contactos_Borrar_Registro));
            }
        }

        #region Borrar Datos Contactos
        public void BorrarDatos_Contactos(List<long> _lst_idContacto)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_Cliente_AUX_2.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

                    List<object> lst_Argumentos = new List<object>();
                    lst_Argumentos.Add(_lst_idContacto);

                    g_obj_TareaAsincrona_BorrarDatos_Contactos = new BackgroundWorker();
                    g_obj_TareaAsincrona_BorrarDatos_Contactos.DoWork += new DoWorkEventHandler(TareaAsincrona_BorrarDatos_Contactos_DoWork);
                    g_obj_TareaAsincrona_BorrarDatos_Contactos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_BorrarDatos_Contactos_Completed);
                    g_obj_TareaAsincrona_BorrarDatos_Contactos.RunWorkerAsync(lst_Argumentos);

                    g_frm_PE_Esperando.ShowDialog();
                }
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                g_frm_P_Cliente_AUX_2.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(BorrarDatos_Contactos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_BorrarDatos_Contactos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
            {
                try
                {
                    //Argumentos
                    List<object> lst_Argumentos = (List<object>)e.Argument;
                    List<long> lst_idContacto = (List<long>)lst_Argumentos[0];

                    INTERNO_OpcionesDetalle_Modelo mdl_INTERNO_OpcionesDetalle_Modelo_CONTACTOS_CLIENTE = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_MAE_CONTACTO_CLIENTE);

                    // Borrar 
                    mdl_ValorDevuelto_Modelo = Borrar_Externo(mdl_INTERNO_OpcionesDetalle_Modelo_CONTACTOS_CLIENTE, lst_idContacto);

                    //Si esta todo Correcto cierro transaccion
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        mdl_ValorDevuelto_Modelo.Listado_Id = lst_idContacto;
                        mdl_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_ELIMINAR;
                        transaccion_SQL.Complete();
                    }

                    transaccion_SQL.Dispose();
                }
                catch (ThreadAbortException ex)
                {
                    transaccion_SQL.Dispose();

                    Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Contactos_DoWork));

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                catch (Control_Errores)
                {
                    transaccion_SQL.Dispose();

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                catch (Exception ex)
                {
                    transaccion_SQL.Dispose();

                    Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Contactos_DoWork));

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                finally
                {
                    e.Result = mdl_ValorDevuelto_Modelo;
                }
            }
        }
        private void TareaAsincrona_BorrarDatos_Contactos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Cliente_AUX_2.Enabled = true;

            try
            {


                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    // Devolver al Listado el Row Borrar
                    List<object> lst_obj = new List<object>();
                    lst_obj.Add(Variables.G_STR_OPCION_MAE_CONTACTO_CLIENTE);
                    lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Listado_Id);

                    g_frm_P_Cliente_AUX_2.P_Base_ActualizarRegistro_ConObjeto(lst_obj, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);

                    g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Contactos_Completed));
            }
        }
        #endregion
        #endregion


        #region Contratos
        #region Rellenar DataGrid de Contratos
        public void Rellenar_DataGrid_Contratos()
        {
            try
            {
                if (g_TareaAsincrona_Rellenar_DataGrid_Contrato != null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_Contrato.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_Contrato.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_Contrato = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_Contrato.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Contrato_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_Contrato.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Contrato_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_Contrato.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Contrato_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_Contrato.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_Contrato.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contratos.Rows.Clear();
                g_int_TotalRegistrosInsertados_Contratos = 0;
                g_int_TotalRegistros_Contratos = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contratos_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Contratos;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contratos_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Contratos;

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_Contrato.RunWorkerAsync();
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGrid_Contratos));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Contrato_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                List<INTERNO_Contratos_Modelo> lst_INTERNO_HRM_Contratos_Listado_Modelo = Filtrar_Contratos();

                if (lst_INTERNO_HRM_Contratos_Listado_Modelo != null && lst_INTERNO_HRM_Contratos_Listado_Modelo.Count > 0)
                {
                    //Total
                    g_int_TotalRegistros_Contratos = lst_INTERNO_HRM_Contratos_Listado_Modelo.Count();

                    foreach (INTERNO_Contratos_Modelo mdl_INTERNO_Contratos_Modelo in lst_INTERNO_HRM_Contratos_Listado_Modelo)
                    {
                        //Se Cancelo la tarea asincrona #########################
                        if (((BackgroundWorker)sender).CancellationPending)
                        {
                            e.Cancel = true;
                            return;
                        }

                        //Progreso
                        g_int_TotalRegistrosInsertados_Contactos += 1;

                        //Añadir al DataGridView
                        ((BackgroundWorker)sender).ReportProgress(2, Transformar_Modelo_A_Row_Contrato(mdl_INTERNO_Contratos_Modelo, null));

                        //Esperar un poco
                        Thread.Sleep(1);
                    }
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        public DataGridViewRow Transformar_Modelo_A_Row_Contrato(INTERNO_Contratos_Modelo _mdl_INTERNO_HRM_Contratos_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contratos.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contratos);
            }

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Contratos_Columnas)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_HRM_Contratos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_HRM_Contratos_Listado_Modelo, null);
                    if (dtt_Valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dtt_Valor.Value;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                {
                    long? lng_valor = (long?)_mdl_INTERNO_HRM_Contratos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_HRM_Contratos_Listado_Modelo, null);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_HRM_Contratos_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_HRM_Contratos_Listado_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }
        private void TareaAsincrona_Rellenar_DataGrid_Contrato_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de RemesaLinea
                g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contratos.Rows.Add((DataGridViewRow)e.UserState);

                //Barra de Progreso
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contratos_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Contactos;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contratos_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Contactos;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Contrato_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_Cliente_AUX_2.Contratos_Ordenar_DataGridView();
            }
        }

        private List<INTERNO_Contratos_Modelo> Filtrar_Contratos()
        {
            //Filtros Avanzados
            if (g_dct_ListadoFiltros_HRM_Contratos != null && g_dct_ListadoFiltros_HRM_Contratos.Count > 0)
            {
                return g_lst_INTERNO_HRM_Contratos_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_Contratos_Modelo>(g_dct_ListadoFiltros_HRM_Contratos, g_obj_ABS_Listado_HRM_Contratos_Clientes)).ToList();
            }
            else
            {
                return g_lst_INTERNO_HRM_Contratos_Listado_Modelo;
            }
        }
        #endregion
        public void Contratos_Actualizar_Registro(long _lng_idContrato, G_ENUM_TIPOACCION _enum_TipoAccion)
        {
            try
            {
                //Buscar el Registro en Base de datos
                HRM_Contratos mdl_HRM_Contratos = Obtener_HRM_Contrato(_lng_idContrato);

                INTERNO_Contratos_Modelo mdl_INTERNO_HRM_Contratos_Listado_Modelo = mdl_HRM_Contratos != null ? new INTERNO_Contratos_Modelo()
                {
                    id = mdl_HRM_Contratos.id,
                    descripcion = mdl_HRM_Contratos.descripcion,
                    codigo = mdl_HRM_Contratos.codigo,
                    fecha = mdl_HRM_Contratos.fecha,
                    fechaBorrado = mdl_HRM_Contratos.fechaBorrado
                } : null;

                if (mdl_INTERNO_HRM_Contratos_Listado_Modelo != null)
                {
                    //Actualizar primero el List<> General ################################################################################
                    if (g_lst_INTERNO_HRM_Contratos_Listado_Modelo != null && g_lst_INTERNO_HRM_Contratos_Listado_Modelo.Count > 0)
                    {
                        INTERNO_Contratos_Modelo mdl_INTERNO_HRM_Contratos_Listado_Modelo_BUSQUEDA = g_lst_INTERNO_HRM_Contratos_Listado_Modelo.Where(m => m.id.Equals(mdl_INTERNO_HRM_Contratos_Listado_Modelo.id)).FirstOrDefault();
                        if (mdl_INTERNO_HRM_Contratos_Listado_Modelo_BUSQUEDA != null)
                        {
                            g_lst_INTERNO_HRM_Contratos_Listado_Modelo[g_lst_INTERNO_HRM_Contratos_Listado_Modelo.FindIndex(m => m.id.Equals(mdl_INTERNO_HRM_Contratos_Listado_Modelo.id))] = mdl_INTERNO_HRM_Contratos_Listado_Modelo;
                        }
                        else
                        {
                            g_lst_INTERNO_HRM_Contratos_Listado_Modelo.Add(mdl_INTERNO_HRM_Contratos_Listado_Modelo);
                        }
                    }
                    else
                    {
                        if (g_lst_INTERNO_HRM_Contratos_Listado_Modelo == null)
                        {
                            g_lst_INTERNO_HRM_Contratos_Listado_Modelo = new List<INTERNO_Contratos_Modelo>();
                        }

                        g_lst_INTERNO_HRM_Contratos_Listado_Modelo.Add(mdl_INTERNO_HRM_Contratos_Listado_Modelo);
                    }
                }

                //Actualizar el DataGridView #####################################################################################
                //Modificar
                if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_MODIFICAR))
                {
                    DataGridViewRow row = g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contratos.Rows
                               .Cast<DataGridViewRow>()
                               .Where(r => r.Cells[nameof(INTERNO_Contratos_Modelo.id)].Value.Equals(_lng_idContrato)).FirstOrDefault();

                    if (row != null)//Modificada
                    {
                        //Actualizar el Grid
                        Transformar_Modelo_A_Row_Contrato(mdl_INTERNO_HRM_Contratos_Listado_Modelo, row);

                        //Ordenar Listado
                        g_frm_P_Cliente_AUX_2.Contratos_Ordenar_DataGridView();
                    }
                }
                //Insertar
                else if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_INSERTAR))
                {
                    g_frm_P_Cliente_AUX_2.Exferia_DatagridView_Contratos.Rows.Add(Transformar_Modelo_A_Row_Contrato(mdl_INTERNO_HRM_Contratos_Listado_Modelo, null));

                    //Ordenar Listado
                    g_frm_P_Cliente_AUX_2.Contratos_Ordenar_DataGridView();
                }

                //Sumar Cantidad de Lineas Borradas
                g_int_TotalRegistros_Contratos += 1;
                g_int_TotalRegistrosInsertados_Contratos += 1;

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contratos_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistrosInsertados_Contratos;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Contratos_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistros_Contratos;
            }
            catch (Control_Errores)
            {
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Contratos_Actualizar_Registro));
            }
        }

        private HRM_Contratos Obtener_HRM_Contrato(long _lng_id)
        {
            HRM_Contratos _mdl = null;
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_HERMES + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_HERMES + "." + Variables.G_STR_LIBRERIA_DATOSHERMES);
                //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_DATOSHERMES_PROCEDIMIENTO_HRMCONTRATO_OBTENER, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { _lng_id };
                //Pasamos los parametros al metodo y lo ejecutamos
                _mdl = (HRM_Contratos)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            return _mdl;
        }
        #endregion Contratos

        #region Grabar Datos

        public void GrabarDatos()
        {
            try
            {
                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_P_Cliente_AUX_2.Enabled = false;
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_GRABANDODATOS());

                g_obj_TareaAsincrona_GrabarDatos = new BackgroundWorker();
                g_obj_TareaAsincrona_GrabarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_GrabarDatos_DoWork);
                g_obj_TareaAsincrona_GrabarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_GrabarDatos_Completed);
                g_obj_TareaAsincrona_GrabarDatos.RunWorkerAsync();

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_bol_GrabarDatos_TerminoCorrectamente = false;
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                g_frm_P_Cliente_AUX_2.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(GrabarDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_GrabarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_VALIDACION = ValidarDatos();
                if (mdl_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    mdl_ValorDevuelto_Modelo = GrabarDatos_Final();
                }
                else
                {
                    mdl_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_GrabarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Cliente_AUX_2.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);

                        //Poner el Foco en el objeto que tuvoel problema en validar
                        if (mdl_ValorDevuelto_Modelo_Resultado.Objeto != null)
                        {
                            Funciones.Poner_Foco_Objeto(g_frm_P_Cliente_AUX_2, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }

                    g_bol_GrabarDatos_TerminoCorrectamente = false;
                }
                else
                {
                    #region SINCRONIZACION
                    INTERNO_Sincronizacion_ActualizarRegistro_Modelo mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo = new INTERNO_Sincronizacion_ActualizarRegistro_Modelo();
                    mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo.tabla = nameof(MAE_Clientes);
                    mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo.idClavePrimaria = mdl_ValorDevuelto_Modelo_Resultado.Id;

                    Sincronizacion_ActualizarRegistro.Sincronizacion_ActualizarRegistro_RESTOTABLAS(mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo);
                    #endregion

                    // Devolver al Listado el Row Añadido/Modificado
                    if (g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_Cliente_AUX_2.P_Base_F3Origen != null)
                    {
                        g_frm_P_Cliente_AUX_2.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    #region Cargar datos de direcciones
                    //Primero Vaciamos
                    g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.VaciarDatos();
                    g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.VaciarDatos();
                    g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.VaciarDatos();
                    //Luego Cargamos
                    Cargar_Datos_Direcciones();
                    #endregion

                    #region Cargar Emails
                    //primero Vacio
                    g_int_CTU_P_Clientes_AUX_2_Emails_PosicionY = 5;
                    g_int_CTU_P_Clientes_AUX_2_Emails_Cantidad = 0;
                    g_lst_CTU_P_Clientes_AUX_2_Emails.Clear();
                    g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Clear();

                    //Emails 
                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails != null && g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails.Count() > 0)
                    {
                        foreach (MAE_ClientesEmails mdl_MAE_ClientesEmails in g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails)
                        {
                            CrearEmails(mdl_MAE_ClientesEmails);
                        }
                    }
                    #endregion

                    g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_Completed));
            }
        }

        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Si el codigo esta vacio y se intenta buscar el ultimo numerico y llego al limite de base de datos
                if (g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo.Text.Trim().Length == 0)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_AUX_1 = Buscar_CodigoSiguiente();

                    if (mdl_INTERNO_ValorDevuelto_Modelo_AUX_1.TodoCorrecto == false)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo_AUX_1.Mensaje;
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo;
                    }
                }

                // El codigo no puede estar Repetido
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    string str_Codigo = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo.Text.Trim();
                    if (g_bol_CampoCodigo_Numerico)
                    {
                        int int_Codigo = int.Parse(str_Codigo);
                        str_Codigo = int_Codigo.ToString();
                    }

                    if (Datos_Generales.Buscar_CodigoRepetido(nameof(MAE_Clientes), nameof(MAE_Clientes.codigo), str_Codigo, nameof(MAE_Clientes.id), (g_mdl_INTERNO_MAE_Clientes_Modelo != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.id : 0), nameof(MAE_Clientes.idEmpresa), g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.lng_idEmpresa, true))
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_REPETIDO(g_frm_P_Cliente_AUX_2.Exferia_Label_Codigo.Text);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo;
                    }
                }

                // La razon social no puede estar vacía
                if ((mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Cliente_AUX_2.Exferia_TextBox_RazonSocial.Text.Trim().Length == 0))
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cliente_AUX_2.Exferia_Label_RazonSocial.Text);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_RazonSocial;
                }

                //Validar si el CIF no está vacio
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_Valor.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_USC_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF;
                }

                // Validar si el CIF está correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && CIFNIF_Actualizar_Validacion() == false)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_USC_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF;
                }

                // Si hay email que este Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cliente_AUX_2.Exferia_TextBox_Email_EmailPersonal.Validar_Email() == false)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_USC_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Email_EmailPersonal.Exferia_TextBox_Email_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Email_EmailPersonal;
                }

                // Si hay WEB que este Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cliente_AUX_2.Exferia_TextBox_URL_Web.Validar_URL() == false)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_USC_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_TextBox_URL_Web.Exferia_TextBox_URL_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_URL_Web;
                }

                // Moneda no puede estar Vacio (Obligatorio)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Codigo.Trim().Length == 0 &&
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }
                // Si hay Moneda validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // la formapago no puede estar Vacia (Obligatoria)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Codigo.Trim().Length == 0 &&
                    g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay formaPago validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay CuentaContable validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay CuentaRetenciones validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay CuentaContraAprtida validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }
                // La fecha de alta no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta;
                    }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta;
                    }
                }

                // La fecha de baja, si no esta vacio, debe ser correcta. (mensaje de vacio se queda vacio para que no controle el error)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Baja.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));
                    if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Baja.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Baja;
                    }
                }

                // Si hay Remesa validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay MayorAuxiliar validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Cobrador validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Departamento validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Tesoreria validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // El impuesto no puede estar Vacio (Obligatorio)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Codigo.Trim().Length == 0 &&
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Impuesto validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Vendedor validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Descuento Fin de Albaran tiene que ser menor o iguala 100 y mayor que 0
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto &&
                        g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text.Trim().Length != 0 &&
                        (
                            decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text.Trim()) < 0 ||
                           decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text.Trim()) > 100
                        )
                    )
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_RANGOVALORINCORRECTO("Dto. " + g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentosFinAlbaran.Text, "mayor que 0", "igual o mayor que 100");
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran;
                }

                // Si hay Descuento Fin de Factura tiene que ser menor o iguala 100 y mayor que 0
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto &&
                        g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text.Trim().Length != 0 &&
                        (
                            decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text.Trim()) < 0 ||
                           decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text.Trim()) > 100
                        )
                    )
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_RANGOVALORINCORRECTO("Dto. " + g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentoFinFactura.Text, "mayor que 0", "igual o mayor que 100");
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura;
                }

                // Si hay Descuento Prontopago tiene que ser menor o iguala 100 y mayor que 0
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto &&
                        g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoProntoPago.Text.Trim().Length != 0 &&
                        (
                            decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoProntoPago.Text.Trim()) < 0 ||
                           decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoProntoPago.Text.Trim()) > 100
                        )
                    )
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_RANGOVALORINCORRECTO("Dto. " + g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentoProntoPago.Text, "mayor que 0", "igual o mayor que 100");
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoProntoPago;
                }

                // Si hay Descuento General tiene que ser menor o iguala 100 y mayor que 0
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto &&
                        g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoGeneral.Text.Trim().Length != 0 &&
                        (
                            decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoGeneral.Text.Trim()) < 0 ||
                           decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoGeneral.Text.Trim()) > 100
                        )
                    )
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_RANGOVALORINCORRECTO("Dto. " + g_frm_P_Cliente_AUX_2.Exferia_Label_DescuentoGeneral.Text, "mayor que 0", "igual o mayor que 100");
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoGeneral;
                }


                // Si hay MotivoAlta validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay MotivoBaja validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // La Delegacion no puede estar Vacio (Obligatorio)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Codigo.Trim().Length == 0 &&
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Delegacion validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Prioridad tipos validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay PredefinidoCabecera_Ventas tipos validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay PredefinidoCabecera_Cobros tipos validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                //Si hay Cuenta retencion no puede estar vacia
                if (g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Retencion.Checked)
                {
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Codigo.Trim().Length == 0 &&
                        g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Descripcion.Trim().Length == 0)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Titulo);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                    }
                }

                //ClienteCadena
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    // Si es un Cliente verificar si tuviera una cadena seleccionada)
                    if (g_frm_P_Cliente_AUX_2.Exferia_RadioButton_ClienteCadena_Cliente.Checked)
                    {
                        // Si hay Cadena tipos validar que es Correcta
                        if ((g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Codigo.Trim().Length != 0 ||
                            g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Id == -1)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Titulo);
                            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                        }

                        //Si no tiene el check de facturar concadenas, debe tener seleccionado un modelo de facturacion
                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto &&
                            g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Checked == false &&
                            (
                                (INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.SelectedItem == null ||
                                ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.SelectedItem).Identificador.Equals("-1")
                            )
                        )
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_VALIDACIONES_NOHAYREGISTROSSELECCIONADOS(g_frm_P_Cliente_AUX_2.Exferia_Label_ModeloFactura_Cliente.Text);
                            mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente;
                        }
                    }
                }

                //DIRECCIONES ###################################################################
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.ValidarDatos();
                }

                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.ValidarDatos();
                }

                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.ValidarDatos();
                }
                //################################################################################

                //Validar emails
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (g_lst_CTU_P_Clientes_AUX_2_Emails != null && g_lst_CTU_P_Clientes_AUX_2_Emails.Count > 0)
                    {
                        CTU_P_Clientes_AUX_2_Emails obj_CTU_P_Clientes_AUX_2_Emails_VALIDAR;
                        foreach (int int_Control in g_lst_CTU_P_Clientes_AUX_2_Emails)
                        {
                            obj_CTU_P_Clientes_AUX_2_Emails_VALIDAR = (CTU_P_Clientes_AUX_2_Emails)g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Find("controlusuario_CTU_P_Clientes_AUX_2_Emails" + int_Control, false).FirstOrDefault();
                            if (obj_CTU_P_Clientes_AUX_2_Emails_VALIDAR != null)
                            {
                                //validar LINEAS
                                mdl_INTERNO_ValorDevuelto_Modelo = obj_CTU_P_Clientes_AUX_2_Emails_VALIDAR.ValidarDatos();

                                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto == false)
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(ValidarDatos));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo GrabarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    MAE_Clientes mdl_MAE_Cliente = new MAE_Clientes();
                    DateTime? dtt_fechaNula = null;
                    decimal? dcm_Nulo = null;
                    G_ENUM_TIPOACCION enum_TipoAccion = G_ENUM_TIPOACCION.INT_NADA;

                    //id
                    mdl_MAE_Cliente.id = g_mdl_INTERNO_MAE_Clientes_Modelo != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.id : -1;

                    //Asignar el idEmpresa...........................................................................................
                    if ((g_mdl_INTERNO_MAE_Clientes_Modelo != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.idEmpresa : -1) != -1)
                    {
                        mdl_MAE_Cliente.idEmpresa = g_mdl_INTERNO_MAE_Clientes_Modelo.idEmpresa;
                    }
                    else
                    {
                        //Buscar el idEmpresa que Corresponda
                        mdl_MAE_Cliente.idEmpresa = Datos_Generales.GEN_Empresas_Devolver_IdEmpresa_AGrabar(g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.lng_idEmpresa, nameof(MAE_Clientes));
                    }

                    //codigo
                    mdl_MAE_Cliente.codigo = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Codigo.Text.Trim();
                    //nombreComercial
                    mdl_MAE_Cliente.nombreComercial = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Nombre.Text.Trim();
                    //razonSocial
                    mdl_MAE_Cliente.razonSocial = g_frm_P_Cliente_AUX_2.Exferia_TextBox_RazonSocial.Text.Trim();
                    //telefono1
                    mdl_MAE_Cliente.telefono1 = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Telefono1.Text.Trim();
                    //telefono2
                    mdl_MAE_Cliente.telefono2 = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Telefono2.Text;
                    //fax
                    mdl_MAE_Cliente.fax = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Fax.Text.Trim();
                    //cif
                    mdl_MAE_Cliente.cif = g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_Valor.Trim();
                    //numeroProveedor
                    mdl_MAE_Cliente.numeroProveedor = g_frm_P_Cliente_AUX_2.Exferia_TextBox_NumeroProveedor.Text.Trim();
                    //EAN_Cliente
                    mdl_MAE_Cliente.EAN_Cliente = g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANCliente.Text.Trim();
                    //EAN_Documento
                    mdl_MAE_Cliente.EAN_Documento = g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANDocumento.Text.Trim();
                    //EAN_Entrega
                    mdl_MAE_Cliente.EAN_Entrega = g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANEntrega.Text.Trim();
                    //infoMicro
                    mdl_MAE_Cliente.infoMicro = "";
                    //EAN_Vendedor
                    mdl_MAE_Cliente.EAN_Vendedor = g_frm_P_Cliente_AUX_2.Exferia_TextBox_EANVendedor.Text.Trim();
                    //confidencial
                    mdl_MAE_Cliente.confidencial = g_frm_P_Cliente_AUX_2.Exferia_RichTextBox_ConBotones_Confidencial.Exferia_RichTextBox_RTF;
                    //observaciones
                    mdl_MAE_Cliente.observaciones = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Observaciones.Text.Trim();

                    //email
                    mdl_MAE_Cliente.email = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Email_EmailPersonal.Exferia_TextBox_Email_Valor.Trim();

                    //web
                    mdl_MAE_Cliente.web = g_frm_P_Cliente_AUX_2.Exferia_TextBox_URL_Web.Exferia_TextBox_URL_Valor.Trim();

                    //permiteCobrarAlbaran
                    mdl_MAE_Cliente.permiteCobrarAlbaran = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_PermiteCobrarAlbaran.Checked;

                    //Mapa
                    if (g_frm_P_Cliente_AUX_2.CTU_Mapa.DatosMapa_Puntos().Count > 0 && !g_frm_P_Cliente_AUX_2.CTU_Mapa.DatosMapa_Puntos()[0].Posicion_Punto.IsEmpty)
                    {
                        mdl_MAE_Cliente.posicionLatitud = g_frm_P_Cliente_AUX_2.CTU_Mapa.DatosMapa_Puntos()[0].Posicion_Punto.Lat.ToString();
                        mdl_MAE_Cliente.posicionLongitud = g_frm_P_Cliente_AUX_2.CTU_Mapa.DatosMapa_Puntos()[0].Posicion_Punto.Lng.ToString();
                    }
                    else
                    {
                        mdl_MAE_Cliente.posicionLatitud = "";
                        mdl_MAE_Cliente.posicionLongitud = "";
                    }

                    // riesgo
                    if (g_frm_P_Cliente_AUX_2.Exferia_TextBox_Riesgo.Text.Trim().Length > 0)
                    {
                        mdl_MAE_Cliente.riesgo = Convert.ToDecimal(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Riesgo.Text.Trim());
                    }
                    //descuentoProntoPago
                    if (g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoProntoPago.Text.Trim().Length > 0)
                    {
                        mdl_MAE_Cliente.descuentoProntoPago = Convert.ToDecimal(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoProntoPago.Text.Trim());
                    }
                    //descuentoFinalAlbaran
                    if (g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text.Trim().Length > 0)
                    {
                        mdl_MAE_Cliente.descuentoFinalAlbaran = Convert.ToDecimal(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentosFinAlbaran.Text.Trim());
                    }
                    //descuentoGeneral
                    if (g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoGeneral.Text.Trim().Length > 0)
                    {
                        mdl_MAE_Cliente.descuentoGeneral = Convert.ToDecimal(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoGeneral.Text.Trim());
                    }
                    //descuentoFinalFactura
                    if (g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text.Trim().Length > 0)
                    {
                        mdl_MAE_Cliente.descuentoFinalFactura = Convert.ToDecimal(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DescuentoFinFactura.Text.Trim());
                    }
                    // diasRiesgo
                    if (g_frm_P_Cliente_AUX_2.Exferia_TextBox_DiasRiesgo.Text.Trim().Length > 0)
                    {
                        mdl_MAE_Cliente.diasRiesgo = Convert.ToInt32(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DiasRiesgo.Text.Trim());
                    }
                    //documentosRiesgo
                    if (g_frm_P_Cliente_AUX_2.Exferia_TextBox_DocumentosRiesgo.Text.Trim().Length > 0)
                    {
                        mdl_MAE_Cliente.documentosRiesgo = Convert.ToInt32(g_frm_P_Cliente_AUX_2.Exferia_TextBox_DocumentosRiesgo.Text.Trim());
                    }

                    // Aplicar Riesgo
                    if (g_frm_P_Cliente_AUX_2.Exferia_RadioButton_AplicarRiesgo_AvisaBloquea.Checked)
                    {
                        mdl_MAE_Cliente.aplicarRiesgo = "2";
                    }
                    else if (g_frm_P_Cliente_AUX_2.Exferia_RadioButton_AplicarRiesgo_Avisa.Checked)
                    {
                        mdl_MAE_Cliente.aplicarRiesgo = "1";
                    }
                    else
                    {
                        mdl_MAE_Cliente.aplicarRiesgo = "0";
                    }

                    //retencion
                    mdl_MAE_Cliente.retencion = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Retencion.Checked;
                    //recargo
                    mdl_MAE_Cliente.recargo = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Recargo.Checked;
                    //permiteDepositos
                    mdl_MAE_Cliente.permiteDepositos = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_PermiteDepositos.Checked;
                    //imprimir_Trazabilidad
                    mdl_MAE_Cliente.imprimir_Trazabilidad = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Imprimirtrazabilidad.Checked;
                    //noDeclararModelosOficiales
                    mdl_MAE_Cliente.noDeclararModelosOficiales = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_NoDelcararModeloOficiales.Checked;
                    //criterioCaja
                    mdl_MAE_Cliente.criterioCaja = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_CriterioCaja.Checked;
                    //noFacturar
                    mdl_MAE_Cliente.noFacturar = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_NoFacturar.Checked;
                    //imprimirDeudaAcumulada
                    mdl_MAE_Cliente.imprimirDeudaAcumulada = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDeudaAcumulada.Checked;

                    //AlbaranValorado
                    if ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_AlbaranValorado.SelectedItem == null ||
                        ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_AlbaranValorado.SelectedItem).Identificador.Equals("-1"))
                    {
                        mdl_MAE_Cliente.albaranValorado = null;
                    }
                    else
                    {
                        mdl_MAE_Cliente.albaranValorado = ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_AlbaranValorado.SelectedItem).Identificador;
                    }

                    //TipoDocumento
                    if ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoDocumento.SelectedItem == null ||
                        ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoDocumento.SelectedItem).Identificador.Equals("-1"))
                    {
                        mdl_MAE_Cliente.tipoDocumento = null;
                    }
                    else
                    {
                        mdl_MAE_Cliente.tipoDocumento = ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoDocumento.SelectedItem).Identificador;
                    }

                    //TipoPrecio
                    mdl_MAE_Cliente.tipoPrecio = null;

                    //TipoPuntoVerde
                    if ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoPuntoVerde.SelectedItem == null ||
                        ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoPuntoVerde.SelectedItem).Identificador.Equals("-1"))
                    {
                        mdl_MAE_Cliente.tipoPuntoVerde = null;
                    }
                    else
                    {
                        mdl_MAE_Cliente.tipoPuntoVerde = ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_TipoPuntoVerde.SelectedItem).Identificador;
                    }

                    //FormatoFactura
                    mdl_MAE_Cliente.formatoFactura = null;

                    //Fecha Alta
                    mdl_MAE_Cliente.fechaAlta = DateTime.ParseExact(g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Alta.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                    //fecha baja
                    mdl_MAE_Cliente.fechaBaja = g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Baja.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Cliente_AUX_2.Exferia_FechaSeleccion_Baja.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_fechaNula;

                    //Monedas ..................................................................................
                    mdl_MAE_Cliente.idMoneda = g_frm_P_Cliente_AUX_2.Exferia_F3_Monedas.Exferia_F3_Id;


                    //Mayor_CuentasContable ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idMayor_CuentaContable = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idMayor_CuentaContable = null; }

                    //Mayor_CuentasRetencion ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Id != -1 && g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Retencion.Checked)
                    { mdl_MAE_Cliente.idMayor_CuentaRetencion = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idMayor_CuentaRetencion = null; }

                    //Mayor_ContraPartida ..........................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idMayor_CuentaContraPartida = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idMayor_CuentaContraPartida = null; }

                    //Impuestos ..................................................................................
                    mdl_MAE_Cliente.idImpuestoCabecera = g_frm_P_Cliente_AUX_2.Exferia_F3_Impuestos.Exferia_F3_Id;

                    //Vendedores ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Id != -1)
                    {
                        mdl_MAE_Cliente.idVendedor = g_frm_P_Cliente_AUX_2.Exferia_F3_Vendedores.Exferia_F3_Id;
                    }
                    else { mdl_MAE_Cliente.idVendedor = null; }

                    //MotivosAlta ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idMotivoAltaBaja_Alta = g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosAlta.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idMotivoAltaBaja_Alta = null; }

                    //MotivosBaja ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idMotivoAltaBaja_Baja = g_frm_P_Cliente_AUX_2.Exferia_F3_MotivosBaja.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idMotivoAltaBaja_Baja = null; }

                    //Mayor_Remesas ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idMayor_CuentaRemesas = g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idMayor_CuentaRemesas = null; }

                    //MayorAuxiliar ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idMayorAuxiliar = g_frm_P_Cliente_AUX_2.Exferia_F3_MayorAuxiliar.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idMayorAuxiliar = null; }

                    //VendedorCobrador ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idVendedor_Cobrador = g_frm_P_Cliente_AUX_2.Exferia_F3_VendedorCobrador.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idVendedor_Cobrador = null; }

                    //Departamentos ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idDepartamento = g_frm_P_Cliente_AUX_2.Exferia_F3_Departamentos.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idDepartamento = null; }

                    //Tesoreria ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idTesoreria = g_frm_P_Cliente_AUX_2.Exferia_F3_Tesoreria.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idTesoreria = null; }

                    //Delegacion ..................................................................................
                    mdl_MAE_Cliente.idDelegacion = g_frm_P_Cliente_AUX_2.Exferia_F3_Delegacion.Exferia_F3_Id;

                    //Prioridades ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Id != -1)
                    { mdl_MAE_Cliente.idPrioridad = g_frm_P_Cliente_AUX_2.Exferia_F3_Prioridad.Exferia_F3_Id; }
                    else
                    { mdl_MAE_Cliente.idPrioridad = null; }

                    //PredefinidoCabecera_Ventas ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_MAE_Cliente.idPredefinidoCabecera_Ventas = g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Ventas.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_MAE_Cliente.idPredefinidoCabecera_Ventas = null; }

                    //PredefinidoCabecera_Cobros ..................................................................................
                    if (g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_MAE_Cliente.idPredefinidoCabecera_Cobros = g_frm_P_Cliente_AUX_2.Exferia_F3_SoloSeleccion_PredefinidoCabecera_Cobros.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_MAE_Cliente.idPredefinidoCabecera_Cobros = null; }

                    //FormasPago ..................................................................................
                    mdl_MAE_Cliente.idFormaPago = g_frm_P_Cliente_AUX_2.Exferia_F3_FormasPago.Exferia_F3_Id;

                    //cadena 
                    if (g_frm_P_Cliente_AUX_2.Exferia_RadioButton_ClienteCadena_Cadena.Checked)
                    {
                        //cadena
                        mdl_MAE_Cliente.cadena = true;

                        //idCliente_Cadena
                        mdl_MAE_Cliente.idCliente_Cadena = null;

                        //imprimirDatosCadena
                        mdl_MAE_Cliente.imprimirDatosCadena = false;

                        //facturarDatosCadena
                        mdl_MAE_Cliente.facturarDatosCadena = false;

                        //modeloFactura
                        mdl_MAE_Cliente.modeloFactura = ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cadena.SelectedItem).Identificador;
                    }
                    else
                    {
                        //cadena
                        mdl_MAE_Cliente.cadena = false;

                        //Si es Cliente , ver si tiene una cadena seleccionada
                        if (g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Id != -1)
                        {
                            //idCliente_Cadena
                            mdl_MAE_Cliente.idCliente_Cadena = g_frm_P_Cliente_AUX_2.Exferia_F3_ClienteCadena.Exferia_F3_Id;

                            //imprimirDatosCadena
                            mdl_MAE_Cliente.imprimirDatosCadena = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_ImprimirDatosCadena.Checked;

                            //facturarDatosCadena
                            mdl_MAE_Cliente.facturarDatosCadena = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_FacturarDatosCadena.Checked;
                        }
                        else
                        {
                            //idCliente_Cadena
                            mdl_MAE_Cliente.idCliente_Cadena = null;

                            //imprimirDatosCadena
                            mdl_MAE_Cliente.imprimirDatosCadena = false;

                            //facturarDatosCadena
                            mdl_MAE_Cliente.facturarDatosCadena = false;
                        }

                        //modeloFactura
                        if (mdl_MAE_Cliente.facturarDatosCadena != null && mdl_MAE_Cliente.facturarDatosCadena.Value)
                        {
                            mdl_MAE_Cliente.modeloFactura = null;
                        }
                        else
                        {
                            mdl_MAE_Cliente.modeloFactura = ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_ModeloFactura_Cliente.SelectedItem).Identificador;
                        }

                    }

                    //clienteCRM
                    mdl_MAE_Cliente.clienteCRM = null;

                    //EnviarPorEmail
                    mdl_MAE_Cliente.enviarPorEmail = g_frm_P_Cliente_AUX_2.Exferia_CheckBox_EnviarPorEmail.Checked;

                    //AtencionDe
                    mdl_MAE_Cliente.atencionDe = g_frm_P_Cliente_AUX_2.Exferia_TextBox_AtencionDe.Text;

                    //Referencia
                    mdl_MAE_Cliente.referenciasFacturas = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Referencia.Text;

                    //Web_Usuario
                    mdl_MAE_Cliente.web_Usuario = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Web_Usuario.Text;

                    //Web_Clave
                    mdl_MAE_Cliente.web_Clave = g_frm_P_Cliente_AUX_2.Exferia_TextBox_Web_Clave.Text;

                    //conversionVolumen
                    mdl_MAE_Cliente.conversionVolumen = g_frm_P_Cliente_AUX_2.Exferia_TextBox_ConversionVolumen.Text.Trim().Length > 0 ? decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_ConversionVolumen.Text) : dcm_Nulo;

                    //saltoEscala
                    mdl_MAE_Cliente.saltoEscala = ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_SaltoEscala.SelectedItem).Identificador;

                    ////seguro_Porcentaje
                    //mdl_MAE_Cliente.seguro_Porcentaje = g_frm_P_Cliente_AUX_2.Exferia_TextBox_SeguroPorcentaje.Text.Trim().Length > 0 ? decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_SeguroPorcentaje.Text.Trim()) : dcm_Nulo;

                    ////seguro_Minimo
                    //mdl_MAE_Cliente.seguro_Minimo = g_frm_P_Cliente_AUX_2.Exferia_TextBox_SeguroMinimo.Text.Trim().Length > 0 ? decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_SeguroMinimo.Text.Trim()) : dcm_Nulo;

                    //comisionReembolso_Porcentaje
                    mdl_MAE_Cliente.comisionReembolso_Porcentaje = g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoPorcentaje.Text.Trim().Length > 0 ? decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoPorcentaje.Text.Trim()) : dcm_Nulo;

                    //comisionReembolso_Minimo
                    mdl_MAE_Cliente.comisionReembolso_Minimo = g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoMinimo.Text.Trim().Length > 0 ? decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoMinimo.Text.Trim()) : dcm_Nulo;

                    //comisionReembolso_Maximo
                    mdl_MAE_Cliente.comisionReembolso_Maximo = g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoMaximo.Text.Trim().Length > 0 ? decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_ComisionReembolsoMaximo.Text.Trim()) : dcm_Nulo;

                    //incrementoRecogida_Porcentaje
                    mdl_MAE_Cliente.incrementoRecogida_Porcentaje = g_frm_P_Cliente_AUX_2.Exferia_TextBox_IncrementeRecogidaPorcentaje.Text.Trim().Length > 0 ? decimal.Parse(g_frm_P_Cliente_AUX_2.Exferia_TextBox_IncrementeRecogidaPorcentaje.Text.Trim()) : dcm_Nulo;


                    // Se graba el modelo ya relleno.
                    mdl_INTERNO_ValorDevuelto_Modelo = g_obj_MAE_Clientes_Datos.Grabar(mdl_MAE_Cliente);

                    // Grabamos las tablas auxiliares de Clientes
                    long lng_idCliente = -1;
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        // obtenemos la id del cliente
                        lng_idCliente = mdl_INTERNO_ValorDevuelto_Modelo.Id;
                        enum_TipoAccion = mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion;

                        #region Agrupaciones
                        INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Agrupaciones = g_obj_MAE_Clientes_AgrupacionesClientesLineas_Datos.Grabar(lng_idCliente, g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado);
                        if (mdl_ValorDevuelto_Modelo_Agrupaciones.TodoCorrecto == false)
                        {
                            transaccion_SQL.Dispose();
                            return mdl_ValorDevuelto_Modelo_Agrupaciones;
                        }
                        #endregion

                        #region Tarifas
                        INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Tarifas = g_obj_MAE_Clientes_TarifasCabecera_Datos.Grabar(lng_idCliente, g_lst_Tarifas_RegistrosSeleccionados_Listado);
                        if (mdl_ValorDevuelto_Modelo_Tarifas.TodoCorrecto == false)
                        {
                            transaccion_SQL.Dispose();
                            return mdl_ValorDevuelto_Modelo_Tarifas;
                        }
                        #endregion

                        #region Direcciones
                        //DIRECCION ENVIO ###########################################################################################
                        GEN_Direcciones mdl_GEN_Direcciones_ENVIO = g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.Obtener_Modelo_Para_Grabacion(Variables.G_STR_TIPODIRECCION_ENVIO, lng_idCliente, null, null, null, null);
                        //Insertar o Actualizar
                        if (mdl_GEN_Direcciones_ENVIO.nombreVia.Trim().Length > 0)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = Datos_Generales.GEN_Direcciones_Actualizar(mdl_GEN_Direcciones_ENVIO);
                        }
                        //Borrar
                        else if (mdl_GEN_Direcciones_ENVIO.id > -1)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo = Datos_Generales.GEN_Direcciones_Borrar(mdl_GEN_Direcciones_ENVIO.id);
                            mdl_GEN_Direcciones_ENVIO = null;
                        }

                        //DIRECCION FACTURACION ###########################################################################################
                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            GEN_Direcciones mdl_GEN_Direcciones_FACTURACION = g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.Obtener_Modelo_Para_Grabacion(Variables.G_STR_TIPODIRECCION_FACTURACION, lng_idCliente, null, null, null, null);
                            //Insertar o Actualizar
                            if (mdl_GEN_Direcciones_FACTURACION.nombreVia.Trim().Length > 0)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = Datos_Generales.GEN_Direcciones_Actualizar(mdl_GEN_Direcciones_FACTURACION);
                            }
                            //Borrar
                            else
                            {
                                if (mdl_GEN_Direcciones_FACTURACION.id > -1)
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo = Datos_Generales.GEN_Direcciones_Borrar(mdl_GEN_Direcciones_FACTURACION.id);
                                }

                                //Grabar la misma Direccion que la de envio
                                if (mdl_GEN_Direcciones_ENVIO != null && mdl_GEN_Direcciones_ENVIO.nombreVia.Trim().Length > 0)
                                {
                                    mdl_GEN_Direcciones_ENVIO.id = -1;
                                    mdl_GEN_Direcciones_ENVIO.tipoDireccion = Variables.G_STR_TIPODIRECCION_FACTURACION;
                                    mdl_INTERNO_ValorDevuelto_Modelo = Datos_Generales.GEN_Direcciones_Actualizar(mdl_GEN_Direcciones_ENVIO);
                                }
                            }



                        }

                        //DIRECCION FISCAL ###########################################################################################
                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            GEN_Direcciones mdl_GEN_Direcciones_FISCAL = g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.Obtener_Modelo_Para_Grabacion(Variables.G_STR_TIPODIRECCION_FISCAL, lng_idCliente, null, null, null, null);
                            //Insertar o Actualizar
                            if (mdl_GEN_Direcciones_FISCAL.nombreVia.Trim().Length > 0)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = Datos_Generales.GEN_Direcciones_Actualizar(mdl_GEN_Direcciones_FISCAL);
                            }
                            //Borrar
                            else if (mdl_GEN_Direcciones_FISCAL.id > -1)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = Datos_Generales.GEN_Direcciones_Borrar(mdl_GEN_Direcciones_FISCAL.id);
                            }
                        }
                        #endregion

                        #region Clientes(Cadena)
                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            //Si es una cadena actualizar los clientes seleccionados
                            if (g_frm_P_Cliente_AUX_2.Exferia_RadioButton_ClienteCadena_Cadena.Checked)
                            {
                                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_ClientesCadena = g_obj_MAE_Clientes_Datos.Grabar(lng_idCliente, g_lst_ClientesCadena_RegistrosSeleccionados_Listado);
                                if (mdl_ValorDevuelto_Modelo_ClientesCadena.TodoCorrecto == false)
                                {
                                    transaccion_SQL.Dispose();
                                    return mdl_ValorDevuelto_Modelo_ClientesCadena;
                                }
                            }
                            //Si es un cliente, qquitar todos los clientes relacionados
                            else
                            {
                                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_ClientesCadena = g_obj_MAE_Clientes_Datos.Grabar(lng_idCliente, null);
                                if (mdl_ValorDevuelto_Modelo_ClientesCadena.TodoCorrecto == false)
                                {
                                    transaccion_SQL.Dispose();
                                    return mdl_ValorDevuelto_Modelo_ClientesCadena;
                                }
                            }
                        }
                        #endregion

                        #region Emails
                        List<MAE_ClientesEmails> lst_MAE_ClientesEmails = new List<MAE_ClientesEmails>();
                        CTU_P_Clientes_AUX_2_Emails obj_CTU_P_Clientes_AUX_2_Emails;
                        foreach (int int_Control in g_lst_CTU_P_Clientes_AUX_2_Emails)
                        {
                            obj_CTU_P_Clientes_AUX_2_Emails = (CTU_P_Clientes_AUX_2_Emails)g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Find("controlusuario_CTU_P_Clientes_AUX_2_Emails" + int_Control, false).FirstOrDefault();
                            if (obj_CTU_P_Clientes_AUX_2_Emails != null)
                            {
                                lst_MAE_ClientesEmails.Add(obj_CTU_P_Clientes_AUX_2_Emails.Obtener_A_Grabar(lng_idCliente));
                            }
                        }

                        //Borrar las lineas que estan Fuera del listado
                        if (g_mdl_INTERNO_MAE_Clientes_Modelo != null &&
                            g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails != null &&
                            g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails.Count() > 0)
                        {
                            var arr_Lineasids = lst_MAE_ClientesEmails.Select(x => x.id).ToArray();
                            var var_LineasBorrar = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_ClientesEmails.Where(m => !arr_Lineasids.Contains(m.id) &&
                                                                                                                m.idCliente.Equals(lng_idCliente));
                            if (var_LineasBorrar != null && var_LineasBorrar.Count() > 0)
                            {
                                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_EmailsBorrar = null;
                                foreach (MAE_ClientesEmails mdl_MAE_ClientesEmails in var_LineasBorrar.ToList())
                                {
                                    mdl_ValorDevuelto_Modelo_EmailsBorrar = g_obj_MAE_ClientesEmails_Datos.Borrar(mdl_MAE_ClientesEmails.id);
                                    if (mdl_ValorDevuelto_Modelo_EmailsBorrar.TodoCorrecto == false)
                                    {
                                        transaccion_SQL.Dispose();
                                        return mdl_ValorDevuelto_Modelo_EmailsBorrar;
                                    }
                                }
                            }
                        }
                        //Actualizar Lineas
                        INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_Emails = null;
                        foreach (MAE_ClientesEmails mdl_MAE_ClientesEmails in lst_MAE_ClientesEmails)
                        {
                            mdl_INTERNO_ValorDevuelto_Modelo_Emails = g_obj_MAE_ClientesEmails_Datos.Grabar(mdl_MAE_ClientesEmails);
                            if (!mdl_INTERNO_ValorDevuelto_Modelo_Emails.TodoCorrecto)
                            {
                                transaccion_SQL.Dispose();
                                return mdl_INTERNO_ValorDevuelto_Modelo_Emails;
                            }
                        }

                        #endregion

                        var mdl_GrabarSeguros_ValorDevuelto = GrabarSeguros(lng_idCliente, transaccion_SQL);
                        if (!mdl_GrabarSeguros_ValorDevuelto.TodoCorrecto)
                        {
                            return mdl_GrabarSeguros_ValorDevuelto;
                        }

                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            //Termino Transaccion
                            transaccion_SQL.Complete();
                        }
                    }

                    transaccion_SQL.Dispose();

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.Id = lng_idCliente;
                        mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion = enum_TipoAccion;

                        //Obtener el modelo que se acaba de grabar
                        g_mdl_INTERNO_MAE_Clientes_Modelo = g_obj_MAE_Clientes_Datos.Obtener(lng_idCliente);

                        g_frm_P_Cliente_AUX_2.P_Base_id = lng_idCliente;

                    }
                }
                catch (Control_Errores)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    transaccion_SQL.Dispose();
                }
                catch (Exception ex)
                {
                    Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(GrabarDatos_Final));
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    transaccion_SQL.Dispose();
                }
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Borrar Datos
        public void BorrarDatos()
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_Cliente_AUX_2.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());


                    g_obj_TareaAsincrona_BorrarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_BorrarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_BorrarDatos_DoWork);
                    g_obj_TareaAsincrona_BorrarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_BorrarDatos_Completed);
                    g_obj_TareaAsincrona_BorrarDatos.RunWorkerAsync();

                    g_frm_PE_Esperando.ShowDialog();
                }
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                g_frm_P_Cliente_AUX_2.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(BorrarDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_BorrarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Borrar 
                mdl_ValorDevuelto_Modelo = BorrarDatos_Final();
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_BorrarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Cliente_AUX_2.Enabled = true;

            try
            {


                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    #region SINCRONIZACION
                    INTERNO_Sincronizacion_ActualizarRegistro_Modelo mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo = new INTERNO_Sincronizacion_ActualizarRegistro_Modelo();
                    mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo.tabla = nameof(MAE_Clientes);
                    mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo.idClavePrimaria = mdl_ValorDevuelto_Modelo_Resultado.Id;

                    Sincronizacion_ActualizarRegistro.Sincronizacion_ActualizarRegistro_RESTOTABLAS(mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo);
                    #endregion

                    // Devolver al Listado el Row Borrar
                    if (g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_Cliente_AUX_2.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_Cliente_AUX_2.P_Base_F3Origen != null)
                    {
                        g_frm_P_Cliente_AUX_2.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    g_frm_P_Cliente_AUX_2.P_Base_SeModificoDatosPantalla = false;
                    g_frm_P_Cliente_AUX_2.Salir_P_Base();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Completed));
            }
        }
        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            try
            {
                mdl_ValorDevuelto_Modelo = g_obj_MAE_Clientes_Datos.Borrar(g_mdl_INTERNO_MAE_Clientes_Modelo != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.id : -1);

                return mdl_ValorDevuelto_Modelo;
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(BorrarDatos_Final));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_ValorDevuelto_Modelo;
        }

        private INTERNO_ValorDevuelto_Modelo Borrar_Externo(INTERNO_OpcionesDetalle_Modelo _mdl_INTERNO_OpcionesDetalle_Modelo, dynamic _dnm_ObjetoBorrar)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + _mdl_INTERNO_OpcionesDetalle_Modelo.nombreLibreria + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType("" + _mdl_INTERNO_OpcionesDetalle_Modelo.nombreLibreria + "." + Variables.G_STR_LIBRERIA_OPCIONES);
                //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_OPCIONES_PROCEDIMIENTO_BORRAR_REGISTRO_POROBJETO, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { _mdl_INTERNO_OpcionesDetalle_Modelo.opcion, _dnm_ObjetoBorrar };

                //Pasamos los parametros al metodo y lo ejecutamos
                mdl_INTERNO_ValorDevuelto_Modelo = (INTERNO_ValorDevuelto_Modelo)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Borrar_Externo));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        #region Agrupaciones
        #region Obtener Agrupaciones Cabecera/Lineas de base de datos
        public void Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos()
        {
            try
            {
                if (g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos != null)
                {
                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos_DoWork);
                    g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos_Completed);
                    g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando();
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();



                g_bol_Obtencion_AgrupacionesCabecerasLineasCompleto_BaseDatos_Termino = false;

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos.RunWorkerAsync();
            }
            catch (Exception)
            {
                g_bol_Obtencion_AgrupacionesCabecerasLineasCompleto_BaseDatos_Termino = true;

                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                Obtener_Agrupaciones_BaseDatos();
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        protected void TareaAsincrona_Obtener_AgrupacionesCabecerasLineasCompleto_BaseDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            g_bol_Obtencion_AgrupacionesCabecerasLineasCompleto_BaseDatos_Termino = true;
        }
        private void Obtener_Agrupaciones_BaseDatos()
        {
            //Cabecera
            g_lst_AgrupacionesCabeceras_ListadoRegistros = g_obj_MAE_AgrupacionesClientesCabeceras_Datos.Obtener_Listado(g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.lng_idEmpresa, g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.EjercicioActivo.id, g_lst_ColumnasAMostrar_Agrupaciones_IncluirRegistros_Cabeceras, null, null);

            //Lineas
            g_lst_AgrupacionesLineas_ListadoRegistros = g_obj_MAE_AgrupacionesClientesLineas_Datos.Obtener_Listado(g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.lng_idEmpresa, g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.EjercicioActivo.id, g_lst_ColumnasAMostrar_Agrupaciones_IncluirRegistros_Lineas, null, null);
        }
        #endregion

        #region Actualizar Agrupaciones desde Base datos
        public void Actualizar_Agrupaciones_Desde_BaseDatos()
        {
            try
            {
                if (g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos != null)
                {
                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos_DoWork);
                    g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos_Completed);
                    g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos.WorkerSupportsCancellation = true;
                }


                g_frm_PE_Esperando = new PE_Esperando();
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();



                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos.RunWorkerAsync();
            }
            catch (Exception)
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }
        }
        protected void TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Actualizo los registros de cabecera y Lineas de base de datos
                Obtener_Agrupaciones_BaseDatos();

                //Recargar el modelo
                if (g_mdl_INTERNO_MAE_Clientes_Modelo != null)
                {
                    INTERNO_MAE_Clientes_Modelo mdl_INTERNO_MAE_Clientes_Modelo = g_obj_MAE_Clientes_Datos.Obtener(g_mdl_INTERNO_MAE_Clientes_Modelo.id);

                    if (mdl_INTERNO_MAE_Clientes_Modelo != null)
                    {
                        g_mdl_INTERNO_MAE_Clientes_Modelo = mdl_INTERNO_MAE_Clientes_Modelo;
                    }
                }

                //Listado de Agrupaciones Cliente Linea relacionados
                if (g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_AgrupacionesClientesLineas != null &&
                    g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_AgrupacionesClientesLineas.Count > 0)
                {
                    //Cabeceras
                    g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_AgrupacionesClientesLineas.Where(m => m.MAE_AgrupacionesClientesLineas.fechaBorrado == null && m.MAE_AgrupacionesClientesLineas.MAE_AgrupacionesClientesCabeceras.fechaBorrado == null).Select(m => m.MAE_AgrupacionesClientesLineas.idAgrupacionClienteCabecera).ToList();
                    Actualizar_AgrupacionesCabeceras_BaseDatos_Seleccionados_Colectivo(g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado, true);

                    //Lineas
                    g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado = g_mdl_INTERNO_MAE_Clientes_Modelo.MAE_Clientes_AgrupacionesClientesLineas.Where(m => m.MAE_AgrupacionesClientesLineas.fechaBorrado == null && m.MAE_AgrupacionesClientesLineas.MAE_AgrupacionesClientesCabeceras.fechaBorrado == null).Select(m => m.idAgrupacionClienteLinea).ToList();
                    Actualizar_AgrupacionesLineas_BaseDatos_Seleccionados_Colectivo(g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado, true);
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        protected void TareaAsincrona_Actualizar_Agrupaciones_Desde_BaseDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            if (!e.Cancelled)
            {
                //Rellenar Grid
                Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_IncluirRegistros_Cabeceras_Busqueda.Text);
                Rellenar_DataGridView_Agrupaciones_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_RegistrosSeleccionados_Busqueda.Text);
            }
        }
        #endregion

        #region Agrupaciones Incluir Registros Cabeceras

        #region Rellenar DataGridView Agrupaciones Incluir Registros Cabeceras

        public void Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras(string _str_filtro)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras != null)
                {
                    g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Cabeceras = true;

                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras.IsBusy)
                        Application.DoEvents();

                    g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Cabeceras = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras.WorkerSupportsCancellation = true;
                }


                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras_Listado.Rows.Clear();
                g_int_TotalRegistrosInsertados_Agrupaciones_IncluirRegistros_Cabeceras = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_IncluirRegistros_Cabeceras_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_IncluirRegistros_Cabeceras_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_IncluirRegistros_Cabeceras_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Agrupaciones_IncluirRegistros_Cabeceras_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Agrupaciones_IncluirRegistros_Cabeceras_PalabraCompleta.Checked);

                //Orden Actual
                if (g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_IncluirRegistros_Cabeceras_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_IncluirRegistros_Lineas_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                {
                    lst_Argumentos.Add(((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_IncluirRegistros_Cabeceras_OrdenListado.SelectedItem).Identificador);
                }
                else
                {
                    lst_Argumentos.Add(g_obj_ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros_Cabeceras.ORDENACION_NOMBRECOLUMNA_PORDEFECTO());
                }

                //Lllamra a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Orden Actual
                string str_Ordenacion_PorDefecto = (string)lst_Argumentos[4];

                //Listado de la tabla
                g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = null;

                //Filtrar #############################################
                if (str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Cabeceras.Count > 0)
                {
                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = g_lst_AgrupacionesCabeceras_ListadoRegistros;

                    //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                    if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && str_Busqueda.Trim().Length > 0)
                    {
                        //Todos
                        if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                        {
                            List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                            foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_Agrupaciones_IncluirRegistros_Cabeceras)
                            {
                                //Palabra Completa
                                if (bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)) == str_Busqueda).ToList());
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList());
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList());
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList());
                                    }
                                }
                            }
                            //Añadir al Listado Final
                            g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = lst_TodosFiltrado.Distinct().ToList();
                        }
                        //Campo seleccionado
                        else
                        {
                            //Palabra Completa
                            if (bol_PalabraCompleta)
                            {
                                //Sencible a mayusculas y minusculas
                                if (bol_SensibilidadMayusMin)
                                {
                                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)) == str_Busqueda).ToList();
                                }
                                //No tiene en cuenta las mayusculas y las minusculas
                                else
                                {
                                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList();
                                }
                            }
                            //Por Contenido
                            else
                            {
                                //Sencible a mayusculas y minusculas
                                if (bol_SensibilidadMayusMin)
                                {
                                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList();
                                }
                                //No tiene en cuenta las mayusculas y las minusculas
                                else
                                {
                                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList();
                                }
                            }
                        }
                    }

                    //Filtros Avanzados
                    if (g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Cabeceras != null && g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Cabeceras.Count > 0)
                    {
                        g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = Funciones_Listado.Filtrar_Listado(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras, g_obj_ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros_Cabeceras, g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Cabeceras);
                    }
                }
                else
                {
                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = g_lst_AgrupacionesCabeceras_ListadoRegistros;
                }
                //#####################################################

                if (g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras != null)
                {
                    //Ordenar el Listado ##################
                    if (str_Ordenacion_PorDefecto.Trim().Length > 0)
                    {
                        //Descendente
                        if (g_frm_P_Cliente_AUX_2.Exferia_Button_Agrupaciones_IncluirRegistros_Cabeceras_OrdenListado.Tag.ToString().Equals("1"))
                        {
                            g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.OrderByDescending(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                        }
                        //Ascendente
                        else
                        {
                            g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.OrderBy(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                        }
                    }
                    //#####################################

                    g_frm_P_Cliente_AUX_2.Listado_Agrupaciones_IncluirRegistros_Cabeceras_Ordenar_DataGridView();

                    //Guadar el listado .......................................................................................
                    //Buscar el Campo Clave
                    string str_NombreCampoClave = "id";
                    INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros_Cabeceras.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                    {
                        str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    }
                    //...........................................................................................................

                    g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_IncluirRegistros_Cabeceras_BarraProgreso.Exferia_BarraProgreso_Total = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Count;

                    object[] row;
                    foreach (dynamic obj_Dinamico in g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras)
                    {
                        //Se Cancelo la tarea asincrona ---------------------------
                        if (g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Cabeceras)
                        {
                            return;
                        }

                        //Añadir Fila con Columnas .............................
                        row = Funciones_Listado.Transformar_Dynamic_A_Row(obj_Dinamico, g_obj_ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros_Cabeceras);

                        //Llamar al Progress
                        g_int_TotalRegistrosInsertados_Agrupaciones_IncluirRegistros_Cabeceras += 1;

                        ((BackgroundWorker)sender).ReportProgress(1, row);

                        //Application.DoEvents();
                        Thread.Sleep(1);
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Cabeceras = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Cabeceras = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Cabeceras = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras_Listado.Rows.Add((object[])e.UserState);

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_IncluirRegistros_Cabeceras_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Agrupaciones_IncluirRegistros_Cabeceras;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Cabeceras_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Lineas(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_IncluirRegistros_Lineas_Busqueda.Text);
            }
            catch
            { }
        }

        #endregion

        #region Marcar/Desmarcar
        public void Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras(bool _bol_Marcar, List<long> _lst_Seleccionados)
        {
            try
            {

                if (g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras != null)
                {
                    //Cancelar Tarea Asincrona
                    g_bol_CancelarTareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras = true;

                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras = new BackgroundWorker();
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras.DoWork += new DoWorkEventHandler(TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras_DoWork);
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras_Completed);
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando(_bol_Marcar ? Mensajes.G_STR_ESPERANDO_SELECCIONANDO_REGISTROS() : Mensajes.G_STR_ESPERANDO_DESSELECCIONANDO_REGISTROS());
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();



                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_bol_Marcar);
                lst_Argumentos.Add(_lst_Seleccionados);

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras.RunWorkerAsync(lst_Argumentos);
            }
            catch (Exception)
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_TerminoCorrectamente = true;

            try
            {
                List<object> lst_Argumentos = (List<object>)e.Argument;
                bool bol_Seleccionar = (bool)lst_Argumentos[0];
                List<long> lst_Seleccionados = (List<long>)lst_Argumentos[1];


                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros_Cabeceras.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Listado a Marcar/Desmarcar
                List<long> lst_Listado_Auxiliar = new List<long>();

                //Marcar/Desmarcar Seleccionados
                if (lst_Seleccionados != null && lst_Seleccionados.Count > 0)
                {
                    lst_Listado_Auxiliar = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && lst_Seleccionados.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).Select(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m)).Cast<long>().ToList();
                }
                //Marcar/Desmarcar Todos
                else
                {
                    lst_Listado_Auxiliar = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Cabeceras.Select(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m)).Cast<long>().ToList();
                }

                Actualizar_AgrupacionesCabeceras_BaseDatos_Seleccionados_Colectivo(lst_Listado_Auxiliar, bol_Seleccionar);
            }
            catch (ThreadAbortException)
            {
                bol_TerminoCorrectamente = false;
            }
            catch (Exception)
            {
                bol_TerminoCorrectamente = false;
            }
            finally
            {
                e.Result = bol_TerminoCorrectamente;
            }
        }
        protected void TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            g_bol_CancelarTareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Cabeceras = false;

            if ((bool)e.Result)
            {
                Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_IncluirRegistros_Cabeceras_Busqueda.Text);
            }

        }
        #endregion

        #endregion

        #region Agrupaciones Incluir Registros Lineas

        #region Rellenar DataGridView Agrupaciones Incluir Registros Lineas

        public void Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Lineas(string _str_filtro)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas != null)
                {
                    g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Lineas = true;

                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas.IsBusy)
                        Application.DoEvents();

                    g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Lineas = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_IncluirRegistros_Lineas_Listado.Rows.Clear();
                g_int_TotalRegistrosInsertados_Agrupaciones_IncluirRegistros_Lineas = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_IncluirRegistros_Lineas_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_IncluirRegistros_Lineas_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_IncluirRegistros_Lineas_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Agrupaciones_IncluirRegistros_Lineas_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Agrupaciones_IncluirRegistros_Lineas_PalabraCompleta.Checked);

                //Orden Actual
                if (g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_IncluirRegistros_Lineas_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_IncluirRegistros_Lineas_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                {
                    lst_Argumentos.Add(((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_IncluirRegistros_Lineas_OrdenListado.SelectedItem).Identificador);
                }
                else
                {
                    lst_Argumentos.Add(g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros_Lineas.ORDENACION_NOMBRECOLUMNA_PORDEFECTO());
                }

                //Lllamra a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Lineas));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Lineas));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Orden Actual
                string str_Ordenacion_PorDefecto = (string)lst_Argumentos[4];

                //Listado de la tabla
                g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = null;

                //Filtrar #############################################
                if (str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Lineas.Count > 0)
                {
                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_AgrupacionesLineas_ListadoRegistros;

                    //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                    if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && str_Busqueda.Trim().Length > 0)
                    {
                        //Todos
                        if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                        {
                            List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                            foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_Agrupaciones_IncluirRegistros_Lineas)
                            {
                                //Palabra Completa
                                if (bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)) == str_Busqueda).ToList());
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList());
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList());
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList());
                                    }
                                }
                            }
                            //Añadir al Listado Final
                            g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = lst_TodosFiltrado.Distinct().ToList();
                        }
                        //Campo seleccionado
                        else
                        {
                            //Palabra Completa
                            if (bol_PalabraCompleta)
                            {
                                //Sencible a mayusculas y minusculas
                                if (bol_SensibilidadMayusMin)
                                {
                                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)) == str_Busqueda).ToList();
                                }
                                //No tiene en cuenta las mayusculas y las minusculas
                                else
                                {
                                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList();
                                }
                            }
                            //Por Contenido
                            else
                            {
                                //Sencible a mayusculas y minusculas
                                if (bol_SensibilidadMayusMin)
                                {
                                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList();
                                }
                                //No tiene en cuenta las mayusculas y las minusculas
                                else
                                {
                                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList();
                                }
                            }
                        }
                    }

                    //Filtros Avanzados
                    if (g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Lineas != null && g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Lineas.Count > 0)
                    {
                        g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = Funciones_Listado.Filtrar_Listado(g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas, g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros_Lineas, g_dct_ListadoFiltros_Agrupaciones_IncluirRegistros_Lineas);
                    }
                }
                else
                {
                    g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_AgrupacionesLineas_ListadoRegistros;
                }
                //#####################################################

                if (g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas != null)
                {
                    //Filtrar por idAgrupacionClienteCabecera ........................................
                    List<long> lst_id_AgrupacionesCabecera = g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_IncluirRegistros_Cabeceras_Listado.Rows
                                                            .Cast<DataGridViewRow>()
                                                            .Where(r => r.Cells[nameof(INTERNO_MAE_AgrupacionesClientesCabeceras_Listado_Modelo.Seleccionar)].Value.ToString().Equals("True")).Select(m => m.Cells[nameof(INTERNO_MAE_AgrupacionesClientesCabeceras_Listado_Modelo.id)].Value).Cast<long>().ToList();

                    if (lst_id_AgrupacionesCabecera != null && lst_id_AgrupacionesCabecera.Count > 0)
                    {
                        g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(nameof(INTERNO_MantenimientoAgrupacionesLineas_Listado_Modelo.idAgrupacionCabecera)).GetValue(m, null) != null && lst_id_AgrupacionesCabecera.Contains(m.GetType().GetProperty(nameof(INTERNO_MantenimientoAgrupacionesLineas_Listado_Modelo.idAgrupacionCabecera)).GetValue(m, null))).ToList();
                    }
                    else
                    {
                        g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = null;
                    }
                    //.................................................................................

                    if (g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas != null)
                    {
                        //Ordenar el Listado ##################
                        if (str_Ordenacion_PorDefecto.Trim().Length > 0)
                        {
                            //Descendente
                            if (g_frm_P_Cliente_AUX_2.Exferia_Button_Agrupaciones_IncluirRegistros_Lineas_OrdenListado.Tag.ToString().Equals("1"))
                            {
                                g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.OrderByDescending(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                            //Ascendente
                            else
                            {
                                g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.OrderBy(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                        }
                        //#####################################

                        g_frm_P_Cliente_AUX_2.Listado_Agrupaciones_IncluirRegistros_Lineas_Ordenar_DataGridView();

                        g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_IncluirRegistros_Lineas_BarraProgreso.Exferia_BarraProgreso_Total = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Count;

                        object[] row;
                        foreach (dynamic obj_Dinamico in g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas)
                        {
                            //Se Cancelo la tarea asincrona ---------------------------
                            if (g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Lineas)
                            {
                                return;
                            }

                            //Añadir Fila con Columnas .............................
                            row = Funciones_Listado.Transformar_Dynamic_A_Row(obj_Dinamico, g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros_Lineas);

                            //Llamar al Progress
                            g_int_TotalRegistrosInsertados_Agrupaciones_IncluirRegistros_Lineas += 1;

                            ((BackgroundWorker)sender).ReportProgress(1, row);

                            //Application.DoEvents();
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Lineas = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Lineas = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_IncluirRegistros_Lineas = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_IncluirRegistros_Lineas_Listado.Rows.Add((object[])e.UserState);

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_IncluirRegistros_Lineas_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Agrupaciones_IncluirRegistros_Lineas;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_IncluirRegistros_Lineas_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        #endregion

        #region Marcar/Desmarcar
        public void Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas(bool _bol_Marcar, List<long> _lst_Seleccionados)
        {
            try
            {
                if (g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas != null)
                {
                    //Cancelar Tarea Asincrona
                    g_bol_CancelarTareaAsincrona_Agrupaciones_MarcarDesmarca_IncluirRegistros_Lineas = true;

                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas = new BackgroundWorker();
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas.DoWork += new DoWorkEventHandler(TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas_DoWork);
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas_Completed);
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando(_bol_Marcar ? Mensajes.G_STR_ESPERANDO_SELECCIONANDO_REGISTROS() : Mensajes.G_STR_ESPERANDO_DESSELECCIONANDO_REGISTROS());
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();



                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_bol_Marcar);
                lst_Argumentos.Add(_lst_Seleccionados);

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas.RunWorkerAsync(lst_Argumentos);
            }
            catch (Exception)
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_TerminoCorrectamente = true;

            try
            {
                List<object> lst_Argumentos = (List<object>)e.Argument;
                bool bol_Seleccionar = (bool)lst_Argumentos[0];
                List<long> lst_Seleccionados = (List<long>)lst_Argumentos[1];

                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros_Lineas.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Listado a Marcar/Desmarcar
                List<long> lst_Listado_Auxiliar = new List<long>();

                //Marcar/Desmarcar Seleccionados
                if (lst_Seleccionados != null && lst_Seleccionados.Count > 0)
                {
                    lst_Listado_Auxiliar = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && lst_Seleccionados.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).Select(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m)).Cast<long>().ToList();
                }
                //Marcar/Desmarcar Todos
                else
                {
                    lst_Listado_Auxiliar = g_lst_ListadoRegistros_Filtrados_Agrupaciones_IncluirRegistros_Lineas.Select(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m)).Cast<long>().ToList();
                }

                //PASOS A SEGUIR PARA SELECCIONAR TODOS, SI HUBIERA CABECERAS CON CAMPO SIN REPETICIONES ACTIVO
                //1º -> Coger todas AgrupacionesCabeceras que tengan el campo Sin_Repeticiones a TRUE
                //2º -> Por cada cabacera que haya, buscar las lineas que tiene
                //3º -> Ver si alguna de las lineas que tiene la cabecera ya esta seleccionada, para no quitarla
                //4º -> Si no hay ninguna seleccionada , se pone la primera y se quita el resto

                //Solo coger Agrupaciones Cabecera que tiene Sin_Repeticiones a true ...................................................
                foreach (dynamic dnm_AgrupacionCabecera in g_lst_AgrupacionesCabeceras_ListadoRegistros
                                                                                        .Where(m => m.GetType().GetProperty(nameof(INTERNO_MAE_AgrupacionesClientesCabeceras_Listado_Modelo.sinRepeticion)).GetValue(m, null) != null &&
                                                                                                    m.GetType().GetProperty(nameof(INTERNO_MAE_AgrupacionesClientesCabeceras_Listado_Modelo.sinRepeticion)).GetValue(m, null) == true)
                                                                                        .ToList())
                {
                    long lng_idAgrupacionCabecera = dnm_AgrupacionCabecera.GetType().GetProperty(nameof(INTERNO_MAE_AgrupacionesClientesCabeceras_Listado_Modelo.id)).GetValue(dnm_AgrupacionCabecera, null);


                    //Ver que lineas tienen la cabecera
                    List<long> lst_idAgrupacionesLineas_DeCabecera = g_lst_AgrupacionesLineas_ListadoRegistros
                                                                                        .Where(m => m.GetType().GetProperty(nameof(INTERNO_MantenimientoAgrupacionesLineas_Listado_Modelo.idAgrupacionCabecera)).GetValue(m, null) != null &&
                                                                                                    m.GetType().GetProperty(nameof(INTERNO_MantenimientoAgrupacionesLineas_Listado_Modelo.idAgrupacionCabecera)).GetValue(m, null) == lng_idAgrupacionCabecera)
                                                                                        .Select(m => m.GetType().GetProperty(nameof(INTERNO_MantenimientoAgrupacionesLineas_Listado_Modelo.id)).GetValue(m)).Cast<long>()
                                                                                        .ToList();



                    //Ver si hay alguna de las lineas de la cabecera en los registros seleccionados ..................................
                    long? lng_idAgrupacionLinea_Seleccionada = null;
                    if (g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado != null &&
                        g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Count > 0)
                    {
                        lng_idAgrupacionLinea_Seleccionada = g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Where(m => lst_idAgrupacionesLineas_DeCabecera.Contains(m)).FirstOrDefault();
                    }
                    if (lng_idAgrupacionLinea_Seleccionada == null || lng_idAgrupacionLinea_Seleccionada == 0)
                    {
                        lng_idAgrupacionLinea_Seleccionada = lst_idAgrupacionesLineas_DeCabecera.First();
                    }

                    lst_idAgrupacionesLineas_DeCabecera.RemoveAll(m => m.Equals(lng_idAgrupacionLinea_Seleccionada.Value));
                    //.................................................................................................................

                    //Borrar del listado general
                    lst_Listado_Auxiliar.RemoveAll(m => lst_idAgrupacionesLineas_DeCabecera.Contains(m));
                }
                //.............................................................................................


                Actualizar_AgrupacionesLineas_BaseDatos_Seleccionados_Colectivo(lst_Listado_Auxiliar, bol_Seleccionar);
            }
            catch (ThreadAbortException)
            {
                bol_TerminoCorrectamente = false;
            }
            catch (Exception)
            {
                bol_TerminoCorrectamente = false;
            }
            finally
            {
                e.Result = bol_TerminoCorrectamente;
            }
        }
        protected void TareaAsincrona_Agrupaciones_MarcarDesmarcar_IncluirRegistros_Lineas_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            g_bol_CancelarTareaAsincrona_Agrupaciones_MarcarDesmarca_IncluirRegistros_Lineas = false;

            if ((bool)e.Result)
            {
                Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Lineas(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_IncluirRegistros_Lineas_Busqueda.Text);
                Rellenar_DataGridView_Agrupaciones_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_RegistrosSeleccionados_Busqueda.Text);
            }

        }
        #endregion

        #endregion

        #region Agrupaciones Registros Seleccionados

        #region Rellenar DataGridView Agrupaciones Registros Seleccionados

        public void Rellenar_DataGridView_Agrupaciones_RegistrosSeleccionados(string _str_filtro)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados != null)
                {
                    g_bol_CancelarTareaAsincrona_Agrupaciones_RegistrosSeleccionados = true;

                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados.IsBusy)
                        Application.DoEvents();

                    g_bol_CancelarTareaAsincrona_Agrupaciones_RegistrosSeleccionados = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_RegistrosSeleccionados_Listado.Rows.Clear();
                g_int_TotalRegistrosInsertados_Agrupaciones_RegistrosSeleccionados = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_RegistrosSeleccionados_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Agrupaciones_RegistrosSeleccionados_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Agrupaciones_RegistrosSeleccionados_PalabraCompleta.Checked);

                //Orden Actual
                if (g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_RegistrosSeleccionados_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_RegistrosSeleccionados_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                {
                    lst_Argumentos.Add(((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Agrupaciones_RegistrosSeleccionados_OrdenListado.SelectedItem).Identificador);
                }
                else
                {
                    lst_Argumentos.Add(g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2.ORDENACION_NOMBRECOLUMNA_PORDEFECTO());
                }

                //Lllamra a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Agrupaciones_RegistrosSeleccionados));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Agrupaciones_RegistrosSeleccionados));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Orden Actual
                string str_Ordenacion_PorDefecto = (string)lst_Argumentos[4];

                //Listado de la tabla
                List<dynamic> lst_ListadoRegistros_RegistrosSeleccionados = null;
                if (g_lst_AgrupacionesLineas_ListadoRegistros != null && g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado != null && g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Count > 0)
                {
                    //Busco registro listado en memoria
                    lst_ListadoRegistros_RegistrosSeleccionados = g_lst_AgrupacionesLineas_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).ToList();
                }

                List<dynamic> lst_ListadoRegistros_Filtrados = null;

                //Filtrar #############################################
                if (lst_ListadoRegistros_RegistrosSeleccionados != null)
                {
                    if (str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_Agrupaciones_RegistrosSeleccionados.Count > 0)
                    {
                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_RegistrosSeleccionados;

                        //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                        if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && str_Busqueda.Trim().Length > 0)
                        {
                            //Todos
                            if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                            {
                                List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                                foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_Agrupaciones_RegistrosSeleccionados)
                                {
                                    //Palabra Completa
                                    if (bol_PalabraCompleta)
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)) == str_Busqueda).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList());
                                        }
                                    }
                                    //Por Contenido
                                    else
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList());
                                        }
                                    }
                                }
                                //Añadir al Listado Final
                                lst_ListadoRegistros_Filtrados = lst_TodosFiltrado.Distinct().ToList();
                            }
                            //Campo seleccionado
                            else
                            {
                                //Palabra Completa
                                if (bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)) == str_Busqueda).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList();
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList();
                                    }
                                }
                            }
                        }

                        //Filtros Avanzados
                        if (g_dct_ListadoFiltros_Agrupaciones_RegistrosSeleccionados != null && g_dct_ListadoFiltros_Agrupaciones_RegistrosSeleccionados.Count > 0)
                        {
                            lst_ListadoRegistros_Filtrados = Funciones_Listado.Filtrar_Listado(lst_ListadoRegistros_Filtrados, g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2, g_dct_ListadoFiltros_Agrupaciones_RegistrosSeleccionados);
                        }
                    }
                    else
                    {
                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_RegistrosSeleccionados;
                    }
                    //#####################################################

                    if (lst_ListadoRegistros_Filtrados != null)
                    {
                        //Ordenar el Listado ##################
                        if (str_Ordenacion_PorDefecto.Trim().Length > 0)
                        {
                            //Descendente
                            if (g_frm_P_Cliente_AUX_2.Exferia_Button_Agrupaciones_RegistrosSeleccionados_OrdenListado.Tag.ToString().Equals("1"))
                            {
                                lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.OrderByDescending(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                            //Ascendente
                            else
                            {
                                lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.OrderBy(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                        }
                        //#####################################

                        g_frm_P_Cliente_AUX_2.Listado_Agrupaciones_RegistrosSeleccionados_Ordenar_DataGridView();

                        //Guadar el listado .......................................................................................
                        g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Total = lst_ListadoRegistros_Filtrados.Count;

                        object[] row;
                        foreach (dynamic obj_Dinamico in lst_ListadoRegistros_Filtrados)
                        {
                            //Se Cancelo la tarea asincrona ---------------------------
                            if (g_bol_CancelarTareaAsincrona_Agrupaciones_RegistrosSeleccionados)
                            {
                                return;
                            }

                            //Añadir Fila con Columnas .............................
                            row = Funciones_Listado.Transformar_Dynamic_A_Row(obj_Dinamico, g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2);

                            //Llamar al Progress
                            g_int_TotalRegistrosInsertados_Agrupaciones_RegistrosSeleccionados += 1;

                            ((BackgroundWorker)sender).ReportProgress(1, row);

                            //Application.DoEvents();
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_CancelarTareaAsincrona_Agrupaciones_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_RegistrosSeleccionados_Listado.Rows.Add((object[])e.UserState);

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Agrupaciones_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Agrupaciones_RegistrosSeleccionados;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Agrupaciones_RegistrosSeleccionados_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        #endregion

        #region Vaciar Registros Seleccionados
        public void Vaciar_Agrupaciones_RegistrosSeleccionados(List<long> _lst_ids_ABorrar)
        {
            try
            {
                if (g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados != null)
                {
                    //Cancelar Tarea Asincrona
                    g_bol_CancelarTareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados = true;

                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados = new BackgroundWorker();
                    g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados.DoWork += new DoWorkEventHandler(TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados_DoWork);
                    g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados_Completed);
                    g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_DESSELECCIONANDO_REGISTROS());
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();




                g_lst_Agrupaciones_RegistrosSeleccionados_AVaciar = _lst_ids_ABorrar;

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados.RunWorkerAsync();
            }
            catch (Exception)
            {
                g_bol_CancelarTareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados = false;

                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_TerminoCorrectamente = true;

            try
            {
                Actualizar_AgrupacionesLineas_BaseDatos_Seleccionados_Colectivo(g_lst_Agrupaciones_RegistrosSeleccionados_AVaciar, false);
            }
            catch (ThreadAbortException)
            {
                bol_TerminoCorrectamente = false;
            }
            catch (Exception)
            {
                bol_TerminoCorrectamente = false;
            }
            finally
            {
                e.Result = bol_TerminoCorrectamente;
            }
        }
        protected void TareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            g_bol_CancelarTareaAsincrona_Vaciar_Agrupaciones_RegistrosSeleccionados = false;

            try
            {
                if ((bool)e.Result)
                {
                    string str_NombreCampoClave = "id";
                    INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                    {
                        str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    }

                    //Borrar los datos del DataGridView
                    g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_RegistrosSeleccionados_Listado.Rows
                            .Cast<DataGridViewRow>()
                            .ToList()
                            .Where(r => g_lst_Agrupaciones_RegistrosSeleccionados_AVaciar.Contains(long.Parse(r.Cells[str_NombreCampoClave].Value.ToString()))).ToList().ForEach(m => g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Agrupaciones_RegistrosSeleccionados_Listado.Rows.Remove(m));

                    //Rellenar de Nuevo el Listado de Registros a Incluir
                    Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Lineas(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_IncluirRegistros_Lineas_Busqueda.Text);
                }
            }
            catch (Exception)
            { }
            finally
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }
        }
        #endregion

        #endregion

        public void Actualizar_AgrupacionesLineas_BaseDatos_Seleccionados_Individual_(long _lng_id, bool _bol_Valor)
        {
            try
            {
                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros_Lineas.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Busco registro listado en memoria
                dynamic dnm_Registro = g_lst_AgrupacionesLineas_ListadoRegistros[g_lst_AgrupacionesLineas_ListadoRegistros.IndexOf(g_lst_AgrupacionesLineas_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) == _lng_id).FirstOrDefault())];

                if (dnm_Registro != null)
                {
                    //Actualizar registro dinamico
                    dnm_Registro.GetType().GetProperty(nameof(INTERNO_MantenimientoAgrupacionesLineas_Listado_Modelo.Seleccionar)).SetValue(dnm_Registro, _bol_Valor, null);


                    //Modificar listado en memoria
                    g_lst_AgrupacionesLineas_ListadoRegistros[g_lst_AgrupacionesLineas_ListadoRegistros.IndexOf(g_lst_AgrupacionesLineas_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) == _lng_id).FirstOrDefault())] = dnm_Registro;
                }


                if (_bol_Valor)
                {
                    if (!g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Contains(_lng_id))
                    {
                        g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Add(_lng_id);
                    }
                }
                else
                {
                    if (g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Contains(_lng_id))
                    {
                        g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Remove(_lng_id);
                    }
                }

                Rellenar_DataGridView_Agrupaciones_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_RegistrosSeleccionados_Busqueda.Text);
            }
            catch (Exception)
            { }
        }
        public void Actualizar_AgrupacionesLineas_BaseDatos_Seleccionados_Colectivo(List<long> _lst_id, bool _bol_Valor)
        {
            try
            {
                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesLineas_P_Cliente_AUX_2_IncluirRegistros_Lineas.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Actualizar el listado de registro general
                g_lst_AgrupacionesLineas_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && _lst_id.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).ToList().ForEach(x => x.GetType().GetProperty(nameof(INTERNO_MantenimientoAgrupacionesLineas_Listado_Modelo.Seleccionar)).SetValue(x, _bol_Valor, null));

                //Actualizar el Listado de Seleccionados
                if (_bol_Valor)
                {
                    List<long> lst_RegistrosNuevos = _lst_id.Where(m => !g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.Contains(m)).ToList();

                    if (lst_RegistrosNuevos != null && lst_RegistrosNuevos.Count > 0)
                    {
                        g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.AddRange(lst_RegistrosNuevos);
                    }
                }
                else
                {
                    g_lst_AgrupacionesLineas_RegistrosSeleccionados_Listado.RemoveAll(m => _lst_id.Contains(m));
                }
            }
            catch (Exception)
            { }
        }

        public void Actualizar_AgrupacionesCabeceras_BaseDatos_Seleccionados_Individual(long _lng_id, bool _bol_Valor)
        {
            try
            {
                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros_Cabeceras.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Busco registro listado en memoria
                dynamic dnm_Registro = g_lst_AgrupacionesCabeceras_ListadoRegistros[g_lst_AgrupacionesCabeceras_ListadoRegistros.IndexOf(g_lst_AgrupacionesCabeceras_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) == _lng_id).FirstOrDefault())];

                if (dnm_Registro != null)
                {
                    //Actualizar registro dinamico
                    dnm_Registro.GetType().GetProperty(nameof(INTERNO_MAE_AgrupacionesClientesCabeceras_Listado_Modelo.Seleccionar)).SetValue(dnm_Registro, _bol_Valor, null);


                    //Modificar listado en memoria
                    g_lst_AgrupacionesCabeceras_ListadoRegistros[g_lst_AgrupacionesCabeceras_ListadoRegistros.IndexOf(g_lst_AgrupacionesCabeceras_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) == _lng_id).FirstOrDefault())] = dnm_Registro;
                }


                if (_bol_Valor)
                {
                    if (!g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado.Contains(_lng_id))
                    {
                        g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado.Add(_lng_id);
                    }
                }
                else
                {
                    if (g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado.Contains(_lng_id))
                    {
                        g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado.Remove(_lng_id);
                    }
                }

                Rellenar_DataGridView_Agrupaciones_IncluirRegistros_Lineas(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Agrupaciones_IncluirRegistros_Lineas_Busqueda.Text);
            }
            catch (Exception)
            { }
        }
        public void Actualizar_AgrupacionesCabeceras_BaseDatos_Seleccionados_Colectivo(List<long> _lst_id, bool _bol_Valor)
        {
            try
            {
                if (g_lst_AgrupacionesCabeceras_ListadoRegistros != null)
                {
                    //Buscar el Campo Clave
                    string str_NombreCampoClave = "id";
                    INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_AgrupacionesClientesCabeceras_P_Cliente_AUX_2_IncluirRegistros_Cabeceras.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                    {
                        str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    }

                    //Actualizar el listado de registro general
                    g_lst_AgrupacionesCabeceras_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && _lst_id.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).ToList().ForEach(x => x.GetType().GetProperty(nameof(INTERNO_MAE_AgrupacionesClientesCabeceras_Listado_Modelo.Seleccionar)).SetValue(x, _bol_Valor, null));

                    //Actualizar el Listado de Seleccionados
                    if (_bol_Valor)
                    {
                        List<long> lst_RegistrosNuevos = _lst_id.Where(m => !g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado.Contains(m)).ToList();

                        if (lst_RegistrosNuevos != null && lst_RegistrosNuevos.Count > 0)
                        {
                            g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado.AddRange(lst_RegistrosNuevos);
                        }
                    }
                    else
                    {
                        g_lst_AgrupacionesCabeceras_RegistrosSeleccionados_Listado.RemoveAll(m => _lst_id.Contains(m));
                    }
                }
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Direcciones
        public void CopiarDirecciones(object sender, EventArgs e)
        {
            try
            {
                //Obtengo el componente desde donde se llamo
                if (sender != null && ((Exferia_Button)sender).Parent != null)
                {
                    //Obtengo el boton del componente
                    Exferia_Button obj_Exferia_Button = (Exferia_Button)sender;

                    //Obtengo el Componente dependiendo de si es "Exferia_Direccion" 0 "Exferia_DireccionFiscal"
                    dynamic obj_Exferia_Direccion_DeDondeSeLlamo = null;
                    if (obj_Exferia_Button.Parent.GetType() == typeof(Exferia_Direccion))
                    {
                        obj_Exferia_Direccion_DeDondeSeLlamo = (Exferia_Direccion)obj_Exferia_Button.Parent;
                    }
                    else if (obj_Exferia_Button.Parent.GetType() == typeof(Exferia_DireccionFiscal))
                    {
                        obj_Exferia_Direccion_DeDondeSeLlamo = (Exferia_DireccionFiscal)obj_Exferia_Button.Parent;
                    }

                    if (obj_Exferia_Direccion_DeDondeSeLlamo != null)
                    {
                        //Listados de Modelos y Para la Pantalla
                        List<GEN_Direcciones> lst_GEN_Direcciones = new List<GEN_Direcciones>();
                        List<INTERNO_CodigoDescripcion_Modelo> lst_INTERNO_CodigoDescripcion_Modelo_Direcciones = new List<INTERNO_CodigoDescripcion_Modelo>();

                        //Compruebo si el Listado que contiene los componentes de "Exferia_Direccion" no sea nulo
                        if (obj_Exferia_Direccion_DeDondeSeLlamo.Exferia_Direccion_RELACIONADOS_Objeto != null && obj_Exferia_Direccion_DeDondeSeLlamo.Exferia_Direccion_RELACIONADOS_Objeto.Count > 0)
                        {
                            //Recorro el Listado y obtengo el modelo "GEN_Direcciones" de cada componente
                            //y lo añado al listado de modelos, también añado al listado para la pantalla y para la busqueda
                            foreach (Exferia_Direccion obj_Exferia_Direccion in obj_Exferia_Direccion_DeDondeSeLlamo.Exferia_Direccion_RELACIONADOS_Objeto)
                            {
                                GEN_Direcciones mdl_GEN_Direcciones = obj_Exferia_Direccion.Obtener_Modelo_A_Copiar();
                                lst_GEN_Direcciones.Add(mdl_GEN_Direcciones);

                                lst_INTERNO_CodigoDescripcion_Modelo_Direcciones.Add(new INTERNO_CodigoDescripcion_Modelo(mdl_GEN_Direcciones.tipoDireccion, obj_Exferia_Direccion.Parent.Text));
                            }
                        }
                        //Compruebo si el Listado que contiene los componentes de "Exferia_DireccionFiscal" no sea nulo
                        if (obj_Exferia_Direccion_DeDondeSeLlamo.Exferia_DireccionFiscal_RELACIONADOS_Objeto != null && obj_Exferia_Direccion_DeDondeSeLlamo.Exferia_DireccionFiscal_RELACIONADOS_Objeto.Count > 0)
                        {
                            //Recorro el Listado y obtengo el modelo "GEN_Direcciones" de cada componente
                            //y lo añado al listado de modelos, también añado al listado para la pantalla y para la busqueda
                            foreach (Exferia_DireccionFiscal obj_Exferia_DireccionFiscal in obj_Exferia_Direccion_DeDondeSeLlamo.Exferia_DireccionFiscal_RELACIONADOS_Objeto)
                            {
                                GEN_Direcciones mdl_GEN_Direcciones = obj_Exferia_DireccionFiscal.Obtener_Modelo_A_Copiar();
                                lst_GEN_Direcciones.Add(mdl_GEN_Direcciones);

                                lst_INTERNO_CodigoDescripcion_Modelo_Direcciones.Add(new INTERNO_CodigoDescripcion_Modelo(mdl_GEN_Direcciones.tipoDireccion, obj_Exferia_DireccionFiscal.Parent.Text));
                            }
                        }

                        //Obtener el Listado ...................................
                        ListadosSeleccion.ABS_ListadoSeleccion_Direcciones mdl_ABS_ListadoSeleccion_Direcciones = new ListadosSeleccion.ABS_ListadoSeleccion_Direcciones();
                        mdl_ABS_ListadoSeleccion_Direcciones.Registros = lst_INTERNO_CodigoDescripcion_Modelo_Direcciones.Cast<dynamic>().ToList();

                        //Llamar al formulario de PE_Listados_SoloSeleccion
                        PE_Listados_SoloSeleccion frm_PE_Listados_SoloSeleccion = new PE_Listados_SoloSeleccion(mdl_ABS_ListadoSeleccion_Direcciones, g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales, g_frm_P_Cliente_AUX_2.P_Base_FechaTrabajo);
                        frm_PE_Listados_SoloSeleccion.ShowDialog();

                        //Comprueba si se ha seleccionado algo en el listado de PE_Listados_SoloSeleccion
                        if (frm_PE_Listados_SoloSeleccion.g_dnm_RegistroSeleccionado != null)
                        {
                            //Obtengo el modelo filtrado por tipoDireccion
                            GEN_Direcciones mdl_GEN_Direcciones_Resultado = lst_GEN_Direcciones.Where(m => m.tipoDireccion.Equals(((INTERNO_CodigoDescripcion_Modelo)frm_PE_Listados_SoloSeleccion.g_dnm_RegistroSeleccionado).Codigo)).FirstOrDefault();

                            if (mdl_GEN_Direcciones_Resultado != null)
                            {
                                //Envio el modelo al componente para que se encarge de Recargarse
                                obj_Exferia_Direccion_DeDondeSeLlamo.Copiar(mdl_GEN_Direcciones_Resultado);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(CopiarDirecciones));
            }
        }
        #endregion

        #region Mapa
        public void RecargarMapa()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Cliente_AUX_2.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando = new PE_Esperando();

                //Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_CargarMapa != null)
                {
                    while (g_obj_TareaAsincrona_CargarMapa.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_CargarMapa = new BackgroundWorker();
                    g_obj_TareaAsincrona_CargarMapa.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarMapa_DoWork);
                    g_obj_TareaAsincrona_CargarMapa.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarMapa_Completed);
                    g_obj_TareaAsincrona_CargarMapa.WorkerReportsProgress = false;
                }

                //(Tarea Asincrona) Cargar Datos #######################################################
                g_obj_TareaAsincrona_CargarMapa.RunWorkerAsync();
                //######################################################################################

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_P_Cliente_AUX_2.Enabled = true;

                if (g_frm_P_Cliente_AUX_2 != null)
                {
                    g_frm_P_Cliente_AUX_2.Close();
                    g_frm_P_Cliente_AUX_2 = null;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(RecargarMapa));
            }
        }
        private void TareaAsincrona_CargarMapa_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                if (CargarMapa() == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_CargarMapa_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_P_Cliente_AUX_2.Enabled = true;

            try
            {
                if (e.Cancelled)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                    //Mostrar si tuviera algun mensaje
                    if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                    {
                        if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                        {
                            Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                            g_frm_P_Cliente_AUX_2.Salir_P_Base();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_CargarMapa_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Cliente_AUX_2.Salir_P_Base();
            }
        }

        public bool CargarMapa()
        {
            bool bol_ValorDevuelto = true;

            try
            {
                if (g_mdl_INTERNO_MAE_Clientes_Modelo != null)
                {
                    INTERNO_DatosMapa_Modelo mdl_INTERNO_DatosMapa_Modelo = new INTERNO_DatosMapa_Modelo();
                    mdl_INTERNO_DatosMapa_Modelo.TipoProveedor = Variables.G_INT_MAPAS_BING_SATELITE;

                    if (g_mdl_INTERNO_MAE_Clientes_Modelo.posicionLatitud != null && g_mdl_INTERNO_MAE_Clientes_Modelo.posicionLongitud.Trim().Length > 0 &&
                       g_mdl_INTERNO_MAE_Clientes_Modelo.posicionLongitud != null && g_mdl_INTERNO_MAE_Clientes_Modelo.posicionLongitud.Trim().Length > 0)
                    {
                        mdl_INTERNO_DatosMapa_Modelo.Posicion_Punto = new PointLatLng(double.Parse(g_mdl_INTERNO_MAE_Clientes_Modelo.posicionLatitud.Replace(".", ",")), double.Parse(g_mdl_INTERNO_MAE_Clientes_Modelo.posicionLongitud.Replace(".", ",")));
                    }

                    mdl_INTERNO_DatosMapa_Modelo.TextoToolTip = g_mdl_INTERNO_MAE_Clientes_Modelo.razonSocial;
                    mdl_INTERNO_DatosMapa_Modelo.Zoom = 10;

                    List<INTERNO_DatosMapa_Modelo> lst_INTERNO_DatosMapa_Modelo = new List<INTERNO_DatosMapa_Modelo>();
                    lst_INTERNO_DatosMapa_Modelo.Add(mdl_INTERNO_DatosMapa_Modelo);

                    g_frm_P_Cliente_AUX_2.CTU_Mapa.ActualizarMapa(lst_INTERNO_DatosMapa_Modelo);
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(CargarMapa));
                bol_ValorDevuelto = false;
            }

            return bol_ValorDevuelto;
        }
        #endregion

        public void CuentasContables_Rellenar_RazonSocial(string _str_RazonSocial)
        {
            try
            {
                //Cuenta Contable
                g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasContable.Exferia_F3_Descripcion_RazonSocial_Cuentas = _str_RazonSocial;

                //Cuenta Remesa
                g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_Remesas.Exferia_F3_Descripcion_RazonSocial_Cuentas = "EECC. " + _str_RazonSocial;

                //Cuenta ContraPartida
                g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_ContraPartida.Exferia_F3_Descripcion_RazonSocial_Cuentas = _str_RazonSocial;

                //Cuenta Retencion
                g_frm_P_Cliente_AUX_2.Exferia_F3_Mayor_CuentasRetencion.Exferia_F3_Descripcion_RazonSocial_Cuentas = "Ret. " + _str_RazonSocial;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(CuentasContables_Rellenar_RazonSocial));
            }
        }

        public bool CIFNIF_Actualizar_Validacion()
        {
            bool bol_TodoCorrecto = true;

            try
            {
                //Si tiene pais en Direccion Fiscal
                if (g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.Exferia_F3_Pais_Codigo.Trim().Length > 0)
                {
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_PaisCodigo_Validacion = g_frm_P_Cliente_AUX_2.Exferia_DireccionFiscal_DireccionFiscal.Exferia_F3_Pais_Codigo.Trim();
                }
                //Sino se mira en Direccion de facturacion haber si tiene un pais
                else if (g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.Exferia_F3_Pais_Codigo.Trim().Length > 0)
                {
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_PaisCodigo_Validacion = g_frm_P_Cliente_AUX_2.Exferia_Direccion_Facturacion.Exferia_F3_Pais_Codigo.Trim();
                }
                //Si tiene un codigo de pais se pone en el CIF
                else if (g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.Exferia_F3_Pais_Codigo.Trim().Length > 0)
                {
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_PaisCodigo_Validacion = g_frm_P_Cliente_AUX_2.Exferia_Direccion_Envio.Exferia_F3_Pais_Codigo.Trim();
                }
                else
                {
                    g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Exferia_TextBox_CIFNIF_PaisCodigo_Validacion = "";
                }

                //validar NIFCIF
                bol_TodoCorrecto = g_frm_P_Cliente_AUX_2.Exferia_TextBox_CIFNIF_CIF.Validar_CIFNIF();
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(CIFNIF_Actualizar_Validacion));
            }

            return bol_TodoCorrecto;
        }

        #region Clientes(Cadena)
        #region Obtener Clientes(Cadena) Completo de base de datos
        public void Obtener_Listados_Completo_ClientesCadena_BaseDatos()
        {
            try
            {
                if (g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos != null)
                {
                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos.IsBusy)
                        Application.DoEvents();

                    g_bol_Obtencion_Listados_Completo_ClientesCadena_BaseDatos_Termino = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos_DoWork);
                    g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos_Completed);
                    g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando();
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos.RunWorkerAsync();
            }
            catch (Exception)
            {
                g_bol_Obtencion_Listados_Completo_ClientesCadena_BaseDatos_Termino = true;

                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                Obtener_ClientesCadena_BaseDatos();
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        protected void TareaAsincrona_Obtener_Listados_Completo_ClientesCadena_BaseDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            g_bol_Obtencion_Listados_Completo_ClientesCadena_BaseDatos_Termino = true;

            //Rellenar Grid
            Rellenar_DataGridView_ClientesCadena_IncluirRegistros(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_IncluirRegistros_Busqueda.Text);
            Rellenar_DataGridView_ClientesCadena_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_RegistrosSeleccionados_Busqueda.Text);
        }

        private void Obtener_ClientesCadena_BaseDatos()
        {
            long? lng_Nulo = null;

            try
            {


                //ClientesCadena
                g_lst_ClientesCadena_ListadoRegistros = g_obj_MAE_Clientes_Datos.Obtener_Registros_Para_Cadena(-1,
                                                                                                                (g_mdl_INTERNO_MAE_Clientes_Modelo != null ? g_mdl_INTERNO_MAE_Clientes_Modelo.id : lng_Nulo),
                                                                                                                g_frm_P_Cliente_AUX_2.P_Base_ValoresGenerales.lng_idEmpresa,
                                                                                                                g_lst_Columnas_ClientesCadena_IncluirRegistros,
                                                                                                                g_dct_ListadoFiltros_ClientesCadena_IncluirRegistros);

                if (g_mdl_INTERNO_MAE_Clientes_Modelo != null)
                {
                    Actualizar_ClientesCadena_BaseDatos_Seleccionados_Colectivo(g_lst_ClientesCadena_RegistrosSeleccionados_Listado, true);
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Obtener_ClientesCadena_BaseDatos));
            }
        }
        #endregion

        #region ClientesCadena

        #region Actualizar ClientesCadena desde Base datos
        public void Actualizar_ClientesCadena_Desde_BaseDatos()
        {
            try
            {
                if (g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos != null)
                {
                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos.IsBusy)
                        Application.DoEvents();

                    //Empezar TareaAsincrona
                    g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos.RunWorkerAsync();
                }
                else
                {
                    g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos_DoWork);
                    g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos_Completed);
                    g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando();
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();


            }
            catch (Exception)
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }
        }
        protected void TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Actualizo los registros de cabecera y Lineas de base de datos
                Obtener_ClientesCadena_BaseDatos();

                //Recargar el modelo
                if (g_mdl_INTERNO_MAE_Clientes_Modelo != null)
                {
                    INTERNO_MAE_Clientes_Modelo mdl_INTERNO_MAE_Clientes_Modelo = g_obj_MAE_Clientes_Datos.Obtener(g_mdl_INTERNO_MAE_Clientes_Modelo.id);

                    if (mdl_INTERNO_MAE_Clientes_Modelo != null)
                    {
                        g_mdl_INTERNO_MAE_Clientes_Modelo = mdl_INTERNO_MAE_Clientes_Modelo;
                    }
                }

                //Listado de ClientesCadena relacionados
                if (g_mdl_INTERNO_MAE_Clientes_Modelo.ClientesCadena != null &&
                    g_mdl_INTERNO_MAE_Clientes_Modelo.ClientesCadena.Count > 0)
                {
                    g_lst_ClientesCadena_RegistrosSeleccionados_Listado.AddRange(g_mdl_INTERNO_MAE_Clientes_Modelo.ClientesCadena);

                    Actualizar_ClientesCadena_BaseDatos_Seleccionados_Colectivo(g_lst_ClientesCadena_RegistrosSeleccionados_Listado, true);
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        protected void TareaAsincrona_Actualizar_ClientesCadena_Desde_BaseDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            if (!e.Cancelled)
            {
                //Rellenar Grid
                Rellenar_DataGridView_ClientesCadena_IncluirRegistros(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_IncluirRegistros_Busqueda.Text);
                Rellenar_DataGridView_ClientesCadena_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_RegistrosSeleccionados_Busqueda.Text);
            }
        }
        #endregion

        #region ClientesCadena Incluir Registros

        #region Rellenar DataGridView ClientesCadena Incluir Registros
        public void Rellenar_DataGridView_ClientesCadena_IncluirRegistros(string _str_filtro)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros != null)
                {
                    g_bol_CancelarTareaAsincrona_ClientesCadena_IncluirRegistros = true;

                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros.IsBusy)
                        Application.DoEvents();

                    g_bol_CancelarTareaAsincrona_ClientesCadena_IncluirRegistros = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Facturacion_ClientesCadena_IncluirRegistros_Listado.Rows.Clear();
                g_int_TotalRegistrosInsertados_ClientesCadena_IncluirRegistros = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Facturacion_ClientesCadena_IncluirRegistros_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Facturacion_ClientesCadena_IncluirRegistros_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Facturacion_ClientesCadena_IncluirRegistros_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Facturacion_ClientesCadena_IncluirRegistros_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Facturacion_ClientesCadena_IncluirRegistros_PalabraCompleta.Checked);

                //Orden Actual
                if (g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Facturacion_ClientesCadena_IncluirRegistros_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Facturacion_ClientesCadena_IncluirRegistros_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                {
                    lst_Argumentos.Add(((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Facturacion_ClientesCadena_IncluirRegistros_OrdenListado.SelectedItem).Identificador);
                }
                else
                {
                    lst_Argumentos.Add(g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros.ORDENACION_NOMBRECOLUMNA_PORDEFECTO());
                }

                //Lllamra a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_ClientesCadena_IncluirRegistros));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_ClientesCadena_IncluirRegistros));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Orden Actual
                string str_Ordenacion_PorDefecto = (string)lst_Argumentos[4];

                //Listado de la tabla
                g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = null;

                //Filtrar #############################################
                if (str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_ClientesCadena_IncluirRegistros.Count > 0)
                {
                    g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = g_lst_ClientesCadena_ListadoRegistros;

                    //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                    if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && str_Busqueda.Trim().Length > 0)
                    {
                        //Todos
                        if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                        {
                            List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                            foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_ClientesCadena_IncluirRegistros)
                            {
                                //Palabra Completa
                                if (bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)) == str_Busqueda).ToList());
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList());
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList());
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList());
                                    }
                                }
                            }
                            //Añadir al Listado Final
                            g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = lst_TodosFiltrado.Distinct().ToList();
                        }
                        //Campo seleccionado
                        else
                        {
                            //Palabra Completa
                            if (bol_PalabraCompleta)
                            {
                                //Sencible a mayusculas y minusculas
                                if (bol_SensibilidadMayusMin)
                                {
                                    g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)) == str_Busqueda).ToList();
                                }
                                //No tiene en cuenta las mayusculas y las minusculas
                                else
                                {
                                    g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList();
                                }
                            }
                            //Por Contenido
                            else
                            {
                                //Sencible a mayusculas y minusculas
                                if (bol_SensibilidadMayusMin)
                                {
                                    g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList();
                                }
                                //No tiene en cuenta las mayusculas y las minusculas
                                else
                                {
                                    g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList();
                                }
                            }
                        }
                    }

                    //Filtros Avanzados
                    if (g_dct_ListadoFiltros_ClientesCadena_IncluirRegistros != null && g_dct_ListadoFiltros_ClientesCadena_IncluirRegistros.Count > 0)
                    {
                        g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = Funciones_Listado.Filtrar_Listado(g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros, g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros, g_dct_ListadoFiltros_ClientesCadena_IncluirRegistros);
                    }
                }
                else
                {
                    g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = g_lst_ClientesCadena_ListadoRegistros;
                }
                //#####################################################

                if (g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros != null)
                {

                    //Ordenar el Listado ##################
                    if (str_Ordenacion_PorDefecto.Trim().Length > 0)
                    {
                        //Descendente
                        if (g_frm_P_Cliente_AUX_2.Exferia_Button_Facturacion_ClientesCadena_IncluirRegistros_OrdenListado.Tag.ToString().Equals("1"))
                        {
                            g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.OrderByDescending(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                        }
                        //Ascendente
                        else
                        {
                            g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.OrderBy(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                        }
                    }
                    //#####################################

                    g_frm_P_Cliente_AUX_2.Listado_ClientesCadena_IncluirRegistros_Ordenar_DataGridView();

                    //Guadar el listado .......................................................................................
                    //Buscar el Campo Clave
                    string str_NombreCampoClave = "id";
                    INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                    {
                        str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    }
                    //...........................................................................................................

                    g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Facturacion_ClientesCadena_IncluirRegistros_BarraProgreso.Exferia_BarraProgreso_Total = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Count;

                    object[] row;
                    foreach (dynamic obj_Dinamico in g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros)
                    {
                        //Se Cancelo la tarea asincrona ---------------------------
                        if (g_bol_CancelarTareaAsincrona_ClientesCadena_IncluirRegistros)
                        {
                            return;
                        }

                        //Ver si hay que poner el Seleccionar Checkeado


                        //Añadir Fila con Columnas .............................
                        row = Funciones_Listado.Transformar_Dynamic_A_Row(obj_Dinamico, g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros);

                        //Llamar al Progress
                        g_int_TotalRegistrosInsertados_ClientesCadena_IncluirRegistros += 1;

                        ((BackgroundWorker)sender).ReportProgress(1, row);

                        //Application.DoEvents();
                        Thread.Sleep(1);
                    }

                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_CancelarTareaAsincrona_ClientesCadena_IncluirRegistros = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_CancelarTareaAsincrona_ClientesCadena_IncluirRegistros = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_CancelarTareaAsincrona_ClientesCadena_IncluirRegistros = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_Cliente_AUX_2.IsDisposed)
                {
                    g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Facturacion_ClientesCadena_IncluirRegistros_Listado.Rows.Add((object[])e.UserState);

                    g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Facturacion_ClientesCadena_IncluirRegistros_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_ClientesCadena_IncluirRegistros;
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_ClientesCadena_IncluirRegistros_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }
        #endregion

        #region Marcar/Desmarcar
        public void ClientesCadena_MarcarDesmarcar_IncluirRegistros(bool _bol_Marcar, List<long> _lst_Seleccionados)
        {
            try
            {
                if (g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros != null)
                {
                    //Cancelar Tarea Asincrona
                    g_bol_CancelarTareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros = true;

                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros = new BackgroundWorker();
                    g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros.DoWork += new DoWorkEventHandler(TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros_DoWork);
                    g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros_Completed);
                    g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando(_bol_Marcar ? Mensajes.G_STR_ESPERANDO_SELECCIONANDO_REGISTROS() : Mensajes.G_STR_ESPERANDO_DESSELECCIONANDO_REGISTROS());
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();

                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_bol_Marcar);
                lst_Argumentos.Add(_lst_Seleccionados);

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros.RunWorkerAsync(lst_Argumentos);
            }
            catch (Exception)
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_TerminoCorrectamente = true;

            try
            {
                List<object> lst_Argumentos = (List<object>)e.Argument;
                bool bol_Seleccionar = (bool)lst_Argumentos[0];
                List<long> lst_Seleccionados = (List<long>)lst_Argumentos[1];


                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Listado a Marcar/Desmarcar
                List<long> lst_Listado_Auxiliar = new List<long>();

                //Marcar/Desmarcar Seleccionados
                if (lst_Seleccionados != null && lst_Seleccionados.Count > 0)
                {
                    lst_Listado_Auxiliar = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && lst_Seleccionados.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).Select(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m)).Cast<long>().ToList();
                }
                //Marcar/Desmarcar Todos
                else
                {
                    lst_Listado_Auxiliar = g_lst_ListadoRegistros_Filtrados_ClientesCadena_IncluirRegistros.Select(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m)).Cast<long>().ToList();
                }

                Actualizar_ClientesCadena_BaseDatos_Seleccionados_Colectivo(lst_Listado_Auxiliar, bol_Seleccionar);
            }
            catch (ThreadAbortException)
            {
                bol_TerminoCorrectamente = false;
            }
            catch (Exception)
            {
                bol_TerminoCorrectamente = false;
            }
            finally
            {
                e.Result = bol_TerminoCorrectamente;
            }
        }
        protected void TareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            g_bol_CancelarTareaAsincrona_ClientesCadena_MarcarDesmarcar_IncluirRegistros = false;

            if ((bool)e.Result)
            {
                Rellenar_DataGridView_ClientesCadena_IncluirRegistros(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_IncluirRegistros_Busqueda.Text);
                Rellenar_DataGridView_ClientesCadena_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_RegistrosSeleccionados_Busqueda.Text);
            }

        }
        #endregion

        #endregion

        #region ClientesCadena Registros Seleccionados

        #region Rellenar DataGridView ClientesCadena Registros Seleccionados
        public void Rellenar_DataGridView_ClientesCadena_RegistrosSeleccionados(string _str_filtro)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados != null)
                {
                    g_bol_CancelarTareaAsincrona_ClientesCadena_RegistrosSeleccionados = true;

                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados.IsBusy)
                        Application.DoEvents();

                    g_bol_CancelarTareaAsincrona_ClientesCadena_RegistrosSeleccionados = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Facturacion_ClientesCadena_RegistrosSeleccionados_Listado.Rows.Clear();
                g_int_TotalRegistrosInsertados_ClientesCadena_RegistrosSeleccionados = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Facturacion_ClientesCadena_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Facturacion_ClientesCadena_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Facturacion_ClientesCadena_RegistrosSeleccionados_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Facturacion_ClientesCadena_RegistrosSeleccionados_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Facturacion_ClientesCadena_RegistrosSeleccionados_PalabraCompleta.Checked);

                //Orden Actual
                if (g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Facturacion_ClientesCadena_RegistrosSeleccionados_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Facturacion_ClientesCadena_RegistrosSeleccionados_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                {
                    lst_Argumentos.Add(((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Facturacion_ClientesCadena_RegistrosSeleccionados_OrdenListado.SelectedItem).Identificador);
                }
                else
                {
                    lst_Argumentos.Add(g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2.ORDENACION_NOMBRECOLUMNA_PORDEFECTO());
                }

                //LLamar a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_ClientesCadena_RegistrosSeleccionados));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_ClientesCadena_RegistrosSeleccionados));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Orden Actual
                string str_Ordenacion_PorDefecto = (string)lst_Argumentos[4];

                //Listado de la tabla
                List<dynamic> lst_ListadoRegistros_RegistrosSeleccionados = null;
                if (g_lst_ClientesCadena_ListadoRegistros != null &&
                    g_lst_ClientesCadena_RegistrosSeleccionados_Listado != null &&
                    g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Count > 0)
                {
                    //Busco registro listado en memoria
                    lst_ListadoRegistros_RegistrosSeleccionados = g_lst_ClientesCadena_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).ToList();
                }

                List<dynamic> lst_ListadoRegistros_Filtrados = null;

                //Filtrar #############################################
                if (lst_ListadoRegistros_RegistrosSeleccionados != null)
                {
                    if (str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_ClientesCadena_RegistrosSeleccionados.Count > 0)
                    {
                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_RegistrosSeleccionados;

                        //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                        if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && str_Busqueda.Trim().Length > 0)
                        {
                            //Todos
                            if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                            {
                                List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                                foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_ClientesCadena_RegistrosSeleccionados)
                                {
                                    //Palabra Completa
                                    if (bol_PalabraCompleta)
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)) == str_Busqueda).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList());
                                        }
                                    }
                                    //Por Contenido
                                    else
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList());
                                        }
                                    }
                                }
                                //Añadir al Listado Final
                                lst_ListadoRegistros_Filtrados = lst_TodosFiltrado.Distinct().ToList();
                            }
                            //Campo seleccionado
                            else
                            {
                                //Palabra Completa
                                if (bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)) == str_Busqueda).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList();
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList();
                                    }
                                }
                            }
                        }

                        //Filtros Avanzados
                        if (g_dct_ListadoFiltros_ClientesCadena_RegistrosSeleccionados != null && g_dct_ListadoFiltros_ClientesCadena_RegistrosSeleccionados.Count > 0)
                        {
                            lst_ListadoRegistros_Filtrados = Funciones_Listado.Filtrar_Listado(lst_ListadoRegistros_Filtrados, g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2, g_dct_ListadoFiltros_ClientesCadena_RegistrosSeleccionados);
                        }
                    }
                    else
                    {
                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_RegistrosSeleccionados;
                    }
                    //#####################################################

                    if (lst_ListadoRegistros_Filtrados != null)
                    {
                        //Ordenar el Listado ##################
                        if (str_Ordenacion_PorDefecto.Trim().Length > 0)
                        {
                            //Descendente
                            if (g_frm_P_Cliente_AUX_2.Exferia_Button_Facturacion_ClientesCadena_RegistrosSeleccionados_OrdenListado.Tag.ToString().Equals("1"))
                            {
                                lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.OrderByDescending(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                            //Ascendente
                            else
                            {
                                lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.OrderBy(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                        }
                        //#####################################

                        g_frm_P_Cliente_AUX_2.Listado_ClientesCadena_RegistrosSeleccionados_Ordenar_DataGridView();

                        //Guadar el listado .......................................................................................
                        g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Facturacion_ClientesCadena_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Total = lst_ListadoRegistros_Filtrados.Count;

                        object[] row;
                        long lng_idCliente_Cadena = -1;
                        foreach (dynamic obj_Dinamico in lst_ListadoRegistros_Filtrados)
                        {
                            //Se Cancelo la tarea asincrona ---------------------------
                            if (g_bol_CancelarTareaAsincrona_ClientesCadena_RegistrosSeleccionados)
                            {
                                return;
                            }

                            lng_idCliente_Cadena = obj_Dinamico.GetType().GetProperty(str_NombreCampoClave).GetValue(obj_Dinamico, null);

                            //Añadir Fila con Columnas .............................
                            row = Funciones_Listado.Transformar_Dynamic_A_Row(obj_Dinamico, g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2);

                            //Llamar al Progress
                            g_int_TotalRegistrosInsertados_ClientesCadena_RegistrosSeleccionados += 1;

                            ((BackgroundWorker)sender).ReportProgress(1, row);

                            //Application.DoEvents();
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_CancelarTareaAsincrona_ClientesCadena_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_CancelarTareaAsincrona_ClientesCadena_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_CancelarTareaAsincrona_ClientesCadena_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Facturacion_ClientesCadena_RegistrosSeleccionados_Listado.Rows.Add((object[])e.UserState);

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Facturacion_ClientesCadena_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_ClientesCadena_RegistrosSeleccionados;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_ClientesCadena_RegistrosSeleccionados_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }
        #endregion

        #region Vaciar Registros Seleccionados
        public void Vaciar_ClientesCadena_RegistrosSeleccionados(List<long> _lst_ids_ABorrar)
        {
            try
            {
                if (g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados != null)
                {
                    //Cancelar Tarea Asincrona
                    g_bol_CancelarTareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados = true;

                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados = new BackgroundWorker();
                    g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados.DoWork += new DoWorkEventHandler(TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados_DoWork);
                    g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados_Completed);
                    g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_DESSELECCIONANDO_REGISTROS());
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();

                g_lst_ClientesCadena_RegistrosSeleccionados_AVaciar = _lst_ids_ABorrar;

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados.RunWorkerAsync();
            }
            catch (Exception)
            {
                g_bol_CancelarTareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados = false;

                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_TerminoCorrectamente = true;

            try
            {
                Actualizar_ClientesCadena_BaseDatos_Seleccionados_Colectivo(g_lst_ClientesCadena_RegistrosSeleccionados_AVaciar, false);
            }
            catch (ThreadAbortException)
            {
                bol_TerminoCorrectamente = false;
            }
            catch (Exception)
            {
                bol_TerminoCorrectamente = false;
            }
            finally
            {
                e.Result = bol_TerminoCorrectamente;
            }
        }
        protected void TareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            g_bol_CancelarTareaAsincrona_Vaciar_ClientesCadena_RegistrosSeleccionados = false;

            try
            {
                if ((bool)e.Result)
                {
                    string str_NombreCampoClave = "id";
                    INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                    {
                        str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    }

                    //Borrar los datos del DataGridView
                    g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Facturacion_ClientesCadena_RegistrosSeleccionados_Listado.Rows
                            .Cast<DataGridViewRow>()
                            .ToList()
                            .Where(r => g_lst_ClientesCadena_RegistrosSeleccionados_AVaciar.Contains(long.Parse(r.Cells[str_NombreCampoClave].Value.ToString()))).ToList().ForEach(m => g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Facturacion_ClientesCadena_RegistrosSeleccionados_Listado.Rows.Remove(m));

                    //Rellenar de Nuevo el Listado de Registros a Incluir
                    Rellenar_DataGridView_ClientesCadena_IncluirRegistros(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_IncluirRegistros_Busqueda.Text);
                }
            }
            catch (Exception)
            { }
            finally
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }
        }
        #endregion

        public void Actualizar_ClientesCadena_BaseDatos_Seleccionados_Individual(long _lng_id, bool _bol_Valor)
        {
            try
            {
                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Busco registro listado en memoria
                dynamic dnm_Registro = g_lst_ClientesCadena_ListadoRegistros[g_lst_ClientesCadena_ListadoRegistros.IndexOf(g_lst_ClientesCadena_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) == _lng_id).FirstOrDefault())];

                if (dnm_Registro != null)
                {
                    //Actualizar registro dinamico
                    dnm_Registro.GetType().GetProperty(nameof(INTERNO_MAE_Clientes_Listado_Modelo.Seleccionar)).SetValue(dnm_Registro, _bol_Valor, null);


                    //Modificar listado en memoria
                    g_lst_ClientesCadena_ListadoRegistros[g_lst_ClientesCadena_ListadoRegistros.IndexOf(g_lst_ClientesCadena_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) == _lng_id).FirstOrDefault())] = dnm_Registro;
                }


                if (_bol_Valor)
                {
                    if (!g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Contains(_lng_id))
                    {
                        g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Add(_lng_id);
                    }
                }
                else
                {
                    if (g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Contains(_lng_id))
                    {
                        g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Remove(_lng_id);
                    }
                }

                Rellenar_DataGridView_ClientesCadena_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Facturacion_ClientesCadena_RegistrosSeleccionados_Busqueda.Text);
            }
            catch (Exception)
            { }
        }
        public void Actualizar_ClientesCadena_BaseDatos_Seleccionados_Colectivo(List<long> _lst_id, bool _bol_Valor)
        {
            try
            {
                if (g_lst_ClientesCadena_ListadoRegistros != null)
                {
                    //Buscar el Campo Clave
                    string str_NombreCampoClave = "id";
                    INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_MAE_Clientes_P_Cliente_AUX_2_IncluirRegistros.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                    {
                        str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    }

                    //Actualizar el listado de registro general
                    g_lst_ClientesCadena_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && _lst_id.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).ToList().ForEach(x => x.GetType().GetProperty(nameof(INTERNO_MAE_Clientes_Listado_Modelo.Seleccionar)).SetValue(x, _bol_Valor, null));

                    //Actualizar el Listado de Seleccionados
                    if (_bol_Valor)
                    {
                        List<long> lst_RegistrosNuevos = _lst_id.Where(m => !g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Contains(m)).ToList();

                        if (lst_RegistrosNuevos != null && lst_RegistrosNuevos.Count > 0)
                        {
                            foreach (long lng_idCliente_Cadena in lst_RegistrosNuevos)
                            {
                                if (!g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Contains(lng_idCliente_Cadena))
                                {
                                    g_lst_ClientesCadena_RegistrosSeleccionados_Listado.Add(lng_idCliente_Cadena);
                                }
                            }
                        }
                    }
                    else
                    {
                        g_lst_ClientesCadena_RegistrosSeleccionados_Listado.RemoveAll(m => _lst_id.Contains(m));
                    }
                }
            }
            catch (Exception)
            { }
        }

        #endregion

        #endregion
        #endregion

        #region Emails 
        public void CrearEmails(MAE_ClientesEmails _mdl_MAE_ClientesEmails)
        {
            try
            {
                g_int_CTU_P_Clientes_AUX_2_Emails_Cantidad += 1;

                //Calcular tamaño el panel ...........................................................................
                int int_AnchoPanelprincipal = (780 * g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Width) / 785;
                if (g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Count > 0 && g_lst_CTU_P_Clientes_AUX_2_Emails.Count > 0)
                {
                    int_AnchoPanelprincipal = g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Find("controlusuario_CTU_P_Clientes_AUX_2_Emails" + g_lst_CTU_P_Clientes_AUX_2_Emails[0], false).FirstOrDefault().Width;
                }
                //....................................................................................................

                //Clonar 
                List<INTERNO_ComboBox_Modelo> lst_Tipos = new List<INTERNO_ComboBox_Modelo>();
                foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo in g_lst_INTERNO_ComboBox_Modelo_TIPO)
                {
                    lst_Tipos.Add(mdl_INTERNO_ComboBox_Modelo);
                }


                //Objeto Personalizado ...............................................................................
                int int_posicionRelativa = g_int_CTU_P_Clientes_AUX_2_Emails_PosicionY + (g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.DisplayRectangle.Y);
                CTU_P_Clientes_AUX_2_Emails controlusuario_CTU_P_Clientes_AUX_2_Emails = new CTU_P_Clientes_AUX_2_Emails(g_frm_P_Cliente_AUX_2, g_int_CTU_P_Clientes_AUX_2_Emails_Cantidad, _mdl_MAE_ClientesEmails, lst_Tipos);
                controlusuario_CTU_P_Clientes_AUX_2_Emails.Name = "controlusuario_CTU_P_Clientes_AUX_2_Emails" + g_int_CTU_P_Clientes_AUX_2_Emails_Cantidad;
                controlusuario_CTU_P_Clientes_AUX_2_Emails.Size = new System.Drawing.Size(int_AnchoPanelprincipal, g_int_CTU_P_Clientes_AUX_2_Emails_Alto);
                controlusuario_CTU_P_Clientes_AUX_2_Emails.Location = new Point(7, int_posicionRelativa);
                controlusuario_CTU_P_Clientes_AUX_2_Emails.Anchor = (System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Left);
                controlusuario_CTU_P_Clientes_AUX_2_Emails.Boton_CTU_P_Clientes_AUX_2_Emails_Delete_Click += new EventHandler<INTERNO_EventArgs>(Boton_CTU_P_Clientes_AUX_2_Emails_Delete);
                //....................................................................................................

                //Añadir al panel Principal
                g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Add(controlusuario_CTU_P_Clientes_AUX_2_Emails);

                //Sumar la altura y la separacion separacion para  agregar el siguiente control
                g_int_CTU_P_Clientes_AUX_2_Emails_PosicionY += (g_int_CTU_P_Clientes_AUX_2_Emails_Alto + 5);

                //Agregar numero del objeto creado
                g_lst_CTU_P_Clientes_AUX_2_Emails.Add(g_int_CTU_P_Clientes_AUX_2_Emails_Cantidad);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(CrearEmails));
            }
        }
        private void Boton_CTU_P_Clientes_AUX_2_Emails_Delete(object sender, INTERNO_EventArgs e)
        {
            try
            {

                CTU_P_Clientes_AUX_2_Emails obj_CTU_P_Clientes_AUX_2_Emails_Borrar = (CTU_P_Clientes_AUX_2_Emails)g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Find("controlusuario_CTU_P_Clientes_AUX_2_Emails" + e.NumeroObjeto, false).FirstOrDefault();

                if (obj_CTU_P_Clientes_AUX_2_Emails_Borrar != null)
                {
                    //Borrar Control
                    obj_CTU_P_Clientes_AUX_2_Emails_Borrar.Dispose();

                    //Borrar del listado
                    g_lst_CTU_P_Clientes_AUX_2_Emails.Remove(e.NumeroObjeto);

                    // Restar la altura y la separacion
                    g_int_CTU_P_Clientes_AUX_2_Emails_PosicionY -= (g_int_CTU_P_Clientes_AUX_2_Emails_Alto + 5);

                    CTU_P_Clientes_AUX_2_Emails obj_CTU_P_Clientes_AUX_2_Emails_ACAMBIAR;
                    foreach (int valoresModificarposicion in g_lst_CTU_P_Clientes_AUX_2_Emails.Where(m => m > e.NumeroObjeto).ToList())
                    {
                        obj_CTU_P_Clientes_AUX_2_Emails_ACAMBIAR = (CTU_P_Clientes_AUX_2_Emails)g_frm_P_Cliente_AUX_2.Exferia_Panel_Emails.Controls.Find("controlusuario_CTU_P_Clientes_AUX_2_Emails" + valoresModificarposicion, false).FirstOrDefault();
                        if (obj_CTU_P_Clientes_AUX_2_Emails_ACAMBIAR != null)
                        {
                            obj_CTU_P_Clientes_AUX_2_Emails_ACAMBIAR.Location = new Point(obj_CTU_P_Clientes_AUX_2_Emails_ACAMBIAR.Location.X, obj_CTU_P_Clientes_AUX_2_Emails_ACAMBIAR.Location.Y - (g_int_CTU_P_Clientes_AUX_2_Emails_Alto + 5));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Boton_CTU_P_Clientes_AUX_2_Emails_Delete));
            }
        }
        #endregion

        #region Tarifas
        #region Obtener Tarifas Cabecera/Lineas de base de datos
        public void Obtener_TarifasCompleto_BaseDatos()
        {
            try
            {
                if (g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos != null)
                {
                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_Obtener_TarifasCompleto_BaseDatos_DoWork);
                    g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Obtener_TarifasCompleto_BaseDatos_Completed);
                    g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando();
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();



                g_bol_Obtencion_TarifasCompleto_BaseDatos_Termino = false;

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Obtener_TarifasCompleto_BaseDatos.RunWorkerAsync();
            }
            catch (Exception)
            {
                g_bol_Obtencion_TarifasCompleto_BaseDatos_Termino = true;

                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Obtener_TarifasCompleto_BaseDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {

                //Cargamos el ensamblado #########################################################################################################################################################################
                Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_HERMES + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_HERMES + "." + Variables.G_STR_LIBRERIA_DATOSHERMES);
                //creamos la instancia
                var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSHERMES_PROCEDIMIENTO_HRMTARIFASCABECERA_OBTENER_PARALISTADO, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros_1 = { };

                //Pasamos los parametros al metodo y lo ejecutamos
                g_lst_Tarifas_ListadoRegistros = (List<dynamic>)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                //##################################################################################################################################################################################################                
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        protected void TareaAsincrona_Obtener_TarifasCompleto_BaseDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            g_bol_Obtencion_TarifasCompleto_BaseDatos_Termino = true;
        }
        #endregion

        #region Tarifas Incluir Registros Cabeceras

        #region Rellenar DataGridView Tarifas Incluir Registros Cabeceras

        public void Rellenar_DataGridView_Tarifas_IncluirRegistros_Cabeceras(string _str_filtro)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras != null)
                {
                    g_bol_CancelarTareaAsincrona_Tarifas_IncluirRegistros_Cabeceras = true;

                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras.IsBusy)
                        Application.DoEvents();

                    g_bol_CancelarTareaAsincrona_Tarifas_IncluirRegistros_Cabeceras = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras.WorkerSupportsCancellation = true;
                }


                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_IncluirRegistros_Cabeceras_Listado.Rows.Clear();
                g_int_TotalRegistrosInsertados_Tarifas_IncluirRegistros_Cabeceras = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_IncluirRegistros_Cabeceras_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_IncluirRegistros_Cabeceras_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_IncluirRegistros_Cabeceras_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Tarifas_IncluirRegistros_Cabeceras_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Tarifas_IncluirRegistros_Cabeceras_PalabraCompleta.Checked);

                //Orden Actual
                if (g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_IncluirRegistros_Cabeceras_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_IncluirRegistros_Cabeceras_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                {
                    lst_Argumentos.Add(((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_IncluirRegistros_Cabeceras_OrdenListado.SelectedItem).Identificador);
                }
                else
                {
                    lst_Argumentos.Add(g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros.ORDENACION_NOMBRECOLUMNA_PORDEFECTO());
                }

                //Lllamra a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Tarifas_IncluirRegistros_Cabeceras));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Tarifas_IncluirRegistros_Cabeceras));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Orden Actual
                string str_Ordenacion_PorDefecto = (string)lst_Argumentos[4];

                //Listado de la tabla
                g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = null;

                //Filtrar #############################################
                if (str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_Tarifas_IncluirRegistros_Cabeceras.Count > 0)
                {
                    g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = g_lst_Tarifas_ListadoRegistros;

                    //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                    if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && str_Busqueda.Trim().Length > 0)
                    {
                        //Todos
                        if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                        {
                            List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                            foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_Tarifas_IncluirRegistros_Cabeceras)
                            {
                                //Palabra Completa
                                if (bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)) == str_Busqueda).ToList());
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList());
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList());
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_TodosFiltrado.AddRange(g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList());
                                    }
                                }
                            }
                            //Añadir al Listado Final
                            g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = lst_TodosFiltrado.Distinct().ToList();
                        }
                        //Campo seleccionado
                        else
                        {
                            //Palabra Completa
                            if (bol_PalabraCompleta)
                            {
                                //Sencible a mayusculas y minusculas
                                if (bol_SensibilidadMayusMin)
                                {
                                    g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)) == str_Busqueda).ToList();
                                }
                                //No tiene en cuenta las mayusculas y las minusculas
                                else
                                {
                                    g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList();
                                }
                            }
                            //Por Contenido
                            else
                            {
                                //Sencible a mayusculas y minusculas
                                if (bol_SensibilidadMayusMin)
                                {
                                    g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList();
                                }
                                //No tiene en cuenta las mayusculas y las minusculas
                                else
                                {
                                    g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList();
                                }
                            }
                        }
                    }

                    //Filtros Avanzados
                    if (g_dct_ListadoFiltros_Tarifas_IncluirRegistros_Cabeceras != null && g_dct_ListadoFiltros_Tarifas_IncluirRegistros_Cabeceras.Count > 0)
                    {
                        g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = Funciones_Listado.Filtrar_Listado(g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras, g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros, g_dct_ListadoFiltros_Tarifas_IncluirRegistros_Cabeceras);
                    }
                }
                else
                {
                    g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = g_lst_Tarifas_ListadoRegistros;
                }
                //#####################################################

                if (g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras != null)
                {
                    //Ordenar el Listado ##################
                    if (str_Ordenacion_PorDefecto.Trim().Length > 0)
                    {
                        //Descendente
                        if (g_frm_P_Cliente_AUX_2.Exferia_Button_Tarifas_IncluirRegistros_Cabeceras_OrdenListado.Tag.ToString().Equals("1"))
                        {
                            g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.OrderByDescending(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                        }
                        //Ascendente
                        else
                        {
                            g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.OrderBy(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                        }
                    }
                    //#####################################

                    g_frm_P_Cliente_AUX_2.Listado_Tarifas_IncluirRegistros_Cabeceras_Ordenar_DataGridView();

                    //Guadar el listado .......................................................................................
                    //Buscar el Campo Clave
                    string str_NombreCampoClave = "id";
                    INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                    {
                        str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    }
                    //...........................................................................................................

                    g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_IncluirRegistros_Cabeceras_BarraProgreso.Exferia_BarraProgreso_Total = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Count;

                    object[] row;
                    foreach (dynamic obj_Dinamico in g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras)
                    {
                        //Se Cancelo la tarea asincrona ---------------------------
                        if (g_bol_CancelarTareaAsincrona_Tarifas_IncluirRegistros_Cabeceras)
                        {
                            return;
                        }

                        //Añadir Fila con Columnas .............................
                        row = Funciones_Listado.Transformar_Dynamic_A_Row(obj_Dinamico, g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros);

                        //Llamar al Progress
                        g_int_TotalRegistrosInsertados_Tarifas_IncluirRegistros_Cabeceras += 1;

                        ((BackgroundWorker)sender).ReportProgress(1, row);

                        //Application.DoEvents();
                        Thread.Sleep(1);
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_IncluirRegistros_Cabeceras = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_IncluirRegistros_Cabeceras = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_IncluirRegistros_Cabeceras = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_IncluirRegistros_Cabeceras_Listado.Rows.Add((object[])e.UserState);

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_IncluirRegistros_Cabeceras_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Tarifas_IncluirRegistros_Cabeceras;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_IncluirRegistros_Cabeceras_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            { }
            catch
            { }
        }

        #endregion

        #region Marcar/Desmarcar
        public void Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras(bool _bol_Marcar, List<long> _lst_Seleccionados)
        {
            try
            {

                if (g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras != null)
                {
                    //Cancelar Tarea Asincrona
                    g_bol_CancelarTareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras = true;

                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras = new BackgroundWorker();
                    g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras.DoWork += new DoWorkEventHandler(TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras_DoWork);
                    g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras_Completed);
                    g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando(_bol_Marcar ? Mensajes.G_STR_ESPERANDO_SELECCIONANDO_REGISTROS() : Mensajes.G_STR_ESPERANDO_DESSELECCIONANDO_REGISTROS());
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();



                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_bol_Marcar);
                lst_Argumentos.Add(_lst_Seleccionados);

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras.RunWorkerAsync(lst_Argumentos);
            }
            catch (Exception)
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_TerminoCorrectamente = true;

            try
            {
                List<object> lst_Argumentos = (List<object>)e.Argument;
                bool bol_Seleccionar = (bool)lst_Argumentos[0];
                List<long> lst_Seleccionados = (List<long>)lst_Argumentos[1];

                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Listado a Marcar/Desmarcar
                List<long> lst_Listado_Auxiliar = new List<long>();

                //Marcar/Desmarcar Seleccionados
                if (lst_Seleccionados != null && lst_Seleccionados.Count > 0)
                {
                    lst_Listado_Auxiliar = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && lst_Seleccionados.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).Select(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m)).Cast<long>().ToList();
                }
                //Marcar/Desmarcar Todos
                else
                {
                    lst_Listado_Auxiliar = g_lst_ListadoRegistros_Filtrados_Tarifas_IncluirRegistros_Cabeceras.Select(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m)).Cast<long>().ToList();
                }

                Actualizar_Tarifas_BaseDatos_Seleccionados_Colectivo(lst_Listado_Auxiliar, bol_Seleccionar);
            }
            catch (ThreadAbortException)
            {
                bol_TerminoCorrectamente = false;
            }
            catch (Exception)
            {
                bol_TerminoCorrectamente = false;
            }
            finally
            {
                e.Result = bol_TerminoCorrectamente;
            }
        }
        protected void TareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!g_frm_PE_Esperando.IsDisposed)
            {
                g_frm_PE_Esperando.Dispose();
            }

            g_bol_CancelarTareaAsincrona_Tarifas_MarcarDesmarcar_IncluirRegistros_Cabeceras = false;

            if ((bool)e.Result)
            {
                Rellenar_DataGridView_Tarifas_IncluirRegistros_Cabeceras(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Tarifas_IncluirRegistros_Cabeceras_Busqueda.Text);
                Rellenar_DataGridView_Tarifas_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Tarifas_RegistrosSeleccionados_Busqueda.Text);
            }

        }
        #endregion

        #endregion

        #region Tarifas Lineas

        #region Rellenar DataGridView Tarifas Lineas

        public void Rellenar_DataGridView_Tarifas_Lineas(string _str_filtro, bool _bol_RecargarListado)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas != null)
                {
                    g_bol_CancelarTareaAsincrona_Tarifas_Lineas = true;

                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas.IsBusy)
                        Application.DoEvents();

                    g_bol_CancelarTareaAsincrona_Tarifas_Lineas = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_Lineas_Listado.Rows.Clear();
                g_int_TotalRegistrosInsertados_Tarifas_Lineas = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_Lineas_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_Lineas_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_Lineas_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Tarifas_Lineas_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Tarifas_Lineas_PalabraCompleta.Checked);

                //Orden Actual
                if (g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_Lineas_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_Lineas_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                {
                    lst_Argumentos.Add(((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_Lineas_OrdenListado.SelectedItem).Identificador);
                }
                else
                {
                    lst_Argumentos.Add(g_obj_ABS_Listado_HRM_TarifasLineas_P_Cliente_AUX_2.ORDENACION_NOMBRECOLUMNA_PORDEFECTO());
                }

                //Recargar Listado
                lst_Argumentos.Add(_bol_RecargarListado);

                //Lllamra a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Tarifas_Lineas));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Tarifas_Lineas));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Orden Actual
                string str_Ordenacion_PorDefecto = (string)lst_Argumentos[4];
                bool bol_RecargarListado = (bool)lst_Argumentos[5];

                //Listado de la tabla

                List<dynamic> lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = null;

                //Buscar las lienas
                if (bol_RecargarListado &&
                    g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_IncluirRegistros_Cabeceras_Listado.Rows != null &&
                    g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_IncluirRegistros_Cabeceras_Listado.Rows.Count > 0 &&
                    g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_IncluirRegistros_Cabeceras_Listado.SelectedRows != null &&
                    g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_IncluirRegistros_Cabeceras_Listado.SelectedRows.Count > 0)
                {
                    g_lst_ListadoRegistros_Filtrados_Tarifas_Lineas = null;

                    //Cargamos el ensamblado #########################################################################################################################################################################
                    Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_HERMES + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_HERMES + "." + Variables.G_STR_LIBRERIA_DATOSHERMES);
                    //creamos la instancia
                    var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSHERMES_PROCEDIMIENTO_HRMTARIFASLINEAS_OBTENER_PARALISTADO_PORIDTARIFACABECERA, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros_1 = { long.Parse(g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_IncluirRegistros_Cabeceras_Listado.SelectedRows[0].Cells[nameof(INTERNO_HRM_TarifasCabecera_Listado_Modelo.id)].Value.ToString()) };

                    //Pasamos los parametros al metodo y lo ejecutamos
                    List<INTERNO_HRM_TarifasLineas_Listado_Modelo> lst_INTERNO_HRM_TarifasLineas_Listado_Modelo = (List<INTERNO_HRM_TarifasLineas_Listado_Modelo>)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                    if (lst_INTERNO_HRM_TarifasLineas_Listado_Modelo != null && lst_INTERNO_HRM_TarifasLineas_Listado_Modelo.Count > 0)
                    {
                        g_lst_ListadoRegistros_Filtrados_Tarifas_Lineas = lst_INTERNO_HRM_TarifasLineas_Listado_Modelo.Cast<dynamic>().ToList();
                    }
                    //##################################################################################################################################################################################################                
                }

                if (g_lst_ListadoRegistros_Filtrados_Tarifas_Lineas != null && g_lst_ListadoRegistros_Filtrados_Tarifas_Lineas.Count > 0)
                {
                    //Filtrar #############################################
                    if (str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_Tarifas_Lineas.Count > 0)
                    {
                        lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = g_lst_ListadoRegistros_Filtrados_Tarifas_Lineas;

                        //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                        if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && str_Busqueda.Trim().Length > 0)
                        {
                            //Todos
                            if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                            {
                                List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                                foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_Tarifas_Lineas)
                                {
                                    //Palabra Completa
                                    if (bol_PalabraCompleta)
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)) == str_Busqueda).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList());
                                        }
                                    }
                                    //Por Contenido
                                    else
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList());
                                        }
                                    }
                                }
                                //Añadir al Listado Final
                                lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = lst_TodosFiltrado.Distinct().ToList();
                            }
                            //Campo seleccionado
                            else
                            {
                                //Palabra Completa
                                if (bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)) == str_Busqueda).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList();
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList();
                                    }
                                }
                            }
                        }

                        //Filtros Avanzados
                        if (g_dct_ListadoFiltros_Tarifas_Lineas != null && g_dct_ListadoFiltros_Tarifas_Lineas.Count > 0)
                        {
                            lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = Funciones_Listado.Filtrar_Listado(lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL, g_obj_ABS_Listado_HRM_TarifasLineas_P_Cliente_AUX_2, g_dct_ListadoFiltros_Tarifas_Lineas);
                        }
                    }
                    else
                    {
                        lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = g_lst_ListadoRegistros_Filtrados_Tarifas_Lineas;
                    }
                    //#####################################################

                    if (lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL != null)
                    {

                        //Ordenar el Listado ##################
                        if (str_Ordenacion_PorDefecto.Trim().Length > 0)
                        {
                            //Descendente
                            if (g_frm_P_Cliente_AUX_2.Exferia_Button_Tarifas_Lineas_OrdenListado.Tag.ToString().Equals("1"))
                            {
                                lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.OrderByDescending(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                            //Ascendente
                            else
                            {
                                lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL = lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.OrderBy(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                        }
                        //#####################################

                        g_frm_P_Cliente_AUX_2.Listado_Tarifas_Lineas_Ordenar_DataGridView();

                        g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_Lineas_BarraProgreso.Exferia_BarraProgreso_Total = lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL.Count;

                        object[] row;
                        foreach (dynamic obj_Dinamico in lst_ListadoRegistros_Filtrados_Tarifas_Lineas_FILTRADOATUAL)
                        {
                            //Se Cancelo la tarea asincrona ---------------------------
                            if (g_bol_CancelarTareaAsincrona_Tarifas_Lineas)
                            {
                                return;
                            }

                            //Añadir Fila con Columnas .............................
                            row = Funciones_Listado.Transformar_Dynamic_A_Row(obj_Dinamico, g_obj_ABS_Listado_HRM_TarifasLineas_P_Cliente_AUX_2);

                            //Llamar al Progress
                            g_int_TotalRegistrosInsertados_Tarifas_Lineas += 1;

                            ((BackgroundWorker)sender).ReportProgress(1, row);

                            //Application.DoEvents();
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_Lineas = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_Lineas = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_Lineas = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_Lineas_Listado.Rows.Add((object[])e.UserState);

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_Lineas_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Tarifas_Lineas;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_Lineas_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        #endregion

        #endregion

        #region Tarifas Registros Seleccionados

        #region Rellenar DataGridView Tarifas Registros Seleccionados

        public void Rellenar_DataGridView_Tarifas_RegistrosSeleccionados(string _str_filtro)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados != null)
                {
                    g_bol_CancelarTareaAsincrona_Tarifas_RegistrosSeleccionados = true;

                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados.IsBusy)
                        Application.DoEvents();

                    g_bol_CancelarTareaAsincrona_Tarifas_RegistrosSeleccionados = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_RegistrosSeleccionados_Listado.Rows.Clear();
                g_int_TotalRegistrosInsertados_Tarifas_RegistrosSeleccionados = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_RegistrosSeleccionados_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Tarifas_RegistrosSeleccionados_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Cliente_AUX_2.Exferia_CheckBox_Tarifas_RegistrosSeleccionados_PalabraCompleta.Checked);

                //Orden Actual
                if (g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_RegistrosSeleccionados_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_RegistrosSeleccionados_OrdenListado.SelectedItem).Identificador.Trim().Length > 0)
                {
                    lst_Argumentos.Add(((INTERNO_ComboBox_Modelo)g_frm_P_Cliente_AUX_2.Exferia_ComboBox_Tarifas_RegistrosSeleccionados_OrdenListado.SelectedItem).Identificador);
                }
                else
                {
                    lst_Argumentos.Add(g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2.ORDENACION_NOMBRECOLUMNA_PORDEFECTO());
                }

                //Lllamra a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Tarifas_RegistrosSeleccionados));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Rellenar_DataGridView_Tarifas_RegistrosSeleccionados));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Orden Actual
                string str_Ordenacion_PorDefecto = (string)lst_Argumentos[4];

                //Listado de la tabla
                List<dynamic> lst_ListadoRegistros_RegistrosSeleccionados = null;
                if (g_lst_Tarifas_ListadoRegistros != null && g_lst_Tarifas_RegistrosSeleccionados_Listado != null && g_lst_Tarifas_RegistrosSeleccionados_Listado.Count > 0)
                {
                    //Busco registro listado en memoria
                    lst_ListadoRegistros_RegistrosSeleccionados = g_lst_Tarifas_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && g_lst_Tarifas_RegistrosSeleccionados_Listado.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).ToList();
                }

                List<dynamic> lst_ListadoRegistros_Filtrados = null;

                //Filtrar #############################################
                if (lst_ListadoRegistros_RegistrosSeleccionados != null)
                {
                    if (str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_Tarifas_RegistrosSeleccionados.Count > 0)
                    {
                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_RegistrosSeleccionados;

                        //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                        if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && str_Busqueda.Trim().Length > 0)
                        {
                            //Todos
                            if (mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                            {
                                List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                                foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_Tarifas_RegistrosSeleccionados)
                                {
                                    //Palabra Completa
                                    if (bol_PalabraCompleta)
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)) == str_Busqueda).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList());
                                        }
                                    }
                                    //Por Contenido
                                    else
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList());
                                        }
                                    }
                                }
                                //Añadir al Listado Final
                                lst_ListadoRegistros_Filtrados = lst_TodosFiltrado.Distinct().ToList();
                            }
                            //Campo seleccionado
                            else
                            {
                                //Palabra Completa
                                if (bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)) == str_Busqueda).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper() == str_Busqueda.ToUpper()).ToList();
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (bol_SensibilidadMayusMin)
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).Contains(str_Busqueda)).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && Funciones.Convertir_A_String(m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null)).ToUpper().Contains(str_Busqueda.ToUpper())).ToList();
                                    }
                                }
                            }
                        }

                        //Filtros Avanzados
                        if (g_dct_ListadoFiltros_Tarifas_RegistrosSeleccionados != null && g_dct_ListadoFiltros_Tarifas_RegistrosSeleccionados.Count > 0)
                        {
                            lst_ListadoRegistros_Filtrados = Funciones_Listado.Filtrar_Listado(lst_ListadoRegistros_Filtrados, g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2, g_dct_ListadoFiltros_Tarifas_RegistrosSeleccionados);
                        }
                    }
                    else
                    {
                        lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_RegistrosSeleccionados;
                    }
                    //#####################################################

                    if (lst_ListadoRegistros_Filtrados != null)
                    {
                        //Ordenar el Listado ##################
                        if (str_Ordenacion_PorDefecto.Trim().Length > 0)
                        {
                            //Descendente
                            if (g_frm_P_Cliente_AUX_2.Exferia_Button_Tarifas_RegistrosSeleccionados_OrdenListado.Tag.ToString().Equals("1"))
                            {
                                lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.OrderByDescending(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                            //Ascendente
                            else
                            {
                                lst_ListadoRegistros_Filtrados = lst_ListadoRegistros_Filtrados.OrderBy(m => m.GetType().GetProperty(str_Ordenacion_PorDefecto).GetValue(m, null)).ToList();
                            }
                        }
                        //#####################################

                        g_frm_P_Cliente_AUX_2.Listado_Tarifas_RegistrosSeleccionados_Ordenar_DataGridView();

                        //Guadar el listado .......................................................................................
                        g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Total = lst_ListadoRegistros_Filtrados.Count;

                        object[] row;
                        foreach (dynamic obj_Dinamico in lst_ListadoRegistros_Filtrados)
                        {
                            //Se Cancelo la tarea asincrona ---------------------------
                            if (g_bol_CancelarTareaAsincrona_Tarifas_RegistrosSeleccionados)
                            {
                                return;
                            }

                            //Añadir Fila con Columnas .............................
                            row = Funciones_Listado.Transformar_Dynamic_A_Row(obj_Dinamico, g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2);

                            //Llamar al Progress
                            g_int_TotalRegistrosInsertados_Tarifas_RegistrosSeleccionados += 1;

                            ((BackgroundWorker)sender).ReportProgress(1, row);

                            //Application.DoEvents();
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_CancelarTareaAsincrona_Tarifas_RegistrosSeleccionados = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_RegistrosSeleccionados_Listado.Rows.Add((object[])e.UserState);

                g_frm_P_Cliente_AUX_2.Exferia_BarraProgreso_Tarifas_RegistrosSeleccionados_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Tarifas_RegistrosSeleccionados;
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Tarifas_RegistrosSeleccionados_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        #endregion

        #region Vaciar Registros Seleccionados
        public void Vaciar_Tarifas_RegistrosSeleccionados(List<long> _lst_ids_ABorrar)
        {
            try
            {
                if (g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados != null)
                {
                    //Cancelar Tarea Asincrona
                    g_bol_CancelarTareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados = true;

                    //Si se estaba ejecutando lo paro
                    while (g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados = new BackgroundWorker();
                    g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados.DoWork += new DoWorkEventHandler(TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados_DoWork);
                    g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados_Completed);
                    g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados.WorkerReportsProgress = false;
                    g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados.WorkerSupportsCancellation = true;
                }

                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_DESSELECCIONANDO_REGISTROS());
                g_frm_PE_Esperando.TopMost = true;
                g_frm_PE_Esperando.Show();




                g_lst_Tarifas_RegistrosSeleccionados_AVaciar = _lst_ids_ABorrar;

                //Empezar TareaAsincrona
                g_obj_TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados.RunWorkerAsync();
            }
            catch (Exception)
            {
                g_bol_CancelarTareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados = false;

                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }

        }
        protected void TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_TerminoCorrectamente = true;

            try
            {
                Actualizar_Tarifas_BaseDatos_Seleccionados_Colectivo(g_lst_Tarifas_RegistrosSeleccionados_AVaciar, false);
            }
            catch (ThreadAbortException)
            {
                bol_TerminoCorrectamente = false;
            }
            catch (Exception)
            {
                bol_TerminoCorrectamente = false;
            }
            finally
            {
                e.Result = bol_TerminoCorrectamente;
            }
        }
        protected void TareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            g_bol_CancelarTareaAsincrona_Vaciar_Tarifas_RegistrosSeleccionados = false;

            try
            {
                if ((bool)e.Result)
                {
                    string str_NombreCampoClave = "id";
                    INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                    {
                        str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                    }

                    //Borrar los datos del DataGridView
                    g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_RegistrosSeleccionados_Listado.Rows
                            .Cast<DataGridViewRow>()
                            .ToList()
                            .Where(r => g_lst_Tarifas_RegistrosSeleccionados_AVaciar.Contains(long.Parse(r.Cells[str_NombreCampoClave].Value.ToString()))).ToList().ForEach(m => g_frm_P_Cliente_AUX_2.Exferia_DataGridView_Tarifas_RegistrosSeleccionados_Listado.Rows.Remove(m));

                    //Rellenar de Nuevo el Listado de Registros a Incluir
                    Rellenar_DataGridView_Tarifas_IncluirRegistros_Cabeceras(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Tarifas_IncluirRegistros_Cabeceras_Busqueda.Text);
                }
            }
            catch (Exception)
            { }
            finally
            {
                if (!g_frm_PE_Esperando.IsDisposed)
                {
                    g_frm_PE_Esperando.Dispose();
                }
            }
        }
        #endregion

        #endregion


        public void Actualizar_Tarifas_BaseDatos_Seleccionados_Individual(long _lng_id, bool _bol_Valor)
        {
            try
            {
                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Busco registro listado en memoria
                dynamic dnm_Registro = g_lst_Tarifas_ListadoRegistros[g_lst_Tarifas_ListadoRegistros.IndexOf(g_lst_Tarifas_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) == _lng_id).FirstOrDefault())];

                if (dnm_Registro != null)
                {
                    //Actualizar registro dinamico
                    dnm_Registro.GetType().GetProperty(nameof(INTERNO_HRM_TarifasCabecera_Listado_Modelo.Seleccionar)).SetValue(dnm_Registro, _bol_Valor, null);


                    //Modificar listado en memoria
                    g_lst_Tarifas_ListadoRegistros[g_lst_Tarifas_ListadoRegistros.IndexOf(g_lst_Tarifas_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) == _lng_id).FirstOrDefault())] = dnm_Registro;
                }


                if (_bol_Valor)
                {
                    if (!g_lst_Tarifas_RegistrosSeleccionados_Listado.Contains(_lng_id))
                    {
                        g_lst_Tarifas_RegistrosSeleccionados_Listado.Add(_lng_id);
                    }
                }
                else
                {
                    if (g_lst_Tarifas_RegistrosSeleccionados_Listado.Contains(_lng_id))
                    {
                        g_lst_Tarifas_RegistrosSeleccionados_Listado.Remove(_lng_id);
                    }
                }

                Rellenar_DataGridView_Tarifas_RegistrosSeleccionados(g_frm_P_Cliente_AUX_2.Exferia_TextBox_Tarifas_RegistrosSeleccionados_Busqueda.Text);
            }
            catch (Exception)
            { }
        }
        public void Actualizar_Tarifas_BaseDatos_Seleccionados_Colectivo(List<long> _lst_id, bool _bol_Valor)
        {
            try
            {
                //Buscar el Campo Clave
                string str_NombreCampoClave = "id";
                INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo = g_obj_ABS_Listado_HRM_TarifasCabecera_P_Cliente_AUX_2_IncluirRegistros.LISTADO_COLUMNAS().Values.Where(m => m.ColumnaClave).FirstOrDefault();
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo != null)
                {
                    str_NombreCampoClave = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna;
                }

                //Actualizar el listado de registro general
                g_lst_Tarifas_ListadoRegistros.Where(m => m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null) != null && _lst_id.Contains(m.GetType().GetProperty(str_NombreCampoClave).GetValue(m, null))).ToList().ForEach(x => x.GetType().GetProperty(nameof(INTERNO_HRM_TarifasCabecera_Listado_Modelo.Seleccionar)).SetValue(x, _bol_Valor, null));

                //Actualizar el Listado de Seleccionados
                if (_bol_Valor)
                {
                    List<long> lst_RegistrosNuevos = _lst_id.Where(m => !g_lst_Tarifas_RegistrosSeleccionados_Listado.Contains(m)).ToList();

                    if (lst_RegistrosNuevos != null && lst_RegistrosNuevos.Count > 0)
                    {
                        g_lst_Tarifas_RegistrosSeleccionados_Listado.AddRange(lst_RegistrosNuevos);
                    }
                }
                else
                {
                    g_lst_Tarifas_RegistrosSeleccionados_Listado.RemoveAll(m => _lst_id.Contains(m));
                }
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Tipos Transporte
        private void CargarTiposTransportes()
        {
            //Cargamos el ensamblado
            Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
            //Obtenemos el tipo de la clase
            Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
            //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_DATOSMAESTROS_PROCEDIMIENTO_MAETIPOSTRANSPORTES_OBTENERMODELOLISTADO, BindingFlags.Instance | BindingFlags.NonPublic);
            //Obtener valores
            object[] arr_Parametros = { };
            //Pasamos los parametros al metodo y lo ejecutamos
            g_lst_MAE_TiposTransportes = (List<MAE_TiposTransportes>)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
        }
        #endregion Tipos Transporte

        #region Seguros
        public void Crear_Seguro_Cliente(HRM_PrecioSeguro _mdl_MAE_ClientesSeguros)
        {
            try
            {
                g_int_CTU_P_Clientes_AUX_2_Seguros_Cantidad += 1;
                if (g_lst_Exferia_ComboBox_Seguros.Count < g_lst_MAE_TiposTransportes.Count)
                {
                    //Calcular tamaño el panel ...........................................................................
                    int int_AnchoPanelprincipal = (780 * g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros.Width) / 785;
                    if (g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros.Controls.Count > 0 && g_lst_CTU_P_Clientes_AUX_2_Seguros.Count > 0)
                    {
                        int_AnchoPanelprincipal = g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros.Controls.Find("controlusuario_CTU_P_Clientes_AUX_2_Seguros" + g_lst_CTU_P_Clientes_AUX_2_Seguros[0], false).FirstOrDefault().Width;
                    }
                    // Obtengo los disponibles para el actual CB
                    List<INTERNO_ComboBox_Modelo> lst_Tipos = ObtenerTiposTransporteCBDisponibles();

                    //Objeto Personalizado ...............................................................................
                    int int_posicionRelativa = g_int_CTU_P_Clientes_AUX_2_Seguros_PosicionY + (g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros.DisplayRectangle.Y);
                    CTU_P_Clientes_AUX_2_Seguros controlusuario_CTU_P_Clientes_AUX_2_Seguros = new CTU_P_Clientes_AUX_2_Seguros(g_frm_P_Cliente_AUX_2, g_int_CTU_P_Clientes_AUX_2_Seguros_Cantidad, _mdl_MAE_ClientesSeguros, lst_Tipos);
                    controlusuario_CTU_P_Clientes_AUX_2_Seguros.Name = "controlusuario_CTU_P_Clientes_AUX_2_Seguros" + g_int_CTU_P_Clientes_AUX_2_Seguros_Cantidad;
                    controlusuario_CTU_P_Clientes_AUX_2_Seguros.Size = new System.Drawing.Size(int_AnchoPanelprincipal, g_int_CTU_P_Clientes_AUX_2_Seguros_Alto);
                    controlusuario_CTU_P_Clientes_AUX_2_Seguros.Location = new Point(7, int_posicionRelativa);
                    controlusuario_CTU_P_Clientes_AUX_2_Seguros.Anchor = (System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Left);
                    g_lst_Exferia_ComboBox_Seguros.Add(controlusuario_CTU_P_Clientes_AUX_2_Seguros.ex_CB_TipoTransporte);
                    controlusuario_CTU_P_Clientes_AUX_2_Seguros.Boton_CTU_P_Clientes_AUX_2_Seguros_Delete_Click += new EventHandler<INTERNO_EventArgs>(Boton_CTU_P_Clientes_AUX_2_Seguros_Delete);
                    ActualizarTiposCBDisponibles();
                    //....................................................................................................

                    //Añadir al panel Principal
                    g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros.Controls.Add(controlusuario_CTU_P_Clientes_AUX_2_Seguros);

                    //Sumar la altura y la separacion separacion para  agregar el siguiente control
                    g_int_CTU_P_Clientes_AUX_2_Seguros_PosicionY += (g_int_CTU_P_Clientes_AUX_2_Emails_Alto + 5);

                    //Agregar numero del objeto creado
                    g_lst_CTU_P_Clientes_AUX_2_Seguros.Add(g_int_CTU_P_Clientes_AUX_2_Seguros_Cantidad);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Crear_Seguro_Cliente));
            }
        }

        private void ActualizarTiposCBDisponibles()
        {
            List<INTERNO_ComboBox_Modelo> lst_Tipos = ObtenerTiposTransporteCBDisponibles();
            g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros
                .Controls
                .Cast<CTU_P_Clientes_AUX_2_Seguros>()
                .ToList()
                .ForEach(_mdl_P => _mdl_P.ActualizarOpcionesDisponiblesConSeleccionado(lst_Tipos));
        }


        private List<INTERNO_ComboBox_Modelo> ObtenerTiposTransporteCBDisponibles()
        {
            var _selectedItemsDescripciones = g_lst_Exferia_ComboBox_Seguros.Select(_item => (_item.SelectedValue as INTERNO_ComboBox_Modelo)?.Descripcion);

            // Obtengo los disponibles para todos los ComboBox
            return g_lst_MAE_TiposTransportes
                    .Where(mdl_MAE_TipoTransporte => !_selectedItemsDescripciones.Contains(mdl_MAE_TipoTransporte.descripcion))
                    .Select(
                        mdl_MAE_TipoTransporte => new INTERNO_ComboBox_Modelo(mdl_MAE_TipoTransporte.id.ToString(), mdl_MAE_TipoTransporte.descripcion, mdl_MAE_TipoTransporte.fechaBorrado)
                    )
                    .ToList();
        }

        private void Boton_CTU_P_Clientes_AUX_2_Seguros_Delete(object sender, INTERNO_EventArgs e)
        {
            try
            {

                CTU_P_Clientes_AUX_2_Seguros obj_CTU_P_Clientes_AUX_2_Seguros_Borrar = (CTU_P_Clientes_AUX_2_Seguros)g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros.Controls.Find("controlusuario_CTU_P_Clientes_AUX_2_Seguros" + e.NumeroObjeto, false).FirstOrDefault();

                if (obj_CTU_P_Clientes_AUX_2_Seguros_Borrar != null)
                {
                    //Borrar Control
                    obj_CTU_P_Clientes_AUX_2_Seguros_Borrar.Dispose();

                    //Borrar del listado
                    g_lst_CTU_P_Clientes_AUX_2_Seguros.Remove(e.NumeroObjeto);
                    g_lst_Exferia_ComboBox_Seguros.Remove(obj_CTU_P_Clientes_AUX_2_Seguros_Borrar.ex_CB_TipoTransporte);

                    // Restar la altura y la separacion
                    g_int_CTU_P_Clientes_AUX_2_Seguros_PosicionY -= (g_int_CTU_P_Clientes_AUX_2_Seguros_Alto + 5);

                    CTU_P_Clientes_AUX_2_Seguros obj_CTU_P_Clientes_AUX_2_Seguros_ACAMBIAR;
                    foreach (int valoresModificarposicion in g_lst_CTU_P_Clientes_AUX_2_Seguros.Where(m => m > e.NumeroObjeto).ToList())
                    {
                        obj_CTU_P_Clientes_AUX_2_Seguros_ACAMBIAR = (CTU_P_Clientes_AUX_2_Seguros)g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros.Controls.Find("controlusuario_CTU_P_Clientes_AUX_2_Seguros" + valoresModificarposicion, false).FirstOrDefault();
                        if (obj_CTU_P_Clientes_AUX_2_Seguros_ACAMBIAR != null)
                        {
                            obj_CTU_P_Clientes_AUX_2_Seguros_ACAMBIAR.Location = new Point(obj_CTU_P_Clientes_AUX_2_Seguros_ACAMBIAR.Location.X, obj_CTU_P_Clientes_AUX_2_Seguros_ACAMBIAR.Location.Y - (g_int_CTU_P_Clientes_AUX_2_Seguros_Alto + 5));
                        }
                    }

                    ActualizarTiposCBDisponibles();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cliente_AUX_2_Controladora) + "/" + nameof(Boton_CTU_P_Clientes_AUX_2_Emails_Delete));
            }
        }
        private void CargarListadoSeguros()
        {
            g_mdl_INTERNO_MAE_Clientes_Modelo.HRM_PrecioSeguro?.ToList().ForEach(_mdl => Crear_Seguro_Cliente(_mdl));
        }

        private INTERNO_ValorDevuelto_Modelo GrabarSeguros(long lng_idCliente, TransactionScope transaccion_SQL)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo() { TodoCorrecto = true };
            var lst_HRM_PrecioSeguro = g_frm_P_Cliente_AUX_2.Exferia_Panel_Seguros.Controls?.Cast<CTU_P_Clientes_AUX_2_Seguros>().Select(_mdl => _mdl.Obtener_A_Grabar(lng_idCliente))
                ?? new List<HRM_PrecioSeguro>();


            //Borrar las lineas que estan Fuera del listado
            if ((g_mdl_INTERNO_MAE_Clientes_Modelo.HRM_PrecioSeguro?.Count() ?? 0) > 0)
            {
                var arr_Segurosids = lst_HRM_PrecioSeguro.Select(x => x.id).ToArray();
                var arr_SegurosBorrar = g_mdl_INTERNO_MAE_Clientes_Modelo
                    .HRM_PrecioSeguro
                    .Where(m => !arr_Segurosids.Contains(m.id) && m.idCliente.Equals(lng_idCliente))
                    .ToList();
                if ((arr_SegurosBorrar?.Count() ?? 0) > 0)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_SegurosBorrar = null;
                    foreach (HRM_PrecioSeguro mdl_HRM_PrecioSeguro in arr_SegurosBorrar)
                    {
                        mdl_ValorDevuelto_Modelo_SegurosBorrar = Borrar_HRM_PrecioSeguro_Datos(mdl_HRM_PrecioSeguro.id);
                        if (mdl_ValorDevuelto_Modelo_SegurosBorrar.TodoCorrecto == false)
                        {
                            transaccion_SQL.Dispose();
                            return mdl_ValorDevuelto_Modelo_SegurosBorrar;
                        }
                    }
                }
            }

            //Actualizar Lineas
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_Seguros = null;
            foreach (HRM_PrecioSeguro mdl_HRM_PrecioSeguro in lst_HRM_PrecioSeguro)
            {
                mdl_INTERNO_ValorDevuelto_Modelo_Seguros = Grabar_HRM_PrecioSeguro_Datos(mdl_HRM_PrecioSeguro);
                if (!mdl_INTERNO_ValorDevuelto_Modelo_Seguros.TodoCorrecto)
                {
                    transaccion_SQL.Dispose();
                    return mdl_INTERNO_ValorDevuelto_Modelo_Seguros;
                }
            }
            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        private INTERNO_ValorDevuelto_Modelo Grabar_HRM_PrecioSeguro_Datos(HRM_PrecioSeguro mdl_HRM_PrecioSeguro)
        {
            //Cargamos el ensamblado
            Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_HERMES + ".dll");
            //Obtenemos el tipo de la clase
            Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_HERMES + "." + Variables.G_STR_LIBRERIA_DATOSHERMES);
            //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_DATOSHERMES_PROCEDIMIENTO_HRMPRECIOSEGURO_GRABAR, BindingFlags.Instance | BindingFlags.NonPublic);

            //Obtener valores
            object[] arr_Parametros = { mdl_HRM_PrecioSeguro };
            //Pasamos los parametros al metodo y lo ejecutamos
            return (INTERNO_ValorDevuelto_Modelo) obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
        }

        private INTERNO_ValorDevuelto_Modelo Borrar_HRM_PrecioSeguro_Datos(long _lng_id)
        {
            //Cargamos el ensamblado
            Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_HERMES + ".dll");
            //Obtenemos el tipo de la clase
            Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_HERMES + "." + Variables.G_STR_LIBRERIA_DATOSHERMES);
            //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_DATOSHERMES_PROCEDIMIENTO_HRMPRECIOSEGURO_BORRAR, BindingFlags.Instance | BindingFlags.NonPublic);

            //Obtener valores
            object[] arr_Parametros = { _lng_id };
            //Pasamos los parametros al metodo y lo ejecutamos
            return (INTERNO_ValorDevuelto_Modelo)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
        }
        #endregion Seguros
    }
}
