using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_Ventas._0_Modelos;
using Exferia_Ventas._1_Datos;
using Exferia_Ventas.General;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Ventas._3_Vistas.Controladoras
{
    public class P_Cobro_AUX_1_Controladora
    {
        #region Variables Generales
        private P_Cobro_AUX_1 g_frm_P_Cobro_AUX_1 = 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 Negocio Necesarias para la carga de datos
        private VTA_Cobros_Datos g_obj_VTA_Cobros_Datos = new VTA_Cobros_Datos();
        private VTA_FacturasCabecera_Datos g_obj_VTA_FacturasCabecera_Datos = new VTA_FacturasCabecera_Datos();
        private VTA_Vencimientos_Datos g_obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();

        public VTA_Cobros g_mdl_VTA_Cobros = null;//Modelo de los datos del Cobro, cargados

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

        public GEN_EjerciciosActivos_Empresa g_mdl_GEN_EjerciciosActivos_Empresa = null;

        //Tareea Asincrona de carga de datos
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos;

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

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

        //Tarea Asincrona de Relenar datos FacturaCabecera
        private BackgroundWorker g_obj_TareaAsincrona_RellenarDatos_FacturaCabecera;

        //Tarea Asincrona de Relenar datos Vencimiento
        private BackgroundWorker g_obj_TareaAsincrona_RellenarDatos_Vencimiento;

        public long g_lng_idEjercicio = -1;
        public long g_lng_idDelegacion = -1;
        public long g_lng_idEntidad = -1;
        public INTERNO_VTA_FacturasCabecera_Modelo g_mdl_INTERNO_VTA_FacturasCabecera_Modelo = null;
        public INTERNO_VTA_Vencimientos_Modelo g_mdl_INTERNO_VTA_Vencimientos_Modelo = null;

        //Datos de de Cerrado y Volcado
        public List<CTA_VolcadoCabecera> g_lst_CTA_VolcadoCabecera = null;

        public string g_str_Estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;

        //Saber si el Ejercicio del Documento tiene CierreAdministrativo o CierreContable
        public G_ENUM_VALIDACIONFECHAS_TIPOCIERRE g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE = G_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Ninguno;

        //Tarea Asincrona para la Actualizacion fecha Confirmacion Cobros
        private BackgroundWorker g_TareaAsincrona_Actualizar_FechaConfirmacion_Cobros;

        //Modelo que se usa para previsiones
        public PRE_Previsiones g_mdl_PRE_Previsiones = null;

        public bool g_bol_CargandoDatosFactura = false;

        #endregion

        #region Enumerados
        public enum G_ENUM_NIVELES
        {
            Inicio = 0,
            Factura = 1,
            Vencimento = 2,
            RestoDatos = 3
        }
        public enum G_ENUM_ACCIONES_BLOQUEO
        {
            Bloquear_NoActual = 0,
            Bloquear_SiActual = 1,
            Desbloquear_SiActual = 2
        }
        public enum G_ENUM_ACCIONES_VACIADO
        {
            Vaciar_NoActual = 0,
            Vaciar_SiActual = 1
        }
        #endregion

        #region Constructor
        public P_Cobro_AUX_1_Controladora(P_Cobro_AUX_1 _frm_P_Cobro_AUX_1)
        {
            g_frm_P_Cobro_AUX_1 = _frm_P_Cobro_AUX_1;

            g_bol_Termino_CargaDatos_Inicial = true;
        }
        #endregion

        #region Datos Iniciales
        public void Datos_PorDefecto()
        {
            try
            {
                g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Fecha = g_frm_P_Cobro_AUX_1.P_Base_FechaTrabajo.ToString("dd/MM/yyyy");

                //Delegacion
                if (g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.Delegacion != null)
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id = g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.Delegacion.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Codigo = g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.Delegacion.codigo;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Descripcion = g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.Delegacion.descripcion;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_FechaBorrado = g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.Delegacion.fechaBorrado;
                }

                //Ejercicio
                if (g_mdl_PRE_Previsiones == null)
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Id = g_mdl_GEN_EjerciciosActivos_Empresa.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Codigo = g_mdl_GEN_EjerciciosActivos_Empresa.anioControl;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_GEN_EjerciciosActivos_Empresa.descripcion;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_GEN_EjerciciosActivos_Empresa.fechaBorrado;
                    g_lng_idEjercicio = g_mdl_GEN_EjerciciosActivos_Empresa.id;
                }

                Bloquea_Desbloquea(G_ENUM_NIVELES.Factura, G_ENUM_ACCIONES_BLOQUEO.Desbloquear_SiActual);
                FacturaCabecera_Actualizar_DatosFiltro();

                //CTA_PredefinidosCabeceras_Cobro
                //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_COBROS.Id };

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

                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_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras_Cobro.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras_Cobro.codigo;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras_Cobro.descripcion;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras_Cobro.fechaBorrado;
                }

                //CTA_PredefinidosCabeceras_Negociacion
                //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_COBROPOREFECTO.Id };

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

                if (mdl_CTA_PredefinidosCabeceras_Negociacion != null &&
                    mdl_CTA_PredefinidosCabeceras_Negociacion.idPredefinidoFichero != null &&
                    mdl_CTA_PredefinidosCabeceras_Negociacion.idPredefinidoFichero.Value.Equals(Variables.G_PREDEFINIDOFICHEROS_COBROPOREFECTO.Id))
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras_Negociacion.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras_Negociacion.codigo;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras_Negociacion.descripcion;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras_Negociacion.fechaBorrado;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Datos_PorDefecto));
            }
            finally
            {
                g_frm_P_Cobro_AUX_1.P_Base_SeModificoDatosPantalla = false;
            }
        }
        #endregion

        #region Vaciar datos
        public void Vaciar_Datos(G_ENUM_NIVELES _enum_Nivel, G_ENUM_ACCIONES_VACIADO _enum_Accion, bool _bol_DesbloquearTodo, bool _bol_VaciarHijos)
        {
            //Inicio
            if (G_ENUM_NIVELES.Inicio.Equals(_enum_Nivel))
            {
                g_lng_idEjercicio = -1;
                g_lng_idDelegacion = -1;
                g_lng_idEntidad = -1;

                g_str_Estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;
                g_lst_CTA_VolcadoCabecera = null;
                g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE = G_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Ninguno;

                g_mdl_VTA_Cobros = null;
                g_frm_P_Cobro_AUX_1.Exferia_Label_SinColor_Advertencia_Ejercicio.Text = "";
                g_frm_P_Cobro_AUX_1.Exferia_TextBox_Codigo.Text = "";

                //Bloqueo los Controles
                SoloLectura.Empezar(g_frm_P_Cobro_AUX_1, false);
                g_frm_P_Cobro_AUX_1.Exferia_Button_Grabar.Enabled = true;
                g_frm_P_Cobro_AUX_1.Exferia_Button_Borrar.Enabled = true;

                //Ejercicio
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //Delegacion
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //Entidad
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //ClavePredefinida_Cobro
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //ClavePredefinida_Negociacion
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //Desbloqueo todo
                if (_bol_DesbloquearTodo)
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Enabled = true;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Enabled = true;
                    g_frm_P_Cobro_AUX_1.Panel_DatosPantalla.Enabled = true;
                }

                //Vaciar Facturas
                if (_bol_VaciarHijos)
                {
                    Vaciar_Datos(G_ENUM_NIVELES.Factura, G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual, false, _bol_VaciarHijos);
                }
            }
            //Factura
            else if (G_ENUM_NIVELES.Factura.Equals(_enum_Nivel))
            {
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_RELACIONADOS_Padre_OPCION = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_RELACIONADOS_Padre_ID = -1;

                g_mdl_INTERNO_VTA_FacturasCabecera_Modelo = null;

                //Vaciar_SiActual 
                if (G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual.Equals(_enum_Accion))
                {
                    //F3 de Factura
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Id = -1;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Codigo = "";
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = null;
                }

                //Vaciar Vencimientos
                if (_bol_VaciarHijos)
                {
                    Vaciar_Datos(G_ENUM_NIVELES.Vencimento, G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual, false, _bol_VaciarHijos);
                }
            }
            //Vencimiento
            else if (G_ENUM_NIVELES.Vencimento.Equals(_enum_Nivel))
            {
                g_mdl_INTERNO_VTA_Vencimientos_Modelo = null;

                g_frm_P_Cobro_AUX_1.Exferia_TextBox_Codigo.Text = "";

                //Tesoreria
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                g_frm_P_Cobro_AUX_1.Exferia_TextBox_Comision.Text = "";
                g_frm_P_Cobro_AUX_1.Exferia_TextBox_IVAComision.Text = "";
                g_frm_P_Cobro_AUX_1.Exferia_TextBox_IVAComisionCalculo.Text = "";
                g_frm_P_Cobro_AUX_1.Exferia_TextBox_Correo.Text = "";
                g_frm_P_Cobro_AUX_1.Exferia_TextBox_Observaciones.Text = "";

                g_frm_P_Cobro_AUX_1.Exferia_CheckBox_Efecto.Checked = false;
                g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado.Exferia_FechaSeleccion_Fecha = "";

                //TipoPago
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //Cobrador
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //ClaveAnalitica
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text = "";

                if (G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual.Equals(_enum_Accion))
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Id = -1;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Codigo = "";
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Descripcion = "";
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                }
            }

            if (_bol_DesbloquearTodo)
            {
                string[] str_Separador = new string[] { " [" };
                //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
                if (g_frm_P_Cobro_AUX_1.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
                {
                    g_frm_P_Cobro_AUX_1.P_Base_TituloPantalla = (g_frm_P_Cobro_AUX_1.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_Cobro_AUX_1.Tag.ToString());
                //#################################################################################################
            }
        }
        #endregion

        public void Bloquea_Desbloquea(G_ENUM_NIVELES _enum_Nivel, G_ENUM_ACCIONES_BLOQUEO _enum_Accion)
        {
            //Factura
            if (G_ENUM_NIVELES.Factura.Equals(_enum_Nivel))
            {
                //Bloquear_NoActual 
                if (G_ENUM_ACCIONES_BLOQUEO.Bloquear_NoActual.Equals(_enum_Accion))
                {
                    Bloquea_Desbloquea(G_ENUM_NIVELES.Vencimento, G_ENUM_ACCIONES_BLOQUEO.Bloquear_SiActual);

                }
                //Bloquear_SiActual 
                else if (G_ENUM_ACCIONES_BLOQUEO.Bloquear_SiActual.Equals(_enum_Accion))
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Enabled = false;
                    Bloquea_Desbloquea(G_ENUM_NIVELES.Vencimento, G_ENUM_ACCIONES_BLOQUEO.Bloquear_SiActual);

                    Vaciar_Datos(G_ENUM_NIVELES.Factura, G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual, false, false);
                }
                //Desbloquear_SiActual
                else if (G_ENUM_ACCIONES_BLOQUEO.Desbloquear_SiActual.Equals(_enum_Accion))
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Enabled = true;
                    Bloquea_Desbloquea(G_ENUM_NIVELES.Vencimento, G_ENUM_ACCIONES_BLOQUEO.Bloquear_SiActual);

                    Vaciar_Datos(G_ENUM_NIVELES.Factura, G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual, false, false);
                }
            }
            //Vencimiento
            else if (G_ENUM_NIVELES.Vencimento.Equals(_enum_Nivel))
            {
                //Bloquear_NoActual 
                if (G_ENUM_ACCIONES_BLOQUEO.Bloquear_NoActual.Equals(_enum_Accion))
                {
                    g_frm_P_Cobro_AUX_1.Panel_DatosPantalla.Enabled = false;
                }
                //Bloquear_SiActual 
                else if (G_ENUM_ACCIONES_BLOQUEO.Bloquear_SiActual.Equals(_enum_Accion))
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Enabled = false;
                    Bloquea_Desbloquea(G_ENUM_NIVELES.RestoDatos, G_ENUM_ACCIONES_BLOQUEO.Bloquear_SiActual);

                    Vaciar_Datos(G_ENUM_NIVELES.Vencimento, G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual, false, false);
                }
                //Desbloquear_SiActual
                else if (G_ENUM_ACCIONES_BLOQUEO.Desbloquear_SiActual.Equals(_enum_Accion))
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Enabled = true;
                    Bloquea_Desbloquea(G_ENUM_NIVELES.RestoDatos, G_ENUM_ACCIONES_BLOQUEO.Bloquear_SiActual);

                    Vaciar_Datos(G_ENUM_NIVELES.Vencimento, G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual, false, false);
                }
            }
            //Resto de Datos
            else if (G_ENUM_NIVELES.RestoDatos.Equals(_enum_Nivel))
            {
                //Bloquear_NoActual 
                if (G_ENUM_ACCIONES_BLOQUEO.Bloquear_NoActual.Equals(_enum_Accion))
                { }
                //Bloquear_SiActual 
                else if (G_ENUM_ACCIONES_BLOQUEO.Bloquear_SiActual.Equals(_enum_Accion))
                {
                    g_frm_P_Cobro_AUX_1.Panel_DatosPantalla.Enabled = false;
                }
                //Desbloquear_SiActual
                else if (G_ENUM_ACCIONES_BLOQUEO.Desbloquear_SiActual.Equals(_enum_Accion))
                {
                    g_frm_P_Cobro_AUX_1.Panel_DatosPantalla.Enabled = true;

                    Vaciar_Datos(G_ENUM_NIVELES.Vencimento, G_ENUM_ACCIONES_VACIADO.Vaciar_NoActual, false, true);
                }
            }
        }

        # region Datos FacturaCabecera
        public void Rellenar_Datos_FacturaCabecera(long _lng_id_FacturaCabecera)
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Cobro_AUX_1.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_RellenarDatos_FacturaCabecera != null)
                {
                    while (g_obj_TareaAsincrona_RellenarDatos_FacturaCabecera.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_RellenarDatos_FacturaCabecera = new BackgroundWorker();
                    g_obj_TareaAsincrona_RellenarDatos_FacturaCabecera.DoWork += new DoWorkEventHandler(TareaAsincrona_RellenarDatos_FacturaCabecera_DoWork);
                    g_obj_TareaAsincrona_RellenarDatos_FacturaCabecera.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_RellenarDatos_FacturaCabecera_Completed);
                    g_obj_TareaAsincrona_RellenarDatos_FacturaCabecera.WorkerReportsProgress = false;
                }

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_RellenarDatos_FacturaCabecera.RunWorkerAsync(_lng_id_FacturaCabecera);
                //#################################################################################################

                g_frm_PE_Esperando.Show();
            }
            catch (Exception ex)
            {
                g_frm_P_Cobro_AUX_1.Enabled = true;

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

                throw new Control_Errores("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Rellenar_Datos_FacturaCabecera), true);
            }
        }
        private void TareaAsincrona_RellenarDatos_FacturaCabecera_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                long lng_id = (long)e.Argument;

                // Cargar Valores
                e.Result = RellenarDatos_FacturaCabecera_Final(lng_id);
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_RellenarDatos_FacturaCabecera_DoWork));
                e.Result = false;
            }
            catch (Control_Errores)
            {
                e.Result = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_RellenarDatos_FacturaCabecera_DoWork));
                e.Result = false;
            }
        }
        private void TareaAsincrona_RellenarDatos_FacturaCabecera_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            bool bol_ValorDevuelto = false;

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

                bol_ValorDevuelto = (bool)e.Result;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_RellenarDatos_FacturaCabecera_Completed));
            }
            finally
            {
                //Desbloquear el Formulario
                g_frm_P_Cobro_AUX_1.Enabled = true;

                if (bol_ValorDevuelto)
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Foco();
                }
                else
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Foco();
                }
            }
        }
        private bool RellenarDatos_FacturaCabecera_Final(long _lng_id)
        {
            bool bol_ValorDevuelto = false;

            try
            {
                g_bol_CargandoDatosFactura = true;

                //Buscar la FacturaCabecera
                g_mdl_INTERNO_VTA_FacturasCabecera_Modelo = g_obj_VTA_FacturasCabecera_Datos.Obtener_Auxiliar(_lng_id);

                if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo != null)
                {
                    //Ejercicio
                    if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio != null)
                    {
                        g_lng_idEjercicio = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.anioControl;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.fechaBorrado;
                    }

                    if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios != null)
                    {
                        g_lng_idEntidad = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.razonSocial;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.fechaBorrado;
                    }

                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_GTT_SOCIO;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_Titulo = "Socio";

                    //Si tiene PredefinidoCabecera_Cobro pongo ese, sino lo dejo vacio
                    if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.CTA_PredefinidosCabeceras1 != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.CTA_PredefinidosCabeceras1.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.CTA_PredefinidosCabeceras1.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.CTA_PredefinidosCabeceras1.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GTT_Socios.CTA_PredefinidosCabeceras1.fechaBorrado;
                    }

                    //Delegacion
                    if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GEN_Delegaciones != null)
                    {
                        g_lng_idDelegacion = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GEN_Delegaciones.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GEN_Delegaciones.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GEN_Delegaciones.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GEN_Delegaciones.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.GEN_Delegaciones.fechaBorrado;
                    }

                    #region Filtros para Vencimientos
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_RELACIONADOS_Padre_OPCION = Variables.G_STR_OPCION_VTA_FACTURACABECERA;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_RELACIONADOS_Padre_ID = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.id;

                    //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 del estado, que no este abierto
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_VTA_Vencimientos_Listado_Modelo.estado), -1, Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO));

                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                    #endregion

                    FacturaCabecera_Actualizar_DatosFiltro();

                    bol_ValorDevuelto = true;
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(RellenarDatos_FacturaCabecera_Final));
            }
            finally
            {
                g_bol_CargandoDatosFactura = false;
            }

            return bol_ValorDevuelto;
        }

        public void FacturaCabecera_Actualizar_DatosFiltro()
        {
            //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 del Ejercicio
            lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_VTA_FacturasCabecera_Listado_Modelo.idEjercicio), g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Id));

            //Para que busque con el Filtro del estado, que no este abierto
            lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_VTA_FacturasCabecera_Listado_Modelo.estado), -1, Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO));

            //Para que busque con el Filtro del Delegacion
            lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_VTA_FacturasCabecera_Listado_Modelo.idDelegacion), g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id));

            //Para que busque con el Filtro de la Entidad
            lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(nameof(INTERNO_VTA_FacturasCabecera_Listado_Modelo.idSocio), g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Entidad.Exferia_F3_SoloSeleccion_Id));

            //Filtros para facturas
            g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
        }
        #endregion

        #region Datos Vencimiento
        public void Rellenar_Datos_Vencimiento(long _lng_id_Vencimiento)
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Cobro_AUX_1.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_RellenarDatos_Vencimiento != null)
                {
                    while (g_obj_TareaAsincrona_RellenarDatos_Vencimiento.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_RellenarDatos_Vencimiento = new BackgroundWorker();
                    g_obj_TareaAsincrona_RellenarDatos_Vencimiento.DoWork += new DoWorkEventHandler(TareaAsincrona_RellenarDatos_Vencimiento_DoWork);
                    g_obj_TareaAsincrona_RellenarDatos_Vencimiento.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_RellenarDatos_Vencimiento_Completed);
                    g_obj_TareaAsincrona_RellenarDatos_Vencimiento.WorkerReportsProgress = false;
                }

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_RellenarDatos_Vencimiento.RunWorkerAsync(_lng_id_Vencimiento);
                //#################################################################################################

                g_frm_PE_Esperando.Show();
            }
            catch (Exception ex)
            {
                g_frm_P_Cobro_AUX_1.Enabled = true;

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

                throw new Control_Errores("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Rellenar_Datos_Vencimiento), true);
            }
        }
        private void TareaAsincrona_RellenarDatos_Vencimiento_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                long lng_id = (long)e.Argument;

                // Cargar Valores
                e.Result = RellenarDatos_Vencimiento_Final(lng_id);
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_RellenarDatos_Vencimiento_DoWork));
                e.Result = false;
            }
            catch (Control_Errores)
            {
                e.Result = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_RellenarDatos_Vencimiento_DoWork));
                e.Result = false;
            }
        }
        private void TareaAsincrona_RellenarDatos_Vencimiento_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            bool bol_ValorDevuelto = false;

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

                bol_ValorDevuelto = (bool)e.Result;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_RellenarDatos_Vencimiento_Completed));
            }
            finally
            {
                //Desbloquear el Formulario
                g_frm_P_Cobro_AUX_1.Enabled = true;

                if (bol_ValorDevuelto)
                {
                    g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Foco();
                }
                else
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Foco();
                }
            }
        }
        private bool RellenarDatos_Vencimiento_Final(long _lng_id)
        {
            bool bol_ValorDevuelto = false;

            try
            {
                //Buscar la Vencimiento
                g_mdl_INTERNO_VTA_Vencimientos_Modelo = g_obj_VTA_Vencimientos_Datos.Obtener_Auxiliar(_lng_id);

                if (g_mdl_INTERNO_VTA_Vencimientos_Modelo != null)
                {

                    //Calcular el Pendiente
                    decimal dcm_Pendiente = g_mdl_INTERNO_VTA_Vencimientos_Modelo.importe;
                    if (g_mdl_INTERNO_VTA_Vencimientos_Modelo.Importe_Cobros != null)
                    {
                        dcm_Pendiente -= g_mdl_INTERNO_VTA_Vencimientos_Modelo.Importe_Cobros.Value;

                        if (g_mdl_INTERNO_VTA_Vencimientos_Modelo.Importe_Devoluciones != null)
                        {
                            dcm_Pendiente += g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Importe_Devoluciones.Value;
                        }
                    }

                    //Si se esta modificando, hay que tener en cuenta el importe que tenia para calcular el pendiente
                    if (g_mdl_VTA_Cobros != null)
                    {
                        dcm_Pendiente += g_mdl_VTA_Cobros.importe;
                    }
                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text = dcm_Pendiente.ToString();
                    //........................................................................................................

                    //Tesoreria
                    if (g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Tesorerias != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Tesorerias.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Tesorerias.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Tesorerias.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Tesorerias.fechaBorrado;
                    }

                    //Vendedor (Cobrador)
                    if (g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Vendedores != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Vendedores.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Vendedores.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Vendedores.nombre;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_Vencimientos_Modelo.MAE_Vendedores.fechaBorrado;
                    }

                    bol_ValorDevuelto = true;
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(RellenarDatos_Vencimiento_Final));
            }

            return bol_ValorDevuelto;
        }
        #endregion

        #region Comprobacion de cambio para grabar o no antes de salir o de cambiar de registro
        public bool ComprobarCambios()
        {
            if (g_mdl_VTA_Cobros != null &&
                g_mdl_VTA_Cobros.VTA_RemesasLinea != null &&
                g_mdl_VTA_Cobros.VTA_RemesasLinea.VTA_RemesasCabecera != null)
            {
                return true;
            }
            else if (g_frm_P_Cobro_AUX_1.P_Base_SeModificoDatosPantalla)
            {
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_GUARDARCAMBIOS()))
                {
                    GrabarDatos(false);

                    //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_SinPreguntar()
        {
            if (g_mdl_VTA_Cobros != null &&
                g_mdl_VTA_Cobros.VTA_RemesasLinea != null &&
                g_mdl_VTA_Cobros.VTA_RemesasLinea.VTA_RemesasCabecera != null)
            {
                return true;
            }
            else
            {
                GrabarDatos(false);

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

                return g_bol_GrabarDatos_TerminoCorrectamente;
            }
        }
        #endregion

        #region Cargar Datos
        public void RecargarDatos()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Cobro_AUX_1.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;
                }

                //Vaciar
                Vaciar_Datos(G_ENUM_NIVELES.Inicio, G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual, true, true);

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

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

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

                throw new Control_Errores(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA(), ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(RecargarDatos), true);
            }
        }
        private void TareaAsincrona_CargarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                // Cargar Valores
                if (CargarDatos(g_frm_P_Cobro_AUX_1.P_Base_id) == 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_Cobro_AUX_1_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_Cobro_AUX_1_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_CargarDatos_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_ProgressChanged));
            }
        }
        private void TareaAsincrona_CargarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE = G_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Ninguno;
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el Formulario
            g_frm_P_Cobro_AUX_1.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_Cobro_AUX_1.Salir_P_Base();
                }
                else
                {
                    //Actualizar el control de Resumen de Facturas
                    g_frm_P_Cobro_AUX_1.CTU_Cartera_Ventas_Cobro.Rellenar_DataGrid(G_ENUM_CTU_CARTERA_VENTAS_TIPODOCUMENTOFILTRO.FacturasCabeceraVenta, g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.id, true);


                    if (g_mdl_PRE_Previsiones == null)
                    {
                        //Si el Ejericicio Tuviera CierreAdministrativo o CierreContable tiene que bloquear todo el Formulario
                        g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE = Datos_Generales.ComprobarBloquear_EjercicioCierre(g_frm_P_Cobro_AUX_1,
                                                                                                            g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.EjercicioActivo,
                                                                                                            g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.Ejercicios_Listado.ToList(),
                                                                                                            g_frm_P_Cobro_AUX_1.Exferia_Label_SinColor_Advertencia_Ejercicio,
                                                                                                            g_mdl_VTA_Cobros.fecha,
                                                                                                            0);
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Cobro_AUX_1.Salir_P_Base();
            }
            finally
            {

                //Hacemos foco al primer control.
                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Foco();

                //Si no tiene Cierre
                if (g_obj_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Equals(G_ENUM_VALIDACIONFECHAS_TIPOCIERRE.Ninguno))
                {
                    //Remesa
                    if (g_mdl_VTA_Cobros != null &&
                    g_mdl_VTA_Cobros.VTA_RemesasLinea != null &&
                    g_mdl_VTA_Cobros.VTA_RemesasLinea.VTA_RemesasCabecera != null)
                    {
                        //Bloqueo los Controles
                        SoloLectura.Empezar(g_frm_P_Cobro_AUX_1, true);
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Grabar.Enabled = false;
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Borrar.Enabled = false;
                        g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir.Enabled = false;
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado.Enabled = false;
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Cuentas.Enabled = false;
                    }
                    else
                    {
                        //Configurar Cerrar/Abrir Volcado/Desvolcado
                        Mostrar_CerradoVolcado();
                    }
                }
            }
        }
        public bool CargarDatos(long _lng_id)
        {
            bool bol_ValorDevuelto = true;

            try
            {
                //Si el modelo no es nulo significa que se abrio desde previsiones
                if (g_mdl_PRE_Previsiones == null)
                {
                    g_mdl_VTA_Cobros = g_obj_VTA_Cobros_Datos.Obtener(_lng_id);
                }
                else
                {
                    //Oculto el paginador
                    g_frm_P_Cobro_AUX_1.Exferia_Paginador_Cobros.Enabled = false;

                    //Inicializo los datos por defecto
                    Datos_PorDefecto();

                    //Obtengo el vencimiento para rellenar el F3
                    VTA_Vencimientos mdl_VTA_Vencimientos = g_obj_VTA_Vencimientos_Datos.Obtener(g_mdl_PRE_Previsiones.idVencimiento_Venta != null ? g_mdl_PRE_Previsiones.idVencimiento_Venta.Value : -1);

                    if (mdl_VTA_Vencimientos != null)
                    {
                        //Datos de la Factura .......................................................................
                        RellenarDatos_FacturaCabecera_Final(mdl_VTA_Vencimientos.idFacturaCabecera);
                        if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo != null)
                        {
                            //Ejercicio
                            if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio != null)
                            {
                                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.id;
                                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.anioControl;
                                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.descripcion;
                                g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.fechaBorrado;
                            }

                            //Factura
                            g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.id;
                            g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.numeroFactura.ToString();
                            g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.fechaBorrado;
                        }
                        //.............................................................................................
                    }

                    //Datos del Vencimiento .......................................................................
                    RellenarDatos_Vencimiento_Final(mdl_VTA_Vencimientos.id);
                    if (g_mdl_INTERNO_VTA_Vencimientos_Modelo != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_Vencimientos_Modelo.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_Vencimientos_Modelo.codigo.ToString();
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_Vencimientos_Modelo.observaciones;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_Vencimientos_Modelo.fechaBorrado;
                    }
                    //...........................................................................................

                    //fecha
                    g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Fecha = g_mdl_PRE_Previsiones.fecha.ToString("dd/MM/yyyy");

                    //Tesoreria 
                    if (g_mdl_PRE_Previsiones.MAE_Tesorerias != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id = g_mdl_PRE_Previsiones.MAE_Tesorerias.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo = g_mdl_PRE_Previsiones.MAE_Tesorerias.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_PRE_Previsiones.MAE_Tesorerias.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_PRE_Previsiones.MAE_Tesorerias.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text = g_mdl_PRE_Previsiones.importe.ToString();
                }

                //Si no es Nulo Cargo lo Datos
                if (g_mdl_VTA_Cobros != null)
                {
                    //Paginador ................................................................................
                    if (g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen != null &&
                        g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados != null &&
                        g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Count > 0)
                    {
                        long lng_id_ParaPaginacion = g_mdl_VTA_Cobros.id;
                        int int_PaginaDelObjeto = g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.IndexOf(g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Where(n => n.ID.Equals(lng_id_ParaPaginacion)).FirstOrDefault());

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

                    //Estado
                    g_str_Estado = g_mdl_VTA_Cobros.estado;

                    //Datos de la Factura .......................................................................
                    RellenarDatos_FacturaCabecera_Final(g_mdl_VTA_Cobros.VTA_Vencimientos.idFacturaCabecera);
                    if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo != null)
                    {
                        //Ejercicio
                        if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio != null)
                        {
                            g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.id;
                            g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.anioControl;
                            g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.descripcion;
                            g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Ejercicio.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.Ejercicio.fechaBorrado;
                        }

                        //Factura
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.numeroFactura.ToString();
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.fechaBorrado;
                    }
                    //.............................................................................................

                    //Datos del Vencimiento .......................................................................
                    RellenarDatos_Vencimiento_Final(g_mdl_VTA_Cobros.idVencimiento);
                    if (g_mdl_INTERNO_VTA_Vencimientos_Modelo != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_Vencimientos_Modelo.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_Vencimientos_Modelo.codigo.ToString();
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_Vencimientos_Modelo.observaciones;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_Vencimientos_Modelo.fechaBorrado;
                    }
                    //...........................................................................................

                    //fecha
                    g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Fecha = g_mdl_VTA_Cobros.fecha.ToString("dd/MM/yyyy");

                    //Tesoreria 
                    if (g_mdl_VTA_Cobros.MAE_Tesorerias != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id = g_mdl_VTA_Cobros.MAE_Tesorerias.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo = g_mdl_VTA_Cobros.MAE_Tesorerias.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_VTA_Cobros.MAE_Tesorerias.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_VTA_Cobros.MAE_Tesorerias.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //codigo
                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_Codigo.Text = g_mdl_VTA_Cobros.codigo.ToString();

                    //comision
                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_Comision.Text = g_mdl_VTA_Cobros.comision != null ? g_mdl_VTA_Cobros.comision.Value.ToString() : "";

                    //porcentajeComision
                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_IVAComision.Text = g_mdl_VTA_Cobros.porcentajeComision != null ? g_mdl_VTA_Cobros.porcentajeComision.Value.ToString() : "";

                    //importeComision
                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_IVAComisionCalculo.Text = g_mdl_VTA_Cobros.importeComision != null ? g_mdl_VTA_Cobros.importeComision.Value.ToString() : "";

                    //correo
                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_Correo.Text = g_mdl_VTA_Cobros.correo != null ? g_mdl_VTA_Cobros.correo.Value.ToString() : "";

                    //observaciones
                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_Observaciones.Text = g_mdl_VTA_Cobros.observaciones;

                    //fechaVencimientoTalon
                    g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaVtoTalon.Exferia_FechaSeleccion_Fecha = g_mdl_VTA_Cobros.fechaVencimientoTalon != null ? g_mdl_VTA_Cobros.fechaVencimientoTalon.Value.ToString("dd/MM/yyyy") : "";

                    //efecto
                    g_frm_P_Cobro_AUX_1.Exferia_CheckBox_Efecto.Checked = g_mdl_VTA_Cobros.efecto != null ? g_mdl_VTA_Cobros.efecto.Value : false;

                    //confirmado
                    if (g_mdl_VTA_Cobros.confirmado != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado.Exferia_FechaSeleccion_Fecha = g_mdl_VTA_Cobros.confirmado.Value.ToString("dd/MM/yyyy");
                    }

                    //TipoPago 
                    if (g_mdl_VTA_Cobros.MAE_TiposPagos != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Id = g_mdl_VTA_Cobros.MAE_TiposPagos.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Codigo = g_mdl_VTA_Cobros.MAE_TiposPagos.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_VTA_Cobros.MAE_TiposPagos.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_VTA_Cobros.MAE_TiposPagos.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //Vendedores 
                    if (g_mdl_VTA_Cobros.MAE_Vendedores != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Id = g_mdl_VTA_Cobros.MAE_Vendedores.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Codigo = g_mdl_VTA_Cobros.MAE_Vendedores.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_VTA_Cobros.MAE_Vendedores.nombre;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_VTA_Cobros.MAE_Vendedores.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //ClaveAnalitica 
                    if (g_mdl_VTA_Cobros.CTA_ClavesAnaliticas != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id = g_mdl_VTA_Cobros.CTA_ClavesAnaliticas.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Codigo = g_mdl_VTA_Cobros.CTA_ClavesAnaliticas.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_VTA_Cobros.CTA_ClavesAnaliticas.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_VTA_Cobros.CTA_ClavesAnaliticas.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //ClavePredefinida_Cobro 
                    if (g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id = g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Codigo = g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    //ClavePredefinida_Negociacion
                    if (g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras1 != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Id = g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras1.id;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Codigo = g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras1.codigo;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras1.descripcion;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_VTA_Cobros.CTA_PredefinidosCabeceras1.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Id = -1;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                        g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                    }

                    g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text = g_mdl_VTA_Cobros.importe.ToString();

                    // Mostrar Campo en el Titulo de mantenimiento
                    string str_MenuSuperior_Codigo = "";
                    if (g_frm_P_Cobro_AUX_1.g_mdl_PRV_OpcionesDetalle != null &&
                        g_frm_P_Cobro_AUX_1.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento != null &&
                        g_frm_P_Cobro_AUX_1.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Trim().Length > 0)
                    {
                        //Obtener el Array de Campos
                        string[] arr_Campos = g_frm_P_Cobro_AUX_1.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_Cobro_AUX_1.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
                        {
                            g_frm_P_Cobro_AUX_1.P_Base_TituloPantalla = (g_frm_P_Cobro_AUX_1.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
                        }

                        dynamic dnm_Objeto = g_mdl_VTA_Cobros;
                        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;
                            }

                            // importe
                            if (str_campo.Equals(nameof(g_mdl_VTA_Cobros.importe)))
                            {
                                str_MenuSuperior_Codigo = g_mdl_VTA_Cobros.importe.ToString();
                            }

                        }
                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_Cobro_AUX_1.P_Base_TituloPantalla += " [" + str_ValorAMostrarFinal + "] -Modificar";
                        }
                    }

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

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

            return bol_ValorDevuelto;
        }
        #endregion

        #region Grabar Datos
        public void GrabarDatos(bool _bol_VolverAlListado)
        {
            try
            {
                //Validacion para Aviso ..................................................
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = Validar_ParaAvisos();
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo.Mensaje.Trim().Length > 0)
                    {
                        if (Mensajes.MostrarMensaje_Pregunta(mdl_ValorDevuelto_Modelo.Mensaje) == false)
                        {
                            //Poner el Foco en el objeto que tuvoel problema en validar
                            if (mdl_ValorDevuelto_Modelo.Objeto != null)
                            {
                                Funciones.Poner_Foco_Objeto(g_frm_P_Cobro_AUX_1, mdl_ValorDevuelto_Modelo.Objeto);
                            }

                            return;
                        }
                    }
                }
                //.........................................................................................

                g_bol_VolverAlListado = _bol_VolverAlListado;

                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_P_Cobro_AUX_1.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_Cobro_AUX_1.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_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_Cobro_AUX_1_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_Cobro_AUX_1_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_Cobro_AUX_1.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_Cobro_AUX_1, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }

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

                    g_frm_P_Cobro_AUX_1.P_Base_SeModificoDatosPantalla = false;

                    //Grabar y Volver al listado
                    if (g_bol_VolverAlListado)
                    {
                        g_frm_P_Cobro_AUX_1.Salir_P_Base();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_Completed));
            }
        }

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

            try
            {
                // FacturaCabecera no puede estar Vacio (Obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Codigo.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay FacturaCabecera validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Codigo.Trim().Length != 0) && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_PRINCIPAL_TextBox_Codigo;
                }

                // El Vencimiento no puede estar Vacio (Obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Vencimiento validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // La fecha de pago no puede estar vacia y debe ser correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago;
                    }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago;
                    }
                }

                // Si hay Tesoreria validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // La fecha de Vto Talon debe ser correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaVtoTalon.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    {

                    }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaVtoTalon.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaVtoTalon;
                    }
                }

                // La fecha confirmacion debe ser correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    {

                    }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado;
                    }
                }

                // Si hay TipoPago validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Cobrador validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay ClaveAnalitica validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                //ClavePredefinida_Cobro no puede estar Vacio (Obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay ClavePredefinida_Cobro validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                //ClavePredefinida_Negociacion no puede estar Vacio (Obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay ClavePredefinida_Negociacion validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // El importe no puede estar vacío
                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text.Trim().Length == 0))
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cobro_AUX_1.Exferia_Label_Importe.Text);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe;
                }

                // El importe debe ser diferente 0
                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (Convert.ToDecimal(g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text.Trim()).Equals(0m)))
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Cobro_AUX_1.Exferia_Label_Importe.Text);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe;
                }
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(ValidarDatos));

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

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

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    DateTime? dtt_fechaNula = null;

                    VTA_Cobros mdl_VTA_Cobros = new VTA_Cobros();

                    //id
                    mdl_VTA_Cobros.id = g_mdl_VTA_Cobros != null ? g_mdl_VTA_Cobros.id : -1;

                    //estado
                    mdl_VTA_Cobros.estado = g_str_Estado;

                    //idVencimiento
                    mdl_VTA_Cobros.idVencimiento = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Id;

                    //fecha
                    mdl_VTA_Cobros.fecha = DateTime.ParseExact(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                    //comision
                    mdl_VTA_Cobros.comision = g_frm_P_Cobro_AUX_1.Exferia_TextBox_Comision.Text.Trim().Length > 0 ? Convert.ToDecimal(g_frm_P_Cobro_AUX_1.Exferia_TextBox_Comision.Text.Trim()) : 0;

                    //correo
                    mdl_VTA_Cobros.correo = g_frm_P_Cobro_AUX_1.Exferia_TextBox_Correo.Text.Trim().Length > 0 ? Convert.ToDecimal(g_frm_P_Cobro_AUX_1.Exferia_TextBox_Correo.Text.Trim()) : 0;

                    //porcentajeComision
                    mdl_VTA_Cobros.porcentajeComision = g_frm_P_Cobro_AUX_1.Exferia_TextBox_IVAComision.Text.Trim().Length > 0 ? Convert.ToDecimal(g_frm_P_Cobro_AUX_1.Exferia_TextBox_IVAComision.Text.Trim()) : 0;

                    //importeComision
                    mdl_VTA_Cobros.importeComision = g_frm_P_Cobro_AUX_1.Exferia_TextBox_IVAComisionCalculo.Text.Trim().Length > 0 ? Convert.ToDecimal(g_frm_P_Cobro_AUX_1.Exferia_TextBox_IVAComisionCalculo.Text.Trim()) : 0;

                    //observaciones
                    mdl_VTA_Cobros.observaciones = g_frm_P_Cobro_AUX_1.Exferia_TextBox_Observaciones.Text;

                    //codigo
                    long lng_Codigo = 1;
                    if (g_mdl_VTA_Cobros != null && g_mdl_VTA_Cobros.codigo > 0)
                    {
                        lng_Codigo = g_mdl_VTA_Cobros.codigo;
                    }
                    else
                    {
                        //Si es NUevo, tengo que mirar el ultimo cobro del vencimiento y ponerle el siguiente
                        if (g_mdl_INTERNO_VTA_Vencimientos_Modelo != null &&
                            g_mdl_INTERNO_VTA_Vencimientos_Modelo.VTA_Cobros != null &&
                            g_mdl_INTERNO_VTA_Vencimientos_Modelo.VTA_Cobros.Count > 0)
                        {
                            long? lng_UltimoCobro = g_mdl_INTERNO_VTA_Vencimientos_Modelo.VTA_Cobros.Select(m => m.codigo).OrderByDescending(m => m).FirstOrDefault();
                            if (lng_UltimoCobro != null)
                            {
                                lng_Codigo = lng_UltimoCobro.Value + 1;
                            }
                        }
                    }
                    mdl_VTA_Cobros.codigo = lng_Codigo;

                    //fechaVencimientoTalon
                    mdl_VTA_Cobros.fechaVencimientoTalon = g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaVtoTalon.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaVtoTalon.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_fechaNula;

                    //confirmado
                    mdl_VTA_Cobros.confirmado = g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_fechaNula;

                    //efecto
                    mdl_VTA_Cobros.efecto = g_frm_P_Cobro_AUX_1.Exferia_CheckBox_Efecto.Checked;

                    //idTesoreria
                    if (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_Cobros.idTesoreria = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_Cobros.idTesoreria = null; }

                    //idTipoPago
                    if (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_Cobros.idTipoPago = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_TipoPago.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_Cobros.idTipoPago = null; }

                    //idVendedor
                    if (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_Cobros.idVendedor = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Cobrador.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_Cobros.idVendedor = null; }

                    //idClaveAnalitica
                    if (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_Cobros.idClaveAnalitica = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClaveAnalitica.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_Cobros.idClaveAnalitica = null; }

                    //idPredefinidoCabecera_Cobro
                    if (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_Cobros.idPredefinidoCabecera_Cobro = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_Cobros.idPredefinidoCabecera_Cobro = null; }

                    //idPredefinidoCabecera_Negociacion
                    if (g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Id != -1)
                    { mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion = g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Id; }
                    else
                    { mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion = null; }

                    //importe
                    mdl_VTA_Cobros.importe = Convert.ToDecimal(g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text.Trim());

                    // Se graba el modelo ya relleno.
                    mdl_ValorDevuelto_Modelo = g_obj_VTA_Cobros_Datos.Grabar(mdl_VTA_Cobros);

                    // Grabamos las Agrupaciones del Cobro
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        //Termino Transaccion
                        transaccion_SQL.Complete();
                        transaccion_SQL.Dispose();

                        //Volver a Cargar el modelo de Cobro si esta cerrando o volcado documento
                        if (g_bol_VolverAlListado == false)
                        {
                            g_mdl_VTA_Cobros = g_obj_VTA_Cobros_Datos.Obtener(mdl_ValorDevuelto_Modelo.Id);
                        }
                    }

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

            return mdl_ValorDevuelto_Modelo;
        }

        public INTERNO_ValorDevuelto_Modelo Validar_ParaAvisos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {

                //### Se pasa del Pendiente que hay estipulado para el vencimento ###################################################################
                decimal dcm_Importe = g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text.Trim().Length > 0 ? Convert.ToDecimal(g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text.Trim()) : 0m;
                decimal dcm_Pendiente = g_mdl_INTERNO_VTA_Vencimientos_Modelo != null ? g_mdl_INTERNO_VTA_Vencimientos_Modelo.importe : 0;

                // Si estuviera modificando el cobro, tengo que restar el importe que habia para saber exacto el pendiente 
                if (g_mdl_VTA_Cobros != null)
                {
                    dcm_Pendiente += g_mdl_VTA_Cobros.importe;
                }

                if (dcm_Pendiente < dcm_Importe)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    //Buscar el vencimiento por si diera error, poder poner los datos del mensaje
                    INTERNO_OpcionesDetalle_Modelo mld_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_VTA_VENCIMIENTO_AUX_1);

                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_PCOBRO_VALIDACION_PENDIENTE_INFERIOR_INPORTE(mld_INTERNO_OpcionesDetalle_Modelo.descripcion_Singular);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe;
                }

                //### Hay una Devolucion asociada que es superior al cobro ###########################################################################
                if (g_mdl_VTA_Cobros != null)
                {
                    if (g_mdl_VTA_Cobros.VTA_DevolucionesCobros != null &&
                        g_mdl_VTA_Cobros.VTA_DevolucionesCobros.Count > 0)
                    {
                        decimal dcm_Suma_Devoluciones = g_mdl_VTA_Cobros.VTA_DevolucionesCobros.Sum(m => m.importe);

                        if (dcm_Suma_Devoluciones > dcm_Importe)
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;

                            //Buscar el devolucion por si diera error, poder poner los datos del mensaje
                            INTERNO_OpcionesDetalle_Modelo mld_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_VTA_DEVOLUCIONCOBRO);
                            mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_PCOBRO_VALIDACION_PENDIENTE_INFERIOR_INPORTE(mld_INTERNO_OpcionesDetalle_Modelo.descripcion_Singular);
                            mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe;
                        }
                    }
                }

                //Poner la Pregunta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto == false)
                {
                    mdl_ValorDevuelto_Modelo.Mensaje += Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_DESEASCONTINUAR();
                }

            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Validar_ParaAvisos));

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

            return mdl_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_Cobro_AUX_1.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_Cobro_AUX_1.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_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_Cobro_AUX_1_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_Cobro_AUX_1_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_Cobro_AUX_1.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
                    if (g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                        g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(Variables.G_STR_OPCION_VTA_COBRO_AUX_1, G_ENUM_TIPOACCION.INT_NADA);
                    }
                    else if (g_frm_P_Cobro_AUX_1.P_Base_F3Origen != null)
                    {
                        g_frm_P_Cobro_AUX_1.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    g_frm_P_Cobro_AUX_1.P_Base_SeModificoDatosPantalla = false;
                    g_frm_P_Cobro_AUX_1.Salir_P_Base();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_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_VTA_Cobros_Datos.Borrar(g_mdl_VTA_Cobros != null ? g_mdl_VTA_Cobros.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_Cobro_AUX_1_Controladora) + "/" + nameof(BorrarDatos_Final));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_ValorDevuelto_Modelo;
        }
        #endregion

        #region Actualizar fecha Confirmacion Cobros
        public void Actualizar_FechaConfirmacion_Cobros(List<long> _lst_id, DateTime? _dtt_FechaConfirmacion)
        {
            try
            {
                g_bol_GrabarDatos_TerminoCorrectamente = true;

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

                //Argumentos
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_lst_id);
                lst_Argumentos.Add(_dtt_FechaConfirmacion);

                g_TareaAsincrona_Actualizar_FechaConfirmacion_Cobros = new BackgroundWorker();
                g_TareaAsincrona_Actualizar_FechaConfirmacion_Cobros.DoWork += new DoWorkEventHandler(TareaAsincrona_Actualizar_FechaConfirmacion_Cobros_DoWork);
                g_TareaAsincrona_Actualizar_FechaConfirmacion_Cobros.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Actualizar_FechaConfirmacion_Cobros_Completed);
                g_TareaAsincrona_Actualizar_FechaConfirmacion_Cobros.RunWorkerAsync(lst_Argumentos);

                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_Cobro_AUX_1.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Actualizar_FechaConfirmacion_Cobros));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_Actualizar_FechaConfirmacion_Cobros_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;

            try
            {
                //Argumentos
                List<object> lst_Argumentos = (List<object>)e.Argument;

                mdl_ValorDevuelto_Modelo = g_obj_VTA_Cobros_Datos.Actualizar_Confirmacion((List<long>)lst_Argumentos[0], (DateTime?)lst_Argumentos[1]);
                mdl_ValorDevuelto_Modelo.Objeto = (DateTime?)lst_Argumentos[1];
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_FechaConfirmacion_Cobros_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_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_FechaConfirmacion_Cobros_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_Actualizar_FechaConfirmacion_Cobros_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Cobro_AUX_1.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)
                {
                    g_bol_GrabarDatos_TerminoCorrectamente = false;

                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    DateTime? dtt_Confirmacion = (DateTime?)mdl_ValorDevuelto_Modelo_Resultado.Objeto;
                    if (dtt_Confirmacion != null)
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado.Exferia_FechaSeleccion_Fecha = dtt_Confirmacion.Value.ToString("dd/MM/yyyy");
                    }
                    else
                    {
                        g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_Confirmado.Exferia_FechaSeleccion_Fecha = "";
                    }

                    g_frm_P_Cobro_AUX_1.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Actualizar_FechaConfirmacion_Cobros_Completed));
            }
        }

        #endregion

        #region Abrir/Cerrar/Volcar/Desvolcar
        public void Mostrar_CerradoVolcado()
        {
            try
            {


                //Por Defecto
                g_str_Estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;
                if (g_lst_CTA_VolcadoCabecera != null) { g_lst_CTA_VolcadoCabecera.Clear(); }

                //CERRADO O ABIERTO ##############################################################################################################
                //Buscar si esta Cerrado
                if (g_mdl_VTA_Cobros != null)
                {
                    List<long> lst_idPredefinidoFichero = new List<long>();
                    lst_idPredefinidoFichero.Add(Variables.G_PREDEFINIDOFICHEROS_COBROS.Id);
                    lst_idPredefinidoFichero.Add(Variables.G_PREDEFINIDOFICHEROS_COBROPOREFECTO.Id);


                    //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_CTAVOLCADOCABECERA_OBTENERMODELOLISTADO_POR_DOCUMENTOPREDEFINIDOFICHERO, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros_1 = { g_mdl_VTA_Cobros.id, lst_idPredefinidoFichero };

                    //Pasamos los parametros al metodo y lo ejecutamos
                    g_lst_CTA_VolcadoCabecera = (List<CTA_VolcadoCabecera>)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                    //##################################################################################################################################################################################################

                    //g_lst_CTA_VolcadoCabecera = Datos_Contabilidad.Existe_VolcadoCabecera(g_mdl_VTA_Cobros.id, lst_idPredefinidoFichero);
                }

                //Buscar el Estado del Vencimiento
                if (g_mdl_VTA_Cobros != null)
                {
                    g_str_Estado = g_obj_VTA_Cobros_Datos.Obtener_Estado(g_mdl_VTA_Cobros.id);

                    //Si esta Cerrado Bloqueo para que no deje hacer nada
                    if (g_str_Estado.Equals(Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO))
                    {
                        //Cambiar Imagen del Boton de Desvolcar
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_VOLCAR;
                        Imagenes.Asignar_Imagen(g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado);
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado.Tag = "0";

                        //Cambiar Imagen del Boton de Cerrar
                        g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_CERRADO;
                        Imagenes.Asignar_Imagen(g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir);
                        g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir.Tag = "1";

                        //Bloqueo los Controles
                        SoloLectura.Empezar(g_frm_P_Cobro_AUX_1, true);
                    }
                    //Si esta Volcado 
                    else if (g_str_Estado.Equals(Variables.G_STR_ESTADO_CONTABILIDAD_VOLCADO))
                    {
                        //Cambiar Imagen del Boton de Cerrar
                        g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_CERRADO;
                        Imagenes.Asignar_Imagen(g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir);
                        g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir.Tag = "1";

                        //Cambiar Imagen del Boton de Volcar
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_DESVOLCAR;
                        Imagenes.Asignar_Imagen(g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado);
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado.Tag = "1";

                        //Bloqueo los Controles
                        SoloLectura.Empezar(g_frm_P_Cobro_AUX_1, true);
                    }
                    //Abierto
                    else
                    {
                        //Cambiar Imagen del Boton de Abrir
                        g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_ABIERTO;
                        Imagenes.Asignar_Imagen(g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir);
                        g_frm_P_Cobro_AUX_1.Exferia_Button_CerrarAbrir.Tag = "0";

                        //Cambiar Imagen del Boton de Desvolcar
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado.Exferia_Button_Imagen = Imagenes.G_ENUM_IMAGENES.G_IMG_VOLCAR;
                        Imagenes.Asignar_Imagen(g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado);
                        g_frm_P_Cobro_AUX_1.Exferia_Button_Volcado.Tag = "0";

                        //Desbloqueo los Controles
                        SoloLectura.Empezar(g_frm_P_Cobro_AUX_1, false);
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Mostrar_CerradoVolcado));
            }
        }

        #region Cerrar Documento
        public void Cerrar_Documento()
        {
            try
            {
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_CERRANDO_DOCUMENTO());

                BackgroundWorker obj_TareaAsincrona_Cerrar_Documento = new BackgroundWorker();

                obj_TareaAsincrona_Cerrar_Documento.DoWork += new DoWorkEventHandler(TareaAsincrona_Cerrar_Documento_DoWork);
                obj_TareaAsincrona_Cerrar_Documento.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Cerrar_Documento_Completed);
                obj_TareaAsincrona_Cerrar_Documento.RunWorkerAsync();

                //Mostrar Pantalla de Espera
                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Cerrar_Documento));
            }
        }

        private void TareaAsincrona_Cerrar_Documento_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_ValorDevuelto_Modelo.Mensaje = "";

            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    //Insertar el idPredefinidoCabecera
                    List<long> lst_idPredefinidoCabecera = new List<long>();
                    if (g_mdl_VTA_Cobros.efecto != null && g_mdl_VTA_Cobros.efecto.Value)
                    {
                        //Validar que tiene un idPredefinidoCabcera para Negociacion
                        if (g_mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion != null && g_mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion.Value > 0)
                        {
                            lst_idPredefinidoCabecera.Add(g_mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion.Value);
                        }
                        else
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Titulo);
                        }

                    }
                    else
                    {
                        //Validar que tiene un idPredefinidoCabecera para Cobro
                        if (g_mdl_VTA_Cobros.idPredefinidoCabecera_Cobro != null && g_mdl_VTA_Cobros.idPredefinidoCabecera_Cobro.Value > 0)
                        {
                            lst_idPredefinidoCabecera.Add(g_mdl_VTA_Cobros.idPredefinidoCabecera_Cobro.Value);
                        }
                        else
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Titulo);
                        }
                    }

                    //Si esta Todo Correcto
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        //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_ACCIONDOCUMENTO_CERRAR, BindingFlags.Instance | BindingFlags.NonPublic);

                        //Obtener valores
                        object[] arr_Parametros_1 = {   lst_idPredefinidoCabecera,
                                                        g_mdl_VTA_Cobros.id,
                                                        g_frm_P_Cobro_AUX_1.g_mdl_PRV_OpcionesDetalle.opcion,
                                                        null};

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


                        if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            transaccion_SQL.Complete();
                        }
                    }

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

                    Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Cerrar_Documento_DoWork));

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Cerrar_Documento_DoWork));

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

            //Termino 
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_CERRAR_TERMINO = (INTERNO_ValorDevuelto_Modelo)e.Result;

            //Termino todo Correctamente
            if (mdl_INTERNO_ValorDevuelto_Modelo_CERRAR_TERMINO.TodoCorrecto)
            {
                Mostrar_CerradoVolcado();

                //Actualizar registro en Listado principal
                if (g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen != null)
                {
                    List<INTERNO_ActualizarCampoListadoGeneral_Modelo> lst_INTERNO_ActualizarCampoListadoGeneral_Modelo = new List<INTERNO_ActualizarCampoListadoGeneral_Modelo>();
                    lst_INTERNO_ActualizarCampoListadoGeneral_Modelo.Add(new INTERNO_ActualizarCampoListadoGeneral_Modelo(g_mdl_VTA_Cobros.id, nameof(INTERNO_VTA_Cobros_Listado_Modelo.estado), Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO));

                    g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_ActualizarRegistros_Campo(lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                    g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(Variables.G_STR_OPCION_VTA_COBRO_AUX_1, G_ENUM_TIPOACCION.INT_NADA);
                }

                //Actualizar el control de Resumen de Facturas
                g_frm_P_Cobro_AUX_1.CTU_Cartera_Ventas_Cobro.Rellenar_DataGrid(G_ENUM_CTU_CARTERA_VENTAS_TIPODOCUMENTOFILTRO.FacturasCabeceraVenta, g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.id, true);
            }
            //Ocurrio un Error
            else
            {
                Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_CERRAR_TERMINO.Mensaje);
            }
        }
        #endregion
        #region Abrir Documento
        public void Abrir_Documento()
        {
            try
            {
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_ABRIENNDO_DOCUMENTO());

                BackgroundWorker obj_TareaAsincrona_Abrir_Documento = new BackgroundWorker();

                obj_TareaAsincrona_Abrir_Documento.DoWork += new DoWorkEventHandler(TareaAsincrona_Abrir_Documento_DoWork);
                obj_TareaAsincrona_Abrir_Documento.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Abrir_Documento_Completed);
                obj_TareaAsincrona_Abrir_Documento.RunWorkerAsync();

                //Mostrar Pantalla de Espera
                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Abrir_Documento));
            }
        }

        private void TareaAsincrona_Abrir_Documento_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_ValorDevuelto_Modelo.Mensaje = "";

            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    //Insertar el idPredefinidoCabecera
                    List<long> lst_idPredefinidoFicheros_VolcadoCabecera = new List<long>();
                    if (g_lst_CTA_VolcadoCabecera != null)
                    {
                        lst_idPredefinidoFicheros_VolcadoCabecera.AddRange(g_lst_CTA_VolcadoCabecera.Select(m => m.idPredefinidoFichero).ToList());
                    }

                    long lng_idVolcadoCabecera_APasarDiario = -1;
                    if (g_lst_CTA_VolcadoCabecera != null && g_lst_CTA_VolcadoCabecera.Count > 0)
                    {
                        lng_idVolcadoCabecera_APasarDiario = g_lst_CTA_VolcadoCabecera.FirstOrDefault().id;
                    }

                    //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_ACCIONDOCUMENTO_ABRIR, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros_1 = {   g_mdl_VTA_Cobros.id,
                                                    lst_idPredefinidoFicheros_VolcadoCabecera,
                                                    lng_idVolcadoCabecera_APasarDiario,
                                                    g_frm_P_Cobro_AUX_1.g_mdl_PRV_OpcionesDetalle.opcion,
                                                    null,
                                                    Variables.G_PREDEFINIDOFICHEROS_COBROPOREFECTO.Id};

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

                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        transaccion_SQL.Complete();
                    }

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

                    Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Abrir_Documento_DoWork));

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Abrir_Documento_DoWork));

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

            //Termino 
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_ABRIR_TERMINO = (INTERNO_ValorDevuelto_Modelo)e.Result;

            //Termino todo Correctamente
            if (mdl_INTERNO_ValorDevuelto_Modelo_ABRIR_TERMINO.TodoCorrecto)
            {
                Mostrar_CerradoVolcado();

                //Actualizar registro en Listado principal
                if (g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen != null)
                {
                    List<INTERNO_ActualizarCampoListadoGeneral_Modelo> lst_INTERNO_ActualizarCampoListadoGeneral_Modelo = new List<INTERNO_ActualizarCampoListadoGeneral_Modelo>();
                    lst_INTERNO_ActualizarCampoListadoGeneral_Modelo.Add(new INTERNO_ActualizarCampoListadoGeneral_Modelo(g_mdl_VTA_Cobros.id, nameof(INTERNO_VTA_Cobros_Listado_Modelo.estado), Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO));

                    g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_ActualizarRegistros_Campo(lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                    g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(Variables.G_STR_OPCION_VTA_COBRO_AUX_1, G_ENUM_TIPOACCION.INT_NADA);
                }

                //Actualizar el control de Resumen de Facturas
                g_frm_P_Cobro_AUX_1.CTU_Cartera_Ventas_Cobro.Rellenar_DataGrid(G_ENUM_CTU_CARTERA_VENTAS_TIPODOCUMENTOFILTRO.FacturasCabeceraVenta, g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.id, true);
            }
            //Ocurrio un Error
            else
            {
                Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_ABRIR_TERMINO.Mensaje);
            }
        }

        #endregion

        #region Volcar datos del Diario
        public void Volcar_Documento()
        {
            try
            {
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_VOLCANDO_DOCUMENTO());

                BackgroundWorker obj_TareaAsincrona_Volcar_Documento = new BackgroundWorker();

                obj_TareaAsincrona_Volcar_Documento.DoWork += new DoWorkEventHandler(TareaAsincrona_Volcar_Documento_DoWork);
                obj_TareaAsincrona_Volcar_Documento.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Volcar_Documento_Completed);
                obj_TareaAsincrona_Volcar_Documento.RunWorkerAsync();

                //Mostrar Pantalla de Espera
                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Volcar_Documento));
            }
        }

        private void TareaAsincrona_Volcar_Documento_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_ValorDevuelto_Modelo.Mensaje = "";

            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    //Insertar el idPredefinidoCabecera
                    List<long> lst_idPredefinidoCabecera = new List<long>();
                    if (g_mdl_VTA_Cobros.efecto != null && g_mdl_VTA_Cobros.efecto.Value)
                    {
                        //Validar que tiene un idPredefinidoCabcera para Negociacion
                        if (g_mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion != null && g_mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion.Value > 0)
                        {
                            lst_idPredefinidoCabecera.Add(g_mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion.Value);
                        }
                        else
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Titulo);
                        }

                    }
                    else
                    {
                        //Validar que tiene un idPredefinidoCabecera para Cobro
                        if (g_mdl_VTA_Cobros.idPredefinidoCabecera_Cobro != null && g_mdl_VTA_Cobros.idPredefinidoCabecera_Cobro.Value > 0)
                        {
                            lst_idPredefinidoCabecera.Add(g_mdl_VTA_Cobros.idPredefinidoCabecera_Cobro.Value);
                        }
                        else
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Titulo);
                        }
                    }

                    //Saber si ya estaba Cerrado
                    bool bol_CerrarPrimero = true;
                    long lng_idVolcadoCabecera_APasarDiario = -1;//Registro que hay que pasar al Diario
                    if (g_lst_CTA_VolcadoCabecera != null && g_lst_CTA_VolcadoCabecera.Count > 0)
                    {
                        bol_CerrarPrimero = false;
                        lng_idVolcadoCabecera_APasarDiario = g_lst_CTA_VolcadoCabecera.FirstOrDefault().id;
                    }

                    //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_ACCIONDOCUMENTO_VOLCAR, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros_1 = {   lng_idVolcadoCabecera_APasarDiario,
                                                    g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.lng_idEmpresa,
                                                    g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.EjercicioActivo.id,
                                                    g_mdl_VTA_Cobros.fecha,
                                                    g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.Ejercicios_Listado.ToList(),
                                                    Variables.G_PREDEFINIDOFICHEROS_COBROPOREFECTO.Id,
                                                    bol_CerrarPrimero,
                                                    lst_idPredefinidoCabecera,
                                                    g_mdl_VTA_Cobros.id,
                                                    g_frm_P_Cobro_AUX_1.g_mdl_PRV_OpcionesDetalle.opcion,
                                                    null};

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

                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        //Generar en ContaPlus si estuviera marcado
                        if (Variables.G_MDL_INTERNO_VALORESGENERALES_MODELO.Control != null &&
                            Variables.G_MDL_INTERNO_VALORESGENERALES_MODELO.Control.idVolcadoExportacion != null &&
                            Variables.G_MDL_INTERNO_VALORESGENERALES_MODELO.Control.idVolcadoExportacion.Equals(Variables.G_LNG_VOLCADOEXPORTACION_CONTAPLUS))
                        {
                            //idVolcadoCabecera, se coje de aquie porque si el documento no estaba cerrado, el idVolcadoCabecera se generar dentro
                            List<long> lst_idVolcadosCabecera = new List<long>();
                            if (mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_3 != null &&
                                mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_3.ToString().Trim().Length > 0)
                            {
                                lst_idVolcadosCabecera.Add(long.Parse(mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_3.ToString()));
                            }

                            //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_ACCIONDOCUMENTO_EXPORTAR_CONTAPLUS, BindingFlags.Instance | BindingFlags.NonPublic);

                            //Obtener valores
                            object[] arr_Parametros_2 = { lst_idVolcadosCabecera };

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

                            if (mdl_ValorDevuelto_Modelo_Exportar.TodoCorrecto)
                            {
                                transaccion_SQL.Complete();
                            }
                            else
                            {
                                mdl_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_Exportar;
                            }
                        }
                        else
                        {
                            transaccion_SQL.Complete();
                        }
                    }

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

                    Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Volcar_Documento_DoWork));

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Volcar_Documento_DoWork));

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

            //Termino 
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_VOLCARVOLCAR_TERMINO = (INTERNO_ValorDevuelto_Modelo)e.Result;

            //Termino todo Correctamente
            if (mdl_INTERNO_ValorDevuelto_Modelo_VOLCARVOLCAR_TERMINO.TodoCorrecto)
            {
                Mostrar_CerradoVolcado();

                //Actualizar registro en Listado principal
                if (g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen != null)
                {
                    List<INTERNO_ActualizarCampoListadoGeneral_Modelo> lst_INTERNO_ActualizarCampoListadoGeneral_Modelo = new List<INTERNO_ActualizarCampoListadoGeneral_Modelo>();
                    lst_INTERNO_ActualizarCampoListadoGeneral_Modelo.Add(new INTERNO_ActualizarCampoListadoGeneral_Modelo(g_mdl_VTA_Cobros.id, nameof(INTERNO_VTA_Vencimientos_Listado_Modelo.estado), Variables.G_STR_ESTADO_CONTABILIDAD_VOLCADO));

                    g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_ActualizarRegistros_Campo(lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                }
            }
            //Ocurrio un Error
            else
            {
                Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_VOLCARVOLCAR_TERMINO.Mensaje);
            }
        }
        #endregion
        #region Desvolcar datos del Diario
        public void Desvolcar_Documento()
        {
            try
            {
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_DESVOLCANDO_DOCUMENTO());

                BackgroundWorker obj_TareaAsincrona_Desvolcar_Documento = new BackgroundWorker();

                obj_TareaAsincrona_Desvolcar_Documento.DoWork += new DoWorkEventHandler(TareaAsincrona_Desvolcar_Documento_DoWork);
                obj_TareaAsincrona_Desvolcar_Documento.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Desvolcar_Documento_Completed);
                obj_TareaAsincrona_Desvolcar_Documento.RunWorkerAsync();

                //Mostrar Pantalla de Espera
                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(Desvolcar_Documento));
            }
        }

        private void TareaAsincrona_Desvolcar_Documento_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_ValorDevuelto_Modelo.Mensaje = "";

            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    long lng_idVolcadoCabecera_ABorrar = -1;
                    DateTime? dtt_Fecha = null;
                    if (g_lst_CTA_VolcadoCabecera != null && g_lst_CTA_VolcadoCabecera.Count > 0)
                    {
                        CTA_VolcadoCabecera mdl_CTA_VolcadoCabecera = g_lst_CTA_VolcadoCabecera.FirstOrDefault();
                        lng_idVolcadoCabecera_ABorrar = mdl_CTA_VolcadoCabecera.id;
                        dtt_Fecha = mdl_CTA_VolcadoCabecera.fecha;
                    }

                    //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_ACCIONDOCUMENTO_DESVOLCAR, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros_1 = {   lng_idVolcadoCabecera_ABorrar,
                                                    dtt_Fecha.Value,
                                                    g_frm_P_Cobro_AUX_1.P_Base_ValoresGenerales.Ejercicios_Listado.ToList(),
                                                    Variables.G_PREDEFINIDOFICHEROS_COBROPOREFECTO.Id,
                                                    null,
                                                    g_mdl_VTA_Cobros.id,
                                                    g_frm_P_Cobro_AUX_1.g_mdl_PRV_OpcionesDetalle.opcion,
                                                    null};

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

                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        transaccion_SQL.Complete();
                    }

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

                    Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Desvolcar_Documento_DoWork));

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

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

                    Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(TareaAsincrona_Desvolcar_Documento_DoWork));

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

            //Termino 
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_VOLCARDESVOLCAR_TERMINO = (INTERNO_ValorDevuelto_Modelo)e.Result;

            //Termino todo Correctamente
            if (mdl_INTERNO_ValorDevuelto_Modelo_VOLCARDESVOLCAR_TERMINO.TodoCorrecto)
            {
                Mostrar_CerradoVolcado();

                //Actualizar registro en Listado principal
                if (g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen != null)
                {
                    List<INTERNO_ActualizarCampoListadoGeneral_Modelo> lst_INTERNO_ActualizarCampoListadoGeneral_Modelo = new List<INTERNO_ActualizarCampoListadoGeneral_Modelo>();
                    lst_INTERNO_ActualizarCampoListadoGeneral_Modelo.Add(new INTERNO_ActualizarCampoListadoGeneral_Modelo(g_mdl_VTA_Cobros.id, nameof(INTERNO_VTA_Cobros_Listado_Modelo.estado), Variables.G_STR_ESTADO_CONTABILIDAD_CERRADO));

                    g_frm_P_Cobro_AUX_1.P_Base_PantallaOrigen.P_Base_ActualizarRegistros_Campo(lst_INTERNO_ActualizarCampoListadoGeneral_Modelo, G_ENUM_TIPOACCION.INT_MODIFICAR);
                }
            }
            //Ocurrio un Error
            else
            {
                Mensajes.MostrarMensaje(mdl_INTERNO_ValorDevuelto_Modelo_VOLCARDESVOLCAR_TERMINO.Mensaje);
            }
        }
        #endregion
        #endregion

        #region Cargar Datos desde un vencimiento
        public void CargarDatos_Desde_Vencimiento(VTA_Vencimientos _mdl_VTA_Vencimientos)
        {
            try
            {
                //Vaciar
                Vaciar_Datos(G_ENUM_NIVELES.Inicio, G_ENUM_ACCIONES_VACIADO.Vaciar_SiActual, true, true);

                //Estado
                g_str_Estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;

                //Datos de la Factura .......................................................................
                RellenarDatos_FacturaCabecera_Final(_mdl_VTA_Vencimientos.idFacturaCabecera);
                if (g_mdl_INTERNO_VTA_FacturasCabecera_Modelo != null)
                {
                    //Factura
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Id = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_Codigo = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.numeroFactura.ToString();
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Simple_FacturaCabecera.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.fechaBorrado;
                }
                //.............................................................................................

                //Datos del Vencimiento .......................................................................
                RellenarDatos_Vencimiento_Final(_mdl_VTA_Vencimientos.id);
                if (g_mdl_INTERNO_VTA_Vencimientos_Modelo != null)
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Id = g_mdl_INTERNO_VTA_Vencimientos_Modelo.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Codigo = g_mdl_INTERNO_VTA_Vencimientos_Modelo.codigo.ToString();
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_INTERNO_VTA_Vencimientos_Modelo.observaciones;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Vencimiento.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_INTERNO_VTA_Vencimientos_Modelo.fechaBorrado;
                }
                //...........................................................................................

                g_frm_P_Cobro_AUX_1.Exferia_FechaSeleccion_FechaPago.Exferia_FechaSeleccion_Fecha = g_frm_P_Cobro_AUX_1.P_Base_FechaTrabajo.ToString("dd/MM/yyyy");

                //Tesoreria 
                if (_mdl_VTA_Vencimientos.MAE_Tesorerias != null)
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id = _mdl_VTA_Vencimientos.MAE_Tesorerias.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo = _mdl_VTA_Vencimientos.MAE_Tesorerias.codigo;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion = _mdl_VTA_Vencimientos.MAE_Tesorerias.descripcion;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_FechaBorrado = _mdl_VTA_Vencimientos.MAE_Tesorerias.fechaBorrado;
                }
                else
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Id = -1;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Codigo = string.Empty;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_Descripcion = string.Empty;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_Tesoreria.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                }

                //CTA_PredefinidosCabeceras_Cobro
                //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_COBROS.Id };

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

                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_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras_Cobro.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras_Cobro.codigo;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras_Cobro.descripcion;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Cobro.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras_Cobro.fechaBorrado;
                }

                //CTA_PredefinidosCabeceras_Negociacion
                //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_COBROPOREFECTO.Id };

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

                if (mdl_CTA_PredefinidosCabeceras_Negociacion != null &&
                    mdl_CTA_PredefinidosCabeceras_Negociacion.idPredefinidoFichero != null &&
                    mdl_CTA_PredefinidosCabeceras_Negociacion.idPredefinidoFichero.Value.Equals(Variables.G_PREDEFINIDOFICHEROS_COBROPOREFECTO.Id))
                {
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras_Negociacion.id;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras_Negociacion.codigo;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras_Negociacion.descripcion;
                    g_frm_P_Cobro_AUX_1.Exferia_F3_SoloSeleccion_ClavePredefinida_Negociacion.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras_Negociacion.fechaBorrado;
                }

                //importe
                g_frm_P_Cobro_AUX_1.Exferia_TextBox_Importe.Text = _mdl_VTA_Vencimientos.importe.ToString();

                //Actualizar el control de Resumen de Facturas
                g_frm_P_Cobro_AUX_1.CTU_Cartera_Ventas_Cobro.Rellenar_DataGrid(G_ENUM_CTU_CARTERA_VENTAS_TIPODOCUMENTOFILTRO.FacturasCabeceraVenta, g_mdl_INTERNO_VTA_FacturasCabecera_Modelo.id, true);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Cobro_AUX_1_Controladora) + "/" + nameof(CargarDatos_Desde_Vencimiento));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                g_frm_P_Cobro_AUX_1.Salir_P_Base();
            }
        }
        #endregion
    }
}
